inetd: fix unix sockaddr's length assignment

unsz was always exactly '1' here due to an unfortunate mispositioning
of closing parenthesis. While it's generally irrelevant because bind(2)
is passed the (accurate) sep->se_ctrladdr_size instead, it's not very
helpful for anything locally that wants to use it rather than assuming
that sep->se_ctrladdr_size perfectly fits the end of sun_path.

Just drop unsz entirely and use the result of SUN_LEN() for it.

MFC-after:	3 days
This commit is contained in:
Kyle Evans 2021-02-12 13:19:43 -06:00
parent f540cb27a2
commit 1253835121

View File

@ -1624,7 +1624,6 @@ getconfigent(void)
int v6bind;
#endif
int i;
size_t unsz;
#ifdef IPSEC
policy = NULL;
@ -1852,16 +1851,16 @@ getconfigent(void)
#define SUN_PATH_MAXSIZE sizeof(sep->se_ctrladdr_un.sun_path)
memset(&sep->se_ctrladdr, 0, sizeof(sep->se_ctrladdr));
sep->se_ctrladdr_un.sun_family = sep->se_family;
if ((unsz = strlcpy(sep->se_ctrladdr_un.sun_path,
sep->se_service, SUN_PATH_MAXSIZE) >= SUN_PATH_MAXSIZE)) {
if (strlcpy(sep->se_ctrladdr_un.sun_path, sep->se_service,
SUN_PATH_MAXSIZE) >= SUN_PATH_MAXSIZE) {
syslog(LOG_ERR,
"domain socket pathname too long for service %s",
sep->se_service);
goto more;
}
sep->se_ctrladdr_un.sun_len = unsz;
#undef SUN_PATH_MAXSIZE
sep->se_ctrladdr_size = SUN_LEN(&sep->se_ctrladdr_un);
sep->se_ctrladdr_size = sep->se_ctrladdr_un.sun_len =
SUN_LEN(&sep->se_ctrladdr_un);
}
arg = sskip(&cp);
if (!strncmp(arg, "wait", 4))