Merge commit 'Add audit module (standalone version)'
authorŁukasz Stelmach <l.stelmach@samsung.com>
Thu, 6 Apr 2017 08:38:40 +0000 (10:38 +0200)
committerŁukasz Stelmach <l.stelmach@samsung.com>
Thu, 6 Apr 2017 08:38:40 +0000 (10:38 +0200)
1  2 
src/faultd.c

diff --cc src/faultd.c
index 772fb733a9ac920eb4d9c38768ba451ec7d9ac3d,11325eed35155d88bf1adf586e6c3dfd83eb51b7..b049845624cf0796686f036e8b83e965b970bf19
   */
  
  #include <stdio.h>
 +#include <poll.h>
  #include <systemd/sd-bus.h>
+ #include <systemd/sd-event.h>
+ #include <signal.h>
+ #include "audit.h"
+ static int terminate = 0;
+ int sigint_handler(sd_event_source *s,
+               const struct signalfd_siginfo *si,
+               void *userdata)
+ {
+       terminate = 1;
+       return 0;
+ }
  
 +#if 0
 +#include <stdbool.h>
 +typedef uint64_t usec_t;
 +/* The pointers in the linked list's items. Use this in the item structure */
 +#define LIST_FIELDS(t,name)                                             \
 +        t *name##_next, *name##_prev
 +
 +typedef enum WakeupType {
 +        WAKEUP_NONE,
 +        WAKEUP_EVENT_SOURCE,
 +        WAKEUP_CLOCK_DATA,
 +        WAKEUP_SIGNAL_DATA,
 +        _WAKEUP_TYPE_MAX,
 +        _WAKEUP_TYPE_INVALID = -1,
 +} WakeupType;
 +
 +typedef enum EventSourceType {
 +        SOURCE_IO,
 +        SOURCE_TIME_REALTIME,
 +        SOURCE_TIME_BOOTTIME,
 +        SOURCE_TIME_MONOTONIC,
 +        SOURCE_TIME_REALTIME_ALARM,
 +        SOURCE_TIME_BOOTTIME_ALARM,
 +        SOURCE_SIGNAL,
 +        SOURCE_CHILD,
 +        SOURCE_DEFER,
 +        SOURCE_POST,
 +        SOURCE_EXIT,
 +        SOURCE_WATCHDOG,
 +        _SOURCE_EVENT_SOURCE_TYPE_MAX,
 +        _SOURCE_EVENT_SOURCE_TYPE_INVALID = -1
 +} EventSourceType;
 +
 +struct sd_event_source {
 +        WakeupType wakeup;
 +
 +        unsigned n_ref;
 +
 +        sd_event *event;
 +        void *userdata;
 +        sd_event_handler_t prepare;
 +
 +        char *description;
 +
 +        EventSourceType type:5;
 +        int enabled:3;
 +        bool pending:1;
 +        bool dispatching:1;
 +        bool floating:1;
 +
 +        int64_t priority;
 +        unsigned pending_index;
 +        unsigned prepare_index;
 +        uint64_t pending_iteration;
 +        uint64_t prepare_iteration;
 +
 +        LIST_FIELDS(sd_event_source, sources);
 +
 +        union {
 +                struct {
 +                        sd_event_io_handler_t callback;
 +                        int fd;
 +                        uint32_t events;
 +                        uint32_t revents;
 +                        bool registered:1;
 +                } io;
 +                struct {
 +                        sd_event_time_handler_t callback;
 +                        usec_t next, accuracy;
 +                        unsigned earliest_index;
 +                        unsigned latest_index;
 +                } time;
 +                struct {
 +                        sd_event_signal_handler_t callback;
 +                        struct signalfd_siginfo siginfo;
 +                        int sig;
 +                } signal;
 +                struct {
 +                        sd_event_child_handler_t callback;
 +                        siginfo_t siginfo;
 +                        pid_t pid;
 +                        int options;
 +                } child;
 +                struct {
 +                        sd_event_handler_t callback;
 +                } defer;
 +                struct {
 +                        sd_event_handler_t callback;
 +                } post;
 +                struct {
 +                        sd_event_handler_t callback;
 +                        unsigned prioq_index;
 +                } exit;
 +        };
 +};
 +#endif
  int dbus_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata);
  
  int dbus_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
@@@ -220,41 -127,29 +234,55 @@@ int main(int ac, char* av[]
      return -1;
    }
  
 +#if 1
 +  rc = sd_event_add_io(loop,
 +                       &source,
 +                       sd_bus_get_fd(bus),
 +                       POLLIN,
 +                       dbus_handler, (void*)bus);
 +  if (rc < 0) {
 +    fprintf(stderr, "Cannot add bus event source.\n");
 +  }
 +#else
 +  /* If there is way to register a catch-all handler */
 +  sd_bus_attach_event(bus, loop, SD_EVENT_PRIORITY_NORMAL);
 +#endif
+   sigemptyset(&ss);
+   sigaddset(&ss, SIGINT);
+   rc = sigprocmask(SIG_BLOCK, &ss, NULL);
+   rc = sd_event_add_signal(loop, NULL, SIGINT, sigint_handler, NULL);
+ //  sd_event_add_io(loop, NULL,   sd_bus_get_fd(bus), EPOLLIN | EPOLLOUT, dbus_handler, (void*)bus);
+   aufd = faultd_audit_init(loop);
  
    printf("Hello world!\n");
 +
 +#if 0
    for (;;) {
 +    rc = sd_event_get_state(loop);
 +    if (rc < 0)
 +      return rc;
 +    if (rc == SD_EVENT_FINISHED)
 +      return 0;
 +
      rc = sd_event_run(loop, (uint64_t) -1);
      if (rc < 0) {
        fprintf(stderr, "Failed to wait on the bus.\n");
        break;
      }
 +    fprintf(stdout, ",");
 +    fflush(stdout);
+     if (terminate) {
+           printf("Closing...\n");
+           break;
+     }
    }
 +#else
 +  sd_event_loop(loop);
 +#endif
    sd_bus_close(bus);
+   faultd_audit_close(aufd);
    return 0;
  }