From: Hal Murray Date: Sun, 29 Nov 2009 02:30:09 +0000 (-0500) Subject: configure.ac: X-Git-Tag: NTP_4_2_5P250_RC~4^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9a84fc86ff12e0341376f1758ae0f8b68e68367;p=thirdparty%2Fntp.git configure.ac: 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 --- diff --git a/ChangeLog b/ChangeLog index c378f300e..8b19a0041 100644 --- 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 * [Bug 1400] An empty KOD DB file causes sntp to coredump. * sntp: documentation cleanup. diff --git a/configure.ac b/configure.ac index c85484e1a..636b195b4 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/ntpd/ntp_config.c b/ntpd/ntp_config.c index f6e53cdaf..414dcabf1 100644 --- a/ntpd/ntp_config.c +++ b/ntpd/ntp_config.c @@ -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 */ diff --git a/ntpd/ntp_intres.c b/ntpd/ntp_intres.c index efebfbb81..0ca876be0 100644 --- a/ntpd/ntp_intres.c +++ b/ntpd/ntp_intres.c @@ -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]); } }