From: Alan T. DeKok Date: Mon, 14 Sep 2015 16:02:37 +0000 (-0400) Subject: Try to open client socket in fr_server_domain_socket_perm() X-Git-Tag: release_3_0_10~100 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00cb830b014df2b5fd94783377ea1ade50a841c8;p=thirdparty%2Ffreeradius-server.git Try to open client socket in fr_server_domain_socket_perm() Just like in fr_server_domain_socket_peercred() --- diff --git a/src/main/command.c b/src/main/command.c index 8242e41c055..99fa117d950 100644 --- a/src/main/command.c +++ b/src/main/command.c @@ -466,6 +466,7 @@ static int fr_server_domain_socket_perm(char const *path, uid_t uid, gid_t gid) */ } else { int ret; + int client_fd; ret = fstat(dir_fd, &st); if (ret < 0) { @@ -516,7 +517,19 @@ static int fr_server_domain_socket_perm(char const *path, uid_t uid, gid_t gid) "permissions are %s (%s)", str_need, oct_need, str_have, oct_have); goto error; } + + /* + * Check if a server is already listening on the + * socket? + */ + client_fd = fr_socket_client_unix(path, false); + if (client_fd >= 0) { + fr_strerror_printf("Control socket '%s' is already in use", path); + close(client_fd); + return -1; + } } + name = strrchr(path, FR_DIR_SEP); if (!name) { fr_strerror_printf("Can't determine socket name");