summaryrefslogtreecommitdiffstats
path: root/src/systemctl/systemctl.c
diff options
context:
space:
mode:
authorOleksii Shevchuk <alxchk@gmail.com>2013-04-01 22:09:45 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-04-02 05:43:48 +0200
commit67419600875f3dae2182e3f92640bae4c8cd1f2f (patch)
treed1dc0f4f298baf98637a18d762343435964141ad /src/systemctl/systemctl.c
parentDo no isolate in case of emergency or severe problems (diff)
downloadsystemd-67419600875f3dae2182e3f92640bae4c8cd1f2f.tar.xz
systemd-67419600875f3dae2182e3f92640bae4c8cd1f2f.zip
Add Listen* to dbus properties
sockets.socket - Test Loaded: loaded (/home/alxchk/.config/systemd/user/sockets.socket; static) Active: inactive (dead) Listen: Stream: /tmp/stream1 Stream: @stream4 Stream: [::]:9999 Stream: 127.0.0.2:9996 Stream: [::1]:9996 Datagram: /tmp/stream2 Datagram: @stream5 Datagram: [::]:9998 Datagram: 127.0.0.2:9995 Datagram: [::1]:9995 SequentialPacket: @stream6 SequentialPacket: /tmp/stream3 FIFO: /tmp/fifo1 Special: /dev/input/event9 Netlink: kobject-uevent 0 MessageQueue: /msgqueue1 [zj: - minor cleanups, - free i.listen, - remove sorting, because the order or sockets matters.]
Diffstat (limited to '')
-rw-r--r--src/systemctl/systemctl.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 6bd2e34f58..4f4d334794 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2255,6 +2255,8 @@ typedef struct UnitStatusInfo {
unsigned n_connections;
bool accept;
+ char **listen;
+
/* Device */
const char *sysfs_path;
@@ -2386,6 +2388,19 @@ static void print_status_info(UnitStatusInfo *i) {
}
}
+ if (!strv_isempty(i->listen)) {
+ char **t;
+ bool first = true;
+
+ STRV_FOREACH(t, i->listen) {
+ if (first) {
+ printf("\t Listen: %s\n", *t);
+ first = false;
+ } else
+ printf("\t %s\n", *t);
+ }
+ }
+
if (i->accept)
printf("\tAccepted: %u; Connected: %u\n", i->n_accepted, i->n_connections);
@@ -2736,6 +2751,37 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
dbus_message_iter_next(&sub);
}
+
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && streq(name, "Listen")) {
+ DBusMessageIter sub, sub2;
+
+ dbus_message_iter_recurse(iter, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ const char *type, *path;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &type, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, false) >= 0) {
+ char * buf, **l;
+ if (asprintf(&buf, "%s: %s", type, path) < 0)
+ return -ENOMEM;
+
+ l = strv_append(i->listen, buf);
+ free(buf);
+
+ if (!l)
+ return -ENOMEM;
+
+ strv_free(i->listen);
+ i->listen = l;
+ }
+
+ dbus_message_iter_next(&sub);
+ }
+
+ return 0;
+
} else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRING &&
streq(name, "Documentation")) {
@@ -2866,6 +2912,7 @@ static int print_property(const char *name, DBusMessageIter *iter) {
DBusMessageIter sub, sub2;
dbus_message_iter_recurse(iter, &sub);
+
while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
const char *type, *path;
@@ -2880,6 +2927,24 @@ static int print_property(const char *name, DBusMessageIter *iter) {
return 0;
+ } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && streq(name, "Listen")) {
+ DBusMessageIter sub, sub2;
+
+ dbus_message_iter_recurse(iter, &sub);
+ while (dbus_message_iter_get_arg_type(&sub) == DBUS_TYPE_STRUCT) {
+ const char *type, *path;
+
+ dbus_message_iter_recurse(&sub, &sub2);
+
+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &type, true) >= 0 &&
+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &path, false) >= 0)
+ printf("Listen%s=%s\n", type, path);
+
+ dbus_message_iter_next(&sub);
+ }
+
+ return 0;
+
} else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRUCT && streq(name, "Timers")) {
DBusMessageIter sub, sub2;
@@ -3055,6 +3120,7 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
}
strv_free(info.documentation);
+ strv_free(info.listen);
if (!streq_ptr(info.active_state, "active") &&
!streq_ptr(info.active_state, "reloading") &&