diff --git a/src/anet.c b/src/anet.c index 3e305a200..b65301243 100644 --- a/src/anet.c +++ b/src/anet.c @@ -479,6 +479,10 @@ int anetUnixServer(char *err, char *path, mode_t perm, int backlog) int s; struct sockaddr_un sa; + if (strlen(path) > sizeof(sa.sun_path)-1) { + anetSetError(err,"unix socket path too long (%zu), must be under %zu", strlen(path), sizeof(sa.sun_path)); + return ANET_ERR; + } if ((s = anetCreateSocket(err,AF_LOCAL)) == ANET_ERR) return ANET_ERR; diff --git a/src/server.c b/src/server.c index d2e4ec661..0abf20dcd 100644 --- a/src/server.c +++ b/src/server.c @@ -2281,7 +2281,7 @@ void initServer(void) { server.sofd = anetUnixServer(server.neterr,server.unixsocket, (mode_t)server.unixsocketperm, server.tcp_backlog); if (server.sofd == ANET_ERR) { - serverLog(LL_WARNING, "Opening Unix socket: %s", server.neterr); + serverLog(LL_WARNING, "Failed opening Unix socket: %s", server.neterr); exit(1); } anetNonBlock(NULL,server.sofd); @@ -3518,7 +3518,8 @@ void closeListeningSockets(int unlink_unix_socket) { for (j = 0; j < server.cfd.count; j++) close(server.cfd.fd[j]); if (unlink_unix_socket && server.unixsocket) { serverLog(LL_NOTICE,"Removing the unix socket file."); - unlink(server.unixsocket); /* don't care if this fails */ + if (unlink(server.unixsocket) != 0) + serverLog(LL_WARNING,"Error removing the unix socket file: %s",strerror(errno)); } }