inetd UNIX socket bug (and small fix)
Aragon Gouveia
aragon at phat.za.net
Mon Feb 19 11:06:34 UTC 2007
Hi all,
Sorry to drag this one out. I eventually tried creating a unix type entry
in inetd.conf on a 6.2-RELEASE machine. The behaviour is still the same.
Maxim, I tried copy/pasting your entry (changed user/group though) into my
inetd.conf, but it made no difference for me. I do not understand how
your's is working and none of mine aren't?
Anyway, I have logged a PR for this. Number is 109315.
Thanks,
Aragon
| By Maxim Konovalov <maxim at macomnet.ru>
| [ 2006-11-10 15:14 +0200 ]
> 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.
More information about the freebsd-bugs
mailing list