summaryrefslogtreecommitdiff
path: root/lib/readline/util.c
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2015-10-12 09:57:17 -0400
committerChet Ramey <chet.ramey@case.edu>2015-10-12 09:57:17 -0400
commit54a5fbe126d2a28913a81f7191d7ac6db70e1f43 (patch)
tree33520782faa38e1dcf4db5461ece90584273fa0f /lib/readline/util.c
parenteac8fb1b4c9229f78b71d1df7d11327723a3acab (diff)
downloadbash-54a5fbe126d2a28913a81f7191d7ac6db70e1f43.tar.gz
bash-4.4 beta releasebash-4.4-beta
Diffstat (limited to 'lib/readline/util.c')
-rw-r--r--lib/readline/util.c38
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