Changeset 17 in openpam


Ignore:
Timestamp:
Feb 2, 2002, 5:47:36 PM (16 years ago)
Author:
Dag-Erling Smørgrav
Message:

Clobber items before freeing them.

Sponsored by: DARPA, NAI Labs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/pam_set_item.c

    r16 r17  
    5656        const void *item)
    5757{
    58         void *tmp;
     58        void **slot, *tmp;
     59        size_t size;
    5960
    6061        if (pamh == NULL)
    6162                return (PAM_SYSTEM_ERR);
    6263
     64        slot = &pamh->item[item_type];
    6365        switch (item_type) {
    6466        case PAM_SERVICE:
     
    7173        case PAM_USER_PROMPT:
    7274        case PAM_AUTHTOK_PROMPT:
    73                 if (item == NULL) {
    74                         tmp = NULL;
    75                         break;
    76                 }
    77                 if ((tmp = strdup(item)) == NULL)
    78                         return (PAM_BUF_ERR);
     75                size = strlen(*slot) + 1;
     76                if (item != NULL)
     77                        tmp = strdup(item);
    7978                break;
    8079        case PAM_CONV:
    81                 if (item == NULL) {
    82                         tmp = NULL;
    83                         break;
    84                 }
    85                 if ((tmp = malloc(sizeof(struct pam_conv))) == NULL)
    86                         return (PAM_BUF_ERR);
    87                 memcpy(tmp, item, sizeof(struct pam_conv));
     80                size = sizeof(struct pam_conv);
     81                if (item != NULL)
     82                        tmp = malloc(size);
    8883                break;
    8984        default:
    9085                return (PAM_SYSTEM_ERR);
    9186        }
    92         free(pamh->item[item_type]);
    93         pamh->item[item_type] = tmp;
     87        if (item != NULL && tmp == NULL)
     88                return (PAM_BUF_ERR);
     89        if (*slot != NULL) {
     90                memset(*slot, 0xd0, size);
     91                free(*slot);
     92        }
     93        *slot = tmp;
    9494        return (PAM_SUCCESS);
    9595}
Note: See TracChangeset for help on using the changeset viewer.