| From stable-bounces@linux.kernel.org Wed Jun 6 22:40:19 2007 |
| Date: Wed, 06 Jun 2007 22:40:27 -0700 (PDT) |
| Message-Id: <20070606.224027.02298887.davem@davemloft.net> |
| To: stable@kernel.org |
| From: David Miller <davem@davemloft.net> |
| Cc: bunk@stusta.de |
| Subject: NET: parse ip:port strings correctly in in4_pton |
| |
| From: Jerome Borsboom <j.borsboom@erasmusmc.nl> |
| |
| in4_pton converts a textual representation of an ip4 address |
| into an integer representation. However, when the textual representation |
| is of in the form ip:port, e.g. 192.168.1.1:5060, and 'delim' is set to |
| -1, the function bails out with an error when reading the colon. |
| |
| It makes sense to allow the colon as a delimiting character without |
| explicitly having to set it through the 'delim' variable as there can be |
| no ambiguity in the point where the ip address is completely parsed. This |
| function is indeed called from nf_conntrack_sip.c in this way to parse |
| textual ip:port combinations which fails due to the reason stated above. |
| |
| Signed-off-by: Jerome Borsboom <j.borsboom@erasmusmc.nl> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Chris Wright <chrisw@sous-sol.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| net/core/utils.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- linux-2.6.21.4.orig/net/core/utils.c |
| +++ linux-2.6.21.4/net/core/utils.c |
| @@ -137,16 +137,16 @@ int in4_pton(const char *src, int srclen |
| while(1) { |
| int c; |
| c = xdigit2bin(srclen > 0 ? *s : '\0', delim); |
| - if (!(c & (IN6PTON_DIGIT | IN6PTON_DOT | IN6PTON_DELIM))) { |
| + if (!(c & (IN6PTON_DIGIT | IN6PTON_DOT | IN6PTON_DELIM | IN6PTON_COLON_MASK))) { |
| goto out; |
| } |
| - if (c & (IN6PTON_DOT | IN6PTON_DELIM)) { |
| + if (c & (IN6PTON_DOT | IN6PTON_DELIM | IN6PTON_COLON_MASK)) { |
| if (w == 0) |
| goto out; |
| *d++ = w & 0xff; |
| w = 0; |
| i++; |
| - if (c & IN6PTON_DELIM) { |
| + if (c & (IN6PTON_DELIM | IN6PTON_COLON_MASK)) { |
| if (i != 4) |
| goto out; |
| break; |