chiark / gitweb /
unit: include peer identity in description of per-connection socket-activated services
authorLennart Poettering <lennart@poettering.net>
Tue, 24 Dec 2013 20:18:21 +0000 (21:18 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 25 Dec 2013 00:29:55 +0000 (01:29 +0100)
src/core/service.c
src/shared/socket-util.c

index 4eb3d9e6688d1ff4990dc30a08d424f8001b2135..8097e26b0034bac306813b92d4e26815ad8e7d6d 100644 (file)
@@ -3656,6 +3656,8 @@ static void service_bus_name_owner_change(
 }
 
 int service_set_socket_fd(Service *s, int fd, Socket *sock) {
+        _cleanup_free_ char *peer = NULL;
+        int r;
 
         assert(s);
         assert(fd >= 0);
@@ -3673,6 +3675,23 @@ int service_set_socket_fd(Service *s, int fd, Socket *sock) {
         if (s->state != SERVICE_DEAD)
                 return -EAGAIN;
 
+        if (getpeername_pretty(fd, &peer) >= 0) {
+
+                if (UNIT(s)->description) {
+                        _cleanup_free_ char *a;
+
+                        a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
+                        if (!a)
+                                return -ENOMEM;
+
+                        r = unit_set_description(UNIT(s), a);
+                }  else
+                        r = unit_set_description(UNIT(s), peer);
+
+                if (r < 0)
+                        return r;
+        }
+
         s->socket_fd = fd;
 
         unit_ref_set(&s->accept_socket, UNIT(sock));
index 45ada7eb3ff6ee04d314a8c583edb82a8bec9911..4700b3bc9950a49c1fee8c19866e3b3fa1ee37c1 100644 (file)
@@ -422,8 +422,7 @@ const char* socket_address_get_path(const SocketAddress *a) {
 }
 
 bool socket_ipv6_is_supported(void) {
-        char *l = 0;
-        bool enabled;
+        _cleanup_free_ char *l = NULL;
 
         if (access("/sys/module/ipv6", F_OK) != 0)
                 return 0;
@@ -433,10 +432,7 @@ bool socket_ipv6_is_supported(void) {
                 return 1;
 
         /* If module was loaded with disable=1 no IPv6 available */
-        enabled = l[0] == '0';
-        free(l);
-
-        return enabled;
+        return l[0] == '0';
 }
 
 bool socket_address_matches_fd(const SocketAddress *a, int fd) {