diff -ruN ../vsftpd-2.0.7.orig/parseconf.c ./parseconf.c --- ../vsftpd-2.0.7.orig/parseconf.c 2008-08-01 18:35:33.000000000 +0300 +++ ./parseconf.c 2008-08-01 18:35:30.000000000 +0300 @@ -149,6 +149,7 @@ { "secure_chroot_dir", &tunable_secure_chroot_dir }, { "ftp_username", &tunable_ftp_username }, { "chown_username", &tunable_chown_username }, + { "pid_file", &tunable_pid_file }, { "xferlog_file", &tunable_xferlog_file }, { "vsftpd_log_file", &tunable_vsftpd_log_file }, { "message_file", &tunable_message_file }, diff -ruN ../vsftpd-2.0.7.orig/standalone.c ./standalone.c --- ../vsftpd-2.0.7.orig/standalone.c 2008-08-01 18:35:34.000000000 +0300 +++ ./standalone.c 2008-08-01 18:46:36.000000000 +0300 @@ -7,6 +7,8 @@ * Code to listen on the network and launch children servants. */ +#include + #include "standalone.h" #include "parseconf.h" @@ -49,7 +51,23 @@ int forkret = vsf_sysutil_fork(); if (forkret > 0) { - /* Parent, just exit */ + /* Parent, write pidfile (if nessesary) and exit. */ + if (tunable_pid_file) + { + FILE* pidfile = fopen(tunable_pid_file, "w"); + if (NULL != pidfile) + { + if (0 > fprintf(pidfile, "%d\n", forkret)) + { + die2("failed write to pidfile:", tunable_pid_file); + } + fclose(pidfile); + } + else + { + die2("cannot open pidfile:", tunable_pid_file); + } + } vsf_sysutil_exit(0); } /* Son, close standard FDs to avoid SSH hang-on-exit */ diff -ruN ../vsftpd-2.0.7.orig/tunables.c ./tunables.c --- ../vsftpd-2.0.7.orig/tunables.c 2008-08-01 18:35:33.000000000 +0300 +++ ./tunables.c 2008-08-01 18:55:17.000000000 +0300 @@ -107,6 +107,7 @@ const char* tunable_secure_chroot_dir; const char* tunable_ftp_username; const char* tunable_chown_username; +const char* tunable_pid_file = 0; const char* tunable_xferlog_file; const char* tunable_vsftpd_log_file; const char* tunable_message_file; diff -ruN ../vsftpd-2.0.7.orig/tunables.h ./tunables.h --- ../vsftpd-2.0.7.orig/tunables.h 2008-08-01 18:35:34.000000000 +0300 +++ ./tunables.h 2008-08-01 18:35:31.000000000 +0300 @@ -101,6 +101,7 @@ extern const char* tunable_secure_chroot_dir; extern const char* tunable_ftp_username; extern const char* tunable_chown_username; +extern const char* tunable_pid_file; extern const char* tunable_xferlog_file; extern const char* tunable_vsftpd_log_file; extern const char* tunable_message_file; diff -ruN ../vsftpd-2.0.7.orig/vsftpd.conf.5 ./vsftpd.conf.5 --- ../vsftpd-2.0.7.orig/vsftpd.conf.5 2008-08-01 18:35:34.000000000 +0300 +++ ./vsftpd.conf.5 2008-08-01 18:35:31.000000000 +0300 @@ -923,6 +923,13 @@ Default: (none - the address is taken from the incoming connected socket) .TP +.B pid_file +This option has efect only if +.BR background +is set. It writes pid of running daemon to file at the specified path. + +Default: (none) (no pidfile is created) +.TP .B rsa_cert_file This option specifies the location of the RSA certificate to use for SSL encrypted connections.