98 lines
2.7 KiB
Diff
98 lines
2.7 KiB
Diff
From d579a08bb1cde71f939c13ac6b2261052ae9f77e Mon Sep 17 00:00:00 2001
|
|
From: Steve Grubb <sgrubb@redhat.com>
|
|
Date: Tue, 26 Feb 2019 18:33:33 -0500
|
|
Subject: [PATCH] Add substitue functions for strndupa & rawmemchr
|
|
|
|
diff --git auparse/auparse.c auparse/auparse.c
|
|
index 69127b7a..042ea2b0 100644
|
|
--- auparse/auparse.c
|
|
+++ auparse/auparse.c
|
|
@@ -1119,6 +1119,16 @@ static int str2event(char *s, au_event_t *e)
|
|
return 0;
|
|
}
|
|
|
|
+#ifndef HAVE_STRNDUPA
|
|
+static inline char *strndupa(const char *old, size_t n)
|
|
+{
|
|
+ size_t len = strnlen(old, n);
|
|
+ char *tmp = alloca(len + 1);
|
|
+ tmp[len] = 0;
|
|
+ return memcpy(tmp, old, len);
|
|
+}
|
|
+#endif
|
|
+
|
|
/* Returns 0 on success and 1 on error */
|
|
static int extract_timestamp(const char *b, au_event_t *e)
|
|
{
|
|
diff --git auparse/interpret.c auparse/interpret.c
|
|
index 88523c6d..f19ee854 100644
|
|
--- auparse/interpret.c
|
|
+++ auparse/interpret.c
|
|
@@ -855,6 +855,13 @@ static const char *print_escaped_ext(const idata *id)
|
|
return print_escaped(id->val);
|
|
}
|
|
|
|
+// rawmemchr is faster. Let's use it if we have it.
|
|
+#ifdef HAVE_RAWMEMCHR
|
|
+#define STRCHR rawmemchr
|
|
+#else
|
|
+#define STRCHR strchr
|
|
+#endif
|
|
+
|
|
static const char *print_proctitle(const char *val)
|
|
{
|
|
char *out = (char *)print_escaped(val);
|
|
@@ -865,7 +872,7 @@ static const char *print_proctitle(const char *val)
|
|
// Proctitle has arguments separated by NUL bytes
|
|
// We need to write over the NUL bytes with a space
|
|
// so that we can see the arguments
|
|
- while ((ptr = rawmemchr(ptr, '\0'))) {
|
|
+ while ((ptr = STRCHR(ptr, '\0'))) {
|
|
if (ptr >= end)
|
|
break;
|
|
*ptr = ' ';
|
|
diff --git configure.ac configure.ac
|
|
index acd6d615..00658d4f 100644
|
|
--- configure.ac
|
|
+++ configure.ac
|
|
@@ -72,6 +72,18 @@ dnl; posix_fallocate is used in audisp-remote
|
|
AC_CHECK_FUNCS([posix_fallocate])
|
|
dnl; signalfd is needed for libev
|
|
AC_CHECK_FUNC([signalfd], [], [ AC_MSG_ERROR([The signalfd system call is necessary for auditd]) ])
|
|
+dnl; check if rawmemchr is available
|
|
+AC_CHECK_FUNCS([rawmemchr])
|
|
+dnl; check if strndupa is available
|
|
+AC_LINK_IFELSE(
|
|
+ [AC_LANG_SOURCE(
|
|
+ [[
|
|
+ #define _GNU_SOURCE
|
|
+ #include <string.h>
|
|
+ int main() { (void) strndupa("test", 10); return 0; }]])],
|
|
+ [AC_DEFINE(HAVE_STRNDUPA, 1, [Let us know if we have it or not])],
|
|
+ []
|
|
+)
|
|
|
|
ALLWARNS=""
|
|
ALLDEBUG="-g"
|
|
diff --git src/ausearch-lol.c src/ausearch-lol.c
|
|
index bebbcf4b..0babd517 100644
|
|
--- src/ausearch-lol.c
|
|
+++ src/ausearch-lol.c
|
|
@@ -152,6 +152,16 @@ static int compare_event_time(event *e1, event *e2)
|
|
return 0;
|
|
}
|
|
|
|
+#ifndef HAVE_STRNDUPA
|
|
+static inline char *strndupa(const char *old, size_t n)
|
|
+{
|
|
+ size_t len = strnlen(old, n);
|
|
+ char *tmp = alloca(len + 1);
|
|
+ tmp[len] = 0;
|
|
+ return memcpy(tmp, old, len);
|
|
+}
|
|
+#endif
|
|
+
|
|
/*
|
|
* This function will look at the line and pick out pieces of it.
|
|
*/
|