summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-ftp/proftpd/files/proftpd-1.3.0-mod_ctrls_sighup.patch')
-rw-r--r--net-ftp/proftpd/files/proftpd-1.3.0-mod_ctrls_sighup.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/net-ftp/proftpd/files/proftpd-1.3.0-mod_ctrls_sighup.patch b/net-ftp/proftpd/files/proftpd-1.3.0-mod_ctrls_sighup.patch
new file mode 100644
index 000000000000..17bd69b17749
--- /dev/null
+++ b/net-ftp/proftpd/files/proftpd-1.3.0-mod_ctrls_sighup.patch
@@ -0,0 +1,99 @@
+--- modules/mod_ctrls.c 11 Nov 2005 21:05:32 -0000 1.30
++++ modules/mod_ctrls.c 23 May 2006 17:31:51 -0000
+@@ -3,7 +3,7 @@
+ * server, as well as several utility functions for other Controls
+ * modules
+ *
+- * Copyright (c) 2000-2005 TJ Saunders
++ * Copyright (c) 2000-2006 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
+@@ -34,7 +34,7 @@
+ #include "privs.h"
+ #include "mod_ctrls.h"
+
+-#define MOD_CTRLS_VERSION "mod_ctrls/0.9.3"
++#define MOD_CTRLS_VERSION "mod_ctrls/0.9.4"
+
+ /* Master daemon in standalone mode? (from src/main.c) */
+ extern unsigned char is_master;
+@@ -518,7 +518,7 @@
+ } else if (res == PR_LOG_WRITABLE_DIR) {
+ pr_log_pri(PR_LOG_NOTICE, MOD_CTRLS_VERSION
+ ": unable to open ControlsLog '%s': "
+- "containing directory is world writeable", ctrls_logname);
++ "containing directory is world writable", ctrls_logname);
+
+ } else if (res == PR_LOG_SYMLINK) {
+ pr_log_pri(PR_LOG_NOTICE, MOD_CTRLS_VERSION
+@@ -1476,7 +1476,7 @@
+
+ if (res == -2)
+ CONF_ERROR(cmd, pstrcat(cmd->tmp_pool,
+- "unable to log to a world-writeable directory", NULL));
++ "unable to log to a world-writable directory", NULL));
+ }
+
+ return HANDLED(cmd);
+@@ -1506,10 +1506,12 @@
+ CONF_ERROR(cmd, "must be an absolute path");
+
+ /* Close the socket. */
+- pr_log_debug(DEBUG3, MOD_CTRLS_VERSION ": closing ctrls socket '%s'",
+- ctrls_sock_file);
+- close(ctrls_sockfd);
+- ctrls_sockfd = -1;
++ if (ctrls_sockfd >= 0) {
++ pr_log_debug(DEBUG3, MOD_CTRLS_VERSION ": closing ctrls socket '%s' (%d)",
++ ctrls_sock_file, ctrls_sockfd);
++ close(ctrls_sockfd);
++ ctrls_sockfd = -1;
++ }
+
+ /* Change the path. */
+ if (strcmp(cmd->argv[1], ctrls_sock_file) != 0)
+@@ -1608,9 +1610,28 @@
+ PRIVS_ROOT
+ ctrls_sockfd = ctrls_listen(ctrls_sock_file);
+ PRIVS_RELINQUISH
+- if (ctrls_sockfd < 0)
++ if (ctrls_sockfd < 0) {
+ pr_log_pri(PR_LOG_NOTICE, "notice: unable to listen to local socket: %s",
+ strerror(errno));
++
++ } else {
++ /* Ensure that the listen socket used is not one of the major three
++ * (stdin, stdout, or stderr).
++ */
++ if (ctrls_sockfd < 3) {
++ if (dup2(ctrls_sockfd, 3) < 0) {
++ pr_log_pri(PR_LOG_NOTICE, MOD_CTRLS_VERSION
++ ": error duplicating listen socket: %s", strerror(errno));
++ (void) close(ctrls_sockfd);
++ ctrls_sockfd = -1;
++
++ } else {
++ (void) close(ctrls_sockfd);
++ ctrls_sockfd = 3;
++ }
++ }
++ }
++
+ }
+
+ static void ctrls_restart_ev(const void *event_data, void *user_data) {
+@@ -1633,10 +1654,11 @@
+ cl_list = NULL;
+ cl_listlen = 0;
+
+- pr_log_debug(DEBUG3, MOD_CTRLS_VERSION ": closing ctrls socket '%s'",
+- ctrls_sock_file);
++ pr_log_debug(DEBUG3, MOD_CTRLS_VERSION ": closing ctrls socket '%s' (%d)",
++ ctrls_sock_file, ctrls_sockfd);
+ close(ctrls_sockfd);
+ ctrls_sockfd = -1;
++
+ ctrls_closelog();
+
+ /* Clear the existing pool */