This reworks a few of the common patches on Debian and Gentoo to be a little nicer, and changes the patches to be per-fix rather than per-file.OPENBSD_5_7
@ -0,0 +1,40 @@ | |||
From 53006c85af7c8b69afa3847e12107588c1460c5a Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 08:58:26 -0600 | |||
Subject: [PATCH 01/12] include time.h for clock_gettime | |||
--- | |||
src/usr.sbin/ntpd/ntpd.c | 1 + | |||
src/usr.sbin/ntpd/util.c | 2 ++ | |||
2 files changed, 3 insertions(+) | |||
diff --git a/src/usr.sbin/ntpd/ntpd.c b/src/usr.sbin/ntpd/ntpd.c | |||
index 4634fae..17ebf67 100644 | |||
--- a/src/usr.sbin/ntpd/ntpd.c | |||
+++ b/src/usr.sbin/ntpd/ntpd.c | |||
@@ -30,6 +30,7 @@ | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
+#include <time.h> | |||
#include <unistd.h> | |||
#include <err.h> | |||
diff --git a/src/usr.sbin/ntpd/util.c b/src/usr.sbin/ntpd/util.c | |||
index 9d78d6e..638dc92 100644 | |||
--- a/src/usr.sbin/ntpd/util.c | |||
+++ b/src/usr.sbin/ntpd/util.c | |||
@@ -17,8 +17,10 @@ | |||
*/ | |||
#include <sys/time.h> | |||
+ | |||
#include <limits.h> | |||
#include <stdio.h> | |||
+#include <time.h> | |||
#include "ntpd.h" | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,47 @@ | |||
From da6f7a99e25c9fa0fca75576eaf29f0e8fe67441 Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 08:59:19 -0600 | |||
Subject: [PATCH 02/12] removed unused libevent header and structures | |||
--- | |||
src/usr.sbin/ntpd/ntpd.h | 10 ---------- | |||
1 file changed, 10 deletions(-) | |||
diff --git a/src/usr.sbin/ntpd/ntpd.h b/src/usr.sbin/ntpd/ntpd.h | |||
index 8095be3..aa9858b 100644 | |||
--- a/src/usr.sbin/ntpd/ntpd.h | |||
+++ b/src/usr.sbin/ntpd/ntpd.h | |||
@@ -28,7 +28,6 @@ | |||
#include <netdb.h> | |||
#include <pwd.h> | |||
#include <stdarg.h> | |||
-#include <event.h> | |||
#include <poll.h> | |||
#include "ntp.h" | |||
@@ -190,14 +189,6 @@ struct ntpd_conf { | |||
u_int8_t filters; | |||
}; | |||
-struct imsgev { | |||
- struct imsgbuf ibuf; | |||
- void (*handler)(int, short, void *); | |||
- struct event ev; | |||
- void *data; | |||
- short events; | |||
-}; | |||
- | |||
struct ctl_show_status { | |||
u_int peercnt; | |||
u_int sensorcnt; | |||
@@ -240,7 +231,6 @@ enum blockmodes { | |||
struct ctl_conn { | |||
TAILQ_ENTRY(ctl_conn) entry; | |||
- struct imsgev iev; | |||
struct imsgbuf ibuf; | |||
}; | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,38 @@ | |||
From 20911c235ab4af36242a9b913bc41a3b1b0958cb Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 09:00:12 -0600 | |||
Subject: [PATCH 03/12] Use LOG_NTP syslog facility. | |||
FreeBSD PR: 114191 | |||
Submitted by: Robert Archer <freebsd@deathbeforedecaf.net> | |||
--- | |||
src/usr.sbin/ntpd/log.c | 6 +++++- | |||
1 file changed, 5 insertions(+), 1 deletion(-) | |||
diff --git a/src/usr.sbin/ntpd/log.c b/src/usr.sbin/ntpd/log.c | |||
index 618f4cc..32575e8 100644 | |||
--- a/src/usr.sbin/ntpd/log.c | |||
+++ b/src/usr.sbin/ntpd/log.c | |||
@@ -26,6 +26,10 @@ | |||
#include "ntpd.h" | |||
+#ifndef LOG_NTP | |||
+#define LOG_NTP LOG_DAEMON | |||
+#endif | |||
+ | |||
int debug; | |||
extern int debugsyslog; | |||
@@ -37,7 +41,7 @@ log_init(int n_debug) | |||
debug = n_debug; | |||
if (!debug) | |||
- openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON); | |||
+ openlog(__progname, LOG_PID | LOG_NDELAY, LOG_NTP); | |||
tzset(); | |||
} | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,34 @@ | |||
From f67a51ea7b11f1082dac77beb632f4d71f397584 Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 09:01:57 -0600 | |||
Subject: [PATCH 04/12] remove unused dns_pid | |||
--- | |||
src/usr.sbin/ntpd/ntp.c | 4 ++-- | |||
1 file changed, 2 insertions(+), 2 deletions(-) | |||
diff --git a/src/usr.sbin/ntpd/ntp.c b/src/usr.sbin/ntpd/ntp.c | |||
index 2eb4285..ddbcedd 100644 | |||
--- a/src/usr.sbin/ntpd/ntp.c | |||
+++ b/src/usr.sbin/ntpd/ntp.c | |||
@@ -79,7 +79,7 @@ ntp_main(int pipe_prnt[2], int fd_ctl, struct ntpd_conf *nconf, | |||
u_int pfd_elms = 0, idx2peer_elms = 0; | |||
u_int listener_cnt, new_cnt, sent_cnt, trial_cnt; | |||
u_int ctl_cnt; | |||
- pid_t pid, dns_pid; | |||
+ pid_t pid; | |||
struct pollfd *pfd = NULL; | |||
struct servent *se; | |||
struct listen_addr *la; | |||
@@ -118,7 +118,7 @@ ntp_main(int pipe_prnt[2], int fd_ctl, struct ntpd_conf *nconf, | |||
close(pipe_prnt[0]); | |||
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pipe_dns) == -1) | |||
fatal("socketpair"); | |||
- dns_pid = ntp_dns(pipe_dns, nconf, pw); | |||
+ ntp_dns(pipe_dns, nconf, pw); | |||
close(pipe_dns[1]); | |||
if (stat(pw->pw_dir, &stb) == -1) | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,34 @@ | |||
From 447c73c470e1157036d8cfc3d3328a5ba48655f3 Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 09:04:08 -0600 | |||
Subject: [PATCH 06/12] EAI_NODATA does not exist everywhere | |||
FreeBSD says it is deprecated and should be removed. | |||
--- | |||
src/usr.sbin/ntpd/config.c | 10 ++++++++-- | |||
1 file changed, 8 insertions(+), 2 deletions(-) | |||
diff --git a/src/usr.sbin/ntpd/config.c b/src/usr.sbin/ntpd/config.c | |||
index b651c62..9fa4c17 100644 | |||
--- a/src/usr.sbin/ntpd/config.c | |||
+++ b/src/usr.sbin/ntpd/config.c | |||
@@ -128,8 +128,14 @@ host_dns(const char *s, struct ntp_addr **hn) | |||
hints.ai_family = PF_UNSPEC; | |||
hints.ai_socktype = SOCK_DGRAM; /* DUMMY */ | |||
error = getaddrinfo(s, NULL, &hints, &res0); | |||
- if (error == EAI_AGAIN || error == EAI_NODATA || error == EAI_NONAME) | |||
- return (0); | |||
+ switch (error) { | |||
+ case EAI_AGAIN: | |||
+#ifdef EAI_NODATA | |||
+ case EAI_NODATA: | |||
+#endif | |||
+ case EAI_NONAME: | |||
+ return (0); | |||
+ } | |||
if (error) { | |||
log_warnx("could not parse \"%s\": %s", s, | |||
gai_strerror(error)); | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,116 @@ | |||
From 0ec5710f4872d4feb8ff96b61d4d4a7ca0fa7b09 Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 09:05:46 -0600 | |||
Subject: [PATCH 07/12] check if rdomain support is available | |||
--- | |||
src/usr.sbin/ntpd/client.c | 4 ++++ | |||
src/usr.sbin/ntpd/parse.y | 2 ++ | |||
src/usr.sbin/ntpd/server.c | 11 ++++++++++- | |||
3 files changed, 16 insertions(+), 1 deletion(-) | |||
diff --git a/src/usr.sbin/ntpd/client.c b/src/usr.sbin/ntpd/client.c | |||
index e59112a..9b9b522 100644 | |||
--- a/src/usr.sbin/ntpd/client.c | |||
+++ b/src/usr.sbin/ntpd/client.c | |||
@@ -142,10 +142,12 @@ client_query(struct ntp_peer *p) | |||
0)) == -1) | |||
fatal("client_query socket"); | |||
+#ifdef SO_RTABLE | |||
if (p->rtable != -1 && | |||
setsockopt(p->query->fd, SOL_SOCKET, SO_RTABLE, | |||
&p->rtable, sizeof(p->rtable)) == -1) | |||
fatal("client_query setsockopt SO_RTABLE"); | |||
+#endif | |||
if (connect(p->query->fd, sa, SA_LEN(sa)) == -1) { | |||
if (errno == ECONNREFUSED || errno == ENETUNREACH || | |||
errno == EHOSTUNREACH || errno == EADDRNOTAVAIL) { | |||
@@ -248,10 +250,12 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) | |||
return (0); | |||
} | |||
+#ifdef SO_RTABLE | |||
if (p->rtable != -1 && | |||
setsockopt(p->query->fd, SOL_SOCKET, SO_RTABLE, &p->rtable, | |||
sizeof(p->rtable)) == -1) | |||
fatal("client_dispatch setsockopt SO_RTABLE"); | |||
+#endif | |||
for (cmsg = CMSG_FIRSTHDR(&somsg); cmsg != NULL; | |||
cmsg = CMSG_NXTHDR(&somsg, cmsg)) { | |||
diff --git a/src/usr.sbin/ntpd/parse.y b/src/usr.sbin/ntpd/parse.y | |||
index fb6e2f1..3f4065f 100644 | |||
--- a/src/usr.sbin/ntpd/parse.y | |||
+++ b/src/usr.sbin/ntpd/parse.y | |||
@@ -313,10 +313,12 @@ weight : WEIGHT NUMBER { | |||
opts.weight = $2; | |||
} | |||
rtable : RTABLE NUMBER { | |||
+#ifdef RT_TABLEID_MAX | |||
if ($2 < 0 || $2 > RT_TABLEID_MAX) { | |||
yyerror("rtable must be between 1 and RT_TABLEID_MAX"); | |||
YYERROR; | |||
} | |||
+#endif | |||
opts.rtable = $2; | |||
} | |||
; | |||
diff --git a/src/usr.sbin/ntpd/server.c b/src/usr.sbin/ntpd/server.c | |||
index 2dbb01f..3c74c24 100644 | |||
--- a/src/usr.sbin/ntpd/server.c | |||
+++ b/src/usr.sbin/ntpd/server.c | |||
@@ -39,7 +39,10 @@ setup_listeners(struct servent *se, struct ntpd_conf *lconf, u_int *cnt) | |||
u_int8_t *a6; | |||
size_t sa6len = sizeof(struct in6_addr); | |||
u_int new_cnt = 0; | |||
- int tos = IPTOS_LOWDELAY, rdomain, fd; | |||
+ int tos = IPTOS_LOWDELAY; | |||
+#ifdef SO_RTABLE | |||
+ int rdomain, fd; | |||
+#endif | |||
TAILQ_FOREACH(lap, &lconf->listen_addrs, entry) { | |||
switch (lap->sa.ss_family) { | |||
@@ -59,6 +62,7 @@ setup_listeners(struct servent *se, struct ntpd_conf *lconf, u_int *cnt) | |||
strlcpy(ifr.ifr_name, ifap->ifa_name, | |||
sizeof(ifr.ifr_name)); | |||
+#ifdef SO_RTABLE | |||
fd = socket(AF_INET, SOCK_DGRAM, 0); | |||
if (ioctl(fd, SIOCGIFRDOMAIN, | |||
(caddr_t)&ifr) == -1) | |||
@@ -69,6 +73,7 @@ setup_listeners(struct servent *se, struct ntpd_conf *lconf, u_int *cnt) | |||
if (lap->rtable != -1 && rdomain != lap->rtable) | |||
continue; | |||
+#endif | |||
if (sa->sa_family == AF_INET && | |||
((struct sockaddr_in *)sa)->sin_addr.s_addr == | |||
@@ -87,7 +92,9 @@ setup_listeners(struct servent *se, struct ntpd_conf *lconf, u_int *cnt) | |||
fatal("setup_listeners calloc"); | |||
memcpy(&la->sa, sa, SA_LEN(sa)); | |||
+#ifdef SO_RTABLE | |||
la->rtable = rdomain; | |||
+#endif | |||
TAILQ_INSERT_TAIL(&lconf->listen_addrs, la, entry); | |||
} | |||
@@ -132,10 +139,12 @@ setup_listeners(struct servent *se, struct ntpd_conf *lconf, u_int *cnt) | |||
IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) == -1) | |||
log_warn("setsockopt IPTOS_LOWDELAY"); | |||
+#ifdef SO_RTABLE | |||
if (la->rtable != -1 && | |||
setsockopt(la->fd, SOL_SOCKET, SO_RTABLE, &la->rtable, | |||
sizeof(la->rtable)) == -1) | |||
fatal("setup_listeners setsockopt SO_RTABLE"); | |||
+#endif | |||
if (bind(la->fd, (struct sockaddr *)&la->sa, | |||
SA_LEN((struct sockaddr *)&la->sa)) == -1) { | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,40 @@ | |||
From c26c6628e7ea92d6f3f1c128db15da199787a1fd Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 09:10:22 -0600 | |||
Subject: [PATCH 08/12] Handle IPv6 DNS records on IPv4 networks more liberally | |||
Rather than fail on IPv4 only networks when seeing an IPv6 DNS record, | |||
just give a warning. | |||
Debian bug ID: 500676. | |||
Original Author: Stefan Praszalowicz <stefan.praszalowicz@avedya.com> | |||
--- | |||
src/usr.sbin/ntpd/client.c | 12 +++++++++--- | |||
1 file changed, 9 insertions(+), 3 deletions(-) | |||
diff --git a/src/usr.sbin/ntpd/client.c b/src/usr.sbin/ntpd/client.c | |||
index 9b9b522..0271068 100644 | |||
--- a/src/usr.sbin/ntpd/client.c | |||
+++ b/src/usr.sbin/ntpd/client.c | |||
@@ -138,9 +138,15 @@ client_query(struct ntp_peer *p) | |||
if (p->query->fd == -1) { | |||
struct sockaddr *sa = (struct sockaddr *)&p->addr->ss; | |||
- if ((p->query->fd = socket(p->addr->ss.ss_family, SOCK_DGRAM, | |||
- 0)) == -1) | |||
- fatal("client_query socket"); | |||
+ p->query->fd = socket(p->addr->ss.ss_family, SOCK_DGRAM, 0); | |||
+ if (p->query->fd == -1) | |||
+ if (errno == EAFNOSUPPORT) { | |||
+ log_warn("client_query socket"); | |||
+ client_nextaddr(p); | |||
+ set_next(p, error_interval()); | |||
+ return (-1); | |||
+ } else | |||
+ fatal("client_query socket"); | |||
#ifdef SO_RTABLE | |||
if (p->rtable != -1 && | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,53 @@ | |||
From 84100327370fec7ef44555c380e09e94b8a21c7c Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Tue, 30 Dec 2014 09:20:03 -0600 | |||
Subject: [PATCH 09/12] update ntpd.conf to indicate OS-dependent options | |||
Also, clarify listening behavior based on a patch from | |||
Dererk <dererk@debian.org> | |||
Debian bug ID: 575705 | |||
--- | |||
src/usr.sbin/ntpd/ntpd.conf.5 | 11 ++++++++--- | |||
1 file changed, 8 insertions(+), 3 deletions(-) | |||
diff --git a/src/usr.sbin/ntpd/ntpd.conf.5 b/src/usr.sbin/ntpd/ntpd.conf.5 | |||
index 3e9b5b4..6315f47 100644 | |||
--- a/src/usr.sbin/ntpd/ntpd.conf.5 | |||
+++ b/src/usr.sbin/ntpd/ntpd.conf.5 | |||
@@ -38,9 +38,14 @@ They are as follows: | |||
.It Xo Ic listen on Ar address | |||
.Op Ic rtable Ar table-id | |||
.Xc | |||
+.Xr ntpd 8 | |||
+has the ability to sync the local clock to remote NTP servers and, if | |||
+this directive is specified, can act as NTP server itself, redistributing the | |||
+local clock. | |||
+.Pp | |||
Specify a local IP address or a hostname the | |||
.Xr ntpd 8 | |||
-daemon should listen on. | |||
+daemon should listen on to enable remote clients synchronization. | |||
If it appears multiple times, | |||
.Xr ntpd 8 | |||
will listen on each given address. | |||
@@ -53,7 +58,7 @@ will listen on all local addresses using the specified routing table. | |||
does not listen on any address by default. | |||
The optional | |||
.Ic rtable | |||
-keyword will specify which routing table to listen on. | |||
+keyword will specify which routing table to listen on, if the operating system supports rdomains. | |||
By default | |||
.Xr ntpd 8 | |||
will listen using the current routing table. | |||
@@ -76,7 +81,7 @@ listen on 127.0.0.1 rtable 4 | |||
.Xc | |||
Specify a timedelta sensor device | |||
.Xr ntpd 8 | |||
-should use. | |||
+should use, if the operating system supports sensors. | |||
The sensor can be specified multiple times: | |||
.Xr ntpd 8 | |||
will use each given sensor that actually exists. | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,150 @@ | |||
From 9a6c847be092266d0cc6d7d1010b614e1253ba65 Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Wed, 31 Dec 2014 08:26:41 -0600 | |||
Subject: [PATCH 10/12] add -p option to create a pid file | |||
This is used in both the Gentoo and Debian ports. | |||
Origin: https://bugs.gentoo.org/show_bug.cgi?id=493082 | |||
--- | |||
src/usr.sbin/ntpd/ntpd.8 | 4 ++++ | |||
src/usr.sbin/ntpd/ntpd.c | 33 ++++++++++++++++++++++++++++----- | |||
src/usr.sbin/ntpd/ntpd.h | 1 + | |||
3 files changed, 33 insertions(+), 5 deletions(-) | |||
diff --git a/src/usr.sbin/ntpd/ntpd.8 b/src/usr.sbin/ntpd/ntpd.8 | |||
index 18b12e8..9eb1fee 100644 | |||
--- a/src/usr.sbin/ntpd/ntpd.8 | |||
+++ b/src/usr.sbin/ntpd/ntpd.8 | |||
@@ -25,6 +25,7 @@ | |||
.Bk -words | |||
.Op Fl dnSsv | |||
.Op Fl f Ar file | |||
+.Op Fl p Ar file | |||
.Ek | |||
.Sh DESCRIPTION | |||
The | |||
@@ -56,6 +57,9 @@ instead of the default | |||
.It Fl n | |||
Configtest mode. | |||
Only check the configuration file for validity. | |||
+.It Fl p Ar file | |||
+Write pid to | |||
+.Ar file | |||
.It Fl S | |||
Do not set the time immediately at startup. | |||
This is the default. | |||
diff --git a/src/usr.sbin/ntpd/ntpd.c b/src/usr.sbin/ntpd/ntpd.c | |||
index 17ebf67..2d5809c 100644 | |||
--- a/src/usr.sbin/ntpd/ntpd.c | |||
+++ b/src/usr.sbin/ntpd/ntpd.c | |||
@@ -84,6 +84,18 @@ sighdlr(int sig) | |||
} | |||
} | |||
+void | |||
+writepid(struct ntpd_conf *lconf) | |||
+{ | |||
+ 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); | |||
+ } | |||
+} | |||
+ | |||
__dead void | |||
usage(void) | |||
{ | |||
@@ -92,7 +104,7 @@ usage(void) | |||
if (strcmp(__progname, "ntpctl") == 0) | |||
fprintf(stderr, "usage: ntpctl [-s all | peers | Sensors | status]\n"); | |||
else | |||
- fprintf(stderr, "usage: %s [-dnSsv] [-f file]\n", | |||
+ fprintf(stderr, "usage: %s [-dnSsv] [-f file] [-p file]\n", | |||
__progname); | |||
exit(1); | |||
} | |||
@@ -123,7 +135,7 @@ main(int argc, char *argv[]) | |||
log_init(1); /* log to stderr until daemonized */ | |||
- while ((ch = getopt(argc, argv, "df:nsSv")) != -1) { | |||
+ while ((ch = getopt(argc, argv, "df:np:sSv")) != -1) { | |||
switch (ch) { | |||
case 'd': | |||
lconf.debug = 1; | |||
@@ -134,6 +146,9 @@ main(int argc, char *argv[]) | |||
case 'n': | |||
lconf.noaction = 1; | |||
break; | |||
+ case 'p': | |||
+ lconf.pid_file = optarg; | |||
+ break; | |||
case 's': | |||
lconf.settime = 1; | |||
break; | |||
@@ -174,9 +189,11 @@ main(int argc, char *argv[]) | |||
reset_adjtime(); | |||
if (!lconf.settime) { | |||
log_init(lconf.debug); | |||
- if (!lconf.debug) | |||
+ if (!lconf.debug) { | |||
if (daemon(1, 0)) | |||
fatal("daemon"); | |||
+ writepid(&lconf); | |||
+ } | |||
} else | |||
timeout = SETTIME_TIMEOUT * 1000; | |||
@@ -223,9 +240,11 @@ main(int argc, char *argv[]) | |||
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"); | |||
+ writepid(&lconf); | |||
+ } | |||
} | |||
if (nfds > 0 && (pfd[PFD_PIPE].revents & POLLOUT)) | |||
@@ -264,6 +283,8 @@ main(int argc, char *argv[]) | |||
msgbuf_clear(&ibuf->w); | |||
free(ibuf); | |||
log_info("Terminating"); | |||
+ if (lconf.pid_file != NULL) | |||
+ unlink(lconf.pid_file); | |||
return (0); | |||
} | |||
@@ -339,9 +360,11 @@ dispatch_imsg(struct ntpd_conf *lconf) | |||
memcpy(&d, imsg.data, sizeof(d)); | |||
ntpd_settime(d); | |||
/* daemonize now */ | |||
- if (!lconf->debug) | |||
+ if (!lconf->debug) { | |||
if (daemon(1, 0)) | |||
fatal("daemon"); | |||
+ writepid(lconf); | |||
+ } | |||
lconf->settime = 0; | |||
timeout = INFTIM; | |||
break; | |||
diff --git a/src/usr.sbin/ntpd/ntpd.h b/src/usr.sbin/ntpd/ntpd.h | |||
index aa9858b..f8d6382 100644 | |||
--- a/src/usr.sbin/ntpd/ntpd.h | |||
+++ b/src/usr.sbin/ntpd/ntpd.h | |||
@@ -187,6 +187,7 @@ struct ntpd_conf { | |||
u_int8_t debug; | |||
u_int8_t noaction; | |||
u_int8_t filters; | |||
+ char *pid_file; | |||
}; | |||
struct ctl_show_status { | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,45 @@ | |||
From 6f091765d6ee996ad679868deb7f196c240c314e Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Wed, 31 Dec 2014 08:31:20 -0600 | |||
Subject: [PATCH 11/12] Fix DNS timeout lookup | |||
Author: Paul B. Henson <henson@acm.org> | |||
Origin: https://bugs.gentoo.org/show_bug.cgi?id=493358 | |||
--- | |||
src/usr.sbin/ntpd/ntpd.c | 6 +++++- | |||
1 file changed, 5 insertions(+), 1 deletion(-) | |||
diff --git a/src/usr.sbin/ntpd/ntpd.c b/src/usr.sbin/ntpd/ntpd.c | |||
index 2d5809c..b45f4ca 100644 | |||
--- a/src/usr.sbin/ntpd/ntpd.c | |||
+++ b/src/usr.sbin/ntpd/ntpd.c | |||
@@ -123,6 +123,7 @@ main(int argc, char *argv[]) | |||
int pipe_chld[2]; | |||
struct passwd *pw; | |||
extern char *__progname; | |||
+ time_t start_time; | |||
if (strcmp(__progname, "ntpctl") == 0) { | |||
ctl_main (argc, argv); | |||
@@ -222,6 +223,8 @@ main(int argc, char *argv[]) | |||
fatal(NULL); | |||
imsg_init(ibuf, pipe_chld[0]); | |||
+ start_time = getmonotime(); | |||
+ | |||
while (quit == 0) { | |||
pfd[PFD_PIPE].fd = ibuf->fd; | |||
pfd[PFD_PIPE].events = POLLIN; | |||
@@ -234,7 +237,8 @@ main(int argc, char *argv[]) | |||
quit = 1; | |||
} | |||
- if (nfds == 0 && lconf.settime) { | |||
+ if (lconf.settime && | |||
+ (nfds == 0 || getmonotime() > start_time + SETTIME_TIMEOUT)) { | |||
lconf.settime = 0; | |||
timeout = INFTIM; | |||
log_init(lconf.debug); | |||
-- | |||
1.9.1 | |||
@ -0,0 +1,34 @@ | |||
From 47a111a45a541316d7ff9d844362b901f24f41e1 Mon Sep 17 00:00:00 2001 | |||
From: Brent Cook <busterb@gmail.com> | |||
Date: Wed, 31 Dec 2014 08:47:45 -0600 | |||
Subject: [PATCH 12/12] don't be too stingy on braces | |||
Match if bracing of the block below it to improve readability. | |||
--- | |||
src/usr.sbin/ntpd/client.c | 3 ++- | |||
1 file changed, 2 insertions(+), 1 deletion(-) | |||
diff --git a/src/usr.sbin/ntpd/client.c b/src/usr.sbin/ntpd/client.c | |||
index 0271068..4bfbf90 100644 | |||
--- a/src/usr.sbin/ntpd/client.c | |||
+++ b/src/usr.sbin/ntpd/client.c | |||
@@ -139,7 +139,7 @@ client_query(struct ntp_peer *p) | |||
struct sockaddr *sa = (struct sockaddr *)&p->addr->ss; | |||
p->query->fd = socket(p->addr->ss.ss_family, SOCK_DGRAM, 0); | |||
- if (p->query->fd == -1) | |||
+ if (p->query->fd == -1) { | |||
if (errno == EAFNOSUPPORT) { | |||
log_warn("client_query socket"); | |||
client_nextaddr(p); | |||
@@ -147,6 +147,7 @@ client_query(struct ntp_peer *p) | |||
return (-1); | |||
} else | |||
fatal("client_query socket"); | |||
+ } | |||
#ifdef SO_RTABLE | |||
if (p->rtable != -1 && | |||
-- | |||
1.9.1 | |||
@ -1,28 +0,0 @@ | |||
--- client.orig 2014-12-28 11:10:23.875157132 -0600 | |||
+++ client.c 2014-12-28 11:12:46.095160215 -0600 | |||
@@ -142,10 +142,12 @@ | |||
0)) == -1) | |||
fatal("client_query socket"); | |||
+#ifdef SO_RTABLE | |||
if (p->rtable != -1 && | |||
setsockopt(p->query->fd, SOL_SOCKET, SO_RTABLE, | |||
&p->rtable, sizeof(p->rtable)) == -1) | |||
fatal("client_query setsockopt SO_RTABLE"); | |||
+#endif | |||
if (connect(p->query->fd, sa, SA_LEN(sa)) == -1) { | |||
if (errno == ECONNREFUSED || errno == ENETUNREACH || | |||
errno == EHOSTUNREACH || errno == EADDRNOTAVAIL) { | |||
@@ -248,10 +250,12 @@ | |||
return (0); | |||
} | |||
+#ifdef SO_RTABLE | |||
if (p->rtable != -1 && | |||
setsockopt(p->query->fd, SOL_SOCKET, SO_RTABLE, &p->rtable, | |||
sizeof(p->rtable)) == -1) | |||
fatal("client_dispatch setsockopt SO_RTABLE"); | |||
+#endif | |||
for (cmsg = CMSG_FIRSTHDR(&somsg); cmsg != NULL; | |||
cmsg = CMSG_NXTHDR(&somsg, cmsg)) { |
@ -1,23 +0,0 @@ | |||
$FreeBSD: head/net/openntpd/files/patch-log.c 340725 2014-01-22 17:40:44Z mat $ | |||
--- log.c.orig 2007-08-22 23:04:30.000000000 +0200 | |||
+++ log.c 2009-08-01 22:08:01.000000000 +0200 | |||
@@ -26,6 +26,10 @@ | |||
#include "ntpd.h" | |||
+#ifndef LOG_NTP | |||
+#define LOG_NTP LOG_DAEMON | |||
+#endif | |||
+ | |||
int debug; | |||
extern int debugsyslog; | |||
@@ -39,7 +43,7 @@ log_init(int n_debug) | |||
debug = n_debug; | |||
if (!debug) | |||
- openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON); | |||
+ openlog(__progname, LOG_PID | LOG_NDELAY, LOG_NTP); | |||
tzset(); | |||
} |
@ -1,20 +0,0 @@ | |||
--- ntp.orig 2014-12-28 11:48:24.731206568 -0600 | |||
+++ ntp.c 2014-12-28 11:49:42.107208245 -0600 | |||
@@ -79,7 +79,7 @@ | |||
u_int pfd_elms = 0, idx2peer_elms = 0; | |||
u_int listener_cnt, new_cnt, sent_cnt, trial_cnt; | |||
u_int ctl_cnt; | |||
- pid_t pid, dns_pid; | |||
+ pid_t pid; | |||
struct pollfd *pfd = NULL; | |||
struct servent *se; | |||
struct listen_addr *la; | |||
@@ -118,7 +118,7 @@ | |||
close(pipe_prnt[0]); | |||
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pipe_dns) == -1) | |||
fatal("socketpair"); | |||
- dns_pid = ntp_dns(pipe_dns, nconf, pw); | |||
+ ntp_dns(pipe_dns, nconf, pw); | |||
close(pipe_dns[1]); | |||
if (stat(pw->pw_dir, &stb) == -1) |
@ -1,10 +0,0 @@ | |||
--- ntpd.orig 2014-12-28 11:51:56.363211155 -0600 | |||
+++ ntpd.c 2014-12-28 11:52:00.971211255 -0600 | |||
@@ -30,6 +30,7 @@ | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
+#include <time.h> | |||
#include <unistd.h> | |||
#include <err.h> | |||
@ -1,33 +0,0 @@ | |||
--- ntpd.orig Sun Dec 28 16:11:35 2014 | |||
+++ ntpd.h Sun Dec 28 16:12:14 2014 | |||
@@ -28,7 +28,6 @@ | |||
#include <netdb.h> | |||
#include <pwd.h> | |||
#include <stdarg.h> | |||
-#include <event.h> | |||
#include <poll.h> | |||
#include "ntp.h" | |||
@@ -190,14 +189,6 @@ | |||
u_int8_t filters; | |||
}; | |||
-struct imsgev { | |||
- struct imsgbuf ibuf; | |||
- void (*handler)(int, short, void *); | |||
- struct event ev; | |||
- void *data; | |||
- short events; | |||
-}; | |||
- | |||
struct ctl_show_status { | |||
u_int peercnt; | |||
u_int sensorcnt; | |||
@@ -240,7 +231,6 @@ | |||
struct ctl_conn { | |||
TAILQ_ENTRY(ctl_conn) entry; | |||
- struct imsgev iev; | |||
struct imsgbuf ibuf; | |||
}; | |||
@ -1,15 +0,0 @@ | |||
--- parse.orig 2014-12-28 11:59:42.075221249 -0600 | |||
+++ parse.y 2014-12-28 11:54:22.799214329 -0600 | |||
@@ -313,10 +313,12 @@ | |||
opts.weight = $2; | |||
} | |||
rtable : RTABLE NUMBER { | |||
+#ifdef RT_TABLEID_MAX | |||
if ($2 < 0 || $2 > RT_TABLEID_MAX) { | |||
yyerror("rtable must be between 1 and RT_TABLEID_MAX"); | |||
YYERROR; | |||
} | |||
+#endif | |||
opts.rtable = $2; | |||
} | |||
; |
@ -1,53 +0,0 @@ | |||
--- server.orig 2014-12-28 12:16:48.203243490 -0600 | |||
+++ server.c 2014-12-28 12:18:07.907245217 -0600 | |||
@@ -39,7 +39,10 @@ | |||
u_int8_t *a6; | |||
size_t sa6len = sizeof(struct in6_addr); | |||
u_int new_cnt = 0; | |||
- int tos = IPTOS_LOWDELAY, rdomain, fd; | |||
+ int tos = IPTOS_LOWDELAY; | |||
+#ifdef SO_RTABLE | |||
+ int rdomain, fd; | |||
+#endif | |||
TAILQ_FOREACH(lap, &lconf->listen_addrs, entry) { | |||
switch (lap->sa.ss_family) { | |||
@@ -59,6 +62,7 @@ | |||
strlcpy(ifr.ifr_name, ifap->ifa_name, | |||
sizeof(ifr.ifr_name)); | |||
+#ifdef SO_RTABLE | |||
fd = socket(AF_INET, SOCK_DGRAM, 0); | |||
if (ioctl(fd, SIOCGIFRDOMAIN, | |||
(caddr_t)&ifr) == -1) | |||
@@ -69,6 +73,7 @@ | |||
if (lap->rtable != -1 && rdomain != lap->rtable) | |||
continue; | |||
+#endif | |||
if (sa->sa_family == AF_INET && | |||
((struct sockaddr_in *)sa)->sin_addr.s_addr == | |||
@@ -87,7 +92,9 @@ | |||
fatal("setup_listeners calloc"); | |||
memcpy(&la->sa, sa, SA_LEN(sa)); | |||
+#ifdef SO_RTABLE | |||
la->rtable = rdomain; | |||
+#endif | |||
TAILQ_INSERT_TAIL(&lconf->listen_addrs, la, entry); | |||
} | |||
@@ -132,10 +139,12 @@ | |||
IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) == -1) | |||
log_warn("setsockopt IPTOS_LOWDELAY"); | |||
+#ifdef SO_RTABLE | |||
if (la->rtable != -1 && | |||
setsockopt(la->fd, SOL_SOCKET, SO_RTABLE, &la->rtable, | |||
sizeof(la->rtable)) == -1) | |||
fatal("setup_listeners setsockopt SO_RTABLE"); | |||
+#endif | |||
if (bind(la->fd, (struct sockaddr *)&la->sa, | |||
SA_LEN((struct sockaddr *)&la->sa)) == -1) { |
@ -1,13 +0,0 @@ | |||
--- util.orig 2014-12-28 12:18:54.727246232 -0600 | |||
+++ util.c 2014-12-28 12:19:04.211246438 -0600 | |||
@@ -17,8 +17,10 @@ | |||
*/ | |||
#include <sys/time.h> | |||
+ | |||
#include <limits.h> | |||
#include <stdio.h> | |||
+#include <time.h> | |||
#include "ntpd.h" | |||