Hello,

Below is my diff between what you sent and svn at commit 831.

-Steve


On Tuesday, May 14, 2013 06:51:17 AM Burn Alting wrote:
> > > - allows ausearch to checkpoint itself, in that, successive invocations
> > > will only display new events. This is enabled via the --checkpoint fn
> > > option. The mods to ausearch.8 describe the method of achieving this.


diff -urpNb audit-2.3.1.orig/docs/ausearch.8 audit-2.3.1/docs/ausearch.8
--- audit-2.3.1.orig/docs/ausearch.8    2013-05-13 08:58:31.000000000 -0400
+++ audit-2.3.1/docs/ausearch.8 2013-05-13 17:45:07.924216379 -0400
@@ -21,6 +21,25 @@ Search for an event based on the given \
 .BR \-c ,\  \-\-comm \ \fIcomm-name\fP
 Search for an event based on the given \fIcomm name\fP. The comm name is the 
executable's name from the task structure.
 .TP
+.BR \-\-checkpoint \ \fIcheckpoint-file\fP
+Checkpoint the output between successive invocations of ausearch such that 
only events not
+previously output will print in subsequent invocations.
+
+An auditd event is made up of one or more records. When processing events, 
ausearch defines
+events as either complete or in-complete.  A complete event is either a single 
record event or
+one whose event time occurred 2 seconds in the past compared to the event 
being currently
+processed.
+
+A checkpoint is achieved by recording the last completed event output along 
with the device
+number and inode of the file the last completed event appeared in 
\fIcheckpoint-file\fP. On a subsequent invocation,
+ausearch will load this checkpoint data and as it processes the log files, it 
will discard all
+complete events until it matches the checkpointed one. At this point, it will 
start
+outputting complete events.
+
+Should the file or checkpointed completed event not be found, an error will 
result and ausearch
+will terminate.
+
+.TP
 .BR \-e,\  \-\-exit \ \fIexit-code-or-errno\fP
 Search for an event based on the given syscall \fIexit code or errno\fP.
 .TP
@@ -144,6 +163,16 @@ String based matches must match the whol
 .BR \-x ,\  \-\-executable \ \fIexecutable\fP
 Search for an event matching the given \fIexecutable\fP name.
 
+.SS "Exit status:"
+.TP
+0
+if OK,
+1
+if nothing found, or argument errors or minor file acces/read errors,
+10
+bad checkpoint data,
+11
+checkpoint processing error
 .SH "SEE ALSO"
 .BR auditd (8),
 .BR pam_loginuid (8).
diff -urpNb audit-2.3.1.orig/src/ausearch.c audit-2.3.1/src/ausearch.c
--- audit-2.3.1.orig/src/ausearch.c     2013-05-13 17:43:51.165214494 -0400
+++ audit-2.3.1/src/ausearch.c  2013-05-13 17:45:07.924216379 -0400
@@ -40,6 +40,7 @@
 #include "ausearch-options.h"
 #include "ausearch-lol.h"
 #include "ausearch-lookup.h"
+#include "ausearch-checkpt.h"
 
 
 static FILE *log_fd = NULL;
@@ -54,6 +55,10 @@ static int process_stdin(void);
 static int process_file(char *filename);
 static int get_record(llist **);
 
+extern const char *checkpt_filename;   /* checkpoint file name */
+static int     have_chkpt_data = 0;    /* flag to indicate we have checkpoint 
data we
+                                        * need to compare events against
+                                        */
 extern char *user_file;
 extern int force_logs;
 extern int match(llist *l);
@@ -90,6 +95,35 @@ int main(int argc, char *argv[])
        set_aumessage_mode(MSG_STDERR, DBG_NO);
        (void) umask( umask( 077 ) | 027 );
 
+       /*
+        * Load the checkpoint file if requested
+        */
+       if (checkpt_filename) {
+               rc = load_ChkPt(checkpt_filename);
+               /*
+                * If < -1, then some load/parse error
+                * If == -1 then no file present (OK)
+                * If == 0, then checkpoint has data
+                */
+               if (rc < -1) {
+                       (void)free((void *)checkpt_filename);
+                       free_ChkPtMemory();
+                       return 10;      /* bad checkpoint status file */
+               } else if (rc == -1) {
+                       /*
+                        * No file, so no checking required. This just means
+                        * we have never checkpointed before and this is the
+                        * first time.
+                        */
+                       have_chkpt_data = 0;
+               } else {
+                       /*
+                        * We will need to check
+                        */
+                       have_chkpt_data++;
+               }
+       }
+       
        lol_create(&lo);
        if (user_file)
                rc = process_file(user_file);
@@ -99,6 +133,22 @@ int main(int argc, char *argv[])
                rc = process_stdin();
        else
                rc = process_logs();
+
+       /*
+        * Generate a checkpoint if required
+        */
+       if (checkpt_filename) {
+               /*
+                * Providing we haven't failed
+                */
+               if (!checkpt_failure)
+                       (void)save_ChkPt(checkpt_filename);
+               free_ChkPtMemory();
+               (void)free((void *)checkpt_filename);
+               if (checkpt_failure)
+                       rc = 11;
+       }
+
        lol_clear(&lo);
        ilist_clear(event_type);
        free(event_type);
@@ -120,6 +170,8 @@ static int process_logs(void)
        struct daemon_conf config;
        char *filename;
        int len, num = 0;
+       int found_chkpt_file = -1;
+       int ret;
 
        /* Load config so we know where logs are */
         if (load_config(&config, TEST_SEARCH)) {
@@ -141,9 +193,43 @@ static int process_logs(void)
        do {
                if (access(filename, R_OK) != 0)
                        break;
+               
+               /*
+                * If we have prior checkpoint data, we ignore files till we
+                * find the file we last checkpointed from
+                */
+               if (checkpt_filename && have_chkpt_data) {
+                       struct stat     sbuf;
+
+                       if (stat(filename, &sbuf)) {
+                               fprintf(stderr, "Error stat'ing %s (%s)\n",
+                                       filename, strerror(errno));
+                               free(filename);
+                               return 1;
+                       }
+                       /*
+                        * Have we accessed the checkpointed file?
+                        * If so, stop checking further files.
+                        */
+                       if (
+                               (sbuf.st_dev == chkpt_input_dev)
+                       &&
+                               (sbuf.st_ino == chkpt_input_ino)
+                       ) {
+                               found_chkpt_file = num++;
+                               break;
+                       }
+               }
+
                num++;
                snprintf(filename, len, "%s.%d", config.log_file, num);
        } while (1);
+       /*
+        * If we have a checkpoint loaded but haven't found it's file we need 
to error
+        */
+       if (checkpt_filename && have_chkpt_data && found_chkpt_file == -1)
+               return 10;
+
        num--;
        /*
         * We note how many files we need to process
@@ -156,7 +242,6 @@ static int process_logs(void)
        else
                snprintf(filename, len, "%s", config.log_file);
        do {
-               int ret;
                if ((ret = process_file(filename))) {
                        free(filename);
                        free_config(&config);
@@ -175,8 +260,88 @@ static int process_logs(void)
                else
                        break;
        } while (1);
+       /*
+        * If performing a checkpoint, set the checkpointed
+        * file details - ie remember the last file processed
+        */
+       ret = 0;
+       if (checkpt_filename)
+               ret = set_ChkPtFileDetails(filename);
+
        free(filename);
        free_config(&config);
+       return ret;
+}
+
+/*
+ * Decide if we should start outputing events given we loaded a checkpoint.
+ *
+ * The previous checkpoint will have recorded the last event outputted,
+ * if there was one. For nothing to be have been output, either the audit.log 
file
+ * was empty, all the events in it were incomplete or ???
+ *
+ * We can return
+ *     0       no output
+ *     1       can output
+ *     2       can output but not this event
+ */
+static int chkpt_output_decision(event * e)
+{
+       static int      can_output = 0;
+
+       /*
+        * Short cut. Once we made the decision, it's made for good
+        */
+       if (can_output)
+               return 1;
+
+       /*
+        * If there was no checkpoint file, we turn on output
+        */
+       if (have_chkpt_data == 0) {
+               can_output = 1;
+               return 1;       /* can output on this event */
+       }
+
+       /*
+        * If the previous checkpoint had no recorded output, then
+        * we assume everything was partial so we turn on output
+        */
+       if (chkpt_input_levent.sec == 0) {
+               can_output = 1;
+               return 1;       /* can output on this event */
+       }
+
+       if (
+               chkpt_input_levent.sec == e->sec
+       &&
+               chkpt_input_levent.milli == e->milli
+       &&
+               chkpt_input_levent.serial == e->serial
+       &&
+               chkpt_input_levent.type == e->type
+       ) {
+               /*
+                * So far a match, so now check the nodes
+                */
+               if (chkpt_input_levent.node == NULL && e->node == NULL) {
+                       can_output = 1;
+                       return 2;       /* output after this event */
+               }
+               if (
+                       chkpt_input_levent.node
+               &&
+                       e->node
+               &&
+                       (strcmp(chkpt_input_levent.node, e->node) == 0)
+               ) {
+                       can_output = 1;
+                       return 2;       /* output after this event */
+               }
+               /*
+                * The nodes are different. Drop thru to a no output return 
value
+                */
+       }
        return 0;
 }
 
@@ -184,6 +349,7 @@ static int process_log_fd(void)
 {
        llist *entries; // entries in a record
        int ret;
+       int do_output = 1;
 
        /* For each record in file */
        do {
@@ -191,9 +357,34 @@ static int process_log_fd(void)
                if ((ret != 0)||(entries->cnt == 0)) {
                        break;
                }
-
+               // FIXME - what about events that straddle files?
+               /* FIXED:
+                * We now only flush all events on the last log file being
+                * processed. Thus incomplete events are 'carried forward' to
+                * be completed from the rest of it's records we expect to find
+                * in the next file we are about to process.
+                */
                if (match(entries)) {
+                       /*
+                        * If we are checkpointing, decide if we output
+                        * this event
+                        */
+                       if (checkpt_filename)
+                               do_output = chkpt_output_decision(&entries->e);
+
+                       if (do_output == 1) {
                        output_record(entries);
+
+                               /* Remember this event if checkpointing */
+                               if (checkpt_filename) {
+                                       if (set_ChkPtLastEvent(&entries->e)) {
+                                               list_clear(entries);
+                                               free(entries);
+                                               fclose(log_fd);
+                                               return 4;       /* no memory */
+                                       }
+                               }
+                       }
                        found = 1;
                        if (just_one) {
                                list_clear(entries);
@@ -299,14 +490,15 @@ static int get_record(llist **l)
                         * If we are the last file being processed, we mark all 
incomplete
                         * events as complete so they will be printed.
                         */
-
                        if ((ferror_unlocked(log_fd) &&
                             errno == EINTR) || feof_unlocked(log_fd)) {
                                /*
                                 * Only mark all events as L_COMPLETE if we are 
the
                                 * last file being processed.
+                                * We DO NOT do this if we are checkpointing.
                                 */
                                if (files_to_process == 0) {
+                                       if (!checkpt_filename)
                                        terminate_all_events(&lo);
                                }
                                *l = get_ready_event(&lo);
diff -urpNb audit-2.3.1.orig/src/ausearch-checkpt.c 
audit-2.3.1/src/ausearch-checkpt.c
--- audit-2.3.1.orig/src/ausearch-checkpt.c     1969-12-31 19:00:00.000000000 
-0500
+++ audit-2.3.1/src/ausearch-checkpt.c  2013-05-13 17:45:07.925216379 -0400
@@ -0,0 +1,264 @@
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include "ausearch-checkpt.h"
+
+#define        DBG     0       /* set to non-zero for debug */
+
+/*
+ * Remember why we failed
+ */
+unsigned       checkpt_failure = 0;
+
+/*
+ * Remember the file we were processing when we had incomplete events.
+ * We remember this via it's dev and inode
+ */
+static dev_t   checkpt_dev     = (dev_t)NULL;
+static ino_t   checkpt_ino     = (ino_t)NULL;
+
+/*
+ * Remember the last event output
+ */
+static event   last_event = {0, 0, 0, NULL, 0};
+
+/*
+ * Loaded values from a given checkpoint file
+ */
+dev_t  chkpt_input_dev = (dev_t)NULL;
+ino_t  chkpt_input_ino = (ino_t)NULL;
+
+event  chkpt_input_levent = {0, 0, 0, NULL, 0};
+
+/*
+ * Record the dev_t and ino_t of the given file
+ *
+ * Rtns:
+ * 1   Failed to get status
+ * 0   OK
+ */
+int
+set_ChkPtFileDetails(char * fn)
+{
+       struct stat     sbuf;
+
+       if (stat(fn, &sbuf) != 0) {
+               fprintf(stderr, "Cannot stat audit file for checkpoint details 
- %s: %s\n",
+                       fn, strerror(errno));
+               checkpt_failure |= CP_STATFAILED;
+               return 1;
+       }
+       checkpt_dev = sbuf.st_dev;
+       checkpt_ino = sbuf.st_ino;
+       return 0;
+}
+
+/*
+ * Save the given event in the last_event record
+ * Rtns:
+ * 1   no memory
+ * 0   OK
+ */
+int
+set_ChkPtLastEvent(event * e)
+{
+       /*
+        * Set the event node if necessary
+        */
+       if (e->node) {
+               if (last_event.node) {
+                       if (strcmp(e->node, last_event.node) != 0) {
+                               (void)free((void *)last_event.node);
+                               last_event.node = strdup(e->node);
+                       }
+               } else {
+                       last_event.node = strdup(e->node);
+               }
+               if (last_event.node == NULL) {
+                       fprintf(stderr, "No memory to allocate checkpoint last 
event node name\n");
+                       return 1;
+               }
+       } else {
+               if (last_event.node)
+                       (void)free((void *)last_event.node);
+               last_event.node = NULL;
+       }
+       last_event.sec = e->sec;
+       last_event.milli = e->milli;
+       last_event.serial = e->serial;
+       last_event.type = e->type;
+       return 0;
+}
+
+/*
+ * Free all checkpoint memory
+ */
+void
+free_ChkPtMemory()
+{
+       if (last_event.node)
+               (void)free((void *)last_event.node);
+       last_event.node = NULL;
+       if (chkpt_input_levent.node)
+               (void)free((void *)chkpt_input_levent.node);
+       chkpt_input_levent.node = NULL;
+}
+
+/*
+ * Save the checkpoint to the given file
+ * Rtns:
+ * 1   io error
+ * 0   OK
+ */
+int
+save_ChkPt(const char * fn)
+{
+       FILE                    * fd;
+
+       if ((fd = fopen(fn, "w")) == NULL) {
+               fprintf(stderr, "Cannot open checkpoint file - %s: %s\n",
+                       fn, strerror(errno));
+               checkpt_failure |= CP_STATUSIO;
+               return 1;
+       }
+       fprintf(fd, "dev=0x%X\ninode=0x%X\n",
+               (unsigned int)checkpt_dev, (unsigned int)checkpt_ino);
+       fprintf(fd, "output=%s %lu.%03d:%lu 0x%X\n",
+               last_event.node ? last_event.node : "-",
+               (long unsigned int)last_event.sec, last_event.milli,
+               last_event.serial, last_event.type);
+       (void)fclose(fd);
+       return 0;
+}
+
+/*
+ * Parse a checkpoint file "output=" record
+ * Rtns
+ * 1   failed to parse or no memory
+ * 0   parsed OK
+ */
+static int parse_checkpt_event(char * lbuf, int ndix, event * e)
+{
+       char    * rest;
+
+       /*
+        * Find the space after the node, then make it '\0' so
+        * we terminate the node value. We leave 'rest' at the start
+        * of the event time/serial element
+        */
+       rest = strchr(&lbuf[ndix], ' ');
+       if (rest == NULL) {
+               fprintf(stderr, "Malformed output/event checkpoint line near 
node - [%s]\n",
+                       lbuf);
+               checkpt_failure |= CP_STATUSBAD;
+               return 1;
+       }
+       *rest++ = '\0';
+       
+       if (lbuf[ndix] == '-') {
+               e->node = NULL;
+       } else {
+               e->node = strdup(&lbuf[ndix]);
+               if (e->node == NULL) {
+                       fprintf(stderr, "No memory for node when loading 
checkpoint line - [%s]\n",
+                               lbuf);
+                       checkpt_failure |= CP_NOMEM;
+                       return 1;
+               }
+       }
+       if (sscanf(rest, "%lu.%03d:%lu 0x%X", &e->sec, &e->milli, &e->serial, 
&e->type) != 4) {
+               fprintf(stderr, "Malformed output/event checkpoint line afer 
node - [%s]\n",
+                       lbuf);
+               checkpt_failure |= CP_STATUSBAD;
+               return 1;
+       }
+
+       return 0;
+}
+
+/*
+ * Load the checkpoint from the given file
+ * Rtns:
+ *  < -1       error
+ * == -1       no file present
+ * == 0                loaded data
+ */
+int
+load_ChkPt(const char * fn)
+{
+#define        MAX_LN  1023    /* good size */
+       FILE                    * fd;
+       char                    lbuf[MAX_LN];
+
+
+       if ((fd = fopen(fn, "r")) == NULL) {
+               if (errno == ENOENT)
+                       return -1;
+               fprintf(stderr, "Cannot open checkpoint file - %s: %s\n",
+                       fn, strerror(errno));
+               return -2;
+       }
+       while (fgets(lbuf, MAX_LN, fd) != NULL) {
+               int     len = strlen(lbuf);
+
+               if (lbuf[len - 1] == '\n')      /* drop the newline */
+                       lbuf[len - 1] = '\0';
+
+               if (strncmp(lbuf, "dev=", 4) == 0) {
+                       errno = 0;
+                       chkpt_input_dev = strtoul(&lbuf[4], NULL, 16);
+                       if (errno) {
+                               fprintf(stderr, "Malformed dev checkpoint line 
- [%s]\n",
+                                       lbuf);
+                               checkpt_failure |= CP_STATUSBAD;
+                               break;
+                       }
+               } else if (strncmp(lbuf, "inode=", 6) == 0) {
+                       errno = 0;
+                       chkpt_input_ino = strtoul(&lbuf[6], NULL, 16);
+                       if (errno) {
+                               fprintf(stderr, "Malformed inode checkpoint 
line - [%s]\n",
+                                       lbuf);
+                               checkpt_failure |= CP_STATUSBAD;
+                               break;
+                       }
+               } else if (strncmp(lbuf, "output=", 7) == 0) {
+                       if (parse_checkpt_event(lbuf, 7, &chkpt_input_levent)) {
+                               break;
+                       }
+               } else {
+                       fprintf(stderr, "Malformed unknown checkpoint line - 
[%s]\n",
+                               lbuf);
+                       checkpt_failure |= CP_STATUSBAD;
+                       break;
+               }
+       }
+       if (
+               (chkpt_input_ino == (ino_t)NULL)
+       ||
+               (chkpt_input_dev == (dev_t)NULL)
+       ) {
+               fprintf(stderr, "Missing dev/inode lines from checkpoint file 
%s\n",
+                       fn);
+               checkpt_failure |= CP_STATUSBAD;
+       }
+       (void)fclose(fd);
+
+       if (checkpt_failure)
+               return -3;
+
+#if    DBG
+       {
+               fprintf(stderr, "Loaded %s - dev: 0x%X, ino: 0x%X\n",
+                       fn, chkpt_input_dev, chkpt_input_ino);
+               fprintf(stderr, "output:%s %d.%03d:%lu 0x%X\n",
+                       chkpt_input_levent.node ? chkpt_input_levent.node : "-",
+                       chkpt_input_levent.sec, chkpt_input_levent.milli,
+                       chkpt_input_levent.serial, chkpt_input_levent.type);
+       }
+#endif /* DBG */
+       return 0;
+}
diff -urpNb audit-2.3.1.orig/src/ausearch-checkpt.h 
audit-2.3.1/src/ausearch-checkpt.h
--- audit-2.3.1.orig/src/ausearch-checkpt.h     1969-12-31 19:00:00.000000000 
-0500
+++ audit-2.3.1/src/ausearch-checkpt.h  2013-05-13 17:45:07.925216379 -0400
@@ -0,0 +1,24 @@
+#ifndef        CHECKPT_HEADER
+#define        CHECKPT_HEADER
+
+#include <sys/types.h>
+#include "ausearch-llist.h"
+
+extern int             set_ChkPtFileDetails(char *);
+extern int             set_ChkPtLastEvent(event * e);
+extern void             free_ChkPtMemory();
+extern int             save_ChkPt(const char *);
+extern int             load_ChkPt(const char *);
+
+#define        CP_NOMEM        0x0001  /* no memory when creating checkpoint 
list */
+#define        CP_STATFAILED   0x0002  /* stat() call on last log file failed 
*/
+#define        CP_STATUSIO     0x0004  /* cannot open/read/write checkpoint 
file */
+#define        CP_STATUSBAD    0x0008  /* malformed status checkpoint entries 
*/
+
+extern unsigned checkpt_failure;
+
+extern dev_t   chkpt_input_dev;
+extern ino_t   chkpt_input_ino;
+extern event   chkpt_input_levent;
+
+#endif /* CHECKPT_HEADER */
diff -urpNb audit-2.3.1.orig/src/ausearch-options.c 
audit-2.3.1/src/ausearch-options.c
--- audit-2.3.1.orig/src/ausearch-options.c     2013-05-13 08:58:31.000000000 
-0400
+++ audit-2.3.1/src/ausearch-options.c  2013-05-13 17:45:07.926216379 -0400
@@ -65,6 +65,7 @@ const char *event_subject = NULL;
 const char *event_object = NULL;
 const char *event_uuid = NULL;
 const char *event_vmname = NULL;
+const char *checkpt_filename = NULL;   /* checkpoint filename if present */
 report_t report_format = RPT_DEFAULT;
 ilist *event_type;
 
@@ -81,13 +82,14 @@ S_HOSTNAME, S_INTERP, S_INFILE, S_MESSAG
 S_TIME_END, S_TIME_START, S_TERMINAL, S_ALL_UID, S_EFF_UID, S_UID, S_LOGINID,
 S_VERSION, S_EXACT_MATCH, S_EXECUTABLE, S_CONTEXT, S_SUBJECT, S_OBJECT,
 S_PPID, S_KEY, S_RAW, S_NODE, S_IN_LOGS, S_JUST_ONE, S_SESSION, S_EXIT,
-S_LINEBUFFERED, S_UUID, S_VMNAME};
+S_LINEBUFFERED, S_UUID, S_VMNAME, S_CHECKPOINT};
 
 static struct nv_pair optiontab[] = {
        { S_EVENT, "-a" },
        { S_EVENT, "--event" },
        { S_COMM, "-c" },
        { S_COMM, "--comm" },
+       { S_CHECKPOINT, "--checkpoint" },
        { S_EXIT, "-e" },
        { S_EXIT, "--exit" },
        { S_FILENAME, "-f" },
@@ -176,6 +178,7 @@ static void usage(void)
        printf("usage: ausearch [options]\n"
        "\t-a,--event <Audit event id>\tsearch based on audit event id\n"
        "\t-c,--comm  <Comm name>\t\tsearch based on command line name\n"
+       "\t--checkpoint <checkpoint file>\tsearch from last complete event\n"
        "\t-e,--exit  <Exit code or errno>\tsearch based on syscall exit code\n"
        "\t-f,--file  <File name>\t\tsearch based on file name\n"
        "\t-ga,--gid-all <all Group id>\tsearch based on All group ids\n"
@@ -1099,6 +1102,19 @@ int check_params(int count, char *vars[]
                case S_LINEBUFFERED:
                        line_buffered = 1;
                        break;
+               case S_CHECKPOINT:
+                       if (!optarg) {
+                               fprintf(stderr, 
+                                       "Argument is required for %s\n",
+                                       vars[c]);
+                               retval = -1;
+                       } else {
+                               checkpt_filename = strdup(optarg);
+                               if (checkpt_filename == NULL)
+                                       retval = -1;
+                               c++;
+                       }
+                       break;
                default:
                        fprintf(stderr, "%s is an unsupported option\n", 
                                vars[c]);
diff -urpNb audit-2.3.1.orig/src/Makefile.am audit-2.3.1/src/Makefile.am
--- audit-2.3.1.orig/src/Makefile.am    2013-05-13 08:58:31.000000000 -0400
+++ audit-2.3.1/src/Makefile.am 2013-05-13 17:45:07.926216379 -0400
@@ -26,7 +26,7 @@ SUBDIRS = test
 INCLUDES = -I${top_srcdir} -I${top_srcdir}/lib -I${top_srcdir}/src/libev
 sbin_PROGRAMS = auditd auditctl aureport ausearch autrace
 AM_CFLAGS = -D_GNU_SOURCE
-noinst_HEADERS = auditd-config.h auditd-event.h auditd-listen.h 
ausearch-llist.h ausearch-options.h auditctl-llist.h aureport-options.h 
ausearch-parse.h aureport-scan.h ausearch-lookup.h ausearch-int.h 
auditd-dispatch.h ausearch-string.h ausearch-nvpair.h ausearch-common.h 
ausearch-avc.h ausearch-time.h ausearch-lol.h idata.h
+noinst_HEADERS = auditd-config.h auditd-event.h auditd-listen.h 
ausearch-llist.h ausearch-options.h auditctl-llist.h aureport-options.h 
ausearch-parse.h aureport-scan.h ausearch-lookup.h ausearch-int.h 
auditd-dispatch.h ausearch-string.h ausearch-nvpair.h ausearch-common.h 
ausearch-avc.h ausearch-time.h ausearch-lol.h idata.h ausearch-checkpt.h
 
 auditd_SOURCES = auditd.c auditd-event.c auditd-config.c auditd-reconfig.c 
auditd-sendmail.c auditd-dispatch.c
 if ENABLE_LISTENER
@@ -45,7 +45,7 @@ auditctl_LDADD = -L${top_builddir}/lib -
 aureport_SOURCES = aureport.c auditd-config.c ausearch-llist.c 
aureport-options.c ausearch-string.c ausearch-parse.c aureport-scan.c 
aureport-output.c ausearch-lookup.c ausearch-int.c ausearch-time.c 
ausearch-nvpair.c ausearch-avc.c ausearch-lol.c
 aureport_LDADD = -L${top_builddir}/lib -laudit
 
-ausearch_SOURCES = ausearch.c auditd-config.c ausearch-llist.c 
ausearch-options.c ausearch-report.c ausearch-match.c ausearch-string.c 
ausearch-parse.c ausearch-int.c ausearch-time.c ausearch-nvpair.c 
ausearch-lookup.c ausearch-avc.c ausearch-lol.c
+ausearch_SOURCES = ausearch.c auditd-config.c ausearch-llist.c 
ausearch-options.c ausearch-report.c ausearch-match.c ausearch-string.c 
ausearch-parse.c ausearch-int.c ausearch-time.c ausearch-nvpair.c 
ausearch-lookup.c ausearch-avc.c ausearch-lol.c ausearch-checkpt.c
 ausearch_LDADD = -L${top_builddir}/lib -laudit -L${top_builddir}/auparse 
-lauparse
 
 autrace_SOURCES = autrace.c delete_all.c auditctl-llist.c

--
Linux-audit mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/linux-audit

Reply via email to