summaryrefslogtreecommitdiff
path: root/ftp/ftpproxy/files/patch-src_daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'ftp/ftpproxy/files/patch-src_daemon.c')
-rw-r--r--ftp/ftpproxy/files/patch-src_daemon.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/ftp/ftpproxy/files/patch-src_daemon.c b/ftp/ftpproxy/files/patch-src_daemon.c
new file mode 100644
index 000000000000..ec3d1c027604
--- /dev/null
+++ b/ftp/ftpproxy/files/patch-src_daemon.c
@@ -0,0 +1,72 @@
+--- src/daemon.c.orig 2003-10-26 22:10:19 UTC
++++ src/daemon.c
+@@ -33,6 +33,7 @@
+ #include <signal.h>
+ #include <sys/wait.h>
+ #include <pwd.h>
++#include <err.h>
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
+@@ -51,20 +52,35 @@
+
+ int acceptloop(int sock)
+ {
+- int connect, pid, len;
++ int connect, pid, otherpid;
++ socklen_t len;
+ struct sockaddr_in client;
+
+ /*
+ * Go into background.
+ */
+
+- if (debug != 0)
+- ; /* Do not fork in debug mode */
++ pfh = NULL;
+
+- else if ((pid = fork()) > 0)
+- exit (0);
++ if (debug == 0) {
++ pfh = pidfile_open(pidfile, 0600, &otherpid);
++ if (pfh == NULL) {
++ if (errno == EEXIST) {
++ errx(EXIT_FAILURE, "ftp.proxy already running, pid %jd.",
++ (intmax_t)otherpid);
++ }
++ warnx("Cannot open or create pid file %s", pidfile);
++ }
++ if (daemon(0, 0) == -1) {
++ warnx("Cannot daemonize");
++ pidfile_remove(pfh);
++ exit(EXIT_FAILURE);
++ }
++ pidfile_write(pfh);
++ }
+
+ fprintf (stderr, "\nstarting ftp.proxy %s in daemon mode ...\n", VERSION);
++
+ while (1) {
+
+ /*
+@@ -82,7 +98,7 @@ int acceptloop(int sock)
+
+ if ((pid = fork()) < 0) {
+ fprintf (stderr, "%04X: can't fork process: %s\n", getpid(), strerror(errno));
+- exit (1);
++ exit(EXIT_FAILURE);
+ }
+ else if (pid == 0) {
+ int optlen;
+@@ -112,7 +128,9 @@ int acceptloop(int sock)
+
+ close (1);
+ fprintf (stderr, "%04X: terminating\n", getpid());
+-
+- exit (0);
++ if (pfh != NULL) {
++ pidfile_remove(pfh);
++ }
++ exit (EXIT_SUCCESS);
+ }
+