wip: add match, exit the loop
authorŁukasz Stelmach <l.stelmach@samsung.com>
Fri, 7 Apr 2017 14:52:05 +0000 (16:52 +0200)
committerŁukasz Stelmach <l.stelmach@samsung.com>
Fri, 7 Apr 2017 14:52:05 +0000 (16:52 +0200)
src/audit.c
src/faultd.c

index 108309f376564616a84cc52231c84d59097d2b12..f52645b2d0825f98d230229ef7d61451a99c2bca 100644 (file)
@@ -14,6 +14,8 @@ static struct audit_rule_data rule_data = {
        .fieldflags = {AUDIT_EQUAL}, /* trigger if equal to value*/
 };
 
+static int audit_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata);
+
 static int audit_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata)
 {
        struct audit_reply reply;
index b049845624cf0796686f036e8b83e965b970bf19..0ef81f22d30c99cb62e18ded92efcc51ded4610c 100644 (file)
 #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>
@@ -129,7 +120,31 @@ struct sd_event_source {
         };
 };
 #endif
+static int terminate = 0;
+
+int on_unit_properties_changed(sd_bus_message *m, void *userdata, sd_bus_error *ret_error);
 int dbus_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata);
+int sigint_handler(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata);
+
+int sigint_handler(sd_event_source *s,
+               const struct signalfd_siginfo *si,
+               void *userdata)
+{
+  sd_event* loop = userdata;
+  sd_event_exit(loop, 0);
+  terminate = 1;
+  return 0;
+}
+
+int on_unit_properties_changed(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
+  int rc = 1;
+  fprintf(stdout,"'");
+  fflush(stdout);
+  /* const char* path; */
+
+  /* path = NULL; */
+  return rc;
+}
 
 int dbus_handler(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
   sd_bus* bus = userdata;
@@ -198,6 +213,13 @@ int main(int ac, char* av[])
   int aufd;
   sigset_t ss;
 
+#if 1
+  rc = sd_bus_default_system(&bus);
+  if (rc < 0) {
+    fprintf(stderr, "Failed to acquire the defult system bus connection.\n");
+    return 1;
+  }
+#else
   rc = sd_bus_new(&bus);
   if (rc < 0) {
     fprintf(stderr, "Failed to create a new bus.\n");
@@ -215,6 +237,19 @@ int main(int ac, char* av[])
     fprintf(stderr, "Failed to connect to the bus.\n");
     return -1;
   }
+#endif
+  rc = sd_bus_add_match(bus,
+                        NULL,
+                        "type='signal',sender='org.freedesktop.systemd1',"
+                        "interface='org.freedesktop.DBus.Properties',"
+                        "member='PropertiesChanged',"
+                        "path_namespace='/org/freedesktop/systemd1/unit'",
+                        on_unit_properties_changed,
+                        NULL);
+  if (rc < 0) {
+    fprintf(stderr, "Failed to add match");
+    return -1;
+  }
 
   rc = sd_bus_call_method(bus,
                          "org.freedesktop.systemd1",
@@ -234,7 +269,7 @@ int main(int ac, char* av[])
     return -1;
   }
 
-#if 1
+#if 0
   rc = sd_event_add_io(loop,
                        &source,
                        sd_bus_get_fd(bus),
@@ -250,7 +285,7 @@ int main(int ac, char* av[])
   sigemptyset(&ss);
   sigaddset(&ss, SIGINT);
   rc = sigprocmask(SIG_BLOCK, &ss, NULL);
-  rc = sd_event_add_signal(loop, NULL, SIGINT, sigint_handler, NULL);
+  rc = sd_event_add_signal(loop, NULL, SIGINT, sigint_handler, loop);
 
 
 //  sd_event_add_io(loop, NULL,   sd_bus_get_fd(bus), EPOLLIN | EPOLLOUT, dbus_handler, (void*)bus);