diff options
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/chkey/chkey.c | 6 | ||||
-rw-r--r-- | usr.bin/enigma/enigma.c | 8 | ||||
-rw-r--r-- | usr.bin/lock/lock.c | 5 | ||||
-rw-r--r-- | usr.bin/newgrp/newgrp.c | 8 |
4 files changed, 20 insertions, 7 deletions
diff --git a/usr.bin/chkey/chkey.c b/usr.bin/chkey/chkey.c index 3098271..4751a28 100644 --- a/usr.bin/chkey/chkey.c +++ b/usr.bin/chkey/chkey.c @@ -94,6 +94,9 @@ main(int argc, char **argv) #ifdef YP char *master; #endif +#ifdef YPPASSWD + char *cryptpw; +#endif while ((ch = getopt(argc, argv, "f")) != -1) switch(ch) { @@ -149,7 +152,8 @@ main(int argc, char **argv) pass = getpass("Password:"); #ifdef YPPASSWD if (!force) { - if (strcmp(crypt(pass, pw->pw_passwd), pw->pw_passwd) != 0) + cryptpw = crypt(pass, pw->pw_passwd); + if (cryptpw == NULL || strcmp(cryptpw, pw->pw_passwd) != 0) errx(1, "invalid password"); } #else diff --git a/usr.bin/enigma/enigma.c b/usr.bin/enigma/enigma.c index 49cb006..893766e 100644 --- a/usr.bin/enigma/enigma.c +++ b/usr.bin/enigma/enigma.c @@ -41,9 +41,15 @@ setup(char *pw) char salt[3]; unsigned rnd; int32_t seed; + char *cryptpw; strlcpy(salt, pw, sizeof(salt)); - memcpy(buf, crypt(pw, salt), sizeof(buf)); + cryptpw = crypt(pw, salt); + if (cryptpw == NULL) { + fprintf(stderr, "crypt(3) failure\n"); + exit(1); + } + memcpy(buf, cryptpw, sizeof(buf)); seed = 123; for (i=0; i<13; i++) seed = seed*buf[i] + i; diff --git a/usr.bin/lock/lock.c b/usr.bin/lock/lock.c index 2f26171..3f23a98 100644 --- a/usr.bin/lock/lock.c +++ b/usr.bin/lock/lock.c @@ -94,7 +94,7 @@ main(int argc, char **argv) struct itimerval ntimer, otimer; struct tm *timp; int ch, failures, sectimeout, usemine, vtylock; - char *ap, *mypw, *ttynam, *tzn; + char *ap, *cryptpw, *mypw, *ttynam, *tzn; char hostname[MAXHOSTNAMELEN], s[BUFSIZ], s1[BUFSIZ]; openlog("lock", LOG_ODELAY, LOG_AUTH); @@ -222,7 +222,8 @@ main(int argc, char **argv) } if (usemine) { s[strlen(s) - 1] = '\0'; - if (!strcmp(mypw, crypt(s, mypw))) + cryptpw = crypt(s, mypw); + if (cryptpw == NULL || !strcmp(mypw, cryptpw)) break; } else if (!strcmp(s, s1)) diff --git a/usr.bin/newgrp/newgrp.c b/usr.bin/newgrp/newgrp.c index 751e8be..b3f6103 100644 --- a/usr.bin/newgrp/newgrp.c +++ b/usr.bin/newgrp/newgrp.c @@ -151,7 +151,7 @@ addgroup(const char *grpname) int dbmember, i, ngrps; gid_t egid; struct group *grp; - char *ep, *pass; + char *ep, *pass, *cryptpw; char **p; egid = getegid(); @@ -178,8 +178,10 @@ addgroup(const char *grpname) } if (!dbmember && *grp->gr_passwd != '\0' && getuid() != 0) { pass = getpass("Password:"); - if (pass == NULL || - strcmp(grp->gr_passwd, crypt(pass, grp->gr_passwd)) != 0) { + if (pass == NULL) + return; + cryptpw = crypt(pass, grp->gr_passwd); + if (cryptpw == NULL || strcmp(grp->gr_passwd, cryptpw) != 0) { fprintf(stderr, "Sorry\n"); return; } |