From owner-freebsd-bugs@FreeBSD.ORG Fri Nov 10 13:14:02 2006 Return-Path: X-Original-To: freebsd-bugs@freebsd.org Delivered-To: freebsd-bugs@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8657A16A40F for ; Fri, 10 Nov 2006 13:14:02 +0000 (UTC) (envelope-from maxim@macomnet.ru) Received: from mp2.macomnet.net (mp2.macomnet.net [195.128.64.6]) by mx1.FreeBSD.org (Postfix) with ESMTP id D237543D46 for ; Fri, 10 Nov 2006 13:14:01 +0000 (GMT) (envelope-from maxim@macomnet.ru) Received: from localhost (localhost.int.ru [127.0.0.1] (may be forged)) by mp2.macomnet.net (8.13.7/8.13.8) with ESMTP id kAADDmFn026891; Fri, 10 Nov 2006 16:14:00 +0300 (MSK) (envelope-from maxim@macomnet.ru) Date: Fri, 10 Nov 2006 16:13:48 +0300 (MSK) From: Maxim Konovalov To: Aragon Gouveia In-Reply-To: <20061020201554.GA9906@phat.za.net> Message-ID: <20061110161054.P24498@mp2.macomnet.net> References: <20061020201554.GA9906@phat.za.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Cc: freebsd-bugs@freebsd.org Subject: Re: inetd UNIX socket bug (and small fix) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Nov 2006 13:14:02 -0000 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