Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Nov 2006 16:13:48 +0300 (MSK)
From:      Maxim Konovalov <maxim@macomnet.ru>
To:        Aragon Gouveia <aragon@phat.za.net>
Cc:        freebsd-bugs@freebsd.org
Subject:   Re: inetd UNIX socket bug (and small fix)
Message-ID:  <20061110161054.P24498@mp2.macomnet.net>
In-Reply-To: <20061020201554.GA9906@phat.za.net>
References:  <20061020201554.GA9906@phat.za.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 20 Oct 2006, 22:15+0200, Aragon Gouveia wrote:

> Hello,
>
> I have been trying to setup a UNIX socket service in inetd, but it appears
> the functionality has been broken for some time.  I guess I'm the first to
> notice.
>
> With a UNIX socket service entry in inetd.conf the socket file is created as
> it should be, but when I try make a connection to the socket, it establishes
> and then immediately closes.  There is nothing logged to syslog and not
> much info when in debug mode (inetd -d).
>
> In my code references below I should mention that I'm still running
> 4.10-RELEASE so my line numbering might be out.  But from looking at HEAD
> via CVSweb it looks like the bug is still there.  Hopefully this
> information is of relevance.
>
> I had a look through inetd.c and found the following in cpmip() starting at
> line 2202:
>
> ---
>                         case AF_INET:
>                                 p = (char *)&sin4->sin_addr;
>                                 addrlen = sizeof(struct in_addr);
>                                 break;
> #ifdef INET6
>                         case AF_INET6:
>                                 p = (char *)&sin6->sin6_addr;
>                                 addrlen = sizeof(struct in6_addr);
>                                 break;
> #endif
>                         default:
>                                 /* should not happen */
>                                 return -1;
>                         }
> ---
>
> There is no case entry for AF_UNIX.  From my testing execution was reaching
> the default: entry when an AF_UNIX connection was established.  When cpmip()
> returns a negative value it looks like inetd silently closes the socket.
>
> At the bottom of this message is a patch which seems to make it work.  The
> only oddity is that when logging is enabled (inetd -l), AF_UNIX connections
> are logged as coming from "unknown".  No biggie for me, but there might be a
> better fix.
>
> Should I create a PR for this?

inetd over AF_UNIX works OK on RELENG_4 and HEAD.  I've just added

:maxim:maxim:220:/tmp/telnet    stream  unix    nowait  root    /usr/libexec/telnetd   telnetd

to inetd.conf and was able to login to my system via telnet -u /tmp/telnet.

Builtin services like chargen work over AF_UNIX sockets too.

-- 
Maxim Konovalov



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061110161054.P24498>