]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
2000-08-25 Ion Badulescu <ionut@cs.columbia.edu>
authorhjl <hjl>
Sat, 26 Aug 2000 04:09:40 +0000 (04:09 +0000)
committerhjl <hjl>
Sat, 26 Aug 2000 04:09:40 +0000 (04:09 +0000)
  * utils/rquotad/rquotad.man, utils/statd/statd.man,
utils/mountd/mountd.man: updated

* utils/mountd/Makefile (LIBS): added -lmisc $(LIBWRAP) $(LIBNSL)
* utils/rquotad/Makefile: fix comment

* support/misc/tcpwrapper.c (logit): added comment about waiting
for the children after fork()

* utils/mountd/mountd.c (main): ignore SIGCHLD to prevent leaving
zombies behind (from logit()'s fork)
* utils/rquotad/rquota_svc.c (main): ditto
* utils/statd/statd.c (main): ditto

* utils/rquotad/rquota_svc.c (rquotaprog_1): pass RQUOTAPROG
to check_default instead of 0, for prognum

* utils/statd/statd.c (sm_prog_1_wrapper): pass SM_PROG
to check_default instead of 0, for prognum

* utils/mountd/mount_dispatch.c: Include "tcpwrapper.h" if
HAVE_TCP_WRAPPER is defined.
(mount_dispatch): Call check_default () if HAVE_TCP_WRAPPER is
defined. Reject an RPC call if check_default () fails.

ChangeLog
support/misc/tcpwrapper.c
utils/mountd/Makefile
utils/mountd/mount_dispatch.c
utils/mountd/mountd.c
utils/mountd/mountd.man
utils/rquotad/Makefile
utils/rquotad/rquota_svc.c
utils/rquotad/rquotad.man
utils/statd/statd.c
utils/statd/statd.man

index 1fe0a6b4d3bf5a55e27bfb7680e181f4f5451221..6561cf5ba9cbbf0c3e3b9635b07d1b3ad4f1db91 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,30 @@
+2000-08-25  Ion Badulescu  <ionut@cs.columbia.edu>
+
+       * utils/rquotad/rquotad.man, utils/statd/statd.man,
+       utils/mountd/mountd.man: updated
+        
+       * utils/mountd/Makefile (LIBS): added -lmisc $(LIBWRAP) $(LIBNSL)
+       * utils/rquotad/Makefile: fix comment
+
+       * support/misc/tcpwrapper.c (logit): added comment about waiting
+       for the children after fork()
+       
+       * utils/mountd/mountd.c (main): ignore SIGCHLD to prevent leaving
+       zombies behind (from logit()'s fork)
+       * utils/rquotad/rquota_svc.c (main): ditto
+       * utils/statd/statd.c (main): ditto
+
+       * utils/rquotad/rquota_svc.c (rquotaprog_1): pass RQUOTAPROG
+       to check_default instead of 0, for prognum
+
+       * utils/statd/statd.c (sm_prog_1_wrapper): pass SM_PROG
+       to check_default instead of 0, for prognum
+
+       * utils/mountd/mount_dispatch.c: Include "tcpwrapper.h" if
+       HAVE_TCP_WRAPPER is defined.
+       (mount_dispatch): Call check_default () if HAVE_TCP_WRAPPER is
+       defined. Reject an RPC call if check_default () fails.
+
 2000-08-25  H.J. Lu <hjl@lucon.org>
 
        * support/include/tcpwrapper.h: New for the tcp wrapper
 2000-08-25  H.J. Lu <hjl@lucon.org>
 
        * support/include/tcpwrapper.h: New for the tcp wrapper
index 498a8290ec3f20057dbaa7b1d599fd11c9df869b..ba76864cb84a19adf5005c378f9f68d3feb4bd01 100644 (file)
@@ -229,6 +229,8 @@ char   *text;
     /*
      * Fork off a process or the portmap daemon might hang while
      * getrpcbynumber() or syslog() does its thing.
     /*
      * Fork off a process or the portmap daemon might hang while
      * getrpcbynumber() or syslog() does its thing.
+     *
+     * Don't forget to wait for the children, too...
      */
 
     if (fork() == 0) {
      */
 
     if (fork() == 0) {
index 93529a0826bf87e0cc156be984d6e06f341568a2..49b9900e3c8e3a251282dadec3410bdc1d49965d 100644 (file)
@@ -6,7 +6,7 @@ PROGRAM = mountd
 PREFIX = rpc.
 OBJS   = mountd.o mount_dispatch.o auth.o rmtab.o
 LIBDEPS        = $(TOP)support/lib/libexport.a $(TOP)/support/lib/libnfs.a
 PREFIX = rpc.
 OBJS   = mountd.o mount_dispatch.o auth.o rmtab.o
 LIBDEPS        = $(TOP)support/lib/libexport.a $(TOP)/support/lib/libnfs.a
-LIBS   = -lexport -lnfs
+LIBS   = -lexport -lnfs -lmisc $(LIBBSD) $(LIBWRAP) $(LIBNSL)
 MAN8   = mountd
 
 include $(TOP)rules.mk
 MAN8   = mountd
 
 include $(TOP)rules.mk
index cee19810476d1270918934c4e2c826887a89aab6..e87831a6969412c2abe450dda8afffaf1ed7f811 100644 (file)
@@ -6,6 +6,10 @@
 
 #include "config.h"
 
 
 #include "config.h"
 
+#ifdef HAVE_TCP_WRAPPER
+#include "tcpwrapper.h"
+#endif
+
 #include "mountd.h"
 #include "rpcmisc.h"
 
 #include "mountd.h"
 #include "rpcmisc.h"
 
@@ -65,6 +69,15 @@ mount_dispatch(struct svc_req *rqstp, SVCXPRT *transp)
        union mountd_arguments  argument;
        union mountd_results    result;
 
        union mountd_arguments  argument;
        union mountd_results    result;
 
+#ifdef HAVE_TCP_WRAPPER
+       /* remote host authorization check */
+       if (!check_default("mountd", svc_getcaller(transp),
+                          rqstp->rq_proc, MOUNTPROG)) {
+               svcerr_auth (transp, AUTH_FAILED);
+               return;
+       }
+#endif
+
        rpc_dispatch(rqstp, transp, dtable, number_of(dtable),
                        &argument, &result);
 }
        rpc_dispatch(rqstp, transp, dtable, number_of(dtable),
                        &argument, &result);
 }
index 1eeefdcf0ffa872211d177366717dd7f6f7bc00d..d79bf150c6888b9cf64eed752acca85c286d4416 100644 (file)
@@ -445,6 +445,8 @@ main(int argc, char **argv)
        sigaction(SIGHUP, &sa, NULL);
        sigaction(SIGINT, &sa, NULL);
        sigaction(SIGTERM, &sa, NULL);
        sigaction(SIGHUP, &sa, NULL);
        sigaction(SIGINT, &sa, NULL);
        sigaction(SIGTERM, &sa, NULL);
+       /* WARNING: the following works on Linux and SysV, but not BSD! */
+       sigaction(SIGCHLD, &sa, NULL);
 
        if (nfs_version & 0x1)
                rpc_init("mountd", MOUNTPROG, MOUNTVERS,
 
        if (nfs_version & 0x1)
                rpc_init("mountd", MOUNTPROG, MOUNTVERS,
index 593037b40661311a3eb8c31e919d4149d48e07fd..9dff681cd6511cb0d9ee6ba5c34bd6b413ef7aa6 100644 (file)
@@ -2,7 +2,7 @@
 .\" mountd(8)
 .\"
 .\" Copyright (C) 1999 Olaf Kirch <okir@monad.swb.de>
 .\" mountd(8)
 .\"
 .\" Copyright (C) 1999 Olaf Kirch <okir@monad.swb.de>
-.TH rpc.mountd 8 "31 May 1999"
+.TH rpc.mountd 8 "25 Aug 2000"
 .SH NAME
 rpc.mountd \- NFS mount daemon
 .SH SYNOPSIS
 .SH NAME
 rpc.mountd \- NFS mount daemon
 .SH SYNOPSIS
@@ -48,38 +48,87 @@ user level part of the NFS service.
 .P
 However, this file is mostly ornamental. One, the client can continue
 to use the file handle even after calling
 .P
 However, this file is mostly ornamental. One, the client can continue
 to use the file handle even after calling
-.BR rpc.mountd 's
+.B rpc.mountd 's
 UMOUNT procedure. And two, if a client reboots without notifying
 UMOUNT procedure. And two, if a client reboots without notifying
-.BR rpc.mountd ,
+.B rpc.mountd ,
 a stale entry will remain in
 .BR rmtab .
 .SH OPTIONS
 .TP
 a stale entry will remain in
 .BR rmtab .
 .SH OPTIONS
 .TP
-.\" This file isn't touched by mountd at all--even though it
-.\" accepts the option.
-.\" .BR \-f " or " \-\-exports-file
-.\" This option specifies the exports file, listing the clients that this
-.\" server is prepared to serve and parameters to apply to each
-.\" such mount (see
-.\" .BR exports (5)).
-.\" By default, export information is read from
-.\" .IR /etc/exports .
+.B \-d " or " \-\-debug
+Turn on debugging.
 .TP
 .TP
-.BR \-N " or " \-\-no-nfs-version
+.B \-F " or " \-\-foreground
+Run in foreground (do not daemonize)
+.TP
+.B \-f " or " \-\-exports-file
+This option specifies the exports file, listing the clients that this
+server is prepared to serve and parameters to apply to each
+such mount (see
+.BR exports (5)).
+By default, export information is read from
+.IR /etc/exports .
+.TP
+.B \-h " or " \-\-help
+Display usage message.
+.TP
+.B \-N " or " \-\-no-nfs-version
 This option can be used to request that
 .B rpc.mountd
 This option can be used to request that
 .B rpc.mountd
-does not offer certain versions of NFS. The current version of
+do not offer certain versions of NFS. The current version of
 .B rpc.mountd
 can support both NFS version 2 and the newer version 3. If the
 NFS kernel module was compiled without support for NFSv3,
 .B rpc.mountd
 must be invoked with the option
 .B rpc.mountd
 can support both NFS version 2 and the newer version 3. If the
 NFS kernel module was compiled without support for NFSv3,
 .B rpc.mountd
 must be invoked with the option
-.BR "\-\-no-nfs-version 3" .
+.B "\-\-no-nfs-version 3" .
+.TP
+.B \-P
+Ignored (compatibility with unfsd??).
+.TP
+.B \-p " or " \-\-port
+Force
+.B rpc.mountd
+to bind to the specified port, instead of using the random port
+number assigned by the portmapper.
 .TP
 .TP
-.BR \-v " or " \-\-version
+.B \-V " or " \-\-nfs-version
+This option can be used to request that
+.B rpc.mountd
+offer certain versions of NFS. The current version of
+.B rpc.mountd
+can support both NFS version 2 and the newer version 3.
+.TP
+.B \-v " or " \-\-version
 Print the version of
 .B rpc.mountd
 and exit.
 Print the version of
 .B rpc.mountd
 and exit.
+
+.SH TCP_WRAPPERS SUPPORT
+This
+.B rpc.mountd
+version is protected by the
+.B tcp_wrapper
+library. You have to give the clients access to
+.B rpc.mountd
+if they should be allowed to use it. To allow connects from clients of
+the .bar.com domain you could use the following line in /etc/hosts.allow:
+
+mountd: .bar.com
+
+You have to use the daemon name 
+.B mountd
+for the daemon name (even if the binary has a different name). For the
+client names you can only use the keyword ALL or IP addresses (NOT
+host or domain names).
+
+For further information please have a look at the
+.BR tcpd (8),
+.BR hosts_allow (5)
+and
+.BR hosts_access (5)
+manual pages.
+
 .SH SEE ALSO
 .BR rpc.nfsd (8),
 .BR exportfs (8),
 .SH SEE ALSO
 .BR rpc.nfsd (8),
 .BR exportfs (8),
index 82928b6c670f8c016b03426bb778af70fb42842a..aaf5762493b48cfd50ff9fa8663e69f0b9a691c3 100644 (file)
@@ -1,5 +1,5 @@
 #
 #
-# Makefile for rpc.mountd
+# Makefile for rpc.rquotad
 #
 
 PROGRAM        = rquotad
 #
 
 PROGRAM        = rquotad
index 81b692845e2da0e6e39524a7238b537ce53ac085..f55c192762bf3aab0975994a05896f2f691e94cc 100644 (file)
@@ -34,6 +34,7 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <syslog.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <syslog.h>
+#include <signal.h>
 
 #ifdef __STDC__
 #define SIG_PF void(*)(int)
 
 #ifdef __STDC__
 #define SIG_PF void(*)(int)
@@ -66,7 +67,7 @@ static void rquotaprog_1(struct svc_req *rqstp, register SVCXPRT *transp)
 #ifdef HAVE_TCP_WRAPPER
    /* remote host authorization check */
    if (!check_default("rquotad", svc_getcaller(transp),
 #ifdef HAVE_TCP_WRAPPER
    /* remote host authorization check */
    if (!check_default("rquotad", svc_getcaller(transp),
-                     rqstp->rq_proc, (u_long) 0)) {
+                     rqstp->rq_proc, RQUOTAPROG)) {
          svcerr_auth (transp, AUTH_FAILED);
          return;
    }
          svcerr_auth (transp, AUTH_FAILED);
          return;
    }
@@ -138,6 +139,15 @@ static void rquotaprog_2(struct svc_req *rqstp, register SVCXPRT *transp)
    xdrproc_t xdr_argument, xdr_result;
    char *(*local)(char *, struct svc_req *);
 
    xdrproc_t xdr_argument, xdr_result;
    char *(*local)(char *, struct svc_req *);
 
+#ifdef HAVE_TCP_WRAPPER
+   /* remote host authorization check */
+   if (!check_default("rquotad", svc_getcaller(transp),
+                     rqstp->rq_proc, RQUOTAPROG)) {
+         svcerr_auth (transp, AUTH_FAILED);
+         return;
+   }
+#endif
+
    /*
     * Don't bother authentication for NULLPROC.
     */
    /*
     * Don't bother authentication for NULLPROC.
     */
@@ -203,6 +213,9 @@ int main(int argc, char **argv)
 
    openlog("rquota", LOG_PID, LOG_DAEMON);
 
 
    openlog("rquota", LOG_PID, LOG_DAEMON);
 
+   /* WARNING: the following works on Linux and SysV, but not BSD! */
+   signal(SIGCHLD, SIG_IGN);
+
    transp = svcudp_create(RPC_ANYSOCK);
    if (transp == NULL) {
       syslog(LOG_ERR, "cannot create udp service.");
    transp = svcudp_create(RPC_ANYSOCK);
    if (transp == NULL) {
       syslog(LOG_ERR, "cannot create udp service.");
index da8fa8cd489fb03b8e58d37023b8c9a188526ec5..9b16df50fcfba221d04d40fcc1fc0e368277adbb 100644 (file)
@@ -1,5 +1,5 @@
-.\"@(#)rquotad.8c"
-.TH RQUOTAD 8C"
+.\"@(#)rquotad.8"
+.TH RQUOTAD 8 "25 Aug 2000"
 .SH NAME
 rquotad, rpc.rquotad \- remote quota server
 .SH SYNOPSIS
 .SH NAME
 rquotad, rpc.rquotad \- remote quota server
 .SH SYNOPSIS
@@ -13,7 +13,7 @@ rquotad, rpc.rquotad \- remote quota server
 .IX  "quotas"  "rquotad daemon"  ""  "\fLrquotad\fP \(em remote quota server"
 .IX  "file system"  "rquotad daemon"  ""  "\fLrquotad\fP \(em remote quota server"
 .IX  "remote procedure call services"  "rquotad"  ""  "\fLrquotad\fP \(em remote quota server"
 .IX  "quotas"  "rquotad daemon"  ""  "\fLrquotad\fP \(em remote quota server"
 .IX  "file system"  "rquotad daemon"  ""  "\fLrquotad\fP \(em remote quota server"
 .IX  "remote procedure call services"  "rquotad"  ""  "\fLrquotad\fP \(em remote quota server"
-.B rquotad
+.BR rquotad
 is an
 .BR rpc (3N)
 server which returns quotas for a user of a local file system
 is an
 .BR rpc (3N)
 server which returns quotas for a user of a local file system
@@ -22,20 +22,52 @@ which is mounted by a remote machine over the
 The results are used by
 .BR quota (1)
 to display user quotas for remote file systems.
 The results are used by
 .BR quota (1)
 to display user quotas for remote file systems.
+
 The
 The
-.B rquotad
+.BR rquotad
 daemon is normally started at boottime from the
 .BR rc.net
 daemon is normally started at boottime from the
 .BR rc.net
-script
+script (on systems with BSD'ish scripts, e.g. Slackware), or from the
+.BR nfs
+script in
+.BR /etc/rc.d/init.d/
+or
+.BR /etc/init.d/
+(on systems with SysV'ish scripts, e.g. RedHat, SuSE, etc).
+
+.SH TCP_WRAPPERS SUPPORT
+This
+.BR rpc.rquotad
+version is protected by the
+.BR tcp_wrapper
+library. You have to give the clients access to
+.BR rpc.rquotad
+if they should be allowed to use it. To allow connects from clients of
+the .bar.com domain you could use the following line in /etc/hosts.allow:
+
+mountd: .bar.com
+
+You have to use the daemon name 
+.BR rquotad
+for the daemon name (even if the binary has a different name). For the
+client names you can only use the keyword ALL or IP addresses (NOT
+host or domain names).
+
+For further information please have a look at the
+.BR tcpd (8),
+.BR hosts_allow (5)
+and
+.BR hosts_access (5)
+manual pages.
+
 .SH FILES
 .SH FILES
-.PD 0
-.TP 20
-.B quotas
-quota file at the file system root
+.BR quota.user ,
+.BR quota.group
+-- quota files locate in the file system's root
 .PD
 .SH "SEE ALSO"
 .PD
 .SH "SEE ALSO"
-.BR quota (1),
+.BR quota (8),
 .BR rpc (3N),
 .BR rpc (3N),
-.BR nfs (4P),
+.BR nfs (5),
 .BR services (5)
 .BR services (5)
-.BR inetd (8C),
+.BR inetd (8),
index d07a26002055f16bd2f24f508d7f9ebad6960eb9..0c3b5e97b86f6812d00c988718e7973cda61df07 100644 (file)
@@ -36,7 +36,7 @@ sm_prog_1_wrapper (struct svc_req *rqstp, register SVCXPRT *transp)
 {
   /* remote host authorization check */
   if (!check_default("statd", svc_getcaller(transp),
 {
   /* remote host authorization check */
   if (!check_default("statd", svc_getcaller(transp),
-                    rqstp->rq_proc, (u_long) 0)) {
+                    rqstp->rq_proc, SM_PROG)) {
     svcerr_auth (transp, AUTH_FAILED);
     return;
   }
     svcerr_auth (transp, AUTH_FAILED);
     return;
   }
@@ -104,6 +104,8 @@ main (int argc, char **argv)
   signal (SIGHUP, killer);
   signal (SIGINT, killer);
   signal (SIGTERM, killer);
   signal (SIGHUP, killer);
   signal (SIGINT, killer);
   signal (SIGTERM, killer);
+  /* WARNING: the following works on Linux and SysV, but not BSD! */
+  signal(SIGCHLD, SIG_IGN);
 
   for (;;) {
     pmap_unset (SM_PROG, SM_VERS);
 
   for (;;) {
     pmap_unset (SM_PROG, SM_VERS);
index 373cf77b5374be7fbdb1b767bf1bf7cd805f11b8..38db9c5c041d830e1d52b58602f36ecd95cbed86 100644 (file)
@@ -3,7 +3,7 @@
 .\"
 .\" Copyright (C) 1999 Olaf Kirch <okir@monad.swb.de>
 .\" Modified by Jeffrey A. Uphoff, 1999.
 .\"
 .\" Copyright (C) 1999 Olaf Kirch <okir@monad.swb.de>
 .\" Modified by Jeffrey A. Uphoff, 1999.
-.TH rpc.statd 8 "11 June 1999"
+.TH rpc.statd 8 "20 Aug 2000"
 .SH NAME
 rpc.statd \- NSM status monitor
 .SH SYNOPSIS
 .SH NAME
 rpc.statd \- NSM status monitor
 .SH SYNOPSIS
@@ -36,6 +36,32 @@ forks and puts itself in the background when started. The
 .B -F
 argument tells it to remain in the foreground. This option is
 mainly for debugging purposes.
 .B -F
 argument tells it to remain in the foreground. This option is
 mainly for debugging purposes.
+
+.SH TCP_WRAPPERS SUPPORT
+This
+.B rpc.statd
+version is protected by the
+.B tcp_wrapper
+library. You have to give the clients access to
+.B rpc.statd
+if they should be allowed to use it. To allow connects from clients of
+the .bar.com domain you could use the following line in /etc/hosts.allow:
+
+statd: .bar.com
+
+You have to use the daemon name 
+.B statd
+for the daemon name (even if the binary has a different name). For the
+client names you can only use the keyword ALL or IP addresses (NOT
+host or domain names).
+
+For further information please have a look at the
+.BR tcpd (8),
+.BR hosts_allow (5)
+and
+.BR hosts_access (5)
+manual pages.
+
 .SH FILES
 .BR /var/lib/nfs/sm/state
 .br
 .SH FILES
 .BR /var/lib/nfs/sm/state
 .br