version 1.7, 1996/09/29 04:34:08 |
version 1.8, 1996/09/29 21:28:42 |
|
|
#define SKEY_MIN_PW_LEN 4 |
#define SKEY_MIN_PW_LEN 4 |
#endif |
#endif |
|
|
|
void usage __P((char *)); |
|
|
int |
int |
main(argc, argv) |
main(argc, argv) |
int argc; |
int argc; |
char *argv[]; |
char *argv[]; |
{ |
{ |
int rval, n, nn, i, l, md=0, defaultsetup=1, zerokey=0, hexmode=0; |
int rval, n, nn, i, l, defaultsetup=1, zerokey=0, hexmode=0; |
time_t now; |
time_t now; |
char hostname[MAXHOSTNAMELEN]; |
char hostname[MAXHOSTNAMELEN]; |
char seed[18], tmp[80], key[8], defaultseed[17]; |
char seed[18], tmp[80], key[8], defaultseed[17]; |
char passwd[256], passwd2[256], tbuf[27], buf[60]; |
char passwd[256], passwd2[256], tbuf[27], buf[60]; |
char lastc, me[UT_NAMESIZE+1], *salt, *p, *pw; |
char lastc, me[UT_NAMESIZE+1], *salt, *p, *pw, *ht=NULL; |
struct skey skey; |
struct skey skey; |
struct passwd *pp; |
struct passwd *pp; |
struct tm *tm; |
struct tm *tm; |
|
|
if ((pp = getpwnam(me)) == NULL) |
if ((pp = getpwnam(me)) == NULL) |
err(1, "Who are you?"); |
err(1, "Who are you?"); |
|
|
while ((i = getopt(argc, argv, "sxz45")) != EOF) { |
for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { |
switch (i) { |
if (argv[i][2] == '\0') { |
|
/* Single character switch */ |
|
switch (argv[i][1]) { |
case 's': |
case 's': |
defaultsetup = 0; |
defaultsetup = 0; |
break; |
break; |
|
|
case 'z': |
case 'z': |
zerokey = 1; |
zerokey = 1; |
break; |
break; |
case '4': |
default: |
md = 4; |
usage(argv[0]); |
break; |
} |
case '5': |
} else { |
md = 5; |
/* Multi character switches are hash types */ |
break; |
if ((ht = skey_set_algorithm(&argv[i][1])) == NULL) { |
|
warnx("Unknown hash algorithm %s", &argv[i][1]); |
|
usage(argv[0]); |
|
} |
} |
} |
|
i++; |
} |
} |
|
|
/* check for md4/md5 argument */ |
|
if (argv[optind]) { |
|
if (strcmp(argv[optind], "MD4") == 0) { |
|
md = 4; |
|
optind++; |
|
} else if (strcmp(argv[optind], "MD5") == 0) { |
|
md = 5; |
|
optind++; |
|
} |
|
} |
|
|
|
/* check for optional user string */ |
/* check for optional user string */ |
if (argc - optind > 1) { |
if (argc - i > 1) { |
(void)fprintf(stderr, |
usage(argv[0]); |
"Usage: %s [-s] [-x] [-z] [-4|-5] [MD4|MD5] [user]\n", |
} else if (argv[i]) { |
argv[0]); |
if ((pp = getpwnam(argv[i])) == NULL) |
exit(1); |
|
} else if (argv[optind]) { |
|
if ((pp = getpwnam(argv[optind])) == NULL) |
|
err(1, "User unknown"); |
err(1, "User unknown"); |
|
|
if (strcmp(pp->pw_name, me) != 0) { |
if (strcmp(pp->pw_name, me) != 0) { |
|
|
} |
} |
n = 99; |
n = 99; |
|
|
/* Set MDX (currently 4 or 5) if given the option */ |
/* Set hash type if asked to */ |
if (md) |
if (ht) |
skey_set_MDX(md); |
skey_set_algorithm(ht); |
|
|
if (!defaultsetup) { |
if (!defaultsetup) { |
(void)printf("You need the 6 english words generated from the \"skey\" command.\n"); |
(void)printf("You need the 6 english words generated from the \"skey\" command.\n"); |
|
|
|
|
btoa8(skey.val, key); |
btoa8(skey.val, key); |
|
|
(void)fprintf(skey.keyfile, "%s MD%d %04d %-16s %s %-21s\n", |
(void)fprintf(skey.keyfile, "%s %s %04d %-16s %s %-21s\n", |
pp->pw_name, skey_get_MDX(), n, seed, skey.val, tbuf); |
pp->pw_name, skey_get_algorithm(), n, seed, skey.val, tbuf); |
(void)fclose(skey.keyfile); |
(void)fclose(skey.keyfile); |
(void)printf("\nID %s skey is %d %s\n", pp->pw_name, n, seed); |
(void)printf("\nID %s skey is %d %s\n", pp->pw_name, n, seed); |
(void)printf("Next login password: %s\n", hexmode ? put8(buf, key) : btoe(buf, key)); |
(void)printf("Next login password: %s\n", hexmode ? put8(buf, key) : btoe(buf, key)); |
|
|
exit(0); |
exit(0); |
|
} |
|
|
|
void |
|
usage(s) |
|
char *s; |
|
{ |
|
(void)fprintf(stderr, |
|
"Usage: %s [-s] [-x] [-z] [-md4|-md5|-sha1] [user]\n", s); |
|
exit(1); |
} |
} |