summaryrefslogtreecommitdiff
path: root/src/basic/socket-label.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2017-12-27 16:59:44 +0100
committerLennart Poettering <lennart@poettering.net>2018-01-05 13:55:08 +0100
commit706d7c27ad12098a44d83330eab1aef8f8ed12dc (patch)
tree6b85916543139934b059df7a4dc6321c8ea79c2a /src/basic/socket-label.c
parent294d46f138e67f9e1bfb18f5ec1b009a4a9d5292 (diff)
downloadsystemd-706d7c27ad12098a44d83330eab1aef8f8ed12dc.tar.gz
socket-label: tweak socket_address_listen() a bit
This changes two things when binding to AF_UNIX file system sockets: 1. When wethe socket already exists in the fs, and unlink() on it fails, don't bother to bind() a second time: since nothing changed it won't work either. 2. Also use SELinux-aware bind() for the second attempt.
Diffstat (limited to 'src/basic/socket-label.c')
-rw-r--r--src/basic/socket-label.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/basic/socket-label.c b/src/basic/socket-label.c
index 448265b1cd..e67a5cfe6a 100644
--- a/src/basic/socket-label.c
+++ b/src/basic/socket-label.c
@@ -124,10 +124,13 @@ int socket_address_listen(
r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size);
if (r == -EADDRINUSE) {
/* Unlink and try again */
- (void) unlink(p);
- if (bind(fd, &a->sockaddr.sa, a->size) < 0)
- return -errno;
- } else if (r < 0)
+
+ if (unlink(p) < 0)
+ return r; /* didn't work, return original error */
+
+ r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size);
+ }
+ if (r < 0)
return r;
}
} else {