* [Bug 1387] Storage leak in ntp_intres (minor).
* [Bug 1389] buffer overflow in refclock_oncore.c
* [Bug 1391] .texi usage text from installed, not built binaries.
+* [Bug 1392] intres retries duplicate assocations endlessly.
* Correct *-opts.h dependency so default 'get' action isn't used.
(4.2.5p247-RC) 2009/11/20 Released by Harlan Stenn <stenn@ntp.org>
* [Bug 1142] nodebug builds shed no light on -d, -D option failure.
static void checkparent (void);
-static void removeentry (struct conf_entry *);
+static struct conf_entry *
+ removeentry (struct conf_entry *);
static void addentry (char *, int, int, int, int, u_int,
int, keyid_t, char *);
static int findhostaddr (struct conf_entry *);
/*
* removeentry - we are done with an entry, remove it from the list
*/
-static void
+static struct conf_entry *
removeentry(
struct conf_entry *entry
)
{
register struct conf_entry *ce;
+ struct conf_entry *next_ce;
ce = confentries;
- if (ce == entry) {
+ if (ce == entry)
confentries = ce->ce_next;
- return;
- }
-
- while (ce != NULL) {
- if (ce->ce_next == entry) {
- ce->ce_next = entry->ce_next;
- return;
+ else
+ while (ce != NULL) {
+ if (ce->ce_next == entry) {
+ ce->ce_next = entry->ce_next;
+ break;
+ }
+ ce = ce->ce_next;
}
- ce = ce->ce_next;
- }
+
+ next_ce = entry->ce_next;
+ free(entry);
+
+ return next_ce;
}
return 0;
}
#endif /* SYS_WINNT */
-
+
/*
* Wait for a response. A weakness of the mode 7 protocol used
/* success */
return 1;
+ case INFO_ERR_NODATA:
+ /*
+ * newpeer() refused duplicate association, no
+ * point in retrying so call it success.
+ */
+ return 1;
+
case INFO_ERR_IMPL:
msyslog(LOG_ERR,
"ntp_intres.request: implementation mismatch");
"ntp_intres.request: format error");
return 0;
- case INFO_ERR_NODATA:
- msyslog(LOG_ERR,
- "ntp_intres.request: no data available");
- return 0;
-
case INFO_ERR_AUTH:
msyslog(LOG_ERR,
"ntp_intres.request: permission denied");
)
{
register struct conf_entry *ce;
- register struct conf_entry *ceremove;
#ifdef DEBUG
if (debug > 1)
msyslog(LOG_ERR,
"couldn't resolve `%s', giving up on it",
ce->ce_name);
- ceremove = ce;
- ce = ceremove->ce_next;
- removeentry(ceremove);
+ ce = removeentry(ce);
continue;
#endif
- }
+ } else if (!SOCK_UNSPEC(&ce->peer_store))
+ msyslog(LOG_INFO,
+ "DNS %s -> %s", ce->ce_name,
+ stoa(&ce->peer_store));
}
if (!SOCK_UNSPEC(&ce->peer_store)) {
if (request(&ce->ce_config)) {
- ceremove = ce;
- ce = ceremove->ce_next;
- removeentry(ceremove);
+ ce = removeentry(ce);
continue;
}
/*
peer->maxpoll = (u_char)max(maxpoll, NTP_MINPOLL);
if (peer->minpoll > peer->maxpoll)
peer->minpoll = peer->maxpoll;
-#ifdef DEBUG
- if (debug > 2) {
- if (peer->dstadr)
- printf("newpeer: using fd %d and our addr %s\n",
- peer->dstadr->fd,
- stoa(&peer->dstadr->sin));
- else
- printf("newpeer: local interface currently not bound\n");
- }
-#endif
-
+
+ if (peer->dstadr)
+ DPRINTF(3, ("newpeer: using fd %d and our addr %s\n",
+ peer->dstadr->fd, stoa(&peer->dstadr->sin)));
+ else
+ DPRINTF(3, ("newpeer: local interface currently not bound\n"));
/*
* Broadcast needs the socket enabled for broadcast