adding a -p option to openntpd to create a pidfile https://bugs.gentoo.org/show_bug.cgi?id=493082 diff -u -r openntpd-20080406p.orig/ntpd.8 openntpd-20080406p/ntpd.8 --- openntpd-20080406p.orig/ntpd.8 2013-12-01 12:49:49.773116316 -0800 +++ openntpd-20080406p/ntpd.8 2013-12-01 13:27:39.417324497 -0800 @@ -25,6 +25,7 @@ .Bk -words .Op Fl dnSsv .Op Fl f Ar file +.Op Fl p Ar file .Ek .Sh DESCRIPTION The @@ -63,13 +64,16 @@ .Xr ntpd.conf 5 . .Pp The options are as follows: -.Bl -tag -width "-f fileXXX" +.Bl -tag -width "-p fileXXX" .It Fl d Do not daemonize. If this option is specified, .Nm will run in the foreground and log to .Em stderr . +.It Fl p Ar file +Write pid to +.Ar file .It Fl f Ar file Use .Ar file diff -u -r openntpd-20080406p.orig/ntpd.c openntpd-20080406p/ntpd.c --- openntpd-20080406p.orig/ntpd.c 2013-12-01 12:49:49.774116176 -0800 +++ openntpd-20080406p/ntpd.c 2013-12-01 13:31:43.964616270 -0800 @@ -78,7 +78,7 @@ { extern char *__progname; - fprintf(stderr, "usage: %s [-dnSsv] [-f file]\n", __progname); + fprintf(stderr, "usage: %s [-dnSsv] [-f file] [-p file]\n", __progname); exit(1); } @@ -105,7 +105,7 @@ log_init(1); /* log to stderr until daemonized */ res_init(); /* XXX */ - while ((ch = getopt(argc, argv, "df:nsSv")) != -1) { + while ((ch = getopt(argc, argv, "df:np:sSv")) != -1) { switch (ch) { case 'd': lconf.debug = 1; @@ -116,6 +116,9 @@ case 'n': lconf.noaction = 1; break; + case 'p': + lconf.pid_file = optarg; + break; case 's': lconf.settime = 1; break; @@ -157,9 +160,17 @@ reset_adjtime(); if (!lconf.settime) { log_init(lconf.debug); - if (!lconf.debug) + if (!lconf.debug) { if (daemon(1, 0)) fatal("daemon"); + else if (lconf.pid_file != NULL) { + FILE *f = fopen(lconf.pid_file, "w"); + if (f == NULL) + fatal("couldn't open pid file"); + fprintf(f, "%ld\n", (long) getpid()); + fclose(f); + } + } } else timeout = SETTIME_TIMEOUT * 1000; @@ -201,9 +212,17 @@ log_init(lconf.debug); log_debug("no reply received in time, skipping initial " "time setting"); - if (!lconf.debug) + if (!lconf.debug) { if (daemon(1, 0)) fatal("daemon"); + else if (lconf.pid_file != NULL) { + FILE *f = fopen(lconf.pid_file, "w"); + if (f == NULL) + fatal("couldn't open pid file"); + fprintf(f, "%ld\n", (long) getpid()); + fclose(f); + } + } } if (nfds > 0 && (pfd[PFD_PIPE].revents & POLLOUT)) @@ -242,6 +261,8 @@ msgbuf_clear(&ibuf->w); free(ibuf); log_info("Terminating"); + if (lconf.pid_file != NULL) + unlink(lconf.pid_file); return (0); } @@ -316,9 +337,17 @@ memcpy(&d, imsg.data, sizeof(d)); ntpd_settime(d); /* daemonize now */ - if (!lconf->debug) + if (!lconf->debug) { if (daemon(1, 0)) fatal("daemon"); + else if (lconf->pid_file != NULL) { + FILE *f = fopen(lconf->pid_file, "w"); + if (f == NULL) + fatal("couldn't open pid file"); + fprintf(f, "%ld\n", (long) getpid()); + fclose(f); + } + } lconf->settime = 0; break; case IMSG_HOST_DNS: diff -u -r openntpd-20080406p.orig/ntpd.h openntpd-20080406p/ntpd.h --- openntpd-20080406p.orig/ntpd.h 2013-12-01 12:49:49.773116316 -0800 +++ openntpd-20080406p/ntpd.h 2013-12-01 12:54:02.023313872 -0800 @@ -178,6 +178,7 @@ u_int8_t debug; u_int32_t scale; u_int8_t noaction; + char *pid_file; }; struct buf {