Be sure to avoid octal interpretations of IP's (bug #5477)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6838 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2005-10-21 04:09:23 +00:00
parent e973e76c9f
commit e60ab6d916

15
utils.c
View File

@@ -171,6 +171,7 @@ struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp)
{ {
int res; int res;
int herrno; int herrno;
int dots=0;
const char *s; const char *s;
struct hostent *result = NULL; struct hostent *result = NULL;
/* Although it is perfectly legitimate to lookup a pure integer, for /* Although it is perfectly legitimate to lookup a pure integer, for
@@ -180,12 +181,22 @@ struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp)
s = host; s = host;
res = 0; res = 0;
while(s && *s) { while(s && *s) {
if (!isdigit(*s)) if (*s == '.')
dots++;
else if (!isdigit(*s))
break; break;
s++; s++;
} }
if (!s || !*s) if (!s || !*s) {
/* Forge a reply for IP's to avoid octal IP's being interpreted as octal */
if (dots != 3)
return NULL; return NULL;
hp->hp.h_addr = hp->buf;
if (inet_pton(AF_INET, host, hp->hp.h_addr) > 0)
return &hp->hp;
return NULL;
}
#ifdef SOLARIS #ifdef SOLARIS
result = gethostbyname_r(host, &hp->hp, hp->buf, sizeof(hp->buf), &herrno); result = gethostbyname_r(host, &hp->hp, hp->buf, sizeof(hp->buf), &herrno);