+* [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.
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
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);
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);
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));
}
}
* 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,
static void
save_resolve(
char *name,
+ int no_needed,
+ int type,
int mode,
int version,
int minpoll,
}
#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 */
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
* 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
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);
static void
addentry(
char *name,
+ int no_needed,
+ int type,
int mode,
int version,
int minpoll,
#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);
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;
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
*/
/*
* 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]);
}
}