xref: /freebsd-src/contrib/pam_modules/pam_passwdqc/pam_macros.h (revision 0b0ecb56f2b297a48f1f7ba332e1c70be86c7c30)
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