audit/bugfix-audit-reload-coredump.patch
2019-09-30 10:31:51 -04:00

78 lines
2.3 KiB
Diff

diff -Nur audit-3.0.org/src/auditd.c audit-3.0/src/auditd.c
--- audit-3.0.org/src/auditd.c 2019-07-30 09:29:49.420000000 +0800
+++ audit-3.0/src/auditd.c 2019-07-30 09:58:30.484000000 +0800
@@ -76,6 +76,7 @@
static int usr1_info_requested = 0, usr2_info_requested = 0;
static char subj[SUBJ_LEN];
static uint32_t session;
+static int hup_flag = 0;
/* Local function prototypes */
int send_audit_event(int type, const char *str);
@@ -502,12 +503,24 @@
if (hup_info_requested) {
audit_msg(LOG_DEBUG,
"HUP detected, starting config manager");
- reconfig_ev = cur_event;
- if (start_config_manager(cur_event)) {
- send_audit_event(
- AUDIT_DAEMON_CONFIG,
- "op=reconfigure state=no-change "
- "auid=-1 pid=-1 subj=? res=failed");
+ if(hup_flag == 0)
+ {
+ hup_flag = 1;
+ reconfig_ev = cur_event;
+ if (start_config_manager(cur_event)) {
+ send_audit_event(
+ AUDIT_DAEMON_CONFIG,
+ "op=reconfigure state=no-change "
+ "auid=-1 pid=-1 subj=? res=failed");
+ hup_flag = 0;
+ }
+ }
+ else
+ {
+ send_audit_event(
+ AUDIT_DAEMON_CONFIG,
+ "op=reconfigure state=no-change "
+ "auid=-1 pid=-1 subj=? res=failed");
}
cur_event = NULL;
hup_info_requested = 0;
@@ -565,9 +578,15 @@
// Drain the pipe - won't block because libev sets non-blocking mode
read(pipefds[0], buf, sizeof(buf));
enqueue_event(reconfig_ev);
+ hup_flag = 0;
reconfig_ev = NULL;
}
+void reconfig_pthread_failed(void)
+{
+ hup_flag = 0;
+}
+
void reconfig_ready(void)
{
const char *msg = "ready\n";
diff -Nur audit-3.0.org/src/auditd-reconfig.c audit-3.0/src/auditd-reconfig.c
--- audit-3.0.org/src/auditd-reconfig.c 2019-07-30 09:29:49.420000000 +0800
+++ audit-3.0/src/auditd-reconfig.c 2019-07-30 10:00:05.232000000 +0800
@@ -35,6 +35,7 @@
/* externs we need to know about */
extern void reconfig_ready(void);
+extern void reconfig_pthread_failed(void);
/* This is the configuration manager code */
static pthread_t config_thread;
@@ -125,6 +126,7 @@
//send_audit_event(AUDIT_DAEMON_CONFIG, txt);
free_config(&new_config);
free(e);
+ reconfig_pthread_failed();
}
pthread_mutex_unlock(&config_lock);