From d7b84da7bc10825f00c80b055f8f7f32afced5cc Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Mon, 21 Jan 2008 14:13:52 +0000 Subject: [PATCH] Don't require a netmask/prefix. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2668 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- src/naddress.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/naddress.c b/src/naddress.c index 349e2d7..4e44842 100644 --- a/src/naddress.c +++ b/src/naddress.c @@ -244,7 +244,7 @@ parseIPFormat(char const *str_c, struct vc_ips **ips, size_t len = strlen(str_c); char const *fc; char str[len + 1], *ptr = str; - int ret = -1; + int ret = 0; strcpy(str, str_c); @@ -261,9 +261,10 @@ parseIPFormat(char const *str_c, struct vc_ips **ips, default: goto out; } - if ((sep = memchr(ptr, *(fc + 1), len)) == NULL) { + if (len == 0) goto out; - } + if ((sep = memchr(ptr, *(fc + 1), len)) == NULL) + sep = ptr + len; *sep = '\0'; /* This is ugly, and means that m cannot be first */ @@ -280,6 +281,7 @@ parseIPFormat(char const *str_c, struct vc_ips **ips, unsigned long sz; if (!isNumberUnsigned(ptr, &sz, true) || sz > limit) { + ret = -1; goto out; } @@ -295,6 +297,7 @@ parseIPFormat(char const *str_c, struct vc_ips **ips, } else { if (convertAddress(ptr, &(*ips)->a.vna_type, dst) == -1) { + ret = -1; goto out; } else if (*fc == 'm') { @@ -303,12 +306,13 @@ parseIPFormat(char const *str_c, struct vc_ips **ips, } } + ret++; + len -= (sep - ptr); ptr = sep + 1; if (*(fc + 1) == '\0') break; } - ret = 0; out: free(str); @@ -319,7 +323,7 @@ static void readIP(char const *str, struct vc_ips **ips, uint16_t type) { if (ifconfig_getaddr(str, &(*ips)->a.vna_v4_ip.s_addr, &(*ips)->a.vna_v4_mask.s_addr, NULL)==-1) { - if (parseIPFormat(str, ips, "1/m") == -1) { + if (parseIPFormat(str, ips, "1/m") < 1) { WRITE_MSG(2, "Invalid IP number '"); WRITE_STR(2, str); WRITE_MSG(2, "'\n"); @@ -355,7 +359,7 @@ readBcast(char const *str, struct vc_ips **ips) static void readRange(char const *str, struct vc_ips **ips) { - if (parseIPFormat(str, ips, "1-2/m") == -1) { + if (parseIPFormat(str, ips, "1-2/m") < 2) { WRITE_MSG(2, "Invalid range '"); WRITE_STR(2, str); WRITE_MSG(2, "'\n"); -- 1.8.1.5