First attempt at building a new OpenNTPD portable project, based on the latest OpenBSD source.OPENBSD_5_7
@ -0,0 +1,76 @@ | |||||
*.y | |||||
*.5 | |||||
*.8 | |||||
*.o | |||||
*.la | |||||
*.lo | |||||
.deps | |||||
.dirstamp | |||||
.libs | |||||
ntpd | |||||
openbsd | |||||
aclocal.m4 | |||||
autom4te.cache/ | |||||
compile | |||||
config.guess | |||||
config.log | |||||
config.status | |||||
config.sub | |||||
configure | |||||
depcomp | |||||
install-sh | |||||
libtool | |||||
ltmain.sh | |||||
m4/ | |||||
missing | |||||
ylwrap | |||||
Makefile | |||||
Makefile.in | |||||
compat/arc4random.c | |||||
compat/arc4random_freebsd.h | |||||
compat/arc4random_linux.h | |||||
compat/arc4random_osx.h | |||||
compat/arc4random_solaris.h | |||||
compat/arc4random_uniform.c | |||||
compat/arc4random_win.h | |||||
compat/chacha_private.h | |||||
compat/explicit_bzero.c | |||||
compat/getentropy_freebsd.c | |||||
compat/getentropy_linux.c | |||||
compat/getentropy_osx.c | |||||
compat/getentropy_solaris.c | |||||
compat/getentropy_win.c | |||||
compat/imsg-buffer.c | |||||
compat/imsg.c | |||||
compat/md5.c | |||||
compat/reallocarray.c | |||||
compat/strlcat.c | |||||
compat/strlcpy.c | |||||
compat/strndup.c | |||||
compat/strnlen.c | |||||
compat/strtonum.c | |||||
client.c | |||||
config.c | |||||
control.c | |||||
include/imsg.h | |||||
include/md5.h | |||||
include/stdlib.h | |||||
include/string.h | |||||
include/sys/ | |||||
log.c | |||||
ntp.c | |||||
ntp.h | |||||
ntp_dns.c | |||||
ntp_msg.c | |||||
ntpd.c | |||||
ntpd.h | |||||
parse.c | |||||
sensors.c | |||||
server.c | |||||
util.c |
@ -0,0 +1,31 @@ | |||||
This is a summary of the licences for the files that make up Portable | |||||
OpenNTPD. | |||||
Apart from the exceptions listed below, all of the files are under an | |||||
ISC-style licence with the following copyright holders, first for the | |||||
files from OpenBSD's ntpd: | |||||
Henning Brauer | |||||
Alexander Guy | |||||
and the portability layer: | |||||
Darren Tucker | |||||
Damien Miller | |||||
Internet Software Consortium | |||||
Todd C. Miller | |||||
Anthony O.Zabelin | |||||
/* | |||||
* Permission to use, copy, modify, and distribute this software for any | |||||
* purpose with or without fee is hereby granted, provided that the above | |||||
* copyright notice and this permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING | |||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ |
@ -0,0 +1,90 @@ | |||||
1. Prerequisites | |||||
---------------- | |||||
You will need an entropy (randomness) source. If your OS has arc4random or | |||||
getentropy then that is ideal. Otherwise, you can use the builtin arc4random | |||||
implementation or the one built into LibreSSL. | |||||
2. Building / Installation | |||||
-------------------------- | |||||
To install OpenNTPD with default options: | |||||
./configure | |||||
make | |||||
make install | |||||
This will install the OpenNTPD binary in /usr/local/sbin, configuration | |||||
files in /usr/local/etc. To specify a different installation prefix, | |||||
use the --prefix option to configure: | |||||
./configure --prefix=/opt | |||||
make | |||||
make install | |||||
Will install OpenNTPD in /opt/{etc,sbin}. You can also override | |||||
specific paths, for example: | |||||
./configure --prefix=/opt --sysconfdir=/etc/ntp | |||||
make | |||||
make install | |||||
This will install the binaries in /opt/sbin, but will place the | |||||
configuration files in /etc/ntp. | |||||
OpenNTPD always uses Privilege Separation (ie the majority of the | |||||
processing is done as a chroot'ed, unprivileged user). | |||||
This requires that a user, group and directory to be created for it. | |||||
The user should not be permitted to log in, and its home directory | |||||
should be owned by root and be mode 755. | |||||
If you do "make install", the Makefile will create the directory with | |||||
the correct permissions and will prompt you for the rest if required. | |||||
If, however, you need to perform all of these tasks yourself (eg if you | |||||
are moving the built binaries to another system) then you will need to | |||||
do something like the following (although the exact commands required | |||||
for creating the user and group are system dependant): | |||||
# groupadd _ntp | |||||
# useradd -g _ntp -s /sbin/nologin -d /var/empty/ntp -c 'OpenNTP daemon' _ntp | |||||
# mkdir -p /var/empty/ntp | |||||
# chown 0 /var/empty/ntp | |||||
# chgrp 0 /var/empty/ntp | |||||
# chmod 0755 /var/empty/ntp | |||||
There are a few options to the configure script in addition to the ones | |||||
provided by autoconf itself: | |||||
--with-privsep-user=[user] | |||||
Specify unprivileged user used for privilege separation. The default | |||||
is "_ntp". | |||||
--with-privsep-path=path | |||||
Normally ntpd will always use the home directory of the privsep user | |||||
to chroot to, however use of this option will cause ntpd to always | |||||
use the specified directory. | |||||
If you need to pass special options to the compiler or linker, you | |||||
can specify these as environment variables before running ./configure. | |||||
For example: | |||||
CFLAGS="-O -m486" LDFLAGS="-s" LIBS="-lrubbish" LD="/usr/foo/ld" ./configure | |||||
3. Configuration | |||||
---------------- | |||||
The runtime configuration files are installed by in ${prefix}/etc or | |||||
whatever you specified as your --sysconfdir (/usr/local/etc by default). | |||||
If no configuration file exists, the default one is used. The default | |||||
configuration file uses a selection of publicly accessible "pool" servers | |||||
(see http://twiki.ntp.org/bin/view/Servers/NTPPoolServers). | |||||
4. Problems? | |||||
------------ | |||||
If you experience problems compiling, installing or running OpenNTPD, | |||||
please report the problem to the address in the README file. |
@ -0,0 +1,129 @@ | |||||
AM_CPPFLAGS = -I$(top_srcdir)/include | |||||
SUBDIRS = include | |||||
ACLOCAL_AMFLAGS = -Im4 | |||||
EXTRA_DIST = VERSION | |||||
CLEANFILES = parse.c | |||||
sbin_PROGRAMS = ntpd | |||||
noinst_LTLIBRARIES = libcompat.la libcompatnoopt.la | |||||
dist_man_MANS = ntpctl.8 ntpd.8 ntpd.conf.5 | |||||
ntpd_CFLAGS = $(CFLAGS) $(USER_CFLAGS) | |||||
ntpd_LDADD = $(PLATFORM_LDADD) $(PROG_LDADD) libcompat.la libcompatnoopt.la | |||||
ntpd_SOURCES = client.c | |||||
ntpd_SOURCES += config.c | |||||
ntpd_SOURCES += control.c | |||||
ntpd_SOURCES += log.c | |||||
ntpd_SOURCES += ntp.c | |||||
ntpd_SOURCES += ntp.h | |||||
ntpd_SOURCES += ntp_dns.c | |||||
ntpd_SOURCES += ntp_msg.c | |||||
ntpd_SOURCES += ntpd.c | |||||
ntpd_SOURCES += ntpd.h | |||||
ntpd_SOURCES += parse.y | |||||
if !HAVE_ADJFREQ | |||||
ntpd_SOURCES += bsd-adjfreq.c | |||||
endif | |||||
if HAVE_SENSORS | |||||
ntpd_SOURCES += sensors.c | |||||
else | |||||
ntpd_SOURCES += fake-sensors.c | |||||
endif | |||||
ntpd_SOURCES += server.c | |||||
ntpd_SOURCES += util.c | |||||
install-exec-hook: | |||||
ln -f $(DESTDIR)$(sbindir)/ntpd $(DESTDIR)$(sbindir)/ntpctl | |||||
uninstall-local: | |||||
-rm -f $(DESTDIR)$(sbindir)/ntpctl | |||||
# compatibility functions that need to be built without optimizations | |||||
libcompatnoopt_la_CFLAGS = -O0 | |||||
libcompatnoopt_la_SOURCES = | |||||
if !HAVE_EXPLICIT_BZERO | |||||
libcompatnoopt_la_SOURCES += compat/explicit_bzero.c | |||||
endif | |||||
# other compatibility functions | |||||
libcompat_la_CFLAGS = $(CFLAGS) $(USER_CFLAGS) | |||||
libcompat_la_SOURCES = | |||||
libcompat_la_LIBADD = $(PLATFORM_LDADD) | |||||
if !HAVE_SETPROCTITLE | |||||
libcompat_la_SOURCES += compat/setproctitle.c | |||||
endif | |||||
if !HAVE_STRLCAT | |||||
libcompat_la_SOURCES += compat/strlcat.c | |||||
endif | |||||
if !HAVE_STRLCPY | |||||
libcompat_la_SOURCES += compat/strlcpy.c | |||||
endif | |||||
if !HAVE_STRNDUP | |||||
libcompat_la_SOURCES += compat/strndup.c | |||||
# the only user of strnlen is strndup, so only build it if needed | |||||
if !HAVE_STRNLEN | |||||
libcompat_la_SOURCES += compat/strnlen.c | |||||
endif | |||||
endif | |||||
if !HAVE_STRTONUM | |||||
libcompat_la_SOURCES += compat/strtonum.c | |||||
endif | |||||
if !HAVE_ASPRINTF | |||||
libcompat_la_SOURCES += compat/bsd-asprintf.c | |||||
endif | |||||
if !HAVE_REALLOCARRAY | |||||
libcompat_la_SOURCES += compat/reallocarray.c | |||||
endif | |||||
if !HAVE_MD5 | |||||
libcompat_la_SOURCES += compat/md5.c | |||||
endif | |||||
if !HAVE_IMSG | |||||
libcompat_la_SOURCES += compat/imsg.c | |||||
libcompat_la_SOURCES += compat/imsg-buffer.c | |||||
endif | |||||
if !HAVE_ARC4RANDOM | |||||
libcompat_la_SOURCES += compat/arc4random.c | |||||
if !HAVE_GETENTROPY | |||||
if HOST_FREEBSD | |||||
libcompat_la_SOURCES += compat/getentropy_freebsd.c | |||||
endif | |||||
if HOST_LINUX | |||||
libcompat_la_SOURCES += compat/getentropy_linux.c | |||||
ntpd_LDADD += -lcrypto | |||||
endif | |||||
if HOST_DARWIN | |||||
libcompat_la_SOURCES += compat/getentropy_osx.c | |||||
ntpd_LDADD += -lcrypto | |||||
endif | |||||
if HOST_SOLARIS | |||||
libcompat_la_SOURCES += compat/getentropy_solaris.c | |||||
ntpd_LDADD += -lcrypto | |||||
endif | |||||
endif | |||||
endif | |||||
if !HAVE_ARC4RANDOM_UNIFORM | |||||
libcompat_la_SOURCES += compat/arc4random_uniform.c | |||||
endif | |||||
noinst_HEADERS = compat/arc4random.h | |||||
noinst_HEADERS += compat/arc4random_freebsd.h | |||||
noinst_HEADERS += compat/arc4random_linux.h | |||||
noinst_HEADERS += compat/arc4random_osx.h | |||||
noinst_HEADERS += compat/arc4random_solaris.h | |||||
noinst_HEADERS += compat/arc4random_win.h | |||||
noinst_HEADERS += compat/chacha_private.h |
@ -0,0 +1,24 @@ | |||||
This is a new port of OpenBSD's native ntpd to other Unix flavours adding | |||||
autoconf support and the necessary compatibility layer. It is based on | |||||
portability code from the OpenSSH and LibreSSL portable projects. | |||||
OpenNTPD has a web site at http://www.openntpd.org/ | |||||
The current portable tree can be found at https://github.com/openntpd-portable | |||||
Platform Requirements | |||||
--------------------- | |||||
adjtime() and settimeofday() syscalls or equivalent. | |||||
either poll() or select(). | |||||
a working arc4random implementation, OpenSSL or LibreSSL | |||||
(this project shares the same arc4random compatibility code from LibreSSL) | |||||
At the time of writing the Portable version is known to build and work on: | |||||
OpenBSD (5.6) | |||||
Linux (Ubuntu 12.04, 14.04) | |||||
FreeBSD (9.x, 10.x) | |||||
Solaris (10.x, 11.x) | |||||
Mac OS X (10.9) | |||||
It may work on others, newer and older, but it's still a work in progress. | |||||
Reports (success or otherwise) and/or diffs welcome. |
@ -0,0 +1 @@ | |||||
5.7p1 |
@ -0,0 +1,6 @@ | |||||
#!/bin/sh | |||||
set -e | |||||
./update.sh | |||||
mkdir -p m4 | |||||
autoreconf -i -f |
@ -0,0 +1,71 @@ | |||||
/* | |||||
* Copyright (c) 2007 Sebastian Benoit <benoit-lists@fb12.de> | |||||
* | |||||
* Permission to use, copy, modify, and distribute this software for any | |||||
* purpose with or without fee is hereby granted, provided that the above | |||||
* copyright notice and this permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
/* RCSID("$Id$"); */ | |||||
#include <sys/types.h> | |||||
#include <unistd.h> | |||||
#ifdef HAVE_SYS_TIMEX_H | |||||
# include <sys/timex.h> | |||||
#endif | |||||
#ifdef adjfreq | |||||
# undef adjfreq | |||||
#endif | |||||
#include "ntp.h" | |||||
#include "ntpd.h" | |||||
/* | |||||
* adjfreq (old)freq = nanosec. per seconds shifted left 32 bits | |||||
* timex.freq is ppm / left shifted by SHIFT_USEC (16 bits), defined in timex.h | |||||
*/ | |||||
int | |||||
adjfreq(const int64_t *freq, int64_t *oldfreq) | |||||
{ | |||||
struct timex txc; | |||||
int64_t newfreq; | |||||
if (freq != NULL) { | |||||
#if defined(__linux__) | |||||
txc.modes = ADJ_FREQUENCY; | |||||
#else | |||||
txc.modes = MOD_FREQUENCY; | |||||
#endif | |||||
txc.freq = *freq / 1e3 / (1LL << 16); | |||||
if ((ntp_adjtime(&txc)) == -1) | |||||
log_warn("ntp_adjtime (2) failed"); | |||||
log_debug("ntp_adjtime adjusted frequency by %fppm", | |||||
((txc.freq * 1e3) * (1LL<<16) / 1e3 / (1LL << 32))); | |||||
} | |||||
if (oldfreq != NULL) { | |||||
txc.modes = 0; | |||||
if ((ntp_adjtime(&txc)) == -1) { | |||||
log_warn("ntp_adjtime (1) failed"); | |||||
return -1; | |||||
} | |||||
newfreq = (txc.freq * 1e3) * (1LL<<16); | |||||
log_debug("ntp_adjtime returns frequency of %fppm", | |||||
newfreq / 1e3 / (1LL << 32)); | |||||
*oldfreq = newfreq; | |||||
} | |||||
return 0; | |||||
} |
@ -0,0 +1,28 @@ | |||||
--- 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)) { |
@ -0,0 +1,26 @@ | |||||
#ifndef LIBCRYPTOCOMPAT_ARC4RANDOM_H | |||||
#define LIBCRYPTOCOMPAT_ARC4RANDOM_H | |||||
#include <sys/param.h> | |||||
#if defined(__FreeBSD__) | |||||
#include "arc4random_freebsd.h" | |||||
#elif defined(__linux__) | |||||
#include "arc4random_linux.h" | |||||
#elif defined(__APPLE__) | |||||
#include "arc4random_osx.h" | |||||
#elif defined(__sun) | |||||
#include "arc4random_solaris.h" | |||||
#elif defined(_WIN32) | |||||
#include "arc4random_win.h" | |||||
#else | |||||
#error "No arc4random hooks defined for this platform." | |||||
#endif | |||||
#endif |
@ -0,0 +1,96 @@ | |||||
/* | |||||
* Copyright (c) 2004 Darren Tucker. | |||||
* | |||||
* Based originally on asprintf.c from OpenBSD: | |||||
* Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com> | |||||
* | |||||
* Permission to use, copy, modify, and distribute this software for any | |||||
* purpose with or without fee is hereby granted, provided that the above | |||||
* copyright notice and this permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
#ifndef HAVE_ASPRINTF | |||||
#include <errno.h> | |||||
#include <limits.h> /* for INT_MAX */ | |||||
#include <stdarg.h> | |||||
#include <stdio.h> /* for vsnprintf */ | |||||
#include <stdlib.h> | |||||
#ifndef VA_COPY | |||||
# ifdef HAVE_VA_COPY | |||||
# define VA_COPY(dest, src) va_copy(dest, src) | |||||
# else | |||||
# ifdef HAVE___VA_COPY | |||||
# define VA_COPY(dest, src) __va_copy(dest, src) | |||||
# else | |||||
# define VA_COPY(dest, src) (dest) = (src) | |||||
# endif | |||||
# endif | |||||
#endif | |||||
#define INIT_SZ 128 | |||||
int | |||||
vasprintf(char **str, const char *fmt, va_list ap) | |||||
{ | |||||
int ret; | |||||
va_list ap2; | |||||
char *string, *newstr; | |||||
size_t len; | |||||
if ((string = malloc(INIT_SZ)) == NULL) | |||||
goto fail; | |||||
VA_COPY(ap2, ap); | |||||
ret = vsnprintf(string, INIT_SZ, fmt, ap2); | |||||
va_end(ap2); | |||||
if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */ | |||||
*str = string; | |||||
} else if (ret == INT_MAX || ret < 0) { /* Bad length */ | |||||
free(string); | |||||
goto fail; | |||||
} else { /* bigger than initial, realloc allowing for nul */ | |||||
len = (size_t)ret + 1; | |||||
if ((newstr = realloc(string, len)) == NULL) { | |||||
free(string); | |||||
goto fail; | |||||
} | |||||
VA_COPY(ap2, ap); | |||||
ret = vsnprintf(newstr, len, fmt, ap2); | |||||
va_end(ap2); | |||||
if (ret < 0 || (size_t)ret >= len) { /* failed with realloc'ed string */ | |||||
free(newstr); | |||||
goto fail; | |||||
} | |||||
*str = newstr; | |||||
} | |||||
return (ret); | |||||
fail: | |||||
*str = NULL; | |||||
errno = ENOMEM; | |||||
return (-1); | |||||
} | |||||
int asprintf(char **str, const char *fmt, ...) | |||||
{ | |||||
va_list ap; | |||||
int ret; | |||||
*str = NULL; | |||||
va_start(ap, fmt); | |||||
ret = vasprintf(str, fmt, ap); | |||||
va_end(ap); | |||||
return ret; | |||||
} | |||||
#endif |
@ -0,0 +1,20 @@ | |||||
--- imsg.orig 2014-12-28 13:24:02.771330936 -0600 | |||||
+++ imsg.c 2014-12-28 13:24:35.347331642 -0600 | |||||
@@ -70,6 +70,7 @@ | |||||
return (-1); | |||||
again: | |||||
+#ifdef HAVE_GETDTABLECOUNT | |||||
if (getdtablecount() + imsg_fd_overhead + | |||||
(CMSG_SPACE(sizeof(int))-CMSG_SPACE(0))/sizeof(int) | |||||
>= getdtablesize()) { | |||||
@@ -77,7 +78,8 @@ | |||||
free(ifd); | |||||
return (-1); | |||||
} | |||||
- | |||||
+#endif | |||||
+ | |||||
if ((n = recvmsg(ibuf->fd, &msg, 0)) == -1) { | |||||
if (errno == EMSGSIZE) | |||||
goto fail; |
@ -0,0 +1,165 @@ | |||||
/* Based on conf.c from UCB sendmail 8.8.8 */ | |||||
/* | |||||
* Copyright 2003 Damien Miller | |||||
* Copyright (c) 1983, 1995-1997 Eric P. Allman | |||||
* Copyright (c) 1988, 1993 | |||||
* The Regents of the University of California. All rights reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* 3. Neither the name of the University nor the names of its contributors | |||||
* may be used to endorse or promote products derived from this software | |||||
* without specific prior written permission. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
*/ | |||||
#ifndef HAVE_SETPROCTITLE | |||||
#include <stdarg.h> | |||||
#include <stdlib.h> | |||||
#include <unistd.h> | |||||
#ifdef HAVE_SYS_PSTAT_H | |||||
#include <sys/pstat.h> | |||||
#endif | |||||
#include <string.h> | |||||
#define SPT_NONE 0 /* don't use it at all */ | |||||
#define SPT_PSTAT 1 /* use pstat(PSTAT_SETCMD, ...) */ | |||||
#define SPT_REUSEARGV 2 /* cover argv with title information */ | |||||
#ifndef SPT_TYPE | |||||
# define SPT_TYPE SPT_NONE | |||||
#endif | |||||
#ifndef SPT_PADCHAR | |||||
# define SPT_PADCHAR '\0' | |||||
#endif | |||||
#if SPT_TYPE == SPT_REUSEARGV | |||||
static char *argv_start = NULL; | |||||
static size_t argv_env_len = 0; | |||||
#endif | |||||
#endif /* HAVE_SETPROCTITLE */ | |||||
void | |||||
compat_init_setproctitle(int argc, char *argv[]) | |||||
{ | |||||
#if !defined(HAVE_SETPROCTITLE) && \ | |||||
defined(SPT_TYPE) && SPT_TYPE == SPT_REUSEARGV | |||||
extern char **environ; | |||||
char *lastargv = NULL; | |||||
char **envp = environ; | |||||
int i; | |||||
/* | |||||
* NB: This assumes that argv has already been copied out of the | |||||
* way. This is true for sshd, but may not be true for other | |||||
* programs. Beware. | |||||
*/ | |||||
if (argc == 0 || argv[0] == NULL) | |||||
return; | |||||
/* Fail if we can't allocate room for the new environment */ | |||||
for (i = 0; envp[i] != NULL; i++) | |||||
; | |||||
if ((environ = calloc(i + 1, sizeof(*environ))) == NULL) { | |||||
environ = envp; /* put it back */ | |||||
return; | |||||
} | |||||
/* | |||||
* Find the last argv string or environment variable within | |||||
* our process memory area. | |||||
*/ | |||||
for (i = 0; i < argc; i++) { | |||||
if (lastargv == NULL || lastargv + 1 == argv[i]) | |||||
lastargv = argv[i] + strlen(argv[i]); | |||||
} | |||||
for (i = 0; envp[i] != NULL; i++) { | |||||
if (lastargv + 1 == envp[i]) | |||||
lastargv = envp[i] + strlen(envp[i]); | |||||
} | |||||
argv[1] = NULL; | |||||
argv_start = argv[0]; | |||||
argv_env_len = lastargv - argv[0] - 1; | |||||
/* | |||||
* Copy environment | |||||
* XXX - will truncate env on strdup fail | |||||
*/ | |||||
for (i = 0; envp[i] != NULL; i++) | |||||
environ[i] = strdup(envp[i]); | |||||
environ[i] = NULL; | |||||
#endif /* SPT_REUSEARGV */ | |||||
} | |||||
#ifndef HAVE_SETPROCTITLE | |||||
void | |||||
setproctitle(const char *fmt, ...) | |||||
{ | |||||
#if SPT_TYPE != SPT_NONE | |||||
va_list ap; | |||||
char buf[1024], ptitle[1024]; | |||||
size_t len; | |||||
int r; | |||||
extern char *__progname; | |||||
#if SPT_TYPE == SPT_PSTAT | |||||
union pstun pst; | |||||
#endif | |||||
#if SPT_TYPE == SPT_REUSEARGV | |||||
if (argv_env_len <= 0) | |||||
return; | |||||
#endif | |||||
strlcpy(buf, __progname, sizeof(buf)); | |||||
r = -1; | |||||
va_start(ap, fmt); | |||||
if (fmt != NULL) { | |||||
len = strlcat(buf, ": ", sizeof(buf)); | |||||
if (len < sizeof(buf)) | |||||
r = vsnprintf(buf + len, sizeof(buf) - len , fmt, ap); | |||||
} | |||||
va_end(ap); | |||||
if (r == -1 || (size_t)r >= sizeof(buf) - len) | |||||
return; | |||||
strnvis(ptitle, buf, sizeof(ptitle), | |||||
VIS_CSTYLE|VIS_NL|VIS_TAB|VIS_OCTAL); | |||||
#if SPT_TYPE == SPT_PSTAT | |||||
pst.pst_command = ptitle; | |||||
pstat(PSTAT_SETCMD, pst, strlen(ptitle), 0, 0); | |||||
#elif SPT_TYPE == SPT_REUSEARGV | |||||
/* debug("setproctitle: copy \"%s\" into len %d", | |||||
buf, argv_env_len); */ | |||||
len = strlcpy(argv_start, ptitle, argv_env_len); | |||||
for(; len < argv_env_len; len++) | |||||
argv_start[len] = SPT_PADCHAR; | |||||
#endif | |||||
#endif /* SPT_NONE */ | |||||
} | |||||
#endif /* HAVE_SETPROCTITLE */ |
@ -0,0 +1,39 @@ | |||||
--- config.orig 2014-12-28 12:15:23.139241646 -0600 | |||||
+++ config.c 2014-12-28 12:15:58.843242420 -0600 | |||||
@@ -75,7 +75,9 @@ | |||||
if ((h = calloc(1, sizeof(struct ntp_addr))) == NULL) | |||||
fatal(NULL); | |||||
sa_in = (struct sockaddr_in *)&h->ss; | |||||
+#ifdef SIN_LEN | |||||
sa_in->sin_len = sizeof(struct sockaddr_in); | |||||
+#endif | |||||
sa_in->sin_family = AF_INET; | |||||
sa_in->sin_addr.s_addr = ina.s_addr; | |||||
@@ -97,7 +99,9 @@ | |||||
if ((h = calloc(1, sizeof(struct ntp_addr))) == NULL) | |||||
fatal(NULL); | |||||
sa_in6 = (struct sockaddr_in6 *)&h->ss; | |||||
+#ifdef SIN6_LEN | |||||
sa_in6->sin6_len = sizeof(struct sockaddr_in6); | |||||
+#endif | |||||
sa_in6->sin6_family = AF_INET6; | |||||
memcpy(&sa_in6->sin6_addr, | |||||
&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, | |||||
@@ -141,12 +145,16 @@ | |||||
h->ss.ss_family = res->ai_family; | |||||
if (res->ai_family == AF_INET) { | |||||
sa_in = (struct sockaddr_in *)&h->ss; | |||||
+#ifdef SIN_LEN | |||||
sa_in->sin_len = sizeof(struct sockaddr_in); | |||||
+#endif | |||||
sa_in->sin_addr.s_addr = ((struct sockaddr_in *) | |||||
res->ai_addr)->sin_addr.s_addr; | |||||
} else { | |||||
sa_in6 = (struct sockaddr_in6 *)&h->ss; | |||||
+#ifdef SIN6_LEN | |||||
sa_in6->sin6_len = sizeof(struct sockaddr_in6); | |||||
+#endif | |||||
memcpy(&sa_in6->sin6_addr, &((struct sockaddr_in6 *) | |||||
res->ai_addr)->sin6_addr, sizeof(struct in6_addr)); | |||||
} |
@ -0,0 +1,147 @@ | |||||
AC_INIT([OpenNTPD], m4_esyscmd([tr -d '\n' < VERSION])) | |||||
AC_CANONICAL_HOST | |||||
AM_INIT_AUTOMAKE([subdir-objects]) | |||||
AC_CONFIG_MACRO_DIR([m4]) | |||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) | |||||
AC_SUBST([USER_CFLAGS], "$CFLAGS") | |||||
CFLAGS="$CFLAGS -Wall -std=gnu99 -g" | |||||
case $host_os in | |||||
*darwin*) | |||||
HOST_OS=darwin | |||||
;; | |||||
*freebsd*) | |||||
HOST_OS=freebsd | |||||
AC_SUBST([PROG_LDADD], ['-lthr']) | |||||
;; | |||||
*linux*) | |||||
HOST_OS=linux | |||||
CFLAGS="$CFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE" | |||||
;; | |||||
*openbsd*) | |||||
AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD gcc has __bounded__]) | |||||
AC_DEFINE([HAVE_ATTRIBUTE__DEAD], [1], [OpenBSD gcc has __dead]) | |||||
HAVE_SENSORS=true | |||||
;; | |||||
*solaris*) | |||||
HOST_OS=solaris | |||||
CFLAGS="$CFLAGS -D__EXTENSIONS__ -D_XOPEN_SOURCE=600 -DBSD_COMP" | |||||
AC_SUBST([PLATFORM_LDADD], ['-lnsl -lsocket']) | |||||
;; | |||||
*) ;; | |||||
esac | |||||
AM_CONDITIONAL([HOST_DARWIN], [test x$HOST_OS = xdarwin]) | |||||
AM_CONDITIONAL([HOST_FREEBSD], [test x$HOST_OS = xfreebsd]) | |||||
AM_CONDITIONAL([HOST_LINUX], [test x$HOST_OS = xlinux]) | |||||
AM_CONDITIONAL([HOST_SOLARIS], [test x$HOST_OS = xsolaris]) | |||||
AM_CONDITIONAL([HAVE_SENSORS], [test x$HAVE_SENSORS = xtrue ]) | |||||
AC_CHECK_FUNC([clock_gettime],, | |||||
[AC_SEARCH_LIBS([clock_gettime],[rt posix4])]) | |||||
AC_CHECK_FUNC([dl_iterate_phdr],, | |||||
[AC_SEARCH_LIBS([dl_iterate_phdr],[dl])]) | |||||
AC_PROG_CC | |||||
AC_PROG_CC_STDC | |||||
AM_PROG_CC_C_O | |||||
AC_PROG_LIBTOOL | |||||
AC_PROG_YACC | |||||
save_cflags="$CFLAGS" | |||||
CFLAGS=-Wno-pointer-sign | |||||
AC_MSG_CHECKING([whether CC supports -Wno-pointer-sign]) | |||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], | |||||
[AC_MSG_RESULT([yes])] | |||||
[AM_CFLAGS=-Wno-pointer-sign], | |||||
[AC_MSG_RESULT([no])] | |||||
) | |||||
CFLAGS="$save_cflags $AM_CFLAGS" | |||||
AC_MSG_CHECKING([if compiling with clang]) | |||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ | |||||
#ifndef __clang__ | |||||
not clang | |||||
#endif | |||||
]])], | |||||
[AC_MSG_RESULT([yes])] | |||||
[CLANG_FLAGS=-Qunused-arguments], | |||||
[AC_MSG_RESULT([no])] | |||||
) | |||||
CFLAGS="$CFLAGS $CLANG_CFLAGS" | |||||
LDFLAGS="$LDFLAGS $CLANG_FLAGS" | |||||
AC_CHECK_FUNCS([adjfreq arc4random_uniform asprintf explicit_bzero]) | |||||
AC_CHECK_FUNCS([getentropy memmem poll reallocarray]) | |||||
AC_CHECK_FUNCS([setproctitle setgroups]) | |||||
AC_CHECK_FUNCS([strlcat strlcpy strndup strnlen strtonum]) | |||||
AC_CHECK_FUNCS([MD5Init]) | |||||
# check if arc4random is in the system or in libcrypto | |||||
AC_CHECK_FUNC([arc4random],, | |||||
[AC_SEARCH_LIBS([arc4random],[crypto])]) | |||||
AC_CHECK_FUNC([ibuf_open],, | |||||
[AC_SEARCH_LIBS([ibuf_open],[util])]) | |||||
# Share test results with automake | |||||
AM_CONDITIONAL([HAVE_ADJFREQ], [test "x$ac_cv_func_adjfreq" = xyes]) | |||||
AM_CONDITIONAL([HAVE_ARC4RANDOM], [test "x$ac_cv_func_arc4random" = xyes]) | |||||
AM_CONDITIONAL([HAVE_ARC4RANDOM_UNIFORM], [test "x$ac_cv_func_arc4random_uniform" = xyes]) | |||||
AM_CONDITIONAL([HAVE_ASPRINTF], [test "x$ac_cv_func_asprintf" = xyes]) | |||||
AM_CONDITIONAL([HAVE_EXPLICIT_BZERO], [test "x$ac_cv_func_explicit_bzero" = xyes]) | |||||
AM_CONDITIONAL([HAVE_GETENTROPY], [test "x$ac_cv_func_getentropy" = xyes]) | |||||
AM_CONDITIONAL([HAVE_MEMMEM], [test "x$ac_cv_func_memmem" = xyes]) | |||||
AM_CONDITIONAL([HAVE_POLL], [test "x$ac_cv_func_poll" = xyes]) | |||||
AM_CONDITIONAL([HAVE_REALLOCARRAY], [test "x$ac_cv_func_reallocarray" = xyes]) | |||||
AM_CONDITIONAL([HAVE_SETGROUPS], [test "x$ac_cv_func_setgroups" = xyes]) | |||||
AM_CONDITIONAL([HAVE_SETPROCTITLE], [test "x$ac_cv_func_setproctitle" = xyes]) | |||||
AM_CONDITIONAL([HAVE_STRLCAT], [test "x$ac_cv_func_strlcat" = xyes]) | |||||
AM_CONDITIONAL([HAVE_STRLCPY], [test "x$ac_cv_func_strlcpy" = xyes]) | |||||
AM_CONDITIONAL([HAVE_STRNDUP], [test "x$ac_cv_func_strndup" = xyes]) | |||||
AM_CONDITIONAL([HAVE_STRNLEN], [test "x$ac_cv_func_strnlen" = xyes]) | |||||
AM_CONDITIONAL([HAVE_STRTONUM], [test "x$ac_cv_func_strtonum" = xyes]) | |||||
AM_CONDITIONAL([HAVE_MD5], [test "x$ac_cv_func_MD5Init" = xyes]) | |||||
AM_CONDITIONAL([HAVE_IMSG], [test "x$ac_cv_func_ibuf_open" = xyes]) | |||||
# overrides for arc4random_buf implementations with known issues | |||||
AM_CONDITIONAL([HAVE_ARC4RANDOM], | |||||
[test "x$HOST_OS" != xdarwin -a "x$HOST_OS" != xfreebsd -a "x$ac_cv_func_arc4random" = xyes]) | |||||
AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [ | |||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[ | |||||
#include <stdarg.h> | |||||
va_list x,y; | |||||
]], [[ va_copy(x,y); ]])], | |||||
[ ac_cv_have_va_copy="yes" ], | |||||
[ ac_cv_have_va_copy="no" | |||||
]) | |||||
]) | |||||
if test "x$ac_cv_have_va_copy" = "xyes" ; then | |||||
AC_DEFINE([HAVE_VA_COPY], [1], [Define if va_copy exists]) | |||||
fi | |||||
AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [ | |||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[ | |||||
#include <stdarg.h> | |||||
va_list x,y; | |||||
]], [[ __va_copy(x,y); ]])], | |||||
[ ac_cv_have___va_copy="yes" ], [ ac_cv_have___va_copy="no" | |||||
]) | |||||
]) | |||||
if test "x$ac_cv_have___va_copy" = "xyes" ; then | |||||
AC_DEFINE([HAVE___VA_COPY], [1], [Define if __va_copy exists]) | |||||
fi | |||||
AC_CHECK_HEADERS([sys/timex.h]) | |||||
AC_CONFIG_FILES([ | |||||
Makefile | |||||
include/Makefile | |||||
]) | |||||
AC_OUTPUT |
@ -0,0 +1,7 @@ | |||||
#!/bin/sh | |||||
set -e | |||||
rm -f man/*.1 man/*.3 | |||||
./autogen.sh | |||||
./configure --enable-libtls | |||||
make distcheck |
@ -0,0 +1,46 @@ | |||||
/* $OpenBSD: sensors.c,v 1.46 2012/09/20 12:43:16 patrick Exp $ */ | |||||
/* | |||||
* Copyright (c) 2006 Henning Brauer <henning@openbsd.org> | |||||
* | |||||
* Permission to use, copy, modify, and distribute this software for any | |||||
* purpose with or without fee is hereby granted, provided that the above | |||||
* copyright notice and this permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING | |||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
#include "ntpd.h" | |||||
void | |||||
sensor_init(void) | |||||
{ | |||||
} | |||||
int | |||||
sensor_scan(void) | |||||
{ | |||||
return 0; | |||||
} | |||||
void | |||||
sensor_query(struct ntp_sensor *s) | |||||
{ | |||||
} | |||||
int | |||||
sensor_hotplugfd(void) | |||||
{ | |||||
return (-1); | |||||
} | |||||
void | |||||
sensor_hotplugevent(int fd) | |||||
{ | |||||
} |
@ -0,0 +1,12 @@ | |||||
noinst_HEADERS = | |||||
noinst_HEADERS += signal.h | |||||
noinst_HEADERS += unistd.h | |||||
noinst_HEADERS += sys/types.h | |||||
noinst_HEADERS += sys/socket.h | |||||
noinst_HEADERS += sys/time.h | |||||
noinst_HEADERS += imsg.h | |||||
noinst_HEADERS += string.h | |||||
noinst_HEADERS += md5.h | |||||
noinst_HEADERS += stdlib.h | |||||
noinst_HEADERS += Makefile.in | |||||
noinst_HEADERS += poll.h |
@ -0,0 +1,15 @@ | |||||
/* | |||||
* Public domain | |||||
* poll.h compatibility shim | |||||
*/ | |||||
#include_next <poll.h> | |||||
#ifndef LIBCOMPAT_POLL_H | |||||
#define LIBCOMPAT_POLL_H | |||||
#ifndef INFTIM | |||||
#define INFTIM (-1) | |||||
#endif | |||||
#endif |
@ -0,0 +1,10 @@ | |||||
/* | |||||
* Public domain | |||||
* signal.h compatibility shim | |||||
*/ | |||||
#include_next <signal.h> | |||||
#ifndef SIGINFO | |||||
#define SIGINFO SIGUSR1 | |||||
#endif |
@ -0,0 +1,21 @@ | |||||
/* | |||||
* Public domain | |||||
* unistd.h compatibility shim | |||||
*/ | |||||
#include_next <unistd.h> | |||||
#ifndef LIBCOMPAT_UNISTD_H | |||||
#define LIBCOMPAT_UNISTD_H | |||||
#ifndef HAVE_GETENTROPY | |||||
int getentropy(void *buf, size_t buflen); | |||||
#endif | |||||
#include <grp.h> | |||||
#ifndef HAVE_SETGROUPS | |||||
int setgroups(int ngroups, const gid_t *gidset); | |||||
#endif | |||||
#endif |
@ -0,0 +1,20 @@ | |||||
--- 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) |
@ -0,0 +1,11 @@ | |||||
# sample ntpd configuration file, see ntpd.conf(5) | |||||
# Addresses to listen on (ntpd does not listen by default) | |||||
#listen on * | |||||
# sync to a single server | |||||
#server ntp.example.org | |||||
# use a random selection of NTP Pool Time Servers | |||||
# see http://support.ntp.org/bin/view/Servers/NTPPoolServers | |||||
servers pool.ntp.org |
@ -0,0 +1,10 @@ | |||||
--- 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> | |||||
@ -0,0 +1,15 @@ | |||||
--- 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; | |||||
} | |||||
; |
@ -0,0 +1,53 @@ | |||||
--- 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) { |
@ -0,0 +1,58 @@ | |||||
#!/usr/bin/env bash | |||||
set -e | |||||
openntpd_version=`cat VERSION` | |||||
# pull in latest upstream code | |||||
echo "pulling upstream openbsd source" | |||||
if [ ! -d openbsd ]; then | |||||
if [ -z "$OPENNTPD_GIT" ]; then | |||||
git clone https://github.com/openntpd-portable/openbsd.git | |||||
else | |||||
git clone $OPENNTPD_GIT/openbsd | |||||
fi | |||||
fi | |||||
#(cd openbsd | |||||
# git checkout master | |||||
# git pull --rebase) | |||||
# setup source paths | |||||
dir=`pwd` | |||||
libc_inc=$dir/openbsd/src/include | |||||
libc_src=$dir/openbsd/src/lib/libc | |||||
libcrypto_src=$dir/openbsd/src/lib/libcrypto | |||||
libutil_src=$dir/openbsd/src/lib/libutil | |||||
ntpd_src=$dir/openbsd/src/usr.sbin/ntpd | |||||
CP='cp -p' | |||||
cp $libc_inc/md5.h include/ | |||||
cp $libutil_src/imsg.h include/ | |||||
cp $libutil_src/imsg.c compat/ | |||||
cp $libutil_src/imsg-buffer.c compat/ | |||||
(cd compat; patch -p0 < imsg.patch) | |||||
for i in explicit_bzero.c strlcpy.c strlcat.c strndup.c strnlen.c; do | |||||
$CP $libc_src/string/$i compat | |||||
done | |||||
$CP $libc_src/stdlib/reallocarray.c compat | |||||
$CP $libc_src/stdlib/strtonum.c compat | |||||
$CP $libc_src/crypt/arc4random.c compat | |||||
$CP $libc_src/crypt/arc4random_uniform.c compat | |||||
$CP $libc_src/crypt/chacha_private.h compat | |||||
$CP $libc_src/hash/md5.c compat | |||||
$CP $libcrypto_src/crypto/getentropy_*.c compat | |||||
$CP $libcrypto_src/crypto/arc4random_*.h compat | |||||
for i in client.c config.c control.c log.c ntp.c ntp.h ntp_dns.c ntp_msg.c \ | |||||
ntpd.c ntpd.h parse.y sensors.c server.c util.c \ | |||||
ntpctl.8 ntpd.8 ntpd.conf.5 ; do | |||||
cp $ntpd_src/$i . | |||||
done | |||||
patch -p0 < client.patch | |||||
patch -p0 < config.patch | |||||
patch -p0 < ntp.patch | |||||
patch -p0 < ntpd.patch | |||||
patch -p0 < parse.patch | |||||
patch -p0 < server.patch | |||||
patch -p0 < util.patch |
@ -0,0 +1,13 @@ | |||||
--- 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" | |||||