1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
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 {
|