193787Sdes/*
293787Sdes * These macros are partially based on Linux-PAM's <security/_pam_macros.h>,
393787Sdes * which were organized by Cristian Gafton and I believe are in the public
493787Sdes * domain.
593787Sdes */
693787Sdes
793787Sdes#if !defined(_PAM_MACROS_H) && !defined(_pam_overwrite)
893787Sdes#define _PAM_MACROS_H
993787Sdes
1093787Sdes#include <string.h>
1193787Sdes#include <stdlib.h>
1293787Sdes
1393787Sdes#define _pam_overwrite(x) \
1493787Sdes	memset((x), 0, strlen((x)))
1593787Sdes
1693787Sdes#define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \
1793787Sdesdo { \
1893787Sdes	int i; \
1993787Sdes\
2093787Sdes	for (i = 0; i < (replies); i++) \
2193787Sdes	if ((reply)[i].resp) { \
2293787Sdes		_pam_overwrite((reply)[i].resp); \
2393787Sdes		free((reply)[i].resp); \
2493787Sdes	} \
2593787Sdes	if ((reply)) free((reply)); \
2693787Sdes} while (0)
2793787Sdes
2893787Sdes#endif
29