2
0
mirror of https://github.com/sudo-project/sudo.git synced 2025-09-01 06:45:10 +00:00

Now use skeylookup() instead off skeychallenge()

This commit is contained in:
Todd C. Miller
1996-03-11 01:12:56 +00:00
parent 98a6190b15
commit 4a46e1a189

50
check.c
View File

@@ -401,7 +401,7 @@ static void check_passwd()
struct SD_CLIENT sd_dat, *sd; /* SecurID data block */ struct SD_CLIENT sd_dat, *sd; /* SecurID data block */
register int counter = TRIES_FOR_PASSWORD; register int counter = TRIES_FOR_PASSWORD;
(void) memset (&sd_dat, 0, sizeof(sd_dat)); (void) memset ((VOID *)&sd_dat, 0, sizeof(sd_dat));
sd = &sd_dat; sd = &sd_dat;
/* Initialize SecurID. */ /* Initialize SecurID. */
@@ -458,6 +458,10 @@ static void check_passwd()
char kpass[_PASSWD_LEN]; char kpass[_PASSWD_LEN];
#endif /* HAVE_KERB4 && USE_GETPASS */ #endif /* HAVE_KERB4 && USE_GETPASS */
#ifdef HAVE_SKEY
(void) memset((VOID *)&skey, 0, sizeof(skey));
#endif /* HAVE_SKEY */
/* /*
* you get TRIES_FOR_PASSWORD times to guess your password * you get TRIES_FOR_PASSWORD times to guess your password
*/ */
@@ -492,7 +496,7 @@ static void check_passwd()
#ifdef HAVE_SKEY #ifdef HAVE_SKEY
/* Only check s/key db if the user exists there */ /* Only check s/key db if the user exists there */
if (skey.logname) { if (skey.keyfile) {
set_perms(PERM_ROOT); set_perms(PERM_ROOT);
if (skeyverify(&skey, pass) == 0) { if (skeyverify(&skey, pass) == 0) {
set_perms(PERM_USER); set_perms(PERM_USER);
@@ -652,33 +656,41 @@ static char *sudo_skeyprompt(user_skey, p)
struct skey *user_skey; struct skey *user_skey;
char *p; char *p;
{ {
char skeyprompt[80];
#ifndef LONG_SKEY_PROMPT #ifndef LONG_SKEY_PROMPT
char buf[32];
char *new_prompt;
static char *old_prompt = NULL; static char *old_prompt = NULL;
static int plen; static int plen;
char *new_prompt;
#endif /* LONG_SKEY_PROMPT */ #endif /* LONG_SKEY_PROMPT */
/* close the key file if necesary */
if (user_skey->keyfile != NULL)
(void) fclose(user_skey->keyfile);
/* return the old prompt if we cannot get s/key info */ /* return the old prompt if we cannot get s/key info */
if (skeychallenge(user_skey, user_name, skeyprompt)) { if (skeylookup(user_skey, user_name)) {
# ifdef SKEY_ONLY if (user_skey->keyfile != NULL) {
(void) fclose(user_skey->keyfile);
user_skey->keyfile = NULL;
}
#ifdef SKEY_ONLY
(void) fprintf(stderr, "%s: You do not exist in the s/key database.\n", (void) fprintf(stderr, "%s: You do not exist in the s/key database.\n",
Argv[0]); Argv[0]);
exit(1); exit(1);
# else #else
user_skey->logname = NULL; if (old_prompt == NULL) {
return(p); return(p);
# endif /* SKEY_ONLY */ } else {
return(old_prompt);
}
#endif /* SKEY_ONLY */
} }
#ifdef LONG_SKEY_PROMPT #ifdef LONG_SKEY_PROMPT
/* separate s/key challenge and prompt for easy snarfing */ /* separate s/key challenge and prompt for easy snarfing */
if (skeyprompt[0] == 's' && skeyprompt[1] == '/') (void) printf("key %d %s\n", user_skey-> - 1, user_skey->seed);
(void) puts(&skeyprompt[2]);
else
(void) puts(skeyprompt);
/* return old prompt unmodified */ /* return old prompt unmolested */
return(p); return(p);
#else #else
@@ -695,15 +707,17 @@ static char *sudo_skeyprompt(user_skey, p)
(void) free(p); (void) free(p);
} }
if ((new_prompt = (char *) malloc(plen + strlen(skeyprompt) + 5)) == NULL) { (void) sprintf(buf, "%d", user_skey->n - 1);
if ((new_prompt = (char *)
malloc(plen + strlen(buf) + strlen(user_skey->seed) + 12)) == NULL) {
perror("malloc"); perror("malloc");
(void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]); (void) fprintf(stderr, "%s: cannot allocate memory!\n", Argv[0]);
exit(1); exit(1);
} }
/* embed the s/key challenge into the new password prompt */ /* embed the s/key challenge into the new password prompt */
(void) strncpy(new_prompt, old_prompt, plen); (void) sprintf(new_prompt, "%.*s [s/key %d %s]:", plen, old_prompt,
(void) sprintf(new_prompt + plen, " [%s]:", skeyprompt); user_skey->n - 1, user_skey->seed);
return(new_prompt); return(new_prompt);
#endif /* LONG_SKEY_PROMPT */ #endif /* LONG_SKEY_PROMPT */