xref: /dragonfly/contrib/pam_passwdqc/pam_macros.h (revision 44624ade5c7148822b0294730bae4f64e40124db)
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  * - Solar Designer
7  */
8 
9 #ifndef PAM_PASSWDQC_MACROS_H__
10 #define PAM_PASSWDQC_MACROS_H__
11 
12 #include <string.h>
13 #include <stdlib.h>
14 
15 static __inline void
pwqc_overwrite_string(char * x)16 pwqc_overwrite_string(char *x)
17 {
18           if (x)
19                     memset(x, 0, strlen(x));
20 }
21 
22 static __inline void
pwqc_drop_mem(void * x)23 pwqc_drop_mem(void *x)
24 {
25           if (x) {
26                     free(x);
27                     x = NULL;
28           }
29 }
30 
31 static __inline void
pwqc_drop_pam_reply(struct pam_response * reply,int replies)32 pwqc_drop_pam_reply(struct pam_response *reply, int replies)
33 {
34           if (reply) {
35                     int reply_i;
36 
37                     for (reply_i = 0; reply_i < replies; ++reply_i) {
38                               pwqc_overwrite_string(reply[reply_i].resp);
39                               pwqc_drop_mem(reply[reply_i].resp);
40                     }
41                     pwqc_drop_mem(reply);
42           }
43 }
44 
45 #endif /* PAM_PASSWDQC_MACROS_H__ */
46