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