chiark / gitweb /
bus: don't process Peer interface messages in the proxy
authorLennart Poettering <lennart@poettering.net>
Thu, 26 Dec 2013 02:08:52 +0000 (03:08 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 26 Dec 2013 02:08:52 +0000 (03:08 +0100)
src/bus-proxyd/bus-proxyd.c
src/libsystemd-bus/bus-internal.h
src/libsystemd-bus/sd-bus.c

index abc5014..27122a5 100644 (file)
@@ -123,7 +123,7 @@ static int parse_argv(int argc, char *argv[]) {
         return 1;
 }
 
         return 1;
 }
 
-static int rename_service(sd_bus *b) {
+static int rename_service(sd_bus *a, sd_bus *b) {
         _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
         _cleanup_free_ char *p = NULL, *name = NULL;
         const char *comm;
         _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
         _cleanup_free_ char *p = NULL, *name = NULL;
         const char *comm;
@@ -132,6 +132,7 @@ static int rename_service(sd_bus *b) {
         pid_t pid;
         int r;
 
         pid_t pid;
         int r;
 
+        assert(a);
         assert(b);
 
         r = sd_bus_get_peer_creds(b, SD_BUS_CREDS_UID|SD_BUS_CREDS_PID|SD_BUS_CREDS_CMDLINE|SD_BUS_CREDS_COMM, &creds);
         assert(b);
 
         r = sd_bus_get_peer_creds(b, SD_BUS_CREDS_UID|SD_BUS_CREDS_PID|SD_BUS_CREDS_CMDLINE|SD_BUS_CREDS_COMM, &creds);
@@ -182,9 +183,11 @@ static int rename_service(sd_bus *b) {
                         memset(arg_command_line_buffer + w, 0, m - w);
         }
 
                         memset(arg_command_line_buffer + w, 0, m - w);
         }
 
-        log_debug("Running on behalf of PID %lu (%s), UID %lu (%s).",
-                   (unsigned long) pid, p,
-                   (unsigned long) uid, name);
+        log_debug("Running on behalf of PID %lu (%s), UID %lu (%s), %s",
+                  (unsigned long) pid, p,
+                  (unsigned long) uid, name,
+                  a->unique_name);
+                ;
         return 0;
 }
 
         return 0;
 }
 
@@ -430,6 +433,8 @@ int main(int argc, char *argv[]) {
                 peersec = NULL;
         }
 
                 peersec = NULL;
         }
 
+        a->manual_peer_interface = true;
+
         r = sd_bus_start(a);
         if (r < 0) {
                 log_error("Failed to start bus client: %s", strerror(-r));
         r = sd_bus_start(a);
         if (r < 0) {
                 log_error("Failed to start bus client: %s", strerror(-r));
@@ -472,13 +477,15 @@ int main(int argc, char *argv[]) {
                 goto finish;
         }
 
                 goto finish;
         }
 
+        b->manual_peer_interface = true;
+
         r = sd_bus_start(b);
         if (r < 0) {
                 log_error("Failed to start bus client: %s", strerror(-r));
                 goto finish;
         }
 
         r = sd_bus_start(b);
         if (r < 0) {
                 log_error("Failed to start bus client: %s", strerror(-r));
                 goto finish;
         }
 
-        r = rename_service(b);
+        r = rename_service(a, b);
         if (r < 0)
                 log_debug("Failed to rename process: %s", strerror(-r));
 
         if (r < 0)
                 log_debug("Failed to rename process: %s", strerror(-r));
 
index 321070d..7c92293 100644 (file)
@@ -163,6 +163,7 @@ struct sd_bus {
         bool nodes_modified:1;
         bool trusted:1;
         bool fake_creds_valid:1;
         bool nodes_modified:1;
         bool trusted:1;
         bool fake_creds_valid:1;
+        bool manual_peer_interface:1;
 
         int use_memfd;
 
 
         int use_memfd;
 
index fe2d329..43be1de 100644 (file)
@@ -2072,6 +2072,9 @@ static int process_builtin(sd_bus *bus, sd_bus_message *m) {
         assert(bus);
         assert(m);
 
         assert(bus);
         assert(m);
 
+        if (bus->manual_peer_interface)
+                return 0;
+
         if (m->header->type != SD_BUS_MESSAGE_METHOD_CALL)
                 return 0;
 
         if (m->header->type != SD_BUS_MESSAGE_METHOD_CALL)
                 return 0;