]> 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 91cb3bc87005d07af1b67091e9906941eb6d8c25..0c3b5e97b86f6812d00c988718e7973cda61df07 100644 (file)
@@ -21,13 +21,32 @@ int _rpcpmstart = 0;        /* flags for tirpc rpcgen */
 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 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.
  */
@@ -85,6 +104,8 @@ main (int argc, char **argv)
   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);