Be sure to avoid octal interpretations of IP's (bug #5477)
authorMark Spencer <markster@digium.com>
Fri, 21 Oct 2005 04:09:23 +0000 (04:09 +0000)
committerMark Spencer <markster@digium.com>
Fri, 21 Oct 2005 04:09:23 +0000 (04:09 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6838 65c4cc65-6c06-0410-ace0-fbb531ad65f3

utils.c

diff --git a/utils.c b/utils.c
index 0c615cd..d73e76e 100755 (executable)
--- a/utils.c
+++ b/utils.c
@@ -171,6 +171,7 @@ struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp)
 {
        int res;
        int herrno;
+       int dots=0;
        const char *s;
        struct hostent *result = NULL;
        /* 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;
        res = 0;
        while(s && *s) {
-               if (!isdigit(*s))
+               if (*s == '.')
+                       dots++;
+               else if (!isdigit(*s))
                        break;
                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;
+               hp->hp.h_addr = hp->buf;
+               if (inet_pton(AF_INET, host, hp->hp.h_addr) > 0)
+                       return &hp->hp;
                return NULL;
+               
+       }
 #ifdef SOLARIS
        result = gethostbyname_r(host, &hp->hp, hp->buf, sizeof(hp->buf), &herrno);