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 #define pwqc_overwrite_string(x) \ 14 do { \ 15 if (x) \ 16 memset((x), 0, strlen(x)); \ 17 } while (0) 18 19 #define pwqc_drop_mem(x) \ 20 do { \ 21 if (x) { \ 22 free(x); \ 23 (x) = NULL; \ 24 } \ 25 } while (0) 26 27 #define pwqc_drop_pam_reply(/* struct pam_response* */ reply, /* int */ replies) \ 28 do { \ 29 if (reply) { \ 30 int reply_i; \ 31 \ 32 for (reply_i = 0; reply_i < (replies); ++reply_i) { \ 33 pwqc_overwrite_string((reply)[reply_i].resp); \ 34 pwqc_drop_mem((reply)[reply_i].resp); \ 35 } \ 36 pwqc_drop_mem(reply); \ 37 } \ 38 } while (0) 39 40 #endif /* PAM_PASSWDQC_MACROS_H__ */ 41