summaryrefslogtreecommitdiffstats
path: root/usr.sbin/inetd
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2003-02-13 17:08:23 +0000
committerume <ume@FreeBSD.org>2003-02-13 17:08:23 +0000
commit3d252cd8868660cd99a7e0b091136aafa9ccad25 (patch)
tree542819418d0ec68092232d757906134f3b0c7807 /usr.sbin/inetd
parentdebc727d4ef44707cae4173ed0d3a03f7057b546 (diff)
downloadFreeBSD-src-3d252cd8868660cd99a7e0b091136aafa9ccad25.zip
FreeBSD-src-3d252cd8868660cd99a7e0b091136aafa9ccad25.tar.gz
The tcp_wrappers function `fromhost()' can fail. In such
cases, the `struct sockaddr' will not be allocated. Reported by: nectar MFC after: 2 days
Diffstat (limited to 'usr.sbin/inetd')
-rw-r--r--usr.sbin/inetd/inetd.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/usr.sbin/inetd/inetd.c b/usr.sbin/inetd/inetd.c
index 8390c09..9e66f21 100644
--- a/usr.sbin/inetd/inetd.c
+++ b/usr.sbin/inetd/inetd.c
@@ -304,6 +304,20 @@ getvalue(const char *arg, int *value, const char *whine)
return 0; /* success */
}
+static sa_family_t
+whichaf(struct request_info *req)
+{
+ struct sockaddr *sa;
+
+ sa = (struct sockaddr *)req->client->sin;
+ if (sa == NULL)
+ return AF_UNSPEC;
+ if (sa->sa_family == AF_INET6 &&
+ IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)sa)->sin6_addr))
+ return AF_INET;
+ return sa->sa_family;
+}
+
int
main(int argc, char **argv)
{
@@ -744,7 +758,7 @@ main(int argc, char **argv)
syslog(deny_severity,
"refused connection from %.500s, service %s (%s%s)",
eval_client(&req), service, sep->se_proto,
- (((struct sockaddr *)req.client->sin)->sa_family == AF_INET6 && !IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)req.client->sin)->sin6_addr)) ? "6" : "");
+ (whichaf(&req) == AF_INET6) ? "6" : "");
if (sep->se_socktype != SOCK_STREAM)
recv(ctrl, buf, sizeof (buf), 0);
if (dofork) {
@@ -756,7 +770,7 @@ main(int argc, char **argv)
syslog(allow_severity,
"connection from %.500s, service %s (%s%s)",
eval_client(&req), service, sep->se_proto,
- (((struct sockaddr *)req.client->sin)->sa_family == AF_INET6 && !IN6_IS_ADDR_V4MAPPED(&((struct sockaddr_in6 *)req.client->sin)->sin6_addr)) ? "6" : "");
+ (whichaf(&req) == AF_INET6) ? "6" : "");
}
}
if (sep->se_bi) {
OpenPOWER on IntegriCloud