* [PATCH ghau90 v2] sig_info: use standard template for log messages
@ 2019-05-10 16:21 Richard Guy Briggs
2019-05-15 18:39 ` Steve Grubb
0 siblings, 1 reply; 3+ messages in thread
From: Richard Guy Briggs @ 2019-05-10 16:21 UTC (permalink / raw)
To: Linux-Audit Mailing List; +Cc: Richard Guy Briggs
Records that are triggered by an AUDIT_SIGNAL_INFO message including
AUDIT_DAEMON_CONFIG (HUP), AUDIT_DAEMON_ROTATE (USR1),
AUDIT_DAEMON_RESUME (USR2) and AUDIT_DAEMON_END (TERM) have inconsistent
reporting of signal info and swinging field "state".
They also assume that an empty security context implies there is no
other useful information in the AUDIT_SIGNAL_INFO message so don't use
the information that is there.
Normalize AUDIT_DAEMON_CONFIG to use the value "reconfigure" and add the
"state" field where missing.
Use audit_sig_info values when available, not making assumptions about
their availability when the security context is absent.
See: https://github.com/linux-audit/audit-userspace/issues/90
Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
---
Changelog:
v2:
- omit subj= if selinux unavailable
- add missing colon to daemon_config
docs/audit_request_signal_info.3 | 2 +-
lib/libaudit.c | 12 +++++++++
lib/libaudit.h | 1 +
src/auditd-event.c | 2 +-
src/auditd-reconfig.c | 9 +++----
src/auditd.c | 56 ++++++++++++++--------------------------
6 files changed, 38 insertions(+), 44 deletions(-)
diff --git a/docs/audit_request_signal_info.3 b/docs/audit_request_signal_info.3
index 873deb58bef3..b68d7bbefeed 100644
--- a/docs/audit_request_signal_info.3
+++ b/docs/audit_request_signal_info.3
@@ -8,7 +8,7 @@ int audit_request_signal_info(int fd);
.SH "DESCRIPTION"
-audit_request_signal_info requests that the kernel send information about the sender of a signal to the audit daemon. The sinal info structure is as follows:
+audit_request_signal_info requests that the kernel send information about the sender of a signal to the audit daemon. The signal info structure is as follows:
.nf
struct audit_sig_info {
diff --git a/lib/libaudit.c b/lib/libaudit.c
index 2af017a0e520..e695791f9243 100644
--- a/lib/libaudit.c
+++ b/lib/libaudit.c
@@ -674,6 +674,18 @@ int audit_request_signal_info(int fd)
return rc;
}
+char *audit_format_signal_info(char *buf, int len, char *op, struct audit_reply *rep, char *res)
+{
+ if (rep->len == 24)
+ snprintf(buf, len, "op=%s auid=%u pid=%d res=%s", op,
+ rep->signal_info->uid, rep->signal_info->pid, res);
+ else
+ snprintf(buf, len, "op=%s auid=%u pid=%d subj=%s res=%s",
+ op, rep->signal_info->uid, rep->signal_info->pid,
+ rep->signal_info->ctx, res);
+ return buf;
+}
+
int audit_update_watch_perms(struct audit_rule_data *rule, int perms)
{
unsigned int i, done=0;
diff --git a/lib/libaudit.h b/lib/libaudit.h
index 77e4142beea2..36ea8bc04e8a 100644
--- a/lib/libaudit.h
+++ b/lib/libaudit.h
@@ -573,6 +573,7 @@ extern int audit_setloginuid(uid_t uid);
extern uint32_t audit_get_session(void);
extern int audit_detect_machine(void);
extern int audit_determine_machine(const char *arch);
+extern char *audit_format_signal_info(char *buf, int len, char *op, struct audit_reply *rep, char *res);
/* Translation functions */
extern int audit_name_to_field(const char *field);
diff --git a/src/auditd-event.c b/src/auditd-event.c
index ef2828d8df94..2970aba44456 100644
--- a/src/auditd-event.c
+++ b/src/auditd-event.c
@@ -1572,7 +1572,7 @@ static void reconfigure(struct auditd_event *e)
e->reply.type = AUDIT_DAEMON_CONFIG;
e->reply.len = snprintf(e->reply.msg.data, MAX_AUDIT_MESSAGE_LENGTH-2,
- "%s op=reconfigure state=changed auid=%u pid=%d subj=%s res=success",
+ "%s : op=reconfigure state=changed auid=%u pid=%d subj=%s res=success",
date, uid, pid, ctx );
e->reply.message = e->reply.msg.data;
free((char *)ctx);
diff --git a/src/auditd-reconfig.c b/src/auditd-reconfig.c
index a03e29aa57ab..f5b00e6d1dc7 100644
--- a/src/auditd-reconfig.c
+++ b/src/auditd-reconfig.c
@@ -115,12 +115,9 @@ static void *config_thread_main(void *arg)
} else {
// need to send a failed event message
char txt[MAX_AUDIT_MESSAGE_LENGTH];
- snprintf(txt, sizeof(txt),
- "op=reconfigure state=no-change auid=%u pid=%d subj=%s res=failed",
- e->reply.signal_info->uid,
- e->reply.signal_info->pid,
- (e->reply.len > 24) ?
- e->reply.signal_info->ctx : "?");
+ audit_format_signal_info(txt, sizeof(txt),
+ "reconfigure state=no-change",
+ &e->reply, "failed");
// FIXME: need to figure out sending this
//send_audit_event(AUDIT_DAEMON_CONFIG, txt);
free_config(&new_config);
diff --git a/src/auditd.c b/src/auditd.c
index c04a1c9ce93f..63404b25fbc5 100644
--- a/src/auditd.c
+++ b/src/auditd.c
@@ -131,7 +131,7 @@ static void hup_handler( struct ev_loop *loop, struct ev_signal *sig, int revent
rc = audit_request_signal_info(fd);
if (rc < 0)
send_audit_event(AUDIT_DAEMON_CONFIG,
- "op=hup-info state=request-siginfo auid=-1 pid=-1 subj=? res=failed");
+ "op=reconfigure state=no-change auid=-1 pid=-1 subj=? res=failed");
else
hup_info_requested = 1;
}
@@ -147,7 +147,7 @@ static void user1_handler(struct ev_loop *loop, struct ev_signal *sig,
rc = audit_request_signal_info(fd);
if (rc < 0)
send_audit_event(AUDIT_DAEMON_ROTATE,
- "op=usr1-info auid=-1 pid=-1 subj=? res=failed");
+ "op=rotate-logs auid=-1 pid=-1 subj=? res=failed");
else
usr1_info_requested = 1;
}
@@ -163,7 +163,7 @@ static void user2_handler( struct ev_loop *loop, struct ev_signal *sig, int reve
if (rc < 0) {
resume_logging();
send_audit_event(AUDIT_DAEMON_RESUME,
- "op=resume-logging auid=-1 pid=-1 subj=? res=success");
+ "op=resume-logging auid=-1 pid=-1 subj=? res=failed");
} else
usr2_info_requested = 1;
}
@@ -515,45 +515,33 @@ static void netlink_handler(struct ev_loop *loop, struct ev_io *io,
break;
case AUDIT_SIGNAL_INFO:
if (hup_info_requested) {
+ char hup[MAX_AUDIT_MESSAGE_LENGTH];
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");
+ audit_format_signal_info(hup, sizeof(hup),
+ "reconfigure state=no-change",
+ &cur_event->reply,
+ "failed");
+ send_audit_event(AUDIT_DAEMON_CONFIG, hup);
}
cur_event = NULL;
hup_info_requested = 0;
} else if (usr1_info_requested) {
char usr1[MAX_AUDIT_MESSAGE_LENGTH];
- if (cur_event->reply.len == 24) {
- snprintf(usr1, sizeof(usr1),
- "op=rotate-logs auid=-1 pid=-1 subj=?");
- } else {
- snprintf(usr1, sizeof(usr1),
- "op=rotate-logs auid=%u pid=%d subj=%s",
- cur_event->reply.signal_info->uid,
- cur_event->reply.signal_info->pid,
- cur_event->reply.signal_info->ctx);
- }
+ audit_format_signal_info(usr1, sizeof(usr1),
+ "rotate-logs",
+ &cur_event->reply,
+ "success");
send_audit_event(AUDIT_DAEMON_ROTATE, usr1);
usr1_info_requested = 0;
} else if (usr2_info_requested) {
char usr2[MAX_AUDIT_MESSAGE_LENGTH];
- if (cur_event->reply.len == 24) {
- snprintf(usr2, sizeof(usr2),
- "op=resume-logging auid=-1 "
- "pid=-1 subj=? res=success");
- } else {
- snprintf(usr2, sizeof(usr2),
- "op=resume-logging "
- "auid=%u pid=%d subj=%s res=success",
- cur_event->reply.signal_info->uid,
- cur_event->reply.signal_info->pid,
- cur_event->reply.signal_info->ctx);
- }
+ audit_format_signal_info(usr2, sizeof(usr2),
+ "resume-logging",
+ &cur_event->reply,
+ "success");
resume_logging();
libdisp_resume();
send_audit_event(AUDIT_DAEMON_RESUME, usr2);
@@ -993,18 +981,14 @@ int main(int argc, char *argv[])
rc = get_reply(fd, &trep, rc);
if (rc > 0) {
char txt[MAX_AUDIT_MESSAGE_LENGTH];
- snprintf(txt, sizeof(txt),
- "op=terminate auid=%u "
- "pid=%d subj=%s res=success",
- trep.signal_info->uid,
- trep.signal_info->pid,
- trep.signal_info->ctx);
+ audit_format_signal_info(txt, sizeof(txt), "terminate",
+ &trep, "success");
send_audit_event(AUDIT_DAEMON_END, txt);
}
}
if (rc <= 0)
send_audit_event(AUDIT_DAEMON_END,
- "op=terminate auid=-1 pid=-1 subj=? res=success");
+ "op=terminate auid=-1 pid=-1 subj=? res=failed");
free(cur_event);
// Tear down IO watchers Part 2
--
1.8.3.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH ghau90 v2] sig_info: use standard template for log messages
2019-05-10 16:21 [PATCH ghau90 v2] sig_info: use standard template for log messages Richard Guy Briggs
@ 2019-05-15 18:39 ` Steve Grubb
2019-05-15 19:02 ` Richard Guy Briggs
0 siblings, 1 reply; 3+ messages in thread
From: Steve Grubb @ 2019-05-15 18:39 UTC (permalink / raw)
To: Richard Guy Briggs; +Cc: Linux-Audit Mailing List
On Friday, May 10, 2019 12:21:57 PM EDT Richard Guy Briggs wrote:
> Records that are triggered by an AUDIT_SIGNAL_INFO message including
> AUDIT_DAEMON_CONFIG (HUP), AUDIT_DAEMON_ROTATE (USR1),
> AUDIT_DAEMON_RESUME (USR2) and AUDIT_DAEMON_END (TERM) have inconsistent
> reporting of signal info and swinging field "state".
>
> They also assume that an empty security context implies there is no
> other useful information in the AUDIT_SIGNAL_INFO message so don't use
> the information that is there.
>
> Normalize AUDIT_DAEMON_CONFIG to use the value "reconfigure" and add the
> "state" field where missing.
>
> Use audit_sig_info values when available, not making assumptions about
> their availability when the security context is absent.
>
> See: https://github.com/linux-audit/audit-userspace/issues/90
This was applied with some fixes. I don't know why ':' was introduced in one
event. But we've been trying to get rid of non-meaningful text. Also, there
were 2 places where a success result was switched to a fail. These were fixed
back.
-Steve
> Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
> ---
> Changelog:
> v2:
> - omit subj= if selinux unavailable
> - add missing colon to daemon_config
>
> docs/audit_request_signal_info.3 | 2 +-
> lib/libaudit.c | 12 +++++++++
> lib/libaudit.h | 1 +
> src/auditd-event.c | 2 +-
> src/auditd-reconfig.c | 9 +++----
> src/auditd.c | 56
> ++++++++++++++-------------------------- 6 files changed, 38
> insertions(+), 44 deletions(-)
>
> diff --git a/docs/audit_request_signal_info.3
> b/docs/audit_request_signal_info.3 index 873deb58bef3..b68d7bbefeed 100644
> --- a/docs/audit_request_signal_info.3
> +++ b/docs/audit_request_signal_info.3
> @@ -8,7 +8,7 @@ int audit_request_signal_info(int fd);
>
> .SH "DESCRIPTION"
>
> -audit_request_signal_info requests that the kernel send information about
> the sender of a signal to the audit daemon. The sinal info structure is as
> follows: +audit_request_signal_info requests that the kernel send
> information about the sender of a signal to the audit daemon. The signal
> info structure is as follows:
>
> .nf
> struct audit_sig_info {
> diff --git a/lib/libaudit.c b/lib/libaudit.c
> index 2af017a0e520..e695791f9243 100644
> --- a/lib/libaudit.c
> +++ b/lib/libaudit.c
> @@ -674,6 +674,18 @@ int audit_request_signal_info(int fd)
> return rc;
> }
>
> +char *audit_format_signal_info(char *buf, int len, char *op, struct
> audit_reply *rep, char *res) +{
> + if (rep->len == 24)
> + snprintf(buf, len, "op=%s auid=%u pid=%d res=%s", op,
> + rep->signal_info->uid, rep->signal_info->pid, res);
> + else
> + snprintf(buf, len, "op=%s auid=%u pid=%d subj=%s res=%s",
> + op, rep->signal_info->uid, rep->signal_info->pid,
> + rep->signal_info->ctx, res);
> + return buf;
> +}
> +
> int audit_update_watch_perms(struct audit_rule_data *rule, int perms)
> {
> unsigned int i, done=0;
> diff --git a/lib/libaudit.h b/lib/libaudit.h
> index 77e4142beea2..36ea8bc04e8a 100644
> --- a/lib/libaudit.h
> +++ b/lib/libaudit.h
> @@ -573,6 +573,7 @@ extern int audit_setloginuid(uid_t uid);
> extern uint32_t audit_get_session(void);
> extern int audit_detect_machine(void);
> extern int audit_determine_machine(const char *arch);
> +extern char *audit_format_signal_info(char *buf, int len, char *op, struct
> audit_reply *rep, char *res);
>
> /* Translation functions */
> extern int audit_name_to_field(const char *field);
> diff --git a/src/auditd-event.c b/src/auditd-event.c
> index ef2828d8df94..2970aba44456 100644
> --- a/src/auditd-event.c
> +++ b/src/auditd-event.c
> @@ -1572,7 +1572,7 @@ static void reconfigure(struct auditd_event *e)
>
> e->reply.type = AUDIT_DAEMON_CONFIG;
> e->reply.len = snprintf(e->reply.msg.data,
MAX_AUDIT_MESSAGE_LENGTH-2,
> - "%s op=reconfigure state=changed auid=%u pid=%d subj=%s res=success",
> + "%s : op=reconfigure state=changed auid=%u pid=%d subj=%s res=success",
> date, uid, pid, ctx );
> e->reply.message = e->reply.msg.data;
> free((char *)ctx);
> diff --git a/src/auditd-reconfig.c b/src/auditd-reconfig.c
> index a03e29aa57ab..f5b00e6d1dc7 100644
> --- a/src/auditd-reconfig.c
> +++ b/src/auditd-reconfig.c
> @@ -115,12 +115,9 @@ static void *config_thread_main(void *arg)
> } else {
> // need to send a failed event message
> char txt[MAX_AUDIT_MESSAGE_LENGTH];
> - snprintf(txt, sizeof(txt),
> - "op=reconfigure state=no-change auid=%u pid=%d subj=%s
res=failed",
> - e->reply.signal_info->uid,
> - e->reply.signal_info->pid,
> - (e->reply.len > 24) ?
> - e->reply.signal_info->ctx : "?");
> + audit_format_signal_info(txt, sizeof(txt),
> + "reconfigure state=no-change",
> + &e->reply, "failed");
> // FIXME: need to figure out sending this
> //send_audit_event(AUDIT_DAEMON_CONFIG, txt);
> free_config(&new_config);
> diff --git a/src/auditd.c b/src/auditd.c
> index c04a1c9ce93f..63404b25fbc5 100644
> --- a/src/auditd.c
> +++ b/src/auditd.c
> @@ -131,7 +131,7 @@ static void hup_handler( struct ev_loop *loop, struct
> ev_signal *sig, int revent rc = audit_request_signal_info(fd);
> if (rc < 0)
> send_audit_event(AUDIT_DAEMON_CONFIG,
> - "op=hup-info state=request-siginfo auid=-1 pid=-1 subj=?
res=failed");
> + "op=reconfigure state=no-change auid=-1 pid=-1 subj=? res=failed");
> else
> hup_info_requested = 1;
> }
> @@ -147,7 +147,7 @@ static void user1_handler(struct ev_loop *loop, struct
> ev_signal *sig, rc = audit_request_signal_info(fd);
> if (rc < 0)
> send_audit_event(AUDIT_DAEMON_ROTATE,
> - "op=usr1-info auid=-1 pid=-1 subj=? res=failed");
> + "op=rotate-logs auid=-1 pid=-1 subj=? res=failed");
> else
> usr1_info_requested = 1;
> }
> @@ -163,7 +163,7 @@ static void user2_handler( struct ev_loop *loop, struct
> ev_signal *sig, int reve if (rc < 0) {
> resume_logging();
> send_audit_event(AUDIT_DAEMON_RESUME,
> - "op=resume-logging auid=-1 pid=-1 subj=?
res=success");
> + "op=resume-logging auid=-1 pid=-1 subj=? res=failed");
> } else
> usr2_info_requested = 1;
> }
> @@ -515,45 +515,33 @@ static void netlink_handler(struct ev_loop *loop,
> struct ev_io *io, break;
> case AUDIT_SIGNAL_INFO:
> if (hup_info_requested) {
> + char hup[MAX_AUDIT_MESSAGE_LENGTH];
> 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");
> + audit_format_signal_info(hup, sizeof(hup),
> + "reconfigure
state=no-change",
> + &cur_event->reply,
> + "failed");
> + send_audit_event(AUDIT_DAEMON_CONFIG,
hup);
> }
> cur_event = NULL;
> hup_info_requested = 0;
> } else if (usr1_info_requested) {
> char usr1[MAX_AUDIT_MESSAGE_LENGTH];
> - if (cur_event->reply.len == 24) {
> - snprintf(usr1, sizeof(usr1),
> - "op=rotate-logs auid=-1 pid=-1 subj=?");
> - } else {
> - snprintf(usr1, sizeof(usr1),
> - "op=rotate-logs auid=%u pid=%d subj=%s",
> - cur_event->reply.signal_info->uid,
> - cur_event->reply.signal_info->pid,
> - cur_event->reply.signal_info->ctx);
> - }
> + audit_format_signal_info(usr1, sizeof(usr1),
> + "rotate-logs",
> + &cur_event->reply,
> + "success");
> send_audit_event(AUDIT_DAEMON_ROTATE, usr1);
> usr1_info_requested = 0;
> } else if (usr2_info_requested) {
> char usr2[MAX_AUDIT_MESSAGE_LENGTH];
> - if (cur_event->reply.len == 24) {
> - snprintf(usr2, sizeof(usr2),
> - "op=resume-logging auid=-1 "
> - "pid=-1 subj=? res=success");
> - } else {
> - snprintf(usr2, sizeof(usr2),
> - "op=resume-logging "
> - "auid=%u pid=%d subj=%s res=success",
> - cur_event->reply.signal_info->uid,
> - cur_event->reply.signal_info->pid,
> - cur_event->reply.signal_info->ctx);
> - }
> + audit_format_signal_info(usr2, sizeof(usr2),
> + "resume-logging",
> + &cur_event->reply,
> + "success");
> resume_logging();
> libdisp_resume();
> send_audit_event(AUDIT_DAEMON_RESUME, usr2);
> @@ -993,18 +981,14 @@ int main(int argc, char *argv[])
> rc = get_reply(fd, &trep, rc);
> if (rc > 0) {
> char txt[MAX_AUDIT_MESSAGE_LENGTH];
> - snprintf(txt, sizeof(txt),
> - "op=terminate auid=%u "
> - "pid=%d subj=%s res=success",
> - trep.signal_info->uid,
> - trep.signal_info->pid,
> - trep.signal_info->ctx);
> + audit_format_signal_info(txt, sizeof(txt), "terminate",
> + &trep, "success");
> send_audit_event(AUDIT_DAEMON_END, txt);
> }
> }
> if (rc <= 0)
> send_audit_event(AUDIT_DAEMON_END,
> - "op=terminate auid=-1 pid=-1 subj=? res=success");
> + "op=terminate auid=-1 pid=-1 subj=? res=failed");
> free(cur_event);
>
> // Tear down IO watchers Part 2
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH ghau90 v2] sig_info: use standard template for log messages
2019-05-15 18:39 ` Steve Grubb
@ 2019-05-15 19:02 ` Richard Guy Briggs
0 siblings, 0 replies; 3+ messages in thread
From: Richard Guy Briggs @ 2019-05-15 19:02 UTC (permalink / raw)
To: Steve Grubb; +Cc: Linux-Audit Mailing List
On 2019-05-15 14:39, Steve Grubb wrote:
> On Friday, May 10, 2019 12:21:57 PM EDT Richard Guy Briggs wrote:
> > Records that are triggered by an AUDIT_SIGNAL_INFO message including
> > AUDIT_DAEMON_CONFIG (HUP), AUDIT_DAEMON_ROTATE (USR1),
> > AUDIT_DAEMON_RESUME (USR2) and AUDIT_DAEMON_END (TERM) have inconsistent
> > reporting of signal info and swinging field "state".
> >
> > They also assume that an empty security context implies there is no
> > other useful information in the AUDIT_SIGNAL_INFO message so don't use
> > the information that is there.
> >
> > Normalize AUDIT_DAEMON_CONFIG to use the value "reconfigure" and add the
> > "state" field where missing.
> >
> > Use audit_sig_info values when available, not making assumptions about
> > their availability when the security context is absent.
> >
> > See: https://github.com/linux-audit/audit-userspace/issues/90
>
> This was applied with some fixes. I don't know why ':' was introduced in one
> event. But we've been trying to get rid of non-meaningful text.
The ":" is there to normalize that record with all the others. They all
have a format of eg.:
type=CWD msg=audit(1557843567.201:126068): cwd="/"
The colon was missing after the (date:serial) before the list of fields.
> Also, there were 2 places where a success result was switched to a
> fail. These were fixed back.
I do prefer you would point out which ones in-line below and let me
submit a new patch to fix them...
> -Steve
>
> > Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
> > ---
> > Changelog:
> > v2:
> > - omit subj= if selinux unavailable
> > - add missing colon to daemon_config
> >
> > docs/audit_request_signal_info.3 | 2 +-
> > lib/libaudit.c | 12 +++++++++
> > lib/libaudit.h | 1 +
> > src/auditd-event.c | 2 +-
> > src/auditd-reconfig.c | 9 +++----
> > src/auditd.c | 56
> > ++++++++++++++-------------------------- 6 files changed, 38
> > insertions(+), 44 deletions(-)
> >
> > diff --git a/docs/audit_request_signal_info.3
> > b/docs/audit_request_signal_info.3 index 873deb58bef3..b68d7bbefeed 100644
> > --- a/docs/audit_request_signal_info.3
> > +++ b/docs/audit_request_signal_info.3
> > @@ -8,7 +8,7 @@ int audit_request_signal_info(int fd);
> >
> > .SH "DESCRIPTION"
> >
> > -audit_request_signal_info requests that the kernel send information about
> > the sender of a signal to the audit daemon. The sinal info structure is as
> > follows: +audit_request_signal_info requests that the kernel send
> > information about the sender of a signal to the audit daemon. The signal
> > info structure is as follows:
> >
> > .nf
> > struct audit_sig_info {
> > diff --git a/lib/libaudit.c b/lib/libaudit.c
> > index 2af017a0e520..e695791f9243 100644
> > --- a/lib/libaudit.c
> > +++ b/lib/libaudit.c
> > @@ -674,6 +674,18 @@ int audit_request_signal_info(int fd)
> > return rc;
> > }
> >
> > +char *audit_format_signal_info(char *buf, int len, char *op, struct
> > audit_reply *rep, char *res) +{
> > + if (rep->len == 24)
> > + snprintf(buf, len, "op=%s auid=%u pid=%d res=%s", op,
> > + rep->signal_info->uid, rep->signal_info->pid, res);
> > + else
> > + snprintf(buf, len, "op=%s auid=%u pid=%d subj=%s res=%s",
> > + op, rep->signal_info->uid, rep->signal_info->pid,
> > + rep->signal_info->ctx, res);
> > + return buf;
> > +}
> > +
> > int audit_update_watch_perms(struct audit_rule_data *rule, int perms)
> > {
> > unsigned int i, done=0;
> > diff --git a/lib/libaudit.h b/lib/libaudit.h
> > index 77e4142beea2..36ea8bc04e8a 100644
> > --- a/lib/libaudit.h
> > +++ b/lib/libaudit.h
> > @@ -573,6 +573,7 @@ extern int audit_setloginuid(uid_t uid);
> > extern uint32_t audit_get_session(void);
> > extern int audit_detect_machine(void);
> > extern int audit_determine_machine(const char *arch);
> > +extern char *audit_format_signal_info(char *buf, int len, char *op, struct
> > audit_reply *rep, char *res);
> >
> > /* Translation functions */
> > extern int audit_name_to_field(const char *field);
> > diff --git a/src/auditd-event.c b/src/auditd-event.c
> > index ef2828d8df94..2970aba44456 100644
> > --- a/src/auditd-event.c
> > +++ b/src/auditd-event.c
> > @@ -1572,7 +1572,7 @@ static void reconfigure(struct auditd_event *e)
> >
> > e->reply.type = AUDIT_DAEMON_CONFIG;
> > e->reply.len = snprintf(e->reply.msg.data,
> MAX_AUDIT_MESSAGE_LENGTH-2,
> > - "%s op=reconfigure state=changed auid=%u pid=%d subj=%s res=success",
> > + "%s : op=reconfigure state=changed auid=%u pid=%d subj=%s res=success",
> > date, uid, pid, ctx );
> > e->reply.message = e->reply.msg.data;
> > free((char *)ctx);
> > diff --git a/src/auditd-reconfig.c b/src/auditd-reconfig.c
> > index a03e29aa57ab..f5b00e6d1dc7 100644
> > --- a/src/auditd-reconfig.c
> > +++ b/src/auditd-reconfig.c
> > @@ -115,12 +115,9 @@ static void *config_thread_main(void *arg)
> > } else {
> > // need to send a failed event message
> > char txt[MAX_AUDIT_MESSAGE_LENGTH];
> > - snprintf(txt, sizeof(txt),
> > - "op=reconfigure state=no-change auid=%u pid=%d subj=%s
> res=failed",
> > - e->reply.signal_info->uid,
> > - e->reply.signal_info->pid,
> > - (e->reply.len > 24) ?
> > - e->reply.signal_info->ctx : "?");
> > + audit_format_signal_info(txt, sizeof(txt),
> > + "reconfigure state=no-change",
> > + &e->reply, "failed");
> > // FIXME: need to figure out sending this
> > //send_audit_event(AUDIT_DAEMON_CONFIG, txt);
> > free_config(&new_config);
> > diff --git a/src/auditd.c b/src/auditd.c
> > index c04a1c9ce93f..63404b25fbc5 100644
> > --- a/src/auditd.c
> > +++ b/src/auditd.c
> > @@ -131,7 +131,7 @@ static void hup_handler( struct ev_loop *loop, struct
> > ev_signal *sig, int revent rc = audit_request_signal_info(fd);
> > if (rc < 0)
> > send_audit_event(AUDIT_DAEMON_CONFIG,
> > - "op=hup-info state=request-siginfo auid=-1 pid=-1 subj=?
> res=failed");
> > + "op=reconfigure state=no-change auid=-1 pid=-1 subj=? res=failed");
> > else
> > hup_info_requested = 1;
> > }
> > @@ -147,7 +147,7 @@ static void user1_handler(struct ev_loop *loop, struct
> > ev_signal *sig, rc = audit_request_signal_info(fd);
> > if (rc < 0)
> > send_audit_event(AUDIT_DAEMON_ROTATE,
> > - "op=usr1-info auid=-1 pid=-1 subj=? res=failed");
> > + "op=rotate-logs auid=-1 pid=-1 subj=? res=failed");
> > else
> > usr1_info_requested = 1;
> > }
> > @@ -163,7 +163,7 @@ static void user2_handler( struct ev_loop *loop, struct
> > ev_signal *sig, int reve if (rc < 0) {
> > resume_logging();
> > send_audit_event(AUDIT_DAEMON_RESUME,
> > - "op=resume-logging auid=-1 pid=-1 subj=?
> res=success");
> > + "op=resume-logging auid=-1 pid=-1 subj=? res=failed");
> > } else
> > usr2_info_requested = 1;
> > }
> > @@ -515,45 +515,33 @@ static void netlink_handler(struct ev_loop *loop,
> > struct ev_io *io, break;
> > case AUDIT_SIGNAL_INFO:
> > if (hup_info_requested) {
> > + char hup[MAX_AUDIT_MESSAGE_LENGTH];
> > 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");
> > + audit_format_signal_info(hup, sizeof(hup),
> > + "reconfigure
> state=no-change",
> > + &cur_event->reply,
> > + "failed");
> > + send_audit_event(AUDIT_DAEMON_CONFIG,
> hup);
> > }
> > cur_event = NULL;
> > hup_info_requested = 0;
> > } else if (usr1_info_requested) {
> > char usr1[MAX_AUDIT_MESSAGE_LENGTH];
> > - if (cur_event->reply.len == 24) {
> > - snprintf(usr1, sizeof(usr1),
> > - "op=rotate-logs auid=-1 pid=-1 subj=?");
> > - } else {
> > - snprintf(usr1, sizeof(usr1),
> > - "op=rotate-logs auid=%u pid=%d subj=%s",
> > - cur_event->reply.signal_info->uid,
> > - cur_event->reply.signal_info->pid,
> > - cur_event->reply.signal_info->ctx);
> > - }
> > + audit_format_signal_info(usr1, sizeof(usr1),
> > + "rotate-logs",
> > + &cur_event->reply,
> > + "success");
> > send_audit_event(AUDIT_DAEMON_ROTATE, usr1);
> > usr1_info_requested = 0;
> > } else if (usr2_info_requested) {
> > char usr2[MAX_AUDIT_MESSAGE_LENGTH];
> > - if (cur_event->reply.len == 24) {
> > - snprintf(usr2, sizeof(usr2),
> > - "op=resume-logging auid=-1 "
> > - "pid=-1 subj=? res=success");
> > - } else {
> > - snprintf(usr2, sizeof(usr2),
> > - "op=resume-logging "
> > - "auid=%u pid=%d subj=%s res=success",
> > - cur_event->reply.signal_info->uid,
> > - cur_event->reply.signal_info->pid,
> > - cur_event->reply.signal_info->ctx);
> > - }
> > + audit_format_signal_info(usr2, sizeof(usr2),
> > + "resume-logging",
> > + &cur_event->reply,
> > + "success");
> > resume_logging();
> > libdisp_resume();
> > send_audit_event(AUDIT_DAEMON_RESUME, usr2);
> > @@ -993,18 +981,14 @@ int main(int argc, char *argv[])
> > rc = get_reply(fd, &trep, rc);
> > if (rc > 0) {
> > char txt[MAX_AUDIT_MESSAGE_LENGTH];
> > - snprintf(txt, sizeof(txt),
> > - "op=terminate auid=%u "
> > - "pid=%d subj=%s res=success",
> > - trep.signal_info->uid,
> > - trep.signal_info->pid,
> > - trep.signal_info->ctx);
> > + audit_format_signal_info(txt, sizeof(txt), "terminate",
> > + &trep, "success");
> > send_audit_event(AUDIT_DAEMON_END, txt);
> > }
> > }
> > if (rc <= 0)
> > send_audit_event(AUDIT_DAEMON_END,
> > - "op=terminate auid=-1 pid=-1 subj=? res=success");
> > + "op=terminate auid=-1 pid=-1 subj=? res=failed");
> > free(cur_event);
> >
> > // Tear down IO watchers Part 2
>
>
>
>
- RGB
--
Richard Guy Briggs <rgb@redhat.com>
Sr. S/W Engineer, Kernel Security, Base Operating Systems
Remote, Ottawa, Red Hat Canada
IRC: rgb, SunRaycer
Voice: +1.647.777.2635, Internal: (81) 32635
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-05-15 19:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-05-10 16:21 [PATCH ghau90 v2] sig_info: use standard template for log messages Richard Guy Briggs
2019-05-15 18:39 ` Steve Grubb
2019-05-15 19:02 ` Richard Guy Briggs
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox