1 /* 2 * These macros are partially based on Linux-PAM's <security/_pam_macros.h>, 3 * which were organized by Cristian Gafton and I believe are in the public 4 * domain. 5 */ 6 7 #ifndef PAM_PASSWDQC_MACROS_H__ 8 #define PAM_PASSWDQC_MACROS_H__ 9 10 #include <string.h> 11 #include <stdlib.h> 12 13 static __inline void 14 pwqc_overwrite_string(char *x) 15 { 16 if (x) 17 memset(x, 0, strlen(x)); 18 } 19 20 static __inline void 21 pwqc_drop_mem(void *x) 22 { 23 if (x) { 24 free(x); 25 x = NULL; 26 } 27 } 28 29 static __inline void 30 pwqc_drop_pam_reply(struct pam_response *reply, int replies) 31 { 32 if (reply) { 33 int reply_i; 34 35 for (reply_i = 0; reply_i < replies; ++reply_i) { 36 pwqc_overwrite_string(reply[reply_i].resp); 37 pwqc_drop_mem(reply[reply_i].resp); 38 } 39 pwqc_drop_mem(reply); 40 } 41 } 42 43 #endif /* PAM_PASSWDQC_MACROS_H__ */ 44