Michal Schmidt 14c310
From 2216ee3d049dda5d1a12fec5b862b101de355d43 Mon Sep 17 00:00:00 2001
Michal Schmidt 14c310
From: Lennart Poettering <lennart@poettering.net>
Michal Schmidt 14c310
Date: Wed, 14 Mar 2012 03:07:26 +0100
Michal Schmidt 14c310
Subject: [PATCH] socket: make sure that the name for per-connection services
Michal Schmidt 14c310
 are unique
Michal Schmidt 14c310
Michal Schmidt 14c310
If a client connects to us repeatedly always using the same source port
Michal Schmidt 14c310
and we instantiate a service for the incoming connection this might
Michal Schmidt 14c310
clash with an old instance. Hence, include the connection number, the
Michal Schmidt 14c310
same way we do it for AF_UNIX to make connections unique.
Michal Schmidt 14c310
Michal Schmidt 14c310
https://bugs.freedesktop.org/show_bug.cgi?id=45297
Michal Schmidt 14c310
(cherry picked from commit 77b088c211a0939cb94969b487e5746bb05d12ae)
Michal Schmidt 14c310
---
Michal Schmidt 14c310
 src/socket.c |    9 ++++++---
Michal Schmidt 14c310
 1 files changed, 6 insertions(+), 3 deletions(-)
Michal Schmidt 14c310
Michal Schmidt 14c310
diff --git a/src/socket.c b/src/socket.c
Michal Schmidt 14c310
index b40b7a1..22e88b6 100644
Michal Schmidt 14c310
--- a/src/socket.c
Michal Schmidt 14c310
+++ b/src/socket.c
Michal Schmidt 14c310
@@ -560,7 +560,8 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
Michal Schmidt 14c310
                         b = ntohl(remote.in.sin_addr.s_addr);
Michal Schmidt 14c310
 
Michal Schmidt 14c310
                 if (asprintf(&r,
Michal Schmidt 14c310
-                             "%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
Michal Schmidt 14c310
+                             "%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
Michal Schmidt 14c310
+                             nr,
Michal Schmidt 14c310
                              a >> 24, (a >> 16) & 0xFF, (a >> 8) & 0xFF, a & 0xFF,
Michal Schmidt 14c310
                              ntohs(local.in.sin_port),
Michal Schmidt 14c310
                              b >> 24, (b >> 16) & 0xFF, (b >> 8) & 0xFF, b & 0xFF,
Michal Schmidt 14c310
@@ -582,7 +583,8 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
Michal Schmidt 14c310
                                 *b = remote.in6.sin6_addr.s6_addr+12;
Michal Schmidt 14c310
 
Michal Schmidt 14c310
                         if (asprintf(&r,
Michal Schmidt 14c310
-                                     "%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
Michal Schmidt 14c310
+                                     "%u-%u.%u.%u.%u:%u-%u.%u.%u.%u:%u",
Michal Schmidt 14c310
+                                     nr,
Michal Schmidt 14c310
                                      a[0], a[1], a[2], a[3],
Michal Schmidt 14c310
                                      ntohs(local.in6.sin6_port),
Michal Schmidt 14c310
                                      b[0], b[1], b[2], b[3],
Michal Schmidt 14c310
@@ -592,7 +594,8 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
Michal Schmidt 14c310
                         char a[INET6_ADDRSTRLEN], b[INET6_ADDRSTRLEN];
Michal Schmidt 14c310
 
Michal Schmidt 14c310
                         if (asprintf(&r,
Michal Schmidt 14c310
-                                     "%s:%u-%s:%u",
Michal Schmidt 14c310
+                                     "%u-%s:%u-%s:%u",
Michal Schmidt 14c310
+                                     nr,
Michal Schmidt 14c310
                                      inet_ntop(AF_INET6, &local.in6.sin6_addr, a, sizeof(a)),
Michal Schmidt 14c310
                                      ntohs(local.in6.sin6_port),
Michal Schmidt 14c310
                                      inet_ntop(AF_INET6, &remote.in6.sin6_addr, b, sizeof(b)),