svn commit: r310456 - head/usr.sbin/syslogd

Hiroki Sato hrs at FreeBSD.org
Fri Dec 23 06:29:25 UTC 2016


Author: hrs
Date: Fri Dec 23 06:29:24 2016
New Revision: 310456
URL: https://svnweb.freebsd.org/changeset/base/310456

Log:
  - More ifdef INET and INET6.
  - Use STDERR_FILENO + 1 instead of "3".
  - Fix dprintf() in cvthname().

Modified:
  head/usr.sbin/syslogd/syslogd.c

Modified: head/usr.sbin/syslogd/syslogd.c
==============================================================================
--- head/usr.sbin/syslogd/syslogd.c	Fri Dec 23 05:07:28 2016	(r310455)
+++ head/usr.sbin/syslogd/syslogd.c	Fri Dec 23 06:29:24 2016	(r310456)
@@ -748,6 +748,7 @@ socklist_recv_sock(struct socklist *sl)
 static void
 unmapped(struct sockaddr *sa)
 {
+#if defined(INET) && defined(INET6)
 	struct sockaddr_in6 *sin6;
 	struct sockaddr_in sin;
 
@@ -766,6 +767,10 @@ unmapped(struct sockaddr *sa)
 	memcpy(&sin.sin_addr, &sin6->sin6_addr.s6_addr[12],
 	    sizeof(sin.sin_addr));
 	memcpy(sa, &sin, sizeof(sin));
+#else
+	if (sa == NULL)
+		return;
+#endif
 }
 
 static void
@@ -1533,24 +1538,23 @@ cvthname(struct sockaddr *f)
 	sigset_t omask, nmask;
 	static char hname[NI_MAXHOST], ip[NI_MAXHOST];
 
-	dprintf("cvthname(%d) len = %d, %zu\n", f->sa_family, f->sa_len, sizeof(struct sockaddr_in6));
+	dprintf("cvthname(%d) len = %d\n", f->sa_family, f->sa_len);
 	error = getnameinfo(f, f->sa_len, ip, sizeof(ip), NULL, 0,
 		    NI_NUMERICHOST);
-	dprintf("cvthname(%s)\n", ip);
-
 	if (error) {
 		dprintf("Malformed from address %s\n", gai_strerror(error));
 		return ("???");
 	}
+	dprintf("cvthname(%s)\n", ip);
+
 	if (!resolve)
 		return (ip);
 
 	sigemptyset(&nmask);
 	sigaddset(&nmask, SIGHUP);
 	sigprocmask(SIG_BLOCK, &nmask, &omask);
-	error = getnameinfo((struct sockaddr *)f,
-			    ((struct sockaddr *)f)->sa_len,
-			    hname, sizeof hname, NULL, 0, NI_NAMEREQD);
+	error = getnameinfo(f, f->sa_len, hname, sizeof(hname),
+		    NULL, 0, NI_NAMEREQD);
 	sigprocmask(SIG_SETMASK, &omask, NULL);
 	if (error) {
 		dprintf("Host name for your address (%s) unknown\n", ip);
@@ -2393,7 +2397,9 @@ allowaddr(char *s)
 	struct servent *se;
 	int masklen = -1;
 	struct addrinfo hints, *res;
+#ifdef INET
 	in_addr_t *addrp, *maskp;
+#endif
 #ifdef INET6
 	uint32_t *addr6p, *mask6p;
 #endif
@@ -2459,7 +2465,9 @@ allowaddr(char *s)
 			.ss_family = res->ai_family,
 			.ss_len = res->ai_addrlen
 		};
-		if (res->ai_family == AF_INET) {
+		switch (res->ai_family) {
+#ifdef INET
+		case AF_INET:
 			maskp = &sstosin(&ap->a_mask)->sin_addr.s_addr;
 			addrp = &sstosin(&ap->a_addr)->sin_addr.s_addr;
 			if (masklen < 0) {
@@ -2481,9 +2489,14 @@ allowaddr(char *s)
 			}
 			/* Lose any host bits in the network number. */
 			*addrp &= *maskp;
-		}
+			break;
+#endif
 #ifdef INET6
-		else if (res->ai_family == AF_INET6 && masklen <= 128) {
+		case AF_INET6:
+			if (masklen > 128) {
+				freeaddrinfo(res);
+				return (-1);
+			}
 			if (masklen < 0)
 				masklen = 128;
 			mask6p = (uint32_t *)&sstosin6(&ap->a_mask)->sin6_addr.s6_addr32[0];
@@ -2501,9 +2514,9 @@ allowaddr(char *s)
 					masklen -= 32;
 				}
 			}
-		}
+			break;
 #endif
-		else {
+		default:
 			freeaddrinfo(res);
 			return (-1);
 		}
@@ -2527,12 +2540,12 @@ allowaddr(char *s)
 		printf("allowaddr: rule ");
 		if (ap->isnumeric) {
 			printf("numeric, ");
-			getnameinfo((struct sockaddr *)&ap->a_addr,
-				    ((struct sockaddr *)&ap->a_addr)->sa_len,
+			getnameinfo(sstosa(&ap->a_addr),
+				    (sstosa(&ap->a_addr))->sa_len,
 				    ip, sizeof ip, NULL, 0, NI_NUMERICHOST);
 			printf("addr = %s, ", ip);
-			getnameinfo((struct sockaddr *)&ap->a_mask,
-				    ((struct sockaddr *)&ap->a_mask)->sa_len,
+			getnameinfo(sstosa(&ap->a_mask),
+				    (sstosa(&ap->a_mask))->sa_len,
 				    ip, sizeof ip, NULL, 0, NI_NUMERICHOST);
 			printf("mask = %s; ", ip);
 		} else {
@@ -2552,7 +2565,9 @@ validate(struct sockaddr *sa, const char
 	int i;
 	char name[NI_MAXHOST], ip[NI_MAXHOST], port[NI_MAXSERV];
 	struct allowedpeer *ap;
+#ifdef INET
 	struct sockaddr_in *sin4, *a4p = NULL, *m4p = NULL;
+#endif
 #ifdef INET6
 	struct sockaddr_in6 *sin6, *a6p = NULL, *m6p = NULL;
 #endif
@@ -2602,7 +2617,8 @@ validate(struct sockaddr *sa, const char
 				dprintf("rejected in rule %d due to address family mismatch.\n", i);
 				continue;
 			}
-			if (ap->a_addr.ss_family == AF_INET) {
+#ifdef INET
+			else if (ap->a_addr.ss_family == AF_INET) {
 				sin4 = satosin(sa);
 				a4p = satosin(&ap->a_addr);
 				m4p = satosin(&ap->a_mask);
@@ -2612,6 +2628,7 @@ validate(struct sockaddr *sa, const char
 					continue;
 				}
 			}
+#endif
 #ifdef INET6
 			else if (ap->a_addr.ss_family == AF_INET6) {
 				sin6 = satosin6(sa);
@@ -2702,7 +2719,7 @@ p_open(const char *prog, pid_t *rpid)
 		dup2(pfd[0], STDIN_FILENO);
 		dup2(nulldesc, STDOUT_FILENO);
 		dup2(nulldesc, STDERR_FILENO);
-		closefrom(3);
+		closefrom(STDERR_FILENO + 1);
 
 		(void)execvp(_PATH_BSHELL, argv);
 		_exit(255);


More information about the svn-src-all mailing list