svn commit: r310278 - head/usr.sbin/syslogd
Hiroki Sato
hrs at FreeBSD.org
Mon Dec 19 17:10:32 UTC 2016
Author: hrs
Date: Mon Dec 19 17:10:30 2016
New Revision: 310278
URL: https://svnweb.freebsd.org/changeset/base/310278
Log:
Add a missing STAILQ_INSERT_TAIL() for allowaddr rule.
Modified:
head/usr.sbin/syslogd/syslogd.c
Modified: head/usr.sbin/syslogd/syslogd.c
==============================================================================
--- head/usr.sbin/syslogd/syslogd.c Mon Dec 19 17:05:24 2016 (r310277)
+++ head/usr.sbin/syslogd/syslogd.c Mon Dec 19 17:10:30 2016 (r310278)
@@ -2303,7 +2303,7 @@ static int
allowaddr(char *s)
{
char *cp1, *cp2;
- struct allowedpeer ap;
+ struct allowedpeer *ap;
struct servent *se;
int masklen = -1;
struct addrinfo hints, *res;
@@ -2314,6 +2314,10 @@ allowaddr(char *s)
#endif
char ip[NI_MAXHOST];
+ ap = calloc(1, sizeof(*ap));
+ if (ap == NULL)
+ err(1, "malloc failed");
+
#ifdef INET6
if (*s != '[' || (cp1 = strchr(s + 1, ']')) == NULL)
#endif
@@ -2323,20 +2327,20 @@ allowaddr(char *s)
*cp1++ = '\0';
if (strlen(cp1) == 1 && *cp1 == '*')
/* any port allowed */
- ap.port = 0;
+ ap->port = 0;
else if ((se = getservbyname(cp1, "udp"))) {
- ap.port = ntohs(se->s_port);
+ ap->port = ntohs(se->s_port);
} else {
- ap.port = strtol(cp1, &cp2, 0);
+ ap->port = strtol(cp1, &cp2, 0);
if (*cp2 != '\0')
return (-1); /* port not numeric */
}
} else {
if ((se = getservbyname("syslog", "udp")))
- ap.port = ntohs(se->s_port);
+ ap->port = ntohs(se->s_port);
else
/* sanity, should not happen */
- ap.port = 514;
+ ap->port = 514;
}
if ((cp1 = strchr(s, '/')) != NULL &&
@@ -2363,14 +2367,14 @@ allowaddr(char *s)
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST;
if (getaddrinfo(s, NULL, &hints, &res) == 0) {
- ap.isnumeric = 1;
- memcpy(&ap.a_addr, res->ai_addr, res->ai_addrlen);
- memset(&ap.a_mask, 0, sizeof(ap.a_mask));
- ap.a_mask.ss_family = res->ai_family;
+ ap->isnumeric = 1;
+ memcpy(&ap->a_addr, res->ai_addr, res->ai_addrlen);
+ memset(&ap->a_mask, 0, sizeof(ap->a_mask));
+ ap->a_mask.ss_family = res->ai_family;
if (res->ai_family == AF_INET) {
- ap.a_mask.ss_len = sizeof(struct sockaddr_in);
- maskp = &((struct sockaddr_in *)&ap.a_mask)->sin_addr;
- addrp = &((struct sockaddr_in *)&ap.a_addr)->sin_addr;
+ ap->a_mask.ss_len = sizeof(struct sockaddr_in);
+ maskp = &((struct sockaddr_in *)&ap->a_mask)->sin_addr;
+ addrp = &((struct sockaddr_in *)&ap->a_addr)->sin_addr;
if (masklen < 0) {
/* use default netmask */
if (IN_CLASSA(ntohl(addrp->s_addr)))
@@ -2394,10 +2398,10 @@ allowaddr(char *s)
}
#ifdef INET6
else if (res->ai_family == AF_INET6 && masklen <= 128) {
- ap.a_mask.ss_len = sizeof(struct sockaddr_in6);
+ ap->a_mask.ss_len = sizeof(struct sockaddr_in6);
if (masklen < 0)
masklen = 128;
- mask6p = (u_int32_t *)&((struct sockaddr_in6 *)&ap.a_mask)->sin6_addr;
+ mask6p = (u_int32_t *)&((struct sockaddr_in6 *)&ap->a_mask)->sin6_addr;
/* convert masklen to netmask */
while (masklen > 0) {
if (masklen < 32) {
@@ -2408,8 +2412,8 @@ allowaddr(char *s)
masklen -= 32;
}
/* Lose any host bits in the network number. */
- mask6p = (u_int32_t *)&((struct sockaddr_in6 *)&ap.a_mask)->sin6_addr;
- addr6p = (u_int32_t *)&((struct sockaddr_in6 *)&ap.a_addr)->sin6_addr;
+ mask6p = (u_int32_t *)&((struct sockaddr_in6 *)&ap->a_mask)->sin6_addr;
+ addr6p = (u_int32_t *)&((struct sockaddr_in6 *)&ap->a_addr)->sin6_addr;
for (i = 0; i < 4; i++)
addr6p[i] &= mask6p[i];
}
@@ -2421,8 +2425,8 @@ allowaddr(char *s)
freeaddrinfo(res);
} else {
/* arg `s' is domain name */
- ap.isnumeric = 0;
- ap.a_name = s;
+ ap->isnumeric = 0;
+ ap->a_name = s;
if (cp1)
*cp1 = '/';
#ifdef INET6
@@ -2432,23 +2436,24 @@ allowaddr(char *s)
}
#endif
}
+ STAILQ_INSERT_TAIL(&aphead, ap, next);
if (Debug) {
printf("allowaddr: rule ");
- if (ap.isnumeric) {
+ if (ap->isnumeric) {
printf("numeric, ");
- getnameinfo((struct sockaddr *)&ap.a_addr,
- ((struct sockaddr *)&ap.a_addr)->sa_len,
+ getnameinfo((struct sockaddr *)&ap->a_addr,
+ ((struct sockaddr *)&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((struct sockaddr *)&ap->a_mask,
+ ((struct sockaddr *)&ap->a_mask)->sa_len,
ip, sizeof ip, NULL, 0, NI_NUMERICHOST);
printf("mask = %s; ", ip);
} else {
- printf("domainname = %s; ", ap.a_name);
+ printf("domainname = %s; ", ap->a_name);
}
- printf("port = %d\n", ap.port);
+ printf("port = %d\n", ap->port);
}
return (0);
}
More information about the svn-src-all
mailing list