Merge from vendor branch NTPD:
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Fri, 25 Feb 2005 16:43:19 +0000 (16:43 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Fri, 25 Feb 2005 16:43:19 +0000 (16:43 +0000)
Sync OpenNTPD with OpenBSD.

16 files changed:
contrib/ntpd/README.DRAGONFLY
contrib/ntpd/buffer.c
contrib/ntpd/client.c
contrib/ntpd/config.c
contrib/ntpd/imsg.c
contrib/ntpd/log.c
contrib/ntpd/ntp.c
contrib/ntpd/ntp.h
contrib/ntpd/ntp_msg.c
contrib/ntpd/ntpd.8
contrib/ntpd/ntpd.c
contrib/ntpd/ntpd.conf.5
contrib/ntpd/ntpd.h
contrib/ntpd/parse.y
contrib/ntpd/server.c
contrib/ntpd/util.c

index e8aa6c6..aa2ae06 100644 (file)
@@ -1,3 +1,3 @@
 This directory is a checkout from src/usr.sbin/ntpd of the OpenBSD
-CVS repository from Tue Dec 14 17:00:00 CET 2004.  See README.DELETED
+CVS repository from Fri Feb 25 17:41:14 CET 2005.  See README.DELETED
 for files not included here.
index aa8c9cc..a907fb0 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/buffer.c,v 1.4 2004/09/15 00:05:29 henning Exp $ */
+/*     $OpenBSD: buffer.c,v 1.4 2004/09/15 00:05:29 henning Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -32,7 +32,7 @@ void  buf_enqueue(struct msgbuf *, struct buf *);
 void   buf_dequeue(struct msgbuf *, struct buf *);
 
 struct buf *
-buf_open(ssize_t len)
+buf_open(size_t len)
 {
        struct buf      *buf;
 
@@ -48,7 +48,7 @@ buf_open(ssize_t len)
 }
 
 int
-buf_add(struct buf *buf, void *data, ssize_t len)
+buf_add(struct buf *buf, void *data, size_t len)
 {
        if (buf->wpos + len > buf->size)
                return (-1);
@@ -127,7 +127,7 @@ msgbuf_write(struct msgbuf *msgbuf)
        for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0;
            buf = next) {
                next = TAILQ_NEXT(buf, entries);
-               if (n >= buf->size - buf->rpos) {
+               if (buf->rpos + n >= buf->size) {
                        n -= buf->size - buf->rpos;
                        buf_dequeue(msgbuf, buf);
                } else {
index 9a997c0..3778a6d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/client.c,v 1.48 2004/12/13 12:22:52 dtucker Exp $ */
+/*     $OpenBSD: client.c,v 1.56 2005/02/03 10:53:33 dtucker Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -27,7 +27,6 @@
 #include "ntpd.h"
 
 int    client_update(struct ntp_peer *);
-void   set_next(struct ntp_peer *, time_t);
 void   set_deadline(struct ntp_peer *, time_t);
 
 void
@@ -48,12 +47,13 @@ int
 client_peer_init(struct ntp_peer *p)
 {
        if ((p->query = calloc(1, sizeof(struct ntp_query))) == NULL)
-               fatal("client_query calloc");
+               fatal("client_peer_init calloc");
        p->query->fd = -1;
        p->query->msg.status = MODE_CLIENT | (NTP_VERSION << 3);
        p->state = STATE_NONE;
        p->shift = 0;
        p->trustlevel = TRUSTLEVEL_PATHETIC;
+       p->lasterror = 0;
 
        return (client_addr_init(p));
 }
@@ -115,7 +115,7 @@ client_query(struct ntp_peer *p)
        int     tos = IPTOS_LOWDELAY;
 
        if (p->addr == NULL && client_nextaddr(p) == -1) {
-               set_next(p, INTERVAL_QUERY_PATHETIC);
+               set_next(p, error_interval());
                return (-1);
        }
 
@@ -129,7 +129,7 @@ client_query(struct ntp_peer *p)
                        if (errno == ECONNREFUSED || errno == ENETUNREACH ||
                            errno == EHOSTUNREACH) {
                                client_nextaddr(p);
-                               set_next(p, INTERVAL_QUERY_PATHETIC);
+                               set_next(p, error_interval());
                                return (-1);
                        } else
                                fatal("client_query connect");
@@ -176,15 +176,15 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
        ssize_t                  size;
        struct ntp_msg           msg;
        double                   T1, T2, T3, T4;
-       double                   abs_offset;
        time_t                   interval;
 
        if ((size = recvfrom(p->query->fd, &buf, sizeof(buf), 0,
            NULL, NULL)) == -1) {
                if (errno == EHOSTUNREACH || errno == EHOSTDOWN ||
-                   errno == ENETDOWN || errno == ECONNREFUSED) {
-                       log_warn("recvfrom %s",
-                           log_sockaddr((struct sockaddr *)&p->addr->ss));
+                   errno == ENETUNREACH || errno == ENETDOWN ||
+                   errno == ECONNREFUSED) {
+                       client_log_error(p, "recvfrom", errno);
+                       set_next(p, error_interval());
                        return (0);
                } else
                        fatal("recvfrom");
@@ -199,8 +199,13 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
                return (0);
 
        if ((msg.status & LI_ALARM) == LI_ALARM || msg.stratum == 0 ||
-           msg.stratum > NTP_MAXSTRATUM)
+           msg.stratum > NTP_MAXSTRATUM) {
+               interval = error_interval();
+               set_next(p, interval);
+               log_info("reply from %s: not synced, next query %ds",
+                   log_sockaddr((struct sockaddr *)&p->addr->ss), interval);
                return (0);
+       }
 
        /*
         * From RFC 2030 (with a correction to the delay math):
@@ -237,24 +242,11 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
        p->reply[p->shift].status.stratum = msg.stratum;
 
        if (p->trustlevel < TRUSTLEVEL_PATHETIC)
-               interval = INTERVAL_QUERY_PATHETIC;
+               interval = scale_interval(INTERVAL_QUERY_PATHETIC);
        else if (p->trustlevel < TRUSTLEVEL_AGRESSIVE)
-               interval = INTERVAL_QUERY_AGRESSIVE;
-       else {
-               if (p->reply[p->shift].offset < 0)
-                       abs_offset = -p->reply[p->shift].offset;
-               else
-                       abs_offset = p->reply[p->shift].offset;
-
-               if (abs_offset > QSCALE_OFF_MAX)
-                       interval = INTERVAL_QUERY_NORMAL;
-               else if (abs_offset < QSCALE_OFF_MIN)
-                       interval = INTERVAL_QUERY_NORMAL *
-                           (QSCALE_OFF_MAX / QSCALE_OFF_MIN);
-               else
-                       interval = INTERVAL_QUERY_NORMAL *
-                           (QSCALE_OFF_MAX / abs_offset);
-       }
+               interval = scale_interval(INTERVAL_QUERY_AGRESSIVE);
+       else
+               interval = scale_interval(INTERVAL_QUERY_NORMAL);
 
        set_next(p, interval);
        p->state = STATE_REPLY_RECEIVED;
@@ -319,3 +311,17 @@ client_update(struct ntp_peer *p)
 
        return (0);
 }
+
+void
+client_log_error(struct ntp_peer *peer, const char *operation, int error)
+{
+       const char *address;
+
+       address = log_sockaddr((struct sockaddr *)&peer->addr->ss);
+       if (peer->lasterror == error) {
+               log_debug("%s %s", operation, address);
+               return;
+       }
+       peer->lasterror = error;
+       log_warn("%s %s", operation, address);
+}
index a7eb35c..6f4d4ae 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/config.c,v 1.14 2004/08/30 12:02:59 henning Exp $ */
+/*     $OpenBSD: config.c,v 1.14 2004/08/30 12:02:59 henning Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -133,7 +133,7 @@ host_dns(const char *s, struct ntp_addr **hn)
                        return (-1);
        }
 
-       for (res = res0; res; res = res->ai_next) {
+       for (res = res0; res && cnt < MAX_SERVERS_DNS; res = res->ai_next) {
                if (res->ai_family != AF_INET &&
                    res->ai_family != AF_INET6)
                        continue;
index 70ce3c4..4db7806 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/imsg.c,v 1.7 2004/09/16 01:13:42 henning Exp $ */
+/*     $OpenBSD: imsg.c,v 1.6 2004/09/16 01:10:05 henning Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
index e98b189..947ac34 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/log.c,v 1.6 2004/07/12 09:22:38 dtucker Exp $ */
+/*     $OpenBSD: log.c,v 1.5 2004/07/11 03:05:50 dtucker Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
index a46144a..fbe0bc3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/ntp.c,v 1.44 2004/12/13 12:39:15 dtucker Exp $ */
+/*     $OpenBSD: ntp.c,v 1.50 2005/02/02 19:03:52 henning Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -64,7 +64,7 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf)
 {
        int                      a, b, nfds, i, j, idx_peers, timeout, nullfd;
        u_int                    pfd_elms = 0, idx2peer_elms = 0;
-       u_int                    listener_cnt, new_cnt;
+       u_int                    listener_cnt, new_cnt, sent_cnt;
        pid_t                    pid;
        struct pollfd           *pfd = NULL;
        struct passwd           *pw;
@@ -90,7 +90,7 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf)
                fatal("getservbyname");
 
        if ((pw = getpwnam(NTPD_USER)) == NULL)
-               fatal(NULL);
+               fatal("getpwnam");
 
        if ((nullfd = open(_PATH_DEVNULL, O_RDWR, 0)) == -1)
                fatal(NULL);
@@ -143,7 +143,7 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf)
        b = 1000000000 / tp.tv_nsec;    /* convert to Hz */
        for (a = 0; b > 1; a--, b >>= 1);
        conf->status.precision = a;
-       
+       conf->scale = 1;
 
        log_info("ntp engine ready");
 
@@ -191,25 +191,28 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf)
                }
 
                idx_peers = i;
+               sent_cnt = 0;
                TAILQ_FOREACH(p, &conf->ntp_peers, entry) {
                        if (p->next > 0 && p->next < nextaction)
                                nextaction = p->next;
                        if (p->next > 0 && p->next <= time(NULL))
-                               client_query(p);
+                               if (client_query(p) == 0)
+                                       sent_cnt++;
 
                        if (p->deadline > 0 && p->deadline < nextaction)
                                nextaction = p->deadline;
                        if (p->deadline > 0 && p->deadline <= time(NULL)) {
-                               log_debug("no reply from %s received in time",
-                                   log_sockaddr(
-                                   (struct sockaddr *)&p->addr->ss));
+                               timeout = error_interval();
+                               log_debug("no reply from %s received in time, "
+                                   "next query %ds", log_sockaddr(
+                                   (struct sockaddr *)&p->addr->ss), timeout);
                                if (p->trustlevel >= TRUSTLEVEL_BADPEER &&
                                    (p->trustlevel /= 2) < TRUSTLEVEL_BADPEER)
                                        log_info("peer %s now invalid",
                                            log_sockaddr(
                                            (struct sockaddr *)&p->addr->ss));
                                client_nextaddr(p);
-                               client_query(p);
+                               set_next(p, timeout);
                        }
 
                        if (p->state == STATE_QUERY_SENT) {
@@ -220,6 +223,9 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf)
                        }
                }
 
+               if (sent_cnt == 0 && conf->settime)
+                       priv_settime(0);        /* no good peers, don't wait */
+
                if (ibuf_main->w.queued > 0)
                        pfd[PFD_PIPE_MAIN].events |= POLLOUT;
 
@@ -411,6 +417,7 @@ priv_adjtime(void)
                conf->status.reftime = gettime();
                conf->status.leap = LI_NOWARNING;
                conf->status.stratum++; /* one more than selected peer */
+               update_scale(offset_median);
 
                if (peers[offset_cnt / 2]->addr->ss.ss_family == AF_INET)
                        conf->status.refid = ((struct sockaddr_in *)
@@ -455,3 +462,38 @@ priv_host_dns(char *name, u_int32_t peerid)
        dlen = strlen(name) + 1;
        imsg_compose(ibuf_main, IMSG_HOST_DNS, peerid, 0, name, dlen);
 }
+
+void
+update_scale(double offset)
+{
+       if (offset < 0)
+               offset = -offset;
+
+       if (offset > QSCALE_OFF_MAX)
+               conf->scale = 1;
+       else if (offset < QSCALE_OFF_MIN)
+               conf->scale = QSCALE_OFF_MAX / QSCALE_OFF_MIN;
+       else
+               conf->scale = QSCALE_OFF_MAX / offset;
+}
+
+time_t
+scale_interval(time_t requested)
+{
+       time_t interval, r;
+
+       interval = requested * conf->scale;
+       r = arc4random() % MAX(5, interval / 10);
+       return (interval + r);
+}
+
+time_t
+error_interval(void)
+{
+       time_t interval, r;
+
+       interval = INTERVAL_QUERY_PATHETIC * QSCALE_OFF_MAX / QSCALE_OFF_MIN;
+       r = arc4random() % (interval / 10);
+       return (interval + r);
+}
+
index 47c9261..875f798 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/ntp.h,v 1.11 2004/12/13 12:22:52 dtucker Exp $ */
+/*     $OpenBSD: ntp.h,v 1.10 2004/12/08 15:47:38 mickey Exp $ */
 
 /*
  * Copyright (c) 2004 Henning Brauer <henning@openbsd.org>
index f663dff..dbefec7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/ntp_msg.c,v 1.14 2004/12/14 06:27:13 dtucker Exp $ */
+/*     $OpenBSD: ntp_msg.c,v 1.13 2004/12/08 17:35:16 mickey Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
index 7c26c5a..6edfb87 100644 (file)
@@ -1,4 +1,4 @@
-.\" $OpenBSD: src/usr.sbin/ntpd/ntpd.8,v 1.13 2004/12/10 03:54:18 jaredy Exp $
+.\" $OpenBSD: ntpd.8,v 1.12 2004/12/07 10:06:12 jmc Exp $
 .\"
 .\" Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
 .\"
index 1672f01..95305a3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/ntpd.c,v 1.25 2004/12/06 20:57:17 mickey Exp $ */
+/*     $OpenBSD: ntpd.c,v 1.28 2005/01/28 12:32:24 henning Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
 
 #include "ntpd.h"
 
-void   sighdlr(int);
-void   usage(void);
-int    main(int, char *[]);
-int    check_child(pid_t, const char *);
-int    dispatch_imsg(struct ntpd_conf *);
-void   ntpd_adjtime(double);
-void   ntpd_settime(double);
+void           sighdlr(int);
+__dead void    usage(void);
+int            main(int, char *[]);
+int            check_child(pid_t, const char *);
+int            dispatch_imsg(struct ntpd_conf *);
+void           ntpd_adjtime(double);
+void           ntpd_settime(double);
 
 volatile sig_atomic_t   quit = 0;
 volatile sig_atomic_t   reconfig = 0;
@@ -63,7 +63,7 @@ sighdlr(int sig)
        }
 }
 
-void
+__dead void
 usage(void)
 {
        extern char *__progname;
@@ -128,14 +128,15 @@ main(int argc, char *argv[])
        if (!conf.settime) {
                log_init(conf.debug);
                if (!conf.debug)
-                       daemon(1, 0);
+                       if (daemon(1, 0))
+                               fatal("daemon");
        } else
                timeout = 15 * 1000;
 
        if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pipe_chld) == -1)
                fatal("socketpair");
 
-       /* fork children */
+       /* fork child process */
        chld_pid = ntp_main(pipe_chld, &conf);
 
        setproctitle("[priv]");
@@ -164,18 +165,19 @@ main(int argc, char *argv[])
                        }
 
                if (nfds == 0 && conf.settime) {
-                       log_debug("no reply received, skipping initial time"
+                       log_debug("no reply received, skipping initial time "
                            "setting");
                        conf.settime = 0;
                        timeout = INFTIM;
                        log_init(conf.debug);
                        if (!conf.debug)
-                               daemon(1, 0);
+                               if (daemon(1, 0))
+                                       fatal("daemon");
                }
 
                if (nfds > 0 && (pfd[PFD_PIPE].revents & POLLOUT))
                        if (msgbuf_write(&ibuf->w) < 0) {
-                               log_warn("pipe write error (to child");
+                               log_warn("pipe write error (to child)");
                                quit = 1;
                        }
 
@@ -274,7 +276,8 @@ dispatch_imsg(struct ntpd_conf *conf)
                        /* daemonize now */
                        log_init(conf->debug);
                        if (!conf->debug)
-                               daemon(1, 0);
+                               if (daemon(1, 0))
+                                       fatal("daemon");
                        conf->settime = 0;
                        break;
                case IMSG_HOST_DNS:
@@ -306,7 +309,8 @@ ntpd_adjtime(double d)
 {
        struct timeval  tv;
 
-       if (d >= (double)LOG_NEGLIGEE / 1000)
+       if (d >= (double)LOG_NEGLIGEE / 1000 ||
+           d <= -1 * (double)LOG_NEGLIGEE / 1000)
                log_info("adjusting local clock by %fs", d);
        else
                log_debug("adjusting local clock by %fs", d);
index 8c1bd16..5b633bd 100644 (file)
@@ -1,4 +1,4 @@
-.\" $OpenBSD: src/usr.sbin/ntpd/ntpd.conf.5,v 1.9 2004/11/08 19:09:19 otto Exp $
+.\" $OpenBSD: ntpd.conf.5,v 1.8 2004/11/07 21:42:33 jmc Exp $
 .\"
 .\" Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
 .\"
index aec6cfe..1027f5c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/ntpd.h,v 1.47 2004/12/09 20:24:46 mickey Exp $ */
+/*     $OpenBSD: ntpd.h,v 1.52 2005/02/02 18:57:09 henning Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -47,6 +47,8 @@
 #define        TRUSTLEVEL_AGRESSIVE            8
 #define        TRUSTLEVEL_MAX                  10
 
+#define        MAX_SERVERS_DNS                 8
+
 #define        QSCALE_OFF_MIN                  0.05
 #define        QSCALE_OFF_MAX                  0.50
 
@@ -111,6 +113,7 @@ struct ntp_peer {
        u_int32_t                        id;
        u_int8_t                         shift;
        u_int8_t                         trustlevel;
+       int                              lasterror;
 };
 
 struct ntpd_conf {
@@ -120,14 +123,15 @@ struct ntpd_conf {
        u_int8_t                                listen_all;
        u_int8_t                                settime;
        u_int8_t                                debug;
+       u_int32_t                               scale;
 };
 
 struct buf {
        TAILQ_ENTRY(buf)         entries;
        u_char                  *buf;
-       ssize_t                  size;
-       ssize_t                  wpos;
-       ssize_t                  rpos;
+       size_t                   size;
+       size_t                   wpos;
+       size_t                   rpos;
 };
 
 struct msgbuf {
@@ -186,8 +190,8 @@ void                 fatalx(const char *);
 const char *    log_sockaddr(struct sockaddr *);
 
 /* buffer.c */
-struct buf     *buf_open(ssize_t);
-int             buf_add(struct buf *, void *, ssize_t);
+struct buf     *buf_open(size_t);
+int             buf_add(struct buf *, void *, size_t);
 int             buf_close(struct msgbuf *, struct buf *);
 void            buf_free(struct buf *);
 void            msgbuf_init(struct msgbuf *);
@@ -235,6 +239,11 @@ int        client_addr_init(struct ntp_peer *);
 int    client_nextaddr(struct ntp_peer *);
 int    client_query(struct ntp_peer *);
 int    client_dispatch(struct ntp_peer *, u_int8_t);
+void   client_log_error(struct ntp_peer *, const char *, int);
+void   update_scale(double);
+time_t scale_interval(time_t);
+time_t error_interval(void);
+void   set_next(struct ntp_peer *, time_t);
 
 /* util.c */
 double                 gettime(void);
index 09e2310..fde93cb 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/parse.y,v 1.24 2004/11/25 06:27:41 henning Exp $ */
+/*     $OpenBSD: parse.y,v 1.23 2004/11/10 11:27:54 henning Exp $ */
 
 /*
  * Copyright (c) 2002, 2003, 2004 Henning Brauer <henning@openbsd.org>
index 9acc1d2..d364e49 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/server.c,v 1.19 2004/12/08 15:47:38 mickey Exp $ */
+/*     $OpenBSD: server.c,v 1.20 2004/12/22 05:36:11 dtucker Exp $ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -32,16 +32,16 @@ int
 setup_listeners(struct servent *se, struct ntpd_conf *conf, u_int *cnt)
 {
        struct listen_addr      *la;
-       struct ifaddrs          *ifap;
+       struct ifaddrs          *ifa, *ifap;
        struct sockaddr         *sa;
        u_int                    new_cnt = 0;
        int                      tos = IPTOS_LOWDELAY;
 
        if (conf->listen_all) {
-               if (getifaddrs(&ifap) == -1)
+               if (getifaddrs(&ifa) == -1)
                        fatal("getifaddrs");
 
-               for (; ifap != NULL; ifap = ifap->ifa_next) {
+               for (ifap = ifa; ifap != NULL; ifap = ifap->ifa_next) {
                        sa = ifap->ifa_addr;
 
                        if (sa->sa_family != AF_INET &&
@@ -56,7 +56,7 @@ setup_listeners(struct servent *se, struct ntpd_conf *conf, u_int *cnt)
                        TAILQ_INSERT_TAIL(&conf->listen_addrs, la, entry);
                }
 
-               freeifaddrs(ifap);
+               freeifaddrs(ifa);
        }
 
        TAILQ_FOREACH(la, &conf->listen_addrs, entry) {
@@ -112,7 +112,7 @@ server_dispatch(int fd, struct ntpd_conf *conf)
        if ((size = recvfrom(fd, &buf, sizeof(buf), 0,
            (struct sockaddr *)&fsa, &fsa_len)) == -1) {
                if (errno == EHOSTUNREACH || errno == EHOSTDOWN ||
-                   errno == ENETDOWN) {
+                   errno == ENETUNREACH || errno == ENETDOWN) {
                        log_warn("recvfrom %s",
                            log_sockaddr((struct sockaddr *)&fsa));
                        return (0);
index 0014487..37d6db2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: src/usr.sbin/ntpd/util.c,v 1.10 2004/12/08 15:47:38 mickey Exp $ */
+/*     $OpenBSD: util.c,v 1.9 2004/11/12 17:24:52 henning Exp $ */
 
 /*
  * Copyright (c) 2004 Alexander Guy <alexander.guy@andern.org>