chiark / gitweb /
bus: CREDS and NAMES are optional kdbus metadata now
authorKay Sievers <kay@vrfy.org>
Sun, 17 Nov 2013 21:35:58 +0000 (22:35 +0100)
committerKay Sievers <kay@vrfy.org>
Sun, 17 Nov 2013 21:35:58 +0000 (22:35 +0100)
src/libsystemd-bus/kdbus.h
src/libsystemd-bus/libsystemd-bus.sym
src/libsystemd-bus/sd-bus.c
src/libsystemd-bus/test-bus-kernel.c
src/systemd/sd-bus.h

index 60150748616268052618daa6d198ff6ebdd5dab2..fadb2f2f0c871438008633b8a91c9fe2de602cf5 100644 (file)
@@ -237,8 +237,9 @@ enum {
        KDBUS_HELLO_STARTER             =  1 <<  0,
        KDBUS_HELLO_ACCEPT_FD           =  1 <<  1,
 
-       /* The following have an effect on directed messages only --
-        * not for broadcasts */
+       /* subscription for metadata to attach */
+       KDBUS_HELLO_ATTACH_CREDS        =  1 <<  8,
+       KDBUS_HELLO_ATTACH_NAMES        =  1 <<  9,
        KDBUS_HELLO_ATTACH_COMM         =  1 << 10,
        KDBUS_HELLO_ATTACH_EXE          =  1 << 11,
        KDBUS_HELLO_ATTACH_CMDLINE      =  1 << 12,
index f1abf01638731cd34fe0fa688271b19f6b65dd58..03353f1875058c1bb0cec7820eafbb671062988f 100644 (file)
@@ -26,6 +26,8 @@ global:
         sd_bus_set_server;
         sd_bus_set_anonymous;
         sd_bus_negotiate_fds;
+        sd_bus_negotiate_attach_creds;
+        sd_bus_negotiate_attach_names;
         sd_bus_negotiate_attach_comm;
         sd_bus_negotiate_attach_exe;
         sd_bus_negotiate_attach_cmdline;
index 95469d8263ff52ccd7fdbaf8b5a1e7bf46562f47..2345c734c3a4afc00e0e2907f2a0cc3a5cc06d02 100644 (file)
@@ -264,6 +264,24 @@ _public_ int sd_bus_negotiate_fds(sd_bus *bus, int b) {
         return 0;
 }
 
+_public_ int sd_bus_negotiate_attach_creds(sd_bus *bus, int b) {
+        assert_return(bus, -EINVAL);
+        assert_return(bus->state == BUS_UNSET, -EPERM);
+        assert_return(!bus_pid_changed(bus), -ECHILD);
+
+        SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_CREDS, b);
+        return 0;
+}
+
+_public_ int sd_bus_negotiate_attach_names(sd_bus *bus, int b) {
+        assert_return(bus, -EINVAL);
+        assert_return(bus->state == BUS_UNSET, -EPERM);
+        assert_return(!bus_pid_changed(bus), -ECHILD);
+
+        SET_FLAG(bus->hello_flags, KDBUS_HELLO_ATTACH_NAMES, b);
+        return 0;
+}
+
 _public_ int sd_bus_negotiate_attach_comm(sd_bus *bus, int b) {
         assert_return(bus, -EINVAL);
         assert_return(bus->state == BUS_UNSET, -EPERM);
index 511c547852414d8ff5a3822b3ca41b4794b28f7c..05045028b08aff3878b334783704f746292289a9 100644 (file)
@@ -62,6 +62,8 @@ int main(int argc, char *argv[]) {
         r = sd_bus_set_address(b, address);
         assert_se(r >= 0);
 
+        assert_se(sd_bus_negotiate_attach_creds(a, 1) >= 0);
+        assert_se(sd_bus_negotiate_attach_names(a, 1) >= 0);
         assert_se(sd_bus_negotiate_attach_comm(a, 1) >= 0);
         assert_se(sd_bus_negotiate_attach_exe(a, 1) >= 0);
         assert_se(sd_bus_negotiate_attach_cmdline(a, 1) >= 0);
@@ -70,6 +72,8 @@ int main(int argc, char *argv[]) {
         assert_se(sd_bus_negotiate_attach_selinux_context(a, 1) >= 0);
         assert_se(sd_bus_negotiate_attach_audit(a, 1) >= 0);
 
+        assert_se(sd_bus_negotiate_attach_creds(b, 1) >= 0);
+        assert_se(sd_bus_negotiate_attach_names(b, 1) >= 0);
         assert_se(sd_bus_negotiate_attach_comm(b, 1) >= 0);
         assert_se(sd_bus_negotiate_attach_exe(b, 1) >= 0);
         assert_se(sd_bus_negotiate_attach_cmdline(b, 1) >= 0);
index 61f232c79b4793246d24860128cf271d5f64246d..cff4e539d37b0dfcfffbafad0fa39e8e1bb90bbc 100644 (file)
@@ -73,6 +73,8 @@ int sd_bus_set_bus_client(sd_bus *bus, int b);
 int sd_bus_set_server(sd_bus *bus, int b, sd_id128_t server_id);
 int sd_bus_set_anonymous(sd_bus *bus, int b);
 int sd_bus_negotiate_fds(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_creds(sd_bus *bus, int b);
+int sd_bus_negotiate_attach_names(sd_bus *bus, int b);
 int sd_bus_negotiate_attach_comm(sd_bus *bus, int b);
 int sd_bus_negotiate_attach_exe(sd_bus *bus, int b);
 int sd_bus_negotiate_attach_cmdline(sd_bus *bus, int b);