Changeset 105 in openpam


Ignore:
Timestamp:
Apr 6, 2002, 9:23:26 PM (16 years ago)
Author:
Dag-Erling Smørgrav
Message:

If PAM_OLDAUTHTOK is set, we're asked for PAM_AUTHTOK, and we have
to prompt the user, prompt her twice and compare the responses.

Sponsored by: DARPA, NAI Labs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/pam_get_authtok.c

    r101 r105  
    3232 * SUCH DAMAGE.
    3333 *
    34  * $P4: //depot/projects/openpam/lib/pam_get_authtok.c#14 $
     34 * $P4: //depot/projects/openpam/lib/pam_get_authtok.c#15 $
    3535 */
    3636
     
    4646const char authtok_prompt[] = "Password:";
    4747const char oldauthtok_prompt[] = "Old Password:";
     48const char newauthtok_prompt[] = "New Password:";
    4849
    4950/*
     
    5960        const char *prompt)
    6061{
     62        const void *oldauthtok;
    6163        const char *default_prompt;
    62         char *resp;
    63         int pitem, r, style;
     64        char *resp, *resp2;
     65        int pitem, r, style, twice;
    6466
    6567        if (pamh == NULL || authtok == NULL)
     
    6769
    6870        *authtok = NULL;
     71        twice = 0;
    6972        switch (item) {
    7073        case PAM_AUTHTOK:
    7174                pitem = PAM_AUTHTOK_PROMPT;
    7275                default_prompt = authtok_prompt;
     76                r = pam_get_item(pamh, PAM_OLDAUTHTOK, &oldauthtok);
     77                if (r == PAM_SUCCESS && oldauthtok != NULL) {
     78                        default_prompt = newauthtok_prompt;
     79                        twice = 1;
     80                }
    7381                break;
    7482        case PAM_OLDAUTHTOK:
    7583                pitem = PAM_OLDAUTHTOK_PROMPT;
    7684                default_prompt = oldauthtok_prompt;
     85                twice = 0;
    7786                break;
    7887        default:
     
    98107        if (r != PAM_SUCCESS)
    99108                return (r);
     109        if (twice) {
     110                r = pam_prompt(pamh, style, &resp2, "Retype %s", prompt);
     111                if (r != PAM_SUCCESS) {
     112                        free(resp);
     113                        return (r);
     114                }
     115                if (strcmp(resp, resp2) != 0) {
     116                        free(resp);
     117                        resp = NULL;
     118                }
     119                free(resp2);
     120        }
     121        if (resp == NULL)
     122                return (PAM_TRY_AGAIN);
    100123        r = pam_set_item(pamh, pitem, resp);
    101124        free(resp);
     
    112135 *      =pam_set_item
    113136 *      !PAM_SYMBOL_ERR
     137 *      PAM_TRY_AGAIN
    114138 */
    115139
     
    134158 * default prompt will be used.
    135159 *
     160 * If =item is set to =PAM_AUTHTOK and there is a non-null =PAM_OLDAUTHTOK
     161 * item, =pam_get_authtok will ask the user to confirm the new token by
     162 * retyping it.  If there is a mismatch, =pam_get_authtok will return
     163 * =PAM_TRY_AGAIN.
     164 *
    136165 * >pam_get_item
    137166 * >pam_get_user
Note: See TracChangeset for help on using the changeset viewer.