mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 22:45:39 +00:00
2207. [port] Some implementations of getaddrinfo() fail to set
ai_canonname correctly. [RT #17061]
This commit is contained in:
2
CHANGES
2
CHANGES
@@ -1,3 +1,5 @@
|
|||||||
|
2207. [port] Some implementations of getaddrinfo() fail to set
|
||||||
|
ai_canonname correctly. [RT #17061]
|
||||||
|
|
||||||
--- 9.5.0a6 released ---
|
--- 9.5.0a6 released ---
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: check-tool.c,v 1.29 2007/06/18 23:47:16 tbox Exp $ */
|
/* $Id: check-tool.c,v 1.30 2007/08/06 01:06:49 marka Exp $ */
|
||||||
|
|
||||||
/*! \file */
|
/*! \file */
|
||||||
|
|
||||||
@@ -193,7 +193,16 @@ checkns(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner,
|
|||||||
dns_name_format(name, namebuf, sizeof(namebuf) - 1);
|
dns_name_format(name, namebuf, sizeof(namebuf) - 1);
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (strcasecmp(ai->ai_canonname, namebuf) != 0 &&
|
/*
|
||||||
|
* Work around broken getaddrinfo() implementations that
|
||||||
|
* fail to set ai_canonname on first entry.
|
||||||
|
*/
|
||||||
|
cur = ai;
|
||||||
|
while (cur != NULL && cur->ai_canonname == NULL &&
|
||||||
|
cur->ai_next != NULL)
|
||||||
|
cur = cur->ai_next;
|
||||||
|
if (ai != NULL && cur->ai_canonname != NULL &&
|
||||||
|
strcasecmp(ai->ai_canonname, namebuf) != 0 &&
|
||||||
!logged(namebuf, ERR_IS_CNAME)) {
|
!logged(namebuf, ERR_IS_CNAME)) {
|
||||||
dns_zone_log(zone, ISC_LOG_ERROR,
|
dns_zone_log(zone, ISC_LOG_ERROR,
|
||||||
"%s/NS '%s' (out of zone) "
|
"%s/NS '%s' (out of zone) "
|
||||||
@@ -348,7 +357,7 @@ checkns(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner,
|
|||||||
static isc_boolean_t
|
static isc_boolean_t
|
||||||
checkmx(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner) {
|
checkmx(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner) {
|
||||||
#ifdef USE_GETADDRINFO
|
#ifdef USE_GETADDRINFO
|
||||||
struct addrinfo hints, *ai;
|
struct addrinfo hints, *ai, *cur;
|
||||||
char namebuf[DNS_NAME_FORMATSIZE + 1];
|
char namebuf[DNS_NAME_FORMATSIZE + 1];
|
||||||
char ownerbuf[DNS_NAME_FORMATSIZE];
|
char ownerbuf[DNS_NAME_FORMATSIZE];
|
||||||
int result;
|
int result;
|
||||||
@@ -373,7 +382,16 @@ checkmx(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner) {
|
|||||||
dns_name_format(name, namebuf, sizeof(namebuf) - 1);
|
dns_name_format(name, namebuf, sizeof(namebuf) - 1);
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (strcasecmp(ai->ai_canonname, namebuf) != 0) {
|
/*
|
||||||
|
* Work around broken getaddrinfo() implementations that
|
||||||
|
* fail to set ai_canonname on first entry.
|
||||||
|
*/
|
||||||
|
cur = ai;
|
||||||
|
while (cur != NULL && cur->ai_canonname == NULL &&
|
||||||
|
cur->ai_next != NULL)
|
||||||
|
cur = cur->ai_next;
|
||||||
|
if (cur != NULL && cur->ai_canonname != NULL &&
|
||||||
|
strcasecmp(cur->ai_canonname, namebuf) != 0) {
|
||||||
if ((zone_options & DNS_ZONEOPT_WARNMXCNAME) != 0)
|
if ((zone_options & DNS_ZONEOPT_WARNMXCNAME) != 0)
|
||||||
level = ISC_LOG_WARNING;
|
level = ISC_LOG_WARNING;
|
||||||
if ((zone_options & DNS_ZONEOPT_IGNOREMXCNAME) == 0) {
|
if ((zone_options & DNS_ZONEOPT_IGNOREMXCNAME) == 0) {
|
||||||
@@ -422,7 +440,7 @@ checkmx(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner) {
|
|||||||
static isc_boolean_t
|
static isc_boolean_t
|
||||||
checksrv(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner) {
|
checksrv(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner) {
|
||||||
#ifdef USE_GETADDRINFO
|
#ifdef USE_GETADDRINFO
|
||||||
struct addrinfo hints, *ai;
|
struct addrinfo hints, *ai, *cur;
|
||||||
char namebuf[DNS_NAME_FORMATSIZE + 1];
|
char namebuf[DNS_NAME_FORMATSIZE + 1];
|
||||||
char ownerbuf[DNS_NAME_FORMATSIZE];
|
char ownerbuf[DNS_NAME_FORMATSIZE];
|
||||||
int result;
|
int result;
|
||||||
@@ -447,7 +465,16 @@ checksrv(dns_zone_t *zone, dns_name_t *name, dns_name_t *owner) {
|
|||||||
dns_name_format(name, namebuf, sizeof(namebuf) - 1);
|
dns_name_format(name, namebuf, sizeof(namebuf) - 1);
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (strcasecmp(ai->ai_canonname, namebuf) != 0) {
|
/*
|
||||||
|
* Work around broken getaddrinfo() implementations that
|
||||||
|
* fail to set ai_canonname on first entry.
|
||||||
|
*/
|
||||||
|
cur = ai;
|
||||||
|
while (cur != NULL && cur->ai_canonname == NULL &&
|
||||||
|
cur->ai_next != NULL)
|
||||||
|
cur = cur->ai_next;
|
||||||
|
if (cur != NULL && cur->ai_canonname != NULL &&
|
||||||
|
strcasecmp(cur->ai_canonname, namebuf) != 0) {
|
||||||
if ((zone_options & DNS_ZONEOPT_WARNSRVCNAME) != 0)
|
if ((zone_options & DNS_ZONEOPT_WARNSRVCNAME) != 0)
|
||||||
level = ISC_LOG_WARNING;
|
level = ISC_LOG_WARNING;
|
||||||
if ((zone_options & DNS_ZONEOPT_IGNORESRVCNAME) == 0) {
|
if ((zone_options & DNS_ZONEOPT_IGNORESRVCNAME) == 0) {
|
||||||
|
Reference in New Issue
Block a user