|
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)),
|