Module Name:    src
Committed By:   roy
Date:           Thu Sep 29 13:36:30 UTC 2016

Modified Files:
        src/usr.sbin/ifwatchd: ifwatchd.c

Log Message:
Don't invoke scripts for INADDR_ANY or INADDR_BROADCAST addresses.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/usr.sbin/ifwatchd/ifwatchd.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/ifwatchd/ifwatchd.c
diff -u src/usr.sbin/ifwatchd/ifwatchd.c:1.33 src/usr.sbin/ifwatchd/ifwatchd.c:1.34
--- src/usr.sbin/ifwatchd/ifwatchd.c:1.33	Wed Sep 21 21:07:29 2016
+++ src/usr.sbin/ifwatchd/ifwatchd.c	Thu Sep 29 13:36:30 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: ifwatchd.c,v 1.33 2016/09/21 21:07:29 roy Exp $	*/
+/*	$NetBSD: ifwatchd.c,v 1.34 2016/09/29 13:36:30 roy Exp $	*/
 
 /*-
  * Copyright (c) 2002, 2003 The NetBSD Foundation, Inc.
@@ -374,16 +374,31 @@ invoke_script(const struct sockaddr *sa,
 	const char *script;
 	int status;
 
-	if (sa != NULL && sa->sa_len == 0) {
-		fprintf(stderr, "illegal socket address (sa_len == 0)\n");
-		return;
-	}
-	if (sa != NULL && sa->sa_family == AF_INET6) {
-		struct sockaddr_in6 sin6;
-
-		memcpy(&sin6, (const struct sockaddr_in6 *)sa, sizeof (sin6));
-		if (IN6_IS_ADDR_LINKLOCAL(&sin6.sin6_addr))
+	if (sa != NULL) {
+		if (sa->sa_len == 0) {
+			fprintf(stderr,
+			    "illegal socket address (sa_len == 0)\n");
 			return;
+		}
+		switch (sa->sa_family) {
+		case AF_INET:
+		{
+			const struct sockaddr_in *sin;
+
+			sin = (const struct sockaddr_in *)sa;
+			if (sin->sin_addr.s_addr == INADDR_ANY ||
+			    sin->sin_addr.s_addr == INADDR_BROADCAST)
+				return;
+		}
+		case AF_INET6:
+		{
+			const struct sockaddr_in6 *sin6;
+
+			sin6 = (const struct sockaddr_in6 *)sa;
+			if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr))
+				return;
+		}
+		}
 	}
 
 	addr[0] = daddr[0] = 0;

Reply via email to