[BusyBox] Patch for arping (parameter bug)

Nick Fedchik fnm at fusion.ukrsat.com
Sun Jan 19 05:31:03 UTC 2003


Hi All!

Here is the patch to fix missed option argument for -I <device>.
Also interface name checks redesigned.


-- 
Nick Fedchik

-------------- next part --------------
diff -urN busybox/networking/arping.c busybox-arping/networking/arping.c
--- busybox/networking/arping.c	2003-01-09 12:06:01 +0200
+++ busybox-arping/networking/arping.c	2003-01-19 14:25:01 +0200
@@ -63,8 +63,9 @@
 }
 #endif
 
-static int send_pack(int sock, struct in_addr *src_addr, struct in_addr *dst_addr,
-			  struct sockaddr_ll *ME, struct sockaddr_ll *HE)
+static int send_pack(int sock, struct in_addr *src_addr,
+					 struct in_addr *dst_addr, struct sockaddr_ll *ME,
+					 struct sockaddr_ll *HE)
 {
 	int err;
 	struct timeval now;
@@ -274,7 +275,7 @@
 
 	setuid(uid);
 
-	while ((ch = getopt(argc, argv, "h?bfDUAqc:w:s:I")) != EOF) {
+	while ((ch = getopt(argc, argv, "h?bfDUAqc:w:s:I:")) != EOF) {
 		switch (ch) {
 		case 'b':
 			broadcast_only = 1;
@@ -300,6 +301,13 @@
 			timeout = atoi(optarg);
 			break;
 		case 'I':
+			if (optarg == NULL)
+				show_usage();
+			if (xstrlen(optarg) > IF_NAMESIZE) {
+				error_msg("Interface name `%s' must be less than %d", optarg,
+						  IF_NAMESIZE);
+				exit(2);
+			}
 			device = optarg;
 			break;
 		case 'f':
@@ -322,10 +330,6 @@
 
 	target = *argv;
 
-	if (device == NULL) {
-		error_msg("-I <interface> is required!");
-		exit(1);
-	}
 
 	if (s < 0) {
 		error_msg("socket");
@@ -338,7 +342,7 @@
 		memset(&ifr, 0, sizeof(ifr));
 		strncpy(ifr.ifr_name, device, IFNAMSIZ - 1);
 		if (ioctl(s, SIOCGIFINDEX, &ifr) < 0) {
-			error_msg("unknown interface %s", device);
+			error_msg("Interface %s not found", device);
 			exit(2);
 		}
 		ifindex = ifr.ifr_ifindex;
@@ -348,11 +352,11 @@
 			exit(2);
 		}
 		if (!(ifr.ifr_flags & IFF_UP)) {
-			error_msg("Interface \"%s\" is down", device);
+			error_msg("Interface %s is down", device);
 			exit(2);
 		}
 		if (ifr.ifr_flags & (IFF_NOARP | IFF_LOOPBACK)) {
-			error_msg("Interface \"%s\" is not ARPable", device);
+			error_msg("Interface %s is not ARPable", device);
 			exit(dad ? 0 : 2);
 		}
 	}
@@ -388,7 +392,7 @@
 			if (setsockopt
 				(probe_fd, SOL_SOCKET, SO_BINDTODEVICE, device,
 				 strlen(device) + 1) == -1)
-				perror("WARNING: interface is ignored");
+				error_msg("WARNING: interface %s is ignored", device);
 		}
 		memset(&saddr, 0, sizeof(saddr));
 		saddr.sin_family = AF_INET;
@@ -458,6 +462,7 @@
 
 	{
 		struct sigaction sa;
+
 		memset(&sa, 0, sizeof(sa));
 		sa.sa_flags = SA_RESTART;
 


More information about the busybox mailing list