Merged revisions 323392,323394 via svnmerge from
authorRichard Mudgett <rmudgett@digium.com>
Tue, 14 Jun 2011 17:22:26 +0000 (17:22 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 14 Jun 2011 17:22:26 +0000 (17:22 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r323392 | rmudgett | 2011-06-14 12:21:24 -0500 (Tue, 14 Jun 2011) | 6 lines

  Add more strict hostname checking to ast_dnsmgr_lookup().

  Change suggested in review.

  Review: https://reviewboard.asterisk.org/r/1240/
........
  r323394 | rmudgett | 2011-06-14 12:21:39 -0500 (Tue, 14 Jun 2011) | 2 lines

  Made ast_sockaddr_split_hostport() port warning msgs more meaningful.
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@323397 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/dnsmgr.c
main/netsock2.c

index 9002ec8..999bd92 100644 (file)
@@ -135,7 +135,7 @@ int ast_dnsmgr_lookup(const char *name, struct ast_sockaddr *result, struct ast_
         * If it's actually an IP address and not a name, there's no
         * need for a managed lookup.
         */
-       if (ast_sockaddr_parse(result, name, 0)) {
+       if (ast_sockaddr_parse(result, name, PARSE_PORT_FORBID)) {
                return 0;
        }
 
index 25f15a2..d6561fb 100644 (file)
@@ -121,8 +121,10 @@ char *ast_sockaddr_stringify_fmt(const struct ast_sockaddr *sa, int format)
 int ast_sockaddr_split_hostport(char *str, char **host, char **port, int flags)
 {
        char *s = str;
+       char *orig_str = str;/* Original string in case the port presence is incorrect. */
+       char *host_end = NULL;/* Delay terminating the host in case the port presence is incorrect. */
 
-       ast_debug(5, "Splitting '%s' gives...\n", str);
+       ast_debug(5, "Splitting '%s' into...\n", str);
        *host = NULL;
        *port = NULL;
        if (*s == '[') {
@@ -130,7 +132,8 @@ int ast_sockaddr_split_hostport(char *str, char **host, char **port, int flags)
                for (; *s && *s != ']'; ++s) {
                }
                if (*s == ']') {
-                       *s++ = '\0';
+                       host_end = s;
+                       ++s;
                }
                if (*s == ':') {
                        *port = s + 1;
@@ -148,11 +151,10 @@ int ast_sockaddr_split_hostport(char *str, char **host, char **port, int flags)
                        }
                }
                if (*port) {
-                       **port = '\0';
+                       host_end = *port;
                        ++*port;
                }
        }
-       ast_debug(5, "...host '%s' and port '%s'.\n", *host, *port);
 
        switch (flags & PARSE_PORT_MASK) {
        case PARSE_PORT_IGNORE:
@@ -160,18 +162,23 @@ int ast_sockaddr_split_hostport(char *str, char **host, char **port, int flags)
                break;
        case PARSE_PORT_REQUIRE:
                if (*port == NULL) {
-                       ast_log(LOG_WARNING, "missing port\n");
+                       ast_log(LOG_WARNING, "Port missing in %s\n", orig_str);
                        return 0;
                }
                break;
        case PARSE_PORT_FORBID:
                if (*port != NULL) {
-                       ast_log(LOG_WARNING, "port disallowed\n");
+                       ast_log(LOG_WARNING, "Port disallowed in %s\n", orig_str);
                        return 0;
                }
                break;
        }
 
+       /* Can terminate the host string now if needed. */
+       if (host_end) {
+               *host_end = '\0';
+       }
+       ast_debug(5, "...host '%s' and port '%s'.\n", *host, *port ? *port : "");
        return 1;
 }