X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fstatd%2Fstatd.c;h=0c3b5e97b86f6812d00c988718e7973cda61df07;hp=3b76e30184e400518240c99cc4da15158aa78ab1;hb=5591654c71e7e2e5959c8718a7e880516b9081e8;hpb=8b7ad01b14df1e7529b9ba8a1ea17df0d6004ef9 diff --git a/utils/statd/statd.c b/utils/statd/statd.c index 3b76e30..0c3b5e9 100644 --- a/utils/statd/statd.c +++ b/utils/statd/statd.c @@ -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. */ @@ -76,7 +95,7 @@ main (int argc, char **argv) setsid (); chdir (DIR_BASE); - for (filedes = 0; filedes < OPEN_MAX; filedes++) { + for (filedes = 0; filedes < sysconf (_SC_OPEN_MAX); filedes++) { close (filedes); } } @@ -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);