chiark / gitweb /
busctl: if no parameter is specified for "busctl status" show credentials of bus...
authorLennart Poettering <lennart@poettering.net>
Tue, 25 Nov 2014 01:11:57 +0000 (02:11 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 25 Nov 2014 13:28:34 +0000 (14:28 +0100)
man/busctl.xml
src/libsystemd/sd-bus/busctl.c

index a4c4227..285725e 100644 (file)
@@ -271,10 +271,13 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>.
       </varlistentry>
 
       <varlistentry>
-        <term><command>status</command> <arg choice="plain"><replaceable>SERVICE</replaceable></arg></term>
+        <term><command>status</command> <arg choice="opt"><replaceable>SERVICE</replaceable></arg></term>
 
         <listitem><para>Show process information and credentials of a
-        bus service.</para></listitem>
+        bus service (if one is specified by its unique or well-known
+        name), a process (if one is specified by its numeric PID), or
+        the owner of the bus (if no parameter is
+        specified).</para></listitem>
       </varlistentry>
 
       <varlistentry>
index 0795472..50291ba 100644 (file)
@@ -1175,20 +1175,29 @@ static int status(sd_bus *bus, char *argv[]) {
 
         assert(bus);
 
-        if (strv_length(argv) != 2) {
-                log_error("Expects one argument.");
+        if (strv_length(argv) > 2) {
+                log_error("Expects no or one argument.");
                 return -EINVAL;
         }
 
-        r = parse_pid(argv[1], &pid);
-        if (r < 0)
-                r = sd_bus_get_name_creds(
+        if (argv[1]) {
+                r = parse_pid(argv[1], &pid);
+                if (r < 0)
+                        r = sd_bus_get_name_creds(
+                                        bus,
+                                        argv[1],
+                                        (arg_augment_creds ? SD_BUS_CREDS_AUGMENT : 0) | _SD_BUS_CREDS_ALL,
+                                        &creds);
+                else
+                        r = sd_bus_creds_new_from_pid(
+                                        &creds,
+                                        pid,
+                                        _SD_BUS_CREDS_ALL);
+        } else
+                r = sd_bus_get_owner_creds(
                                 bus,
-                                argv[1],
                                 (arg_augment_creds ? SD_BUS_CREDS_AUGMENT : 0) | _SD_BUS_CREDS_ALL,
                                 &creds);
-        else
-                r = sd_bus_creds_new_from_pid(&creds, pid, _SD_BUS_CREDS_ALL);
 
         if (r < 0) {
                 log_error("Failed to get credentials: %s", strerror(-r));
@@ -1675,7 +1684,7 @@ static int help(void) {
                "     --augment-creds=BOOL Extend credential data with data read from /proc/$PID\n\n"
                "Commands:\n"
                "  list                    List bus names\n"
-               "  status SERVICE          Show service name status\n"
+               "  status [SERVICE]        Show bus service, process or bus owner credentials\n"
                "  monitor [SERVICE...]    Show bus traffic\n"
                "  capture [SERVICE...]    Capture bus traffic as pcap\n"
                "  tree [SERVICE...]       Show object tree of service\n"