Skip to content

Commit

Permalink
ceph: fix parsing of ipv6 addresses
Browse files Browse the repository at this point in the history
Check for brackets around the ipv6 address to avoid ambiguity with the port
number.

Signed-off-by: Sage Weil <sage@newdream.net>
  • Loading branch information
Sage Weil committed Jul 9, 2010
1 parent d06dbaf commit 39139f6
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions fs/ceph/messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -997,19 +997,32 @@ int ceph_parse_ips(const char *c, const char *end,
struct sockaddr_in *in4 = (void *)ss;
struct sockaddr_in6 *in6 = (void *)ss;
int port;
char delim = ',';

if (*p == '[') {
delim = ']';
p++;
}

memset(ss, 0, sizeof(*ss));
if (in4_pton(p, end - p, (u8 *)&in4->sin_addr.s_addr,
',', &ipend)) {
delim, &ipend))
ss->ss_family = AF_INET;
} else if (in6_pton(p, end - p, (u8 *)&in6->sin6_addr.s6_addr,
',', &ipend)) {
else if (in6_pton(p, end - p, (u8 *)&in6->sin6_addr.s6_addr,
delim, &ipend))
ss->ss_family = AF_INET6;
} else {
else
goto bad;
}
p = ipend;

if (delim == ']') {
if (*p != ']') {
dout("missing matching ']'\n");
goto bad;
}
p++;
}

/* port? */
if (p < end && *p == ':') {
port = 0;
Expand Down Expand Up @@ -1043,7 +1056,7 @@ int ceph_parse_ips(const char *c, const char *end,
return 0;

bad:
pr_err("parse_ips bad ip '%s'\n", c);
pr_err("parse_ips bad ip '%.*s'\n", (int)(end - c), c);
return -EINVAL;
}

Expand Down

0 comments on commit 39139f6

Please sign in to comment.