X-Git-Url: https://git.distorted.org.uk/~mdw/fwd/blobdiff_plain/7481fc9c5a603e35a6972c0be07d18d507e5dd50..4166ea7c41cac762e5e318567a4f993d8442d0a7:/fw.c diff --git a/fw.c b/fw.c index 59bc18f..85e6573 100644 --- a/fw.c +++ b/fw.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: fw.c,v 1.17 2004/04/08 01:36:25 mdw Exp $ + * $Id$ * * Port forwarding thingy * @@ -486,7 +486,7 @@ File source and target\n\ FILE ::= `file' [`.'] FSPEC [`,' FSPEC]\n\ FSPEC ::= FD-SPEC | NAME-SPEC | NULL-SPEC\n\ FD-SPEC ::= [[`:']`fd'[`:']] NUMBER|`stdin'|`stdout'\n\ - NAME-SPEC ::= [[`:']`file'[`:']] FILE-NAME\n\ + NAME-SPEC ::= [[`:']`name'[`:']] FILE-NAME\n\ FILE-NAME ::= PATH-SEQ | [ PATH-SEQ ]\n\ PATH-SEQ ::= PATH-ELT | PATH-SEQ PATH-ELT\n\ PATH-ELT ::= `/' | WORD\n\ @@ -577,6 +577,7 @@ int main(int argc, char *argv[]) scanner sc; uid_t drop = -1; gid_t dropg = -1; + const char *pidfile = 0; conffile *cf, **cff = &conffiles; #define f_bogus 1u @@ -620,6 +621,7 @@ int main(int argc, char *argv[]) { "file", OPTF_ARGREQ, 0, 'f' }, { "fork", 0, 0, 'd' }, { "daemon", 0, 0, 'd' }, + { "pidfile", OPTF_ARGREQ, 0, 'p' }, { "syslog", 0, 0, 'l' }, { "log", 0, 0, 'l' }, { "quiet", 0, 0, 'q' }, @@ -632,7 +634,7 @@ int main(int argc, char *argv[]) { 0, 0, 0, 0 } }; - int i = mdwopt(argc, argv, "+hvu GO f:dls:g:", opts, 0, 0, 0); + int i = mdwopt(argc, argv, "+hvu" "GO" "f:dp:ls:g:", opts, 0, 0, 0); if (i < 0) break; @@ -675,6 +677,9 @@ int main(int argc, char *argv[]) case 'd': f |= f_fork; break; + case 'p': + pidfile = optarg; + break; case 'l': f |= f_syslog; break; @@ -786,6 +791,18 @@ int main(int argc, char *argv[]) if (kid != 0) _exit(0); } + if (pidfile) { + FILE *fp = fopen(pidfile, "w"); + if (!fp) { + die(EXIT_FAILURE, "couldn't create pidfile `%s': %s", + pidfile, strerror(errno)); + } + fprintf(fp, "%lu\n", (unsigned long)getpid()); + if (fflush(fp) || ferror(fp) || fclose(fp)) { + die(EXIT_FAILURE, "couldn't write pidfile `%s': %s", + pidfile, strerror(errno)); + } + } if (f & f_syslog) { flags |= FW_SYSLOG;