version 1.9, 1996/09/29 23:11:04 |
version 1.10, 1996/09/30 06:30:43 |
|
|
} |
} |
salt = pp->pw_passwd; |
salt = pp->pw_passwd; |
|
|
(void)setpriority(PRIO_PROCESS, 0, -4); |
|
|
|
if (getuid() != 0) { |
if (getuid() != 0) { |
(void)setpriority(PRIO_PROCESS, 0, -4); |
|
|
|
pw = getpass("Password:"); |
pw = getpass("Password:"); |
p = crypt(pw, salt); |
if (strcasecmp(pw, "s/key") == 0) { |
|
if (skey_haskey(me)) |
(void)setpriority(PRIO_PROCESS, 0, 0); |
exit(1); |
|
if (skey_authenticate(me)) |
if (pp && strcmp(p, pp->pw_passwd)) |
errx(1, "Password incorrect."); |
errx(1, "Password incorrect."); |
} else { |
|
p = crypt(pw, salt); |
|
if (strcmp(p, pp->pw_passwd)) |
|
errx(1, "Password incorrect."); |
|
} |
} |
} |
|
|
|
(void)setpriority(PRIO_PROCESS, 0, -4); |
|
|
rval = skeylookup(&skey, pp->pw_name); |
rval = skeylookup(&skey, pp->pw_name); |
switch (rval) { |
switch (rval) { |
case -1: |
case -1: |
|
|
for (i = 0;; i++) { |
for (i = 0;; i++) { |
if (i >= 2) |
if (i >= 2) |
exit(1); |
exit(1); |
|
|
(void)printf("Enter sequence count from 1 to %d: ", |
(void)printf("Enter sequence count from 1 to %d: ", |
SKEY_MAXSEQ); |
SKEY_MAXSEQ); |
(void)fgets(tmp, sizeof(tmp), stdin); |
(void)fgets(tmp, sizeof(tmp), stdin); |
n = atoi(tmp); |
n = atoi(tmp); |
if (n > 0 && n < SKEY_MAXSEQ) |
if (n > 0 && n < SKEY_MAXSEQ) |
break; /* Valid range */ |
break; /* Valid range */ |
(void)printf("\n Error: Count must be > 0 and < %d\n", |
(void)printf("Error: Count must be > 0 and < %d\n", |
SKEY_MAXSEQ); |
SKEY_MAXSEQ); |
} |
} |
|
|
(void)printf("Enter new key [default %s]: ", defaultseed); |
for (i = 0;; i++) { |
(void)fflush(stdout); |
if (i >= 2) |
(void)fgets(seed, sizeof(seed), stdin); |
exit(1); |
rip(seed); |
|
|
(void)printf("Enter new key [default %s]: ", |
|
defaultseed); |
|
(void)fgets(seed, sizeof(seed), stdin); |
|
rip(seed); |
|
for (p = seed; *p; p++) { |
|
if (isalpha(*p)) { |
|
if (isupper(*p)) |
|
*p = tolower(*p); |
|
} else if (!isdigit(*p)) { |
|
(void)puts("Error: seed may only contain alpha numeric characters"); |
|
break; |
|
} |
|
} |
|
if (*p == '\0') |
|
break; /* Valid seed */ |
|
} |
if (strlen(seed) > 16) { |
if (strlen(seed) > 16) { |
(void)puts("Notice: Seed truncated to 16 characters."); |
(void)puts("Notice: Seed truncated to 16 characters."); |
seed[16] = '\0'; |
seed[16] = '\0'; |
|
|
if (i >= 2) |
if (i >= 2) |
exit(1); |
exit(1); |
|
|
(void)printf("skey %d %s\nskey access password: ", |
(void)printf("otp-%s %d %s\nS/Key access password: ", |
n, seed); |
skey_get_algorithm(), n, seed); |
(void)fgets(tmp, sizeof(tmp), stdin); |
(void)fgets(tmp, sizeof(tmp), stdin); |
rip(tmp); |
rip(tmp); |
backspace(tmp); |
backspace(tmp); |
|
|
(void)fprintf(skey.keyfile, "%s %s %04d %-16s %s %-21s\n", |
(void)fprintf(skey.keyfile, "%s %s %04d %-16s %s %-21s\n", |
pp->pw_name, skey_get_algorithm(), 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("Next login password: %s\n", hexmode ? put8(buf, key) : btoe(buf, key)); |
|
|
|
|
(void)setpriority(PRIO_PROCESS, 0, 0); |
|
|
|
(void)printf("\nID %s skey is %d %s\n", pp->pw_name, n, seed); |
|
(void)printf("Next login password: %s\n\n", |
|
hexmode ? put8(buf, key) : btoe(buf, key)); |
exit(0); |
exit(0); |
} |
} |
|
|