1238438Sdteske/* 2238438Sdteske * These macros are partially based on Linux-PAM's <security/_pam_macros.h>, 3238438Sdteske * which were organized by Cristian Gafton and I believe are in the public 4263980Sdteske * domain. 5238438Sdteske */ 6238438Sdteske 7238438Sdteske#if !defined(_PAM_MACROS_H) && !defined(_pam_overwrite) 8238438Sdteske#define _PAM_MACROS_H 9238438Sdteske 10238438Sdteske#include <string.h> 11238438Sdteske#include <stdlib.h> 12238438Sdteske 13238438Sdteske#define _pam_overwrite(x) \ 14238438Sdteske memset((x), 0, strlen((x))) 15238438Sdteske 16238438Sdteske#define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \ 17238438Sdteskedo { \ 18238438Sdteske int i; \ 19238438Sdteske\ 20238438Sdteske for (i = 0; i < (replies); i++) \ 21238438Sdteske if ((reply)[i].resp) { \ 22238438Sdteske _pam_overwrite((reply)[i].resp); \ 23238438Sdteske free((reply)[i].resp); \ 24238438Sdteske } \ 25238438Sdteske if ((reply)) free((reply)); \ 26238438Sdteske} while (0) 27238438Sdteske 28238438Sdteske#endif 29238438Sdteske