diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-20 21:56:22 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-03-20 21:56:22 +0000 |
commit | 9ea6214fee01d0fc2412cf8fa048fc647e2a740a (patch) | |
tree | b890e1a1bb364505d1ef110542a93efb45d5fcb5 | |
parent | d4e3d5cab3740eb5997e7ca0a33d383ee59bede7 (diff) |
Merged revisions 110337 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r110337 | russell | 2008-03-20 16:55:50 -0500 (Thu, 20 Mar 2008) | 22 lines
Merged revisions 110336 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
................
r110336 | russell | 2008-03-20 16:54:58 -0500 (Thu, 20 Mar 2008) | 14 lines
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: http://svn.digium.com/svn/asterisk/branches/1.6.0@110338 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_iax2.c | 14 | ||||
-rw-r--r-- | channels/chan_sip.c | 7 |
2 files changed, 9 insertions, 12 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 9ec5045b5..c01633367 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -2959,10 +2959,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; @@ -3072,10 +3071,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 512cab3ce..040ef81a3 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -3578,10 +3578,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; |