From ecb0d9e54ee87c488923372e5a0ccb7c052fbce1 Mon Sep 17 00:00:00 2001 From: Quentin Rameau Date: Mon, 24 Jul 2017 17:43:35 +0200 Subject: [PATCH] Do not remove existing socket file Check for its presence and bail out if found. If the socket file is present, either a server is already bound to it, or the last one errored out and we'd want to inspect this. Also it could be an unrelated file given by error. --- quark.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/quark.c b/quark.c index 11db5be..a201f54 100644 --- a/quark.c +++ b/quark.c @@ -938,10 +938,8 @@ getusock(char *udsname, uid_t uid, gid_t gid) } memcpy(addr.sun_path, udsname, udsnamelen + 1); - unlink(udsname); - if (bind(insock, (const struct sockaddr *)&addr, sizeof(addr)) < 0) { - die("%s: bind: %s\n", argv0, strerror(errno)); + die("%s: bind %s: %s\n", argv0, udsname, strerror(errno)); } if (listen(insock, SOMAXCONN) < 0) { @@ -1017,6 +1015,11 @@ main(int argc, char *argv[]) usage(); } + if (udsname && (!access(udsname, F_OK) || errno != ENOENT)) { + die("%s: socket file: %s\n", + argv0, errno ? strerror(errno) : "file exists"); + } + /* compile and check the supplied vhost regexes */ if (vhosts) { for (i = 0; i < LEN(vhost); i++) {