On Tue, Oct 29, 2013 at 5:52 AM, Stephen Smalley <s...@tycho.nsa.gov> wrote:

> On 10/29/2013 12:11 AM, William Roberts wrote:
> > FYI This is a DRAFT patch. Just mostly to show how you can test the
> kernel
> > patches I have been
> > putting out recently. You can toggle the false/true in auditd.c and then
> > re-push the auditd daemon.
>
> I think you want to default-true but ignore errors or at least ones that
> merely signify that the kernel doesn't support it.
>

Agree with you here, realized I had this on false from testing after I sent
it.
Once I get traction on the upstream kernel patches, I'll chnage this and get
pull requests to you


>
> >
> >
> > On Mon, Oct 28, 2013 at 9:09 PM, William Roberts
> > <bill.c.robe...@gmail.com>wrote:
> >
> >> Change-Id: I82f39aae8264707bdc8eae9e32cfbf650545a0fa
> >> ---
> >>  auditd/auditd.c   |    8 ++++++++
> >>  auditd/libaudit.c |   25 +++++++++++++++++++++++++
> >>  auditd/libaudit.h |   33 +++++++++++++++++++++++++++++++++
> >>  3 files changed, 66 insertions(+)
> >>
> >> diff --git a/auditd/auditd.c b/auditd/auditd.c
> >> index 6a4ecae..beaff51 100644
> >> --- a/auditd/auditd.c
> >> +++ b/auditd/auditd.c
> >> @@ -19,6 +19,7 @@
> >>  #define LOG_TAG "auditd"
> >>
> >>  #include <stdio.h>
> >> +#include <stdbool.h>
> >>  #include <stdlib.h>
> >>
> >>  #include <errno.h>
> >> @@ -188,6 +189,13 @@ int main(int argc, char *argv[])
> >>          goto err;
> >>      }
> >>
> >> +    if (audit_set_cmdline_output(audit_fd, false, WAIT_NO) < 0) {
> >> +        rc = errno;
> >> +        SLOGE("Failed on audit_set_cmdline_feature with error: %s",
> >> strerror(errno));
> >> +        goto err;
> >> +    }
> >> +
> >> +
> >>      pfds.fd = audit_fd;
> >>      pfds.events = POLLIN;
> >>
> >> diff --git a/auditd/libaudit.c b/auditd/libaudit.c
> >> index 06e5557..2771d92 100644
> >> --- a/auditd/libaudit.c
> >> +++ b/auditd/libaudit.c
> >> @@ -220,6 +220,31 @@ out:
> >>      return rc;
> >>  }
> >>
> >> +int audit_set_cmdline_output(int fd, bool val, rep_wait_t wmode)
> >> +{
> >> +    int rc;
> >> +    struct audit_reply rep;
> >> +    struct audit_features features;
> >> +
> >> +    memset(&features, 0, sizeof(features));
> >> +
> >> +    features.vers = 1;
> >> +    features.mask =
> AUDIT_FEATURE_TO_MASK(AUDIT_FEATURE_CMDLINE_OUTPUT);
> >> +    features.features |= (val == true) << AUDIT_FEATURE_CMDLINE_OUTPUT;
> >> +
> >> +    rc = audit_send(fd, AUDIT_SET_FEATURE, &features,
> sizeof(features));
> >> +    if (rc < 0) {
> >> +        SLOGE("Could net set cmdline output for audit events, error:
> %s",
> >> strerror(-rc));
> >> +        return rc;
> >> +    }
> >> +
> >> +    if (wmode != WAIT_NO) {
> >> +        audit_get_reply(fd, &rep, GET_REPLY_NONBLOCKING, 0);
> >> +    }
> >> +
> >> +    return 0;
> >> +}
> >> +
> >>  int audit_set_pid(int fd, uint32_t pid, rep_wait_t wmode)
> >>  {
> >>      int rc;
> >> diff --git a/auditd/libaudit.h b/auditd/libaudit.h
> >> index fbaa7b9..7fc8138 100644
> >> --- a/auditd/libaudit.h
> >> +++ b/auditd/libaudit.h
> >> @@ -22,11 +22,30 @@
> >>  #include <stdint.h>
> >>  #include <sys/socket.h>
> >>  #include <sys/types.h>
> >> +#include <stdbool.h>
> >>  #include <linux/netlink.h>
> >>  #include <linux/audit.h>
> >>
> >>  #define MAX_AUDIT_MESSAGE_LENGTH    8970
> >>
> >> +#define AUDIT_SET_FEATURE      1018
> >> +#define AUDIT_GET_FEATURE      1019
> >> +#define AUDIT_FEATURE_CHANGE   1020
> >> +
> >> +struct audit_features {
> >> +#define AUDIT_FEATURE_VERSION  1
> >> +       __u32   vers;
> >> +       __u32   mask;
> >> +       __u32   features;
> >> +       __u32   lock;
> >> +};
> >> +
> >> +#define AUDIT_FEATURE_CMDLINE_OUTPUT   0
> >> +#define AUDIT_LAST_FEATURE     AUDIT_FEATURE_CMDLINE_OUTPUT
> >> +
> >> +#define audit_feature_valid(x)         ((x) >= 0 && (x) <=
> >> AUDIT_LAST_FEATURE)
> >> +#define AUDIT_FEATURE_TO_MASK(x)       (1 << ((x) & 31))
> >> +
> >>  typedef enum {
> >>      GET_REPLY_BLOCKING=0,
> >>      GET_REPLY_NONBLOCKING
> >> @@ -108,4 +127,18 @@ extern int  audit_get_reply(int fd, struct
> >> audit_reply *rep, reply_t block,
> >>   */
> >>  extern int  audit_set_pid(int fd, uint32_t pid, rep_wait_t wmode);
> >>
> >> +/**
> >> + * Turns on (true) or off (false) the cmdline autput of the audit
> records.
> >> + * @param fd
> >> + *  The fd returned by a call to audit_open()
> >> + * @param val
> >> + * True for on, flase for off.
> >> + * @param wmode
> >> + *  Whether or not to block on the underlying socket io calls.
> >> + * @return
> >> + *  This function returns 0 on success, -errno on error.
> >> + */
> >> +extern int audit_set_cmdline_output(int fd, bool val, rep_wait_t
> wmode);
> >> +
> >> +
> >>  #endif
> >> --
> >> 1.7.9.5
> >>
> >>
> >
> >
>
>


-- 
Respectfully,

William C Roberts

Reply via email to