aboutsummaryrefslogtreecommitdiffstats
path: root/util/http.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/http.c')
-rw-r--r--util/http.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/util/http.c b/util/http.c
index 9acd146ec..5013ae6c1 100644
--- a/util/http.c
+++ b/util/http.c
@@ -343,16 +343,27 @@ do_parse_uri( PARSED_URI uri, int only_local_part )
}
strlwr( p );
- uri->host = p;
- if( (p3=strchr( p, ':' )) ) {
- *p3++ = 0;
+
+ /* Handle a host of [IP] so that [IP:V6]:port works */
+ if( *p == '[' && (p3=strchr( p, ']' )) )
+ {
+ *p3++ = '\0';
+ /* worst case, uri->host should have length 0, points to \0 */
+ uri->host = p + 1;
+ p = p3;
+ }
+ else
+ uri->host = p;
+
+ if( (p3=strchr( p, ':' )) )
+ {
+ *p3++ = '\0';
uri->port = atoi( p3 );
- }
+ }
- uri->host = p;
if( (n = remove_escapes( uri->host )) < 0 )
return G10ERR_BAD_URI;
- if( n != strlen( p ) )
+ if( n != strlen( uri->host ) )
return G10ERR_BAD_URI; /* hostname with a Nul in it */
p = p2 ? p2 : NULL;
}