mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
Fix a bug in SRV lookups where dnsmgr would discard everything but the
first SRV result from DNS before processing weights and priorities and dns_parse_answer wouldn't report that there were no records in DNS unless a failure occured. Also fixed a bug where dnsmgr_refresh would report that a entry was being changed when ast_gethostbyname had failed. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@129156 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -189,6 +189,7 @@ static int dns_parse_answer(void *context,
|
|||||||
unsigned char *fullanswer = answer;
|
unsigned char *fullanswer = answer;
|
||||||
struct dn_answer *ans;
|
struct dn_answer *ans;
|
||||||
dns_HEADER *h;
|
dns_HEADER *h;
|
||||||
|
int ret = 0;
|
||||||
int res;
|
int res;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
@@ -234,14 +235,13 @@ static int dns_parse_answer(void *context,
|
|||||||
ast_log(LOG_WARNING, "Failed to parse result\n");
|
ast_log(LOG_WARNING, "Failed to parse result\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (res > 0)
|
ret = 1;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
answer += ntohs(ans->size);
|
answer += ntohs(ans->size);
|
||||||
len -= ntohs(ans->size);
|
len -= ntohs(ans->size);
|
||||||
}
|
}
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_RES_NINIT
|
#ifndef HAVE_RES_NINIT
|
||||||
|
@@ -164,8 +164,7 @@ static int dnsmgr_refresh(struct ast_dnsmgr_entry *entry, int verbose)
|
|||||||
if (verbose)
|
if (verbose)
|
||||||
ast_verb(3, "refreshing '%s'\n", entry->name);
|
ast_verb(3, "refreshing '%s'\n", entry->name);
|
||||||
|
|
||||||
ast_get_ip_or_srv(&tmp, entry->name, entry->service);
|
if (!ast_get_ip_or_srv(&tmp, entry->name, entry->service) && inaddrcmp(&tmp, &entry->last)) {
|
||||||
if (inaddrcmp(&tmp, &entry->last)) {
|
|
||||||
ast_copy_string(iabuf, ast_inet_ntoa(entry->last.sin_addr), sizeof(iabuf));
|
ast_copy_string(iabuf, ast_inet_ntoa(entry->last.sin_addr), sizeof(iabuf));
|
||||||
ast_copy_string(iabuf2, ast_inet_ntoa(tmp.sin_addr), sizeof(iabuf2));
|
ast_copy_string(iabuf2, ast_inet_ntoa(tmp.sin_addr), sizeof(iabuf2));
|
||||||
ast_log(LOG_NOTICE, "dnssrv: host '%s' changed from %s:%d to %s:%d\n",
|
ast_log(LOG_NOTICE, "dnssrv: host '%s' changed from %s:%d to %s:%d\n",
|
||||||
|
@@ -137,7 +137,7 @@ static int srv_callback(void *context, unsigned char *answer, int len, unsigned
|
|||||||
if (entry)
|
if (entry)
|
||||||
AST_LIST_INSERT_TAIL(&c->entries, entry, list);
|
AST_LIST_INSERT_TAIL(&c->entries, entry, list);
|
||||||
|
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do the bizarre SRV record weight-handling algorithm
|
/* Do the bizarre SRV record weight-handling algorithm
|
||||||
|
Reference in New Issue
Block a user