summaryrefslogtreecommitdiff
blob: d2ee38504c3e2db8559a337788a733355848f71d (plain)
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 {