1/*- 2 * Copyright (c) 2002 Networks Associates Technologies, Inc. 3 * All rights reserved. 4 * 5 * This software was developed for the FreeBSD Project by ThinkSec AS and 6 * NAI Labs, the Security Research Division of Network Associates, Inc. 7 * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the 8 * DARPA CHATS research program. --- 48 unchanged lines hidden (view full) --- 57{ 58 void **slot, *tmp; 59 size_t size; 60 61 if (pamh == NULL) 62 return (PAM_SYSTEM_ERR); 63 64 slot = &pamh->item[item_type]; |
65 tmp = NULL; |
66 switch (item_type) { 67 case PAM_SERVICE: 68 case PAM_USER: 69 case PAM_AUTHTOK: 70 case PAM_OLDAUTHTOK: 71 case PAM_TTY: 72 case PAM_RHOST: 73 case PAM_RUSER: 74 case PAM_USER_PROMPT: 75 case PAM_AUTHTOK_PROMPT: |
76 if (*slot != NULL) 77 size = strlen(*slot) + 1; |
78 if (item != NULL) |
79 if ((tmp = strdup(item)) == NULL) 80 return (PAM_BUF_ERR); |
81 break; 82 case PAM_CONV: 83 size = sizeof(struct pam_conv); |
84 if (item != NULL) { 85 if ((tmp = malloc(size)) == NULL) 86 return (PAM_BUF_ERR); 87 memcpy(tmp, item, sizeof(struct pam_conv)); 88 } |
89 break; 90 default: 91 return (PAM_SYSTEM_ERR); 92 } |
93 if (*slot != NULL) { 94 memset(*slot, 0xd0, size); 95 free(*slot); 96 } 97 *slot = tmp; 98 return (PAM_SUCCESS); 99} |