1*0b0ecb56SDag-Erling Smørgrav /* 2*0b0ecb56SDag-Erling Smørgrav * These macros are partially based on Linux-PAM's <security/_pam_macros.h>, 3*0b0ecb56SDag-Erling Smørgrav * which were organized by Cristian Gafton and I believe are in the public 4*0b0ecb56SDag-Erling Smørgrav * domain. 5*0b0ecb56SDag-Erling Smørgrav */ 6*0b0ecb56SDag-Erling Smørgrav 7*0b0ecb56SDag-Erling Smørgrav #if !defined(_PAM_MACROS_H) && !defined(_pam_overwrite) 8*0b0ecb56SDag-Erling Smørgrav #define _PAM_MACROS_H 9*0b0ecb56SDag-Erling Smørgrav 10*0b0ecb56SDag-Erling Smørgrav #include <string.h> 11*0b0ecb56SDag-Erling Smørgrav #include <stdlib.h> 12*0b0ecb56SDag-Erling Smørgrav 13*0b0ecb56SDag-Erling Smørgrav #define _pam_overwrite(x) \ 14*0b0ecb56SDag-Erling Smørgrav memset((x), 0, strlen((x))) 15*0b0ecb56SDag-Erling Smørgrav 16*0b0ecb56SDag-Erling Smørgrav #define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \ 17*0b0ecb56SDag-Erling Smørgrav do { \ 18*0b0ecb56SDag-Erling Smørgrav int i; \ 19*0b0ecb56SDag-Erling Smørgrav \ 20*0b0ecb56SDag-Erling Smørgrav for (i = 0; i < (replies); i++) \ 21*0b0ecb56SDag-Erling Smørgrav if ((reply)[i].resp) { \ 22*0b0ecb56SDag-Erling Smørgrav _pam_overwrite((reply)[i].resp); \ 23*0b0ecb56SDag-Erling Smørgrav free((reply)[i].resp); \ 24*0b0ecb56SDag-Erling Smørgrav } \ 25*0b0ecb56SDag-Erling Smørgrav if ((reply)) free((reply)); \ 26*0b0ecb56SDag-Erling Smørgrav } while (0) 27*0b0ecb56SDag-Erling Smørgrav 28*0b0ecb56SDag-Erling Smørgrav #endif 29