From: Russell Bryant Date: Thu, 20 Mar 2008 21:54:58 +0000 (+0000) Subject: Merged revisions 110335 via svnmerge from X-Git-Tag: 1.4.19-rc4~28 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e653f8b232a3458fedd1fc857ff8d0be6f56937e;p=thirdparty%2Fasterisk.git Merged revisions 110335 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r110335 | russell | 2008-03-20 16:53:27 -0500 (Thu, 20 Mar 2008) | 6 lines Fix some very broken code that was introduced in 1.2.26 as a part of the security fix. The dnsmgr is not appropriate here. The dnsmgr takes a pointer to an address structure that a background thread continuously updates. However, in these cases, a stack variable was passed. That means that the dnsmgr thread would be continuously writing to bogus memory. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@110336 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 0970633209..e542928d2e 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -2692,10 +2692,9 @@ static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in if (var && sin) { for (tmp = var; tmp; tmp = tmp->next) { if (!strcasecmp(tmp->name, "host")) { - struct in_addr sin2; - struct ast_dnsmgr_entry *dnsmgr = NULL; - memset(&sin2, 0, sizeof(sin2)); - if ((ast_dnsmgr_lookup(tmp->value, &sin2, &dnsmgr) < 0) || (memcmp(&sin2, &sin->sin_addr, sizeof(sin2)) != 0)) { + struct ast_hostent ahp; + struct hostent *hp; + if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) { /* No match */ ast_variables_destroy(var); var = NULL; @@ -2807,10 +2806,9 @@ static struct iax2_user *realtime_user(const char *username, struct sockaddr_in if (var) { for (tmp = var; tmp; tmp = tmp->next) { if (!strcasecmp(tmp->name, "host")) { - struct in_addr sin2; - struct ast_dnsmgr_entry *dnsmgr = NULL; - memset(&sin2, 0, sizeof(sin2)); - if ((ast_dnsmgr_lookup(tmp->value, &sin2, &dnsmgr) < 0) || (memcmp(&sin2, &sin->sin_addr, sizeof(sin2)) != 0)) { + struct ast_hostent ahp; + struct hostent *hp; + if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) { /* No match */ ast_variables_destroy(var); var = NULL; diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0f1edc1db9..b907c5fb60 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -149,7 +149,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/compiler.h" #include "asterisk/threadstorage.h" #include "asterisk/translate.h" -#include "asterisk/dnsmgr.h" #ifndef FALSE #define FALSE 0 @@ -2543,10 +2542,9 @@ static struct sip_peer *realtime_peer(const char *newpeername, struct sockaddr_i if (var) { for (tmp = var; tmp; tmp = tmp->next) { if (!strcasecmp(var->name, "host")) { - struct in_addr sin2; - struct ast_dnsmgr_entry *dnsmgr = NULL; - memset(&sin2, 0, sizeof(sin2)); - if ((ast_dnsmgr_lookup(tmp->value, &sin2, &dnsmgr) < 0) || (memcmp(&sin2, &sin->sin_addr, sizeof(sin2)) != 0)) { + struct hostent *hp; + struct ast_hostent ahp; + if (!(hp = ast_gethostbyname(tmp->value, &ahp)) || (memcmp(&hp->h_addr, &sin->sin_addr, sizeof(hp->h_addr)))) { /* No match */ ast_variables_destroy(var); var = NULL;