diff options
| author | Patrick McHardy <kaber@trash.net> | 2006-12-02 22:04:04 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2006-12-02 22:04:04 -0800 | 
| commit | 9a7c9337a09b1ef07e55f95a4309957a2328a01f (patch) | |
| tree | 9d382a443d82ece7246fe83d297865b66ace713f /net/core | |
| parent | a163148c1bec895c1332ea5be497bcda8ce110df (diff) | |
| download | olio-linux-3.10-9a7c9337a09b1ef07e55f95a4309957a2328a01f.tar.xz olio-linux-3.10-9a7c9337a09b1ef07e55f95a4309957a2328a01f.zip  | |
[NET]: Accept wildcard delimiters in in[46]_pton
Accept -1 as delimiter to abort parsing without an error at the first
unknown character. This is needed by the upcoming nf_conntrack SIP
helper, where addresses are delimited by either '\r' or '\n' characters.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
| -rw-r--r-- | net/core/utils.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/net/core/utils.c b/net/core/utils.c index d93fe64f669..61556065f07 100644 --- a/net/core/utils.c +++ b/net/core/utils.c @@ -88,7 +88,7 @@ EXPORT_SYMBOL(in_aton);  #define IN6PTON_NULL		0x20000000	/* first/tail */  #define IN6PTON_UNKNOWN		0x40000000 -static inline int digit2bin(char c, char delim) +static inline int digit2bin(char c, int delim)  {  	if (c == delim || c == '\0')  		return IN6PTON_DELIM; @@ -99,7 +99,7 @@ static inline int digit2bin(char c, char delim)  	return IN6PTON_UNKNOWN;  } -static inline int xdigit2bin(char c, char delim) +static inline int xdigit2bin(char c, int delim)  {  	if (c == delim || c == '\0')  		return IN6PTON_DELIM; @@ -113,12 +113,14 @@ static inline int xdigit2bin(char c, char delim)  		return (IN6PTON_XDIGIT | (c - 'a' + 10));  	if (c >= 'A' && c <= 'F')  		return (IN6PTON_XDIGIT | (c - 'A' + 10)); +	if (delim == -1) +		return IN6PTON_DELIM;  	return IN6PTON_UNKNOWN;  }  int in4_pton(const char *src, int srclen,  	     u8 *dst, -	     char delim, const char **end) +	     int delim, const char **end)  {  	const char *s;  	u8 *d; @@ -173,7 +175,7 @@ EXPORT_SYMBOL(in4_pton);  int in6_pton(const char *src, int srclen,  	     u8 *dst, -	     char delim, const char **end) +	     int delim, const char **end)  {  	const char *s, *tok = NULL;  	u8 *d, *dc = NULL;  |