From owner-freebsd-bugs@FreeBSD.ORG Thu Jun 28 15:30:04 2007 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5C58516A41F for ; Thu, 28 Jun 2007 15:30:04 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 37C5113C45D for ; Thu, 28 Jun 2007 15:30:04 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l5SFU4L1087927 for ; Thu, 28 Jun 2007 15:30:04 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l5SFU4Fg087926; Thu, 28 Jun 2007 15:30:04 GMT (envelope-from gnats) Resent-Date: Thu, 28 Jun 2007 15:30:04 GMT Resent-Message-Id: <200706281530.l5SFU4Fg087926@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, "Brian A. Seklecki" Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 28F5D16A41F for ; Thu, 28 Jun 2007 15:20:47 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [69.147.83.33]) by mx1.freebsd.org (Postfix) with ESMTP id 016B413C44C for ; Thu, 28 Jun 2007 15:20:47 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id l5SFKkFK035559 for ; Thu, 28 Jun 2007 15:20:46 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id l5SFKkh6035558; Thu, 28 Jun 2007 15:20:46 GMT (envelope-from nobody) Message-Id: <200706281520.l5SFKkh6035558@www.freebsd.org> Date: Thu, 28 Jun 2007 15:20:46 GMT From: "Brian A. Seklecki" To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.0 Cc: Subject: bin/114097: NFS Abstraction: mountd(8) binding 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: Thu, 28 Jun 2007 15:30:04 -0000 >Number: 114097 >Category: bin >Synopsis: NFS Abstraction: mountd(8) binding >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Jun 28 15:30:03 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Brian A. Seklecki >Release: 6.x / i386 >Organization: Collaborative Fusion, Inc. >Environment: FreeBSD rampage 6.2-RELEASE-p3 FreeBSD 6.2-RELEASE-p3 #0: Thu Mar 22 21:08:30 EDT 2007 root@rampage:/mnt2/usr/obj/export/RELENG_6_2/src/sys/SMP i386 >Description: Match rpcbind(8) / nfsd(8) behavior for explicit local source address binding of UDP/TCP Sockets: See original ticket: http://www.freebsd.org/cgi/query-pr.cgi?pr=84494 >How-To-Repeat: Create strict service VIP abstraction on an NFS server behind a Firewall. >Fix: A similar patch that sets sin.sin_addr.s_addr in a for individual sockets for each instance of "-h " parsed by getopt() in argcv[]: ----- My basic patch to fix in my lab environment: --- /usr/src/usr.sbin/mountd/mountd.c Tue Dec 19 04:14:02 2006 +++ mountd.c Wed Jun 27 22:15:32 2007 @@ -242,6 +242,10 @@ int debug = 0; #endif +int nhosts = 0; +char **hosts = NULL; + + /* * Mountd server for NFS mount protocol as described in: * NFS: Network File System Protocol Specification, RFC1094, Appendix A @@ -290,7 +294,7 @@ errx(1, "NFS server is not available or loadable"); } - while ((c = getopt(argc, argv, "2dlnp:r")) != -1) + while ((c = getopt(argc, argv, "2dlnp:rh")) != -1) switch (c) { case '2': force_v2 = 1; @@ -314,6 +318,16 @@ svcport == 0 || svcport >= IPPORT_MAX) usage(); break; + case 'h': + ++nhosts; + hosts = realloc(hosts, nhosts * sizeof(char *)); + if (hosts == NULL) + errx(1, "Out of memory"); + hosts[nhosts - 1] = strdup(optarg); + if (hosts[nhosts - 1] == NULL) + errx(1, "Out of memory"); + break; + default: usage(); }; @@ -397,6 +411,12 @@ sin6.sin6_len = sizeof(struct sockaddr_in6); sin6.sin6_family = AF_INET6; sin6.sin6_port = htons(svcport); + struct in_addr src_t; + fprintf(stdout, "%d \n", nhosts); + inet_aton(hosts[nhosts - 1], &src_t); + //inet_aton("192.168.3.58", &src_t); + sin.sin_addr.s_addr = src_t.s_addr; + } if (udpsock != -1 && udpconf != NULL) { if (svcport != 0) { @@ -540,7 +560,7 @@ usage() { fprintf(stderr, - "usage: mountd [-2] [-d] [-l] [-n] [-p ] [-r] " + "usage: mountd [-2] [-d] [-l] [-n] [-p ] [-r]" + "[-h ] [export_file]\n"); exit(1); } >Release-Note: >Audit-Trail: >Unformatted: