Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Jan 2010 15:27:18 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r202289 - head/sbin/ifconfig
Message-ID:  <201001141527.o0EFRILD070517@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: emaste
Date: Thu Jan 14 15:27:18 2010
New Revision: 202289
URL: http://svn.freebsd.org/changeset/base/202289

Log:
  Reject invalid CIDR widths rather than silently stopping at the first
  non-digit character.
  
  Due to an issue with rc(8) in a test configuration, ifconfig was being
  invoked with the address used again as the width - for example,
  
    ifconfig vlan0 10.0.0.1/10.0.0.1
  
  Prior to this change, that address/width would be interpreted as
  10.0.0.1/10.

Modified:
  head/sbin/ifconfig/af_inet.c

Modified: head/sbin/ifconfig/af_inet.c
==============================================================================
--- head/sbin/ifconfig/af_inet.c	Thu Jan 14 15:20:46 2010	(r202288)
+++ head/sbin/ifconfig/af_inet.c	Thu Jan 14 15:27:18 2010	(r202289)
@@ -37,6 +37,7 @@ static const char rcsid[] =
 #include <sys/socket.h>
 #include <net/if.h>
 
+#include <ctype.h>
 #include <err.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -110,15 +111,18 @@ in_getaddr(const char *s, int which)
 		char *p = NULL;
 
 		if((p = strrchr(s, '/')) != NULL) {
+			const char *errstr;
 			/* address is `name/masklen' */
 			int masklen;
-			int ret;
 			struct sockaddr_in *min = sintab[MASK];
 			*p = '\0';
-			ret = sscanf(p+1, "%u", &masklen);
-			if(ret != 1 || (masklen < 0 || masklen > 32)) {
+			if (!isdigit(*(p + 1)))
+				errstr = "invalid";
+			else
+				masklen = (int)strtonum(p + 1, 0, 32, &errstr);
+			if (errstr != NULL) {
 				*p = '/';
-				errx(1, "%s: bad value", s);
+				errx(1, "%s: bad value (width %s)", s, errstr);
 			}
 			min->sin_len = sizeof(*min);
 			min->sin_addr.s_addr = htonl(~((1LL << (32 - masklen)) - 1) & 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001141527.o0EFRILD070517>