From owner-freebsd-bugs@FreeBSD.ORG Mon Aug 29 19:30:16 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EDBB0106564A for ; Mon, 29 Aug 2011 19:30:15 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id CB7A28FC16 for ; Mon, 29 Aug 2011 19:30:15 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p7TJUF0g053039 for ; Mon, 29 Aug 2011 19:30:15 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p7TJUFtq053036; Mon, 29 Aug 2011 19:30:15 GMT (envelope-from gnats) Resent-Date: Mon, 29 Aug 2011 19:30:15 GMT Resent-Message-Id: <201108291930.p7TJUFtq053036@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Dylan Simon Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B9C9E106564A for ; Mon, 29 Aug 2011 19:28:51 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id 90B818FC14 for ; Mon, 29 Aug 2011 19:28:51 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p7TJSpJT072573 for ; Mon, 29 Aug 2011 19:28:51 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p7TJSp5i072572; Mon, 29 Aug 2011 19:28:51 GMT (envelope-from nobody) Message-Id: <201108291928.p7TJSp5i072572@red.freebsd.org> Date: Mon, 29 Aug 2011 19:28:51 GMT From: Dylan Simon To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: bin/160295: ypserv -P [bin/109494] breaks tcp 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: Mon, 29 Aug 2011 19:30:16 -0000 >Number: 160295 >Category: bin >Synopsis: ypserv -P [bin/109494] breaks tcp >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Aug 29 19:30:15 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Dylan Simon >Release: 7.4 >Organization: NYU >Environment: FreeBSD lust.cns.nyu.edu 7.4-RELEASE-p2 FreeBSD 7.4-RELEASE-p2 #14: Sun Jul 24 18:28:27 EDT 2011 dylan@lust.cns.nyu.edu:/usr/obj/usr/src/sys/SIN amd64 >Description: The -P argument to ypserv breaks NIS over TCP. After starting ypserv -P 666 I see: tcp4 0 0 *.666 *.* CLOSED >From the code ( http://svnweb.freebsd.org/base/stable/7/usr.sbin/ypserv/yp_main.c?r1=172506&r2=177753 ) the problem is rather obvious: the sock variable is used for both the udp and tcp sockets, and so while transp = svcudp_create(sock); works fine (after losing the tcp socket), transp = svctcp_create(sock, 0, 0); doesn't work at all on the already open udp socket. Here are the relevant calls. Notice fd 4 is never touched again: socket(PF_INET,SOCK_STREAM,0) = 4 (0x4) bind(4,{ AF_INET 0.0.0.0:666 },16) = 0 (0x0) socket(PF_INET,SOCK_DGRAM,0) = 5 (0x5) bind(5,{ AF_INET 0.0.0.0:666 },16) = 0 (0x0) getsockopt(0x5,0x0,0x13,0x7fffffffe4ec,0x7fffffffe4e0,0x7fffffffe340) = 0 (0x0) setsockopt(0x5,0x0,0x13,0x7fffffffe4e8,0x4,0x7fffffffe458) = 0 (0x0) bind(5,{ AF_INET 0.0.0.0:0 },16) ERR#22 'Invalid argument' setsockopt(0x5,0x0,0x13,0x7fffffffe4ec,0x4,0x7fffffffe458) = 0 (0x0) listen(0x5,0x80,0x13,0x8007dd42c,0xffffff80ec8b4d40,0x7fffffffe458) ERR#45 'Operation not supported' getsockopt(0x5,0x0,0x13,0x7fffffffe4ec,0x7fffffffe4e0,0x800a00728) = 0 (0x0) setsockopt(0x5,0x0,0x13,0x7fffffffe4e8,0x4,0x7fffffffe458) = 0 (0x0) bind(5,{ AF_INET 0.0.0.0:0 },16) ERR#22 'Invalid argument' setsockopt(0x5,0x0,0x13,0x7fffffffe4ec,0x4,0x7fffffffe458) = 0 (0x0) listen(0x5,0x80,0x13,0x8007dd42c,0xffffff80ec8b4d40,0x7fffffffe458) ERR#45 'Operation not supported' >How-To-Repeat: Run ypserv -P Perform TCP NIS request from client >Fix: Use a different variable for each socket. >Release-Note: >Audit-Trail: >Unformatted: