]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/statd.c
2000-08-25 Ion Badulescu <ionut@cs.columbia.edu>
[nfs-utils.git] / utils / statd / statd.c
index 3b76e30184e400518240c99cc4da15158aa78ab1..0c3b5e97b86f6812d00c988718e7973cda61df07 100644 (file)
@@ -21,13 +21,32 @@ int _rpcpmstart = 0;        /* flags for tirpc rpcgen */
 int    _rpcfdtype = 0;
 int    _rpcsvcdirty = 0;
 
 int    _rpcfdtype = 0;
 int    _rpcsvcdirty = 0;
 
-extern void sm_prog_1 (struct svc_req *, register SVCXPRT);
+extern void sm_prog_1 (struct svc_req *, register SVCXPRT *);
 
 #ifdef SIMULATIONS
 extern void simulator (int, char **);
 #endif
 
 
 
 #ifdef SIMULATIONS
 extern void simulator (int, char **);
 #endif
 
 
+#ifdef HAVE_TCP_WRAPPER 
+#include "tcpwrapper.h"
+
+static void
+sm_prog_1_wrapper (struct svc_req *rqstp, register SVCXPRT *transp)
+{
+  /* remote host authorization check */
+  if (!check_default("statd", svc_getcaller(transp),
+                    rqstp->rq_proc, SM_PROG)) {
+    svcerr_auth (transp, AUTH_FAILED);
+    return;
+  }
+
+  sm_prog_1 (rqstp, transp);
+}
+
+#define sm_prog_1 sm_prog_1_wrapper
+#endif
+
 /*
  * Signal handler.
  */
 /*
  * Signal handler.
  */
@@ -76,7 +95,7 @@ main (int argc, char **argv)
     setsid ();
     chdir (DIR_BASE);
 
     setsid ();
     chdir (DIR_BASE);
 
-    for (filedes = 0; filedes < OPEN_MAX; filedes++) {
+    for (filedes = 0; filedes < sysconf (_SC_OPEN_MAX); filedes++) {
       close (filedes);
     }
   }
       close (filedes);
     }
   }
@@ -85,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);