]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
configure.ac:
authorHal Murray <murray@ntp.org>
Sun, 29 Nov 2009 02:30:09 +0000 (21:30 -0500)
committerHal Murray <murray@ntp.org>
Sun, 29 Nov 2009 02:30:09 +0000 (21:30 -0500)
  Add --enable-force-defer-DNS
  Helps debugging deferred DNS lookups.
ChangeLog:
  Bug 761:  internal resolver does not seem to honor -4/-6 qualifiers
ntp_config.c:
  Bug 761:  internal resolver does not seem to honor -4/-6 qualifiers
  FORCE_DEFER_DNS helps debugging.
  Pass no_needed to ntp_intres, first step on Bug 975.
ntp_intres.c:
  Bug 761:  internal resolver does not seem to honor -4/-6 qualifiers
  Take no_needed from ntp_config, first step on Bug 975.

bk: 4b11dcb13HDf-WPKHhwVVFIJauzLrQ

ChangeLog
configure.ac
ntpd/ntp_config.c
ntpd/ntp_intres.c

index c378f300eca3ef005b5fea65215cb89c4454a58f..8b19a0041248b3abf302b895b79c3efebb6ed51b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+* [Bug 761] internal resolver does not seem to honor -4/-6 qualifiers
+*  Pass no_needed to ntp_intres as first part of fixing Bug 975.
+*  Add --enable-force-defer-DNS to help debugging.
 (4.2.5p249-RC) 2009/11/28 Released by Harlan Stenn <stenn@ntp.org>
 * [Bug 1400] An empty KOD DB file causes sntp to coredump.
 * sntp: documentation cleanup.
index c85484e1adb9fb9dd0688e53deced5ac4fca3fba..636b195b44fd80f96c1ed540658b672785d2bc56 100644 (file)
@@ -2142,6 +2142,22 @@ case "$ans" in
 esac
 AC_MSG_RESULT([$ans])
 
+AC_MSG_CHECKING([if ntpd will use the deferred DNS lookup path])
+AC_ARG_ENABLE(
+    [force-defer-DNS],
+    AS_HELP_STRING(
+       [--enable-force-defer-DNS],
+       [- force all DNS lookups to take the deferred path]
+    ),
+    [ans=$enableval],
+    [ans=no]
+)
+case "$ans" in
+ yes)
+    AC_DEFINE(FORCE_DEFER_DNS, 1, [Force deferred DNS lookups?])
+esac
+AC_MSG_RESULT([$ans])
+
 AC_CACHE_CHECK([if we have the tty_clk line discipline/streams module],
  ac_cv_var_tty_clk,
  [case "$ac_cv_header_sys_clkdefs_h$ac_cv_hdr_def_tiocdcdtimestamp" in
index f6e53cdaf8efe6b481266099a2e9e957d68b6caa..414dcabf1f5280ee78b4e1e805d17c52b139036d 100644 (file)
@@ -310,9 +310,9 @@ static int getnetnum(const char *num,sockaddr_u *addr, int complain,
 static int get_multiple_netnums(const char *num, sockaddr_u *addr,
                                struct addrinfo **res, int complain,
                                enum gnn_type a_type);
-static void save_resolve(char *name, int mode, int version,
-                        int minpoll, int maxpoll, u_int flags,int ttl,
-                        keyid_t keyid,u_char *keystr);
+static void save_resolve(char *name, int no_needed, int type,
+                        int mode, int version, int minpoll, int maxpoll,
+                        u_int flags, int ttl, keyid_t keyid, u_char *keystr);
 static void abort_resolve(void);
 static void do_resolve_internal(void);
 
@@ -3379,7 +3379,10 @@ config_peers(
                status = get_multiple_netnums(curr_peer->addr->address,
                    &peeraddr, &res, 0, t_UNK);
 
-#ifdef FORCE_DEFER_DNS /* Hack for debugging Deferred DNS */
+#ifdef FORCE_DEFER_DNS
+               /* Hack for debugging Deferred DNS
+                * Pretend working names didn't work.
+                */
                if (status == 1) {
                        /* Deferring everything breaks refclocks. */
                        memcpy(&peeraddr, res->ai_addr, res->ai_addrlen);
@@ -3388,7 +3391,7 @@ config_peers(
                                msyslog(LOG_INFO, "Forcing Deferred DNS for %s, %s",
                                        curr_peer->addr->address, stoa(&peeraddr));
                        } else {
-                               msyslog(LOG_INFO, "NOT Deferred DNS for %s, %s",
+                               msyslog(LOG_INFO, "NOT Deferring DNS for %s, %s",
                                        curr_peer->addr->address, stoa(&peeraddr));
                        }
                }
@@ -3407,8 +3410,10 @@ config_peers(
                 * resolution later
                 */
                else if (status != 1) {
-                       msyslog(LOG_INFO, "Deferring DNS for %s", curr_peer->addr->address);
+                       msyslog(LOG_INFO, "Deferring DNS for %s %d", curr_peer->addr->address, no_needed);
                        save_resolve(curr_peer->addr->address,
+                                    no_needed,
+                                    curr_peer->addr->type,
                                     hmode,
                                     curr_peer->peerversion,
                                     curr_peer->minpoll,
@@ -4386,6 +4391,8 @@ catchchild(
 static void
 save_resolve(
        char *name,
+       int no_needed,
+       int type,
        int mode,
        int version,
        int minpoll,
@@ -4443,12 +4450,15 @@ save_resolve(
        }
 #endif
 
-       (void)fprintf(res_fp, "%s %d %d %d %d %d %d %u %s\n", name,
-                     mode, version, minpoll, maxpoll, flags, ttl, keyid, keystr);
+       (void)fprintf(res_fp, "%s %d %d %d %d %d %d %d %d %u %s\n",
+               name, no_needed, type,
+               mode, version, minpoll, maxpoll, flags, ttl, keyid, keystr);
 #ifdef DEBUG
        if (debug > 1)
-               printf("config: %s %d %d %d %d %x %d %u %s\n", name, mode,
-                      version, minpoll, maxpoll, flags, ttl, keyid, keystr);
+               printf("config: %s %d %d %d %d %d %d %x %d %u %s\n",
+                       name, no_needed, type,
+                       mode, version, minpoll, maxpoll, flags,
+                       ttl, keyid, keystr);
 #endif
 
 #else  /* SYS_VXWORKS */
index efebfbb81d055dcb07352135726fb18071984072..0ca876be0383dc0788f8f1a86a56ef4b28f6b41e 100644 (file)
@@ -61,6 +61,9 @@ struct conf_entry {
        struct conf_entry *ce_next;
        char *ce_name;                  /* name to resolve */
        struct conf_peer ce_config;     /* config info for peer */
+       int no_needed;                  /* number of addresses needed (pool) */
+       /*  no_needed isn't used yet: It's needed to fix bug-975 */
+       int type;                       /* -4 and -6 flags */
        sockaddr_u peer_store;          /* address info for both fams */
 };
 #define        ce_peeraddr     ce_config.peeraddr
@@ -119,15 +122,17 @@ static    int resolve_value;      /* next value of resolve timer */
  * is supposed to consist of entries in the following order
  */
 #define        TOK_HOSTNAME    0
-#define        TOK_HMODE       1
-#define        TOK_VERSION     2
-#define TOK_MINPOLL    3
-#define TOK_MAXPOLL    4
-#define        TOK_FLAGS       5
-#define TOK_TTL                6
-#define        TOK_KEYID       7
-#define TOK_KEYSTR     8
-#define        NUMTOK          9
+#define        TOK_NEEDED      1
+#define        TOK_TYPE        2
+#define        TOK_HMODE       3
+#define        TOK_VERSION     4
+#define        TOK_MINPOLL     5
+#define        TOK_MAXPOLL     6
+#define        TOK_FLAGS       7
+#define        TOK_TTL         8
+#define        TOK_KEYID       9
+#define        TOK_KEYSTR      10
+#define        NUMTOK          11
 
 #define        MAXLINESIZE     512
 
@@ -150,7 +155,7 @@ char *req_file;             /* name of the file with configuration info */
 static void    checkparent     (void);
 static struct conf_entry *
                removeentry     (struct conf_entry *);
-static void    addentry        (char *, int, int, int, int, u_int,
+static void    addentry        (char *, int, int, int, int, int, int, u_int,
                                   int, keyid_t, char *);
 static int     findhostaddr    (struct conf_entry *);
 static void    openntp         (void);
@@ -425,6 +430,8 @@ removeentry(
 static void
 addentry(
        char *name,
+       int no_needed,
+       int type,
        int mode,
        int version,
        int minpoll,
@@ -440,9 +447,9 @@ addentry(
 #ifdef DEBUG
        if (debug > 1)
                msyslog(LOG_INFO, 
-                   "intres: <%s> %d %d %d %d %x %d %x %s", name, mode,
-                   version, minpoll, maxpoll, flags, ttl, keyid,
-                   keystr);
+                   "intres: <%s> %d %d %d %d %d %d %x %d %x %s",
+                   name, no_needed, type, mode, version,
+                   minpoll, maxpoll, flags, ttl, keyid, keystr);
 #endif
        ce = emalloc(sizeof(*ce));
        ce->ce_name = estrdup(name);
@@ -455,6 +462,9 @@ addentry(
        ce->ce_version = (u_char)version;
        ce->ce_minpoll = (u_char)minpoll;
        ce->ce_maxpoll = (u_char)maxpoll;
+       ce->no_needed = no_needed;      /* Not used after here. */
+                                       /* Start of fixing bug-975 */
+       ce->type = type;
        ce->ce_flags = (u_char)flags;
        ce->ce_ttl = (u_char)ttl;
        ce->ce_keyid = keyid;
@@ -512,7 +522,9 @@ findhostaddr(
                        entry->ce_name));
 
                memset(&hints, 0, sizeof(hints));
-               hints.ai_family = AF_UNSPEC;
+               hints.ai_family = entry->type;
+               hints.ai_socktype = SOCK_DGRAM;
+               hints.ai_protocol = IPPROTO_UDP;
                /*
                 * If IPv6 is not available look only for v4 addresses
                 */
@@ -1174,9 +1186,11 @@ readconf(
                /*
                 * This is as good as we can check it.  Add it in.
                 */
-               addentry(token[TOK_HOSTNAME], (int)intval[TOK_HMODE],
-                        (int)intval[TOK_VERSION], (int)intval[TOK_MINPOLL],
-                        (int)intval[TOK_MAXPOLL], flags, (int)intval[TOK_TTL],
+               addentry(token[TOK_HOSTNAME],
+                        (int)intval[TOK_NEEDED], (int)intval[TOK_TYPE],
+                        (int)intval[TOK_HMODE], (int)intval[TOK_VERSION],
+                        (int)intval[TOK_MINPOLL], (int)intval[TOK_MAXPOLL],
+                        flags, (int)intval[TOK_TTL],
                         intval[TOK_KEYID], token[TOK_KEYSTR]);
        }
 }