MEDIUM: config: use str2sa_range() to parse log addresses
str2sa_range() is now used to parse log addresses, both INET and
UNIX. str2sun() is not used anymore.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 800f162..0c08e3b 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1080,6 +1080,9 @@
}
}
else if (!strcmp(args[0], "log")) { /* syslog server address */
+ struct sockaddr_storage *sk;
+ int port1, port2;
+ char *err_msg = NULL;
struct logsrv *logsrv;
if (*(args[1]) == 0 || *(args[2]) == 0) {
@@ -1117,28 +1120,18 @@
}
}
- if (args[1][0] == '/') {
- struct sockaddr_storage *sk = (struct sockaddr_storage *)str2sun(args[1]);
- if (!sk) {
- Alert("parsing [%s:%d] : Socket path '%s' too long (max %d)\n", file, linenum,
- args[1], (int)sizeof(((struct sockaddr_un *)&sk)->sun_path) - 1);
- err_code |= ERR_ALERT | ERR_FATAL;
- free(logsrv);
- goto out;
- }
- logsrv->addr = *sk;
- } else {
- struct sockaddr_storage *sk;
- int port1, port2;
-
- sk = str2sa_range(args[1], &port1, &port2, NULL, NULL);
- if (!sk) {
- Alert("parsing [%s:%d] : '%s' : unknown host in '%s'\n", file, linenum, args[0], args[1]);
- err_code |= ERR_ALERT | ERR_FATAL;
- free(logsrv);
- goto out;
- }
+ sk = str2sa_range(args[1], &port1, &port2, &err_msg, NULL);
+ if (!sk) {
+ Alert("parsing [%s:%d] : '%s': %s\n", file, linenum, args[0], err_msg);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ free(err_msg);
+ free(logsrv);
+ goto out;
+ }
+ logsrv->addr = *sk;
+ free(err_msg);
+ if (sk->ss_family == AF_INET || sk->ss_family == AF_INET6) {
if (port1 != port2) {
Alert("parsing [%s:%d] : '%s' : port ranges and offsets are not allowed in '%s'\n",
file, linenum, args[0], args[1]);
@@ -4816,6 +4809,9 @@
}
}
else if (*(args[1]) && *(args[2])) {
+ struct sockaddr_storage *sk;
+ int port1, port2;
+ char *err_msg = NULL;
logsrv = calloc(1, sizeof(struct logsrv));
@@ -4849,27 +4845,18 @@
}
}
- if (args[1][0] == '/') {
- struct sockaddr_storage *sk = (struct sockaddr_storage *)str2sun(args[1]);
- if (!sk) {
- Alert("parsing [%s:%d] : Socket path '%s' too long (max %d)\n", file, linenum,
- args[1], (int)sizeof(((struct sockaddr_un *)sk)->sun_path) - 1);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
- logsrv->addr = *sk;
- } else {
- struct sockaddr_storage *sk;
- int port1, port2;
+ sk = str2sa_range(args[1], &port1, &port2, &err_msg, NULL);
+ if (!sk) {
+ Alert("parsing [%s:%d] : '%s': %s\n", file, linenum, args[0], err_msg);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ free(err_msg);
+ goto out;
+ }
- sk = str2sa_range(args[1], &port1, &port2, NULL, NULL);
- if (!sk) {
- Alert("parsing [%s:%d] : '%s' : unknown host in '%s'\n",
- file, linenum, args[0], args[1]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
+ logsrv->addr = *sk;
+ free(err_msg);
+ if (sk->ss_family == AF_INET || sk->ss_family == AF_INET6) {
if (port1 != port2) {
Alert("parsing [%s:%d] : '%s' : port ranges and offsets are not allowed in '%s'\n",
file, linenum, args[0], args[1]);
@@ -4877,7 +4864,6 @@
goto out;
}
- logsrv->addr = *sk;
if (!port1)
set_host_port(&logsrv->addr, SYSLOG_PORT);
}