diff options
author | Chet Ramey <chet.ramey@case.edu> | 2015-10-12 09:57:17 -0400 |
---|---|---|
committer | Chet Ramey <chet.ramey@case.edu> | 2015-10-12 09:57:17 -0400 |
commit | 54a5fbe126d2a28913a81f7191d7ac6db70e1f43 (patch) | |
tree | 33520782faa38e1dcf4db5461ece90584273fa0f /lib/readline/util.c | |
parent | eac8fb1b4c9229f78b71d1df7d11327723a3acab (diff) | |
download | bash-54a5fbe126d2a28913a81f7191d7ac6db70e1f43.tar.gz |
bash-4.4 beta releasebash-4.4-beta
Diffstat (limited to 'lib/readline/util.c')
-rw-r--r-- | lib/readline/util.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/lib/readline/util.c b/lib/readline/util.c index e75e2556..4840494b 100644 --- a/lib/readline/util.c +++ b/lib/readline/util.c @@ -549,8 +549,9 @@ _rl_settracefp (fp) #endif /* DEBUG */ -#if HAVE_DECL_AUDIT_USER_TTY && defined (ENABLE_TTY_AUDIT_SUPPORT) +#if HAVE_DECL_AUDIT_USER_TTY && defined (HAVE_LIBAUDIT_H) && defined (ENABLE_TTY_AUDIT_SUPPORT) #include <sys/socket.h> +#include <libaudit.h> #include <linux/audit.h> #include <linux/netlink.h> @@ -559,42 +560,33 @@ void _rl_audit_tty (string) char *string; { + struct audit_message req; struct sockaddr_nl addr; - struct msghdr msg; - struct nlmsghdr nlm; - struct iovec iov[2]; size_t size; int fd; - fd = socket (AF_NETLINK, SOCK_RAW, NETLINK_AUDIT); + fd = socket (PF_NETLINK, SOCK_RAW, NETLINK_AUDIT); if (fd < 0) return; size = strlen (string) + 1; - nlm.nlmsg_len = NLMSG_LENGTH (size); - nlm.nlmsg_type = AUDIT_USER_TTY; - nlm.nlmsg_flags = NLM_F_REQUEST; - nlm.nlmsg_seq = 0; - nlm.nlmsg_pid = 0; + if (NLMSG_SPACE (size) > MAX_AUDIT_MESSAGE_LENGTH) + return; - iov[0].iov_base = &nlm; - iov[0].iov_len = sizeof (nlm); - iov[1].iov_base = string; - iov[1].iov_len = size; + memset (&req, 0, sizeof(req)); + req.nlh.nlmsg_len = NLMSG_SPACE (size); + req.nlh.nlmsg_type = AUDIT_USER_TTY; + req.nlh.nlmsg_flags = NLM_F_REQUEST; + req.nlh.nlmsg_seq = 0; + if (size && string) + memcpy (NLMSG_DATA(&req.nlh), string, size); + memset (&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; addr.nl_pid = 0; addr.nl_groups = 0; - msg.msg_name = &addr; - msg.msg_namelen = sizeof (addr); - msg.msg_iov = iov; - msg.msg_iovlen = 2; - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_flags = 0; - - (void)sendmsg (fd, &msg, 0); + sendto (fd, &req, req.nlh.nlmsg_len, 0, (struct sockaddr*)&addr, sizeof(addr)); close (fd); } #endif |