version 1.5, 1998/06/21 22:14:03 |
version 1.6, 2001/02/05 16:58:11 |
|
|
struct passwd *pw; |
struct passwd *pw; |
struct skey key; |
struct skey key; |
char *name = NULL; |
char *name = NULL; |
int errs, ch, verbose = 0; |
int error, ch, verbose = 0; |
|
|
if (geteuid() != 0) |
if (geteuid() != 0) |
errx(1, "must be setuid root"); |
errx(1, "must be setuid root"); |
|
|
errx(1, "only root may specify an alternate user"); |
errx(1, "only root may specify an alternate user"); |
|
|
if (name) { |
if (name) { |
if (strlen(name) > PASS_MAX) |
|
errx(1, "username too long (%d chars max)", PASS_MAX); |
|
if ((pw = getpwnam(name)) == NULL) |
if ((pw = getpwnam(name)) == NULL) |
errx(1, "no passwd entry for %s", name); |
errx(1, "no passwd entry for %s", name); |
} else { |
} else { |
|
|
|
|
if ((name = strdup(pw->pw_name)) == NULL) |
if ((name = strdup(pw->pw_name)) == NULL) |
err(1, "cannot allocate memory"); |
err(1, "cannot allocate memory"); |
sevenbit(name); |
|
|
|
errs = skeylookup(&key, name); |
error = skeylookup(&key, name); |
switch (errs) { |
switch (error) { |
case 0: /* Success! */ |
case 0: /* Success! */ |
if (verbose) |
if (verbose) |
(void)printf("otp-%s ", skey_get_algorithm()); |
(void)printf("otp-%s ", skey_get_algorithm()); |
(void)printf("%d %s\n", key.n - 1, key.seed); |
(void)printf("%d %s\n", key.n - 1, key.seed); |
break; |
break; |
case -1: /* File error */ |
case -1: /* File error */ |
warnx("cannot open %s", _PATH_SKEYKEYS); |
warn("cannot open %s", _PATH_SKEYKEYS); |
break; |
break; |
case 1: /* Unknown user */ |
case 1: /* Unknown user */ |
warnx("%s is not listed in %s", name, _PATH_SKEYKEYS); |
warnx("%s is not listed in %s", name, _PATH_SKEYKEYS); |
} |
} |
(void)fclose(key.keyfile); |
(void)fclose(key.keyfile); |
|
|
exit(errs); |
exit(error ? 1 : 0); |
} |
} |
|
|
void |
void |