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.
*/
setsid ();
chdir (DIR_BASE);
- for (filedes = 0; filedes < OPEN_MAX; filedes++) {
+ for (filedes = 0; filedes < sysconf (_SC_OPEN_MAX); filedes++) {
close (filedes);
}
}
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);