diff options
author | Steve Langasek <vorlon@debian.org> | 2019-01-22 14:54:11 -0800 |
---|---|---|
committer | Steve Langasek <vorlon@debian.org> | 2019-01-22 14:54:11 -0800 |
commit | f00afb1ef201b2eef7f9ddbe5a0c6ca802cf49bb (patch) | |
tree | 402838c53047b0e21466a653ae88d86a8e4b7b65 /modules/pam_tty_audit/pam_tty_audit.c | |
parent | 795badba7f95e737f979917859cd32c9bd47bcad (diff) | |
parent | 1cad9fb2a0d729c5b5e5aa7297c521df7d5a2d33 (diff) | |
download | pam-f00afb1ef201b2eef7f9ddbe5a0c6ca802cf49bb.tar.gz pam-f00afb1ef201b2eef7f9ddbe5a0c6ca802cf49bb.tar.bz2 pam-f00afb1ef201b2eef7f9ddbe5a0c6ca802cf49bb.zip |
New upstream version 1.3.0
Diffstat (limited to 'modules/pam_tty_audit/pam_tty_audit.c')
-rw-r--r-- | modules/pam_tty_audit/pam_tty_audit.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/modules/pam_tty_audit/pam_tty_audit.c b/modules/pam_tty_audit/pam_tty_audit.c index 7dc37395..bce3ab77 100644 --- a/modules/pam_tty_audit/pam_tty_audit.c +++ b/modules/pam_tty_audit/pam_tty_audit.c @@ -36,6 +36,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "config.h" #include <errno.h> #include <fnmatch.h> #include <stdlib.h> @@ -108,7 +109,7 @@ nl_recv (int fd, unsigned type, void *buf, size_t size) struct msghdr msg; struct nlmsghdr nlm; struct iovec iov[2]; - ssize_t res; + ssize_t res, resdiff; again: iov[0].iov_base = &nlm; @@ -119,6 +120,7 @@ nl_recv (int fd, unsigned type, void *buf, size_t size) msg.msg_iovlen = 1; msg.msg_control = NULL; msg.msg_controllen = 0; + msg.msg_flags = 0; if (type != NLMSG_ERROR) { res = recvmsg (fd, &msg, MSG_PEEK); @@ -160,12 +162,17 @@ nl_recv (int fd, unsigned type, void *buf, size_t size) res = recvmsg (fd, &msg, 0); if (res == -1) return -1; - if ((size_t)res != NLMSG_LENGTH (size) + resdiff = NLMSG_LENGTH(size) - (size_t)res; + if (resdiff < 0 || nlm.nlmsg_type != type) { errno = EIO; return -1; } + else if (resdiff > 0) + { + memset((char *)buf + size - resdiff, 0, resdiff); + } return 0; } @@ -275,6 +282,8 @@ pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char **argv) return PAM_SESSION_ERR; } + memcpy(&new_status, old_status, sizeof(new_status)); + new_status.enabled = (command == CMD_ENABLE ? 1 : 0); #ifdef HAVE_STRUCT_AUDIT_TTY_STATUS_LOG_PASSWD new_status.log_passwd = log_passwd; @@ -351,16 +360,3 @@ pam_sm_close_session (pam_handle_t *pamh, int flags, int argc, } return PAM_SUCCESS; } - -/* static module data */ -#ifdef PAM_STATIC -struct pam_module _pam_tty_audit_modstruct = { - "pam_tty_audit", - NULL, - NULL, - NULL, - pam_sm_open_session, - pam_sm_close_session, - NULL -}; -#endif |