From 08ba2f630c8eebd023ae68d8e2abd1e7170468af Mon Sep 17 00:00:00 2001 From: TJ Saunders Date: Sun, 14 May 2017 14:09:23 -0700 Subject: [PATCH] Issue #501: Avoid a spurious "Address already in use" error on startup because we are listening on a local socket twice. --- modules/mod_ctrls.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/modules/mod_ctrls.c b/modules/mod_ctrls.c index 25ea723..8efd8b4 100644 --- a/modules/mod_ctrls.c +++ b/modules/mod_ctrls.c @@ -2,8 +2,7 @@ * ProFTPD: mod_ctrls -- a module implementing the ftpdctl local socket * server, as well as several utility functions for other Controls * modules - * - * Copyright (c) 2000-2016 TJ Saunders + * Copyright (c) 2000-2017 TJ Saunders * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -81,8 +80,6 @@ static ctrls_acl_t ctrls_sock_acl; static unsigned char ctrls_engine = TRUE; -#define CTRLS_LISTEN_FL_REMOVE_SOCKET 0x0001 - /* Necessary prototypes */ static int ctrls_setblock(int sockfd); static int ctrls_setnonblock(int sockfd); @@ -437,7 +434,7 @@ static int ctrls_cls_write(void) { } /* Create a listening local socket */ -static int ctrls_listen(const char *sock_file, int flags) { +static int ctrls_listen(const char *sock_file) { int sockfd = -1, len = 0; struct sockaddr_un sock; #if !defined(SO_PEERCRED) && !defined(HAVE_GETPEEREID) && \ @@ -497,12 +494,10 @@ static int ctrls_listen(const char *sock_file, int flags) { return -1; } - if (flags & CTRLS_LISTEN_FL_REMOVE_SOCKET) { - /* Make sure the path to which we want to bind this socket doesn't already - * exist. - */ - (void) unlink(sock_file); - } + /* Make sure the path to which we want to bind this socket doesn't already + * exist. + */ + (void) unlink(sock_file); /* Fill in the socket structure fields */ memset(&sock, 0, sizeof(sock)); @@ -1206,7 +1201,7 @@ static void ctrls_postparse_ev(const void *event_data, void *user_data) { /* Start listening on the ctrl socket */ PRIVS_ROOT - ctrls_sockfd = ctrls_listen(ctrls_sock_file, CTRLS_LISTEN_FL_REMOVE_SOCKET); + ctrls_sockfd = ctrls_listen(ctrls_sock_file); PRIVS_RELINQUISH /* Start a timer for the checking/processing of the ctrl socket. */ @@ -1298,9 +1293,6 @@ static int ctrls_init(void) { memset(&ctrls_sock_acl, '\0', sizeof(ctrls_acl_t)); ctrls_sock_acl.acl_usrs.allow = ctrls_sock_acl.acl_grps.allow = FALSE; - /* Start listening on the ctrl socket */ - ctrls_sockfd = ctrls_listen(ctrls_sock_file, 0); - pr_event_register(&ctrls_module, "core.restart", ctrls_restart_ev, NULL); pr_event_register(&ctrls_module, "core.shutdown", ctrls_shutdown_ev, NULL); pr_event_register(&ctrls_module, "core.postparse", ctrls_postparse_ev, NULL);