2 * Copyright (C) 1995, 1997-1999 Jeffrey A. Uphoff
3 * Modified by Olaf Kirch, Oct. 1996.
4 * Modified by H.J. Lu, 1998.
15 #include <rpc/pmap_clnt.h>
19 short int restart = 0;
20 int _rpcpmstart = 0; /* flags for tirpc rpcgen */
24 extern void sm_prog_1 (struct svc_req *, register SVCXPRT *);
27 extern void simulator (int, char **);
31 #ifdef HAVE_TCP_WRAPPER
32 #include "tcpwrapper.h"
35 sm_prog_1_wrapper (struct svc_req *rqstp, register SVCXPRT *transp)
37 /* remote host authorization check */
38 if (!check_default("statd", svc_getcaller(transp),
39 rqstp->rq_proc, SM_PROG)) {
40 svcerr_auth (transp, AUTH_FAILED);
44 sm_prog_1 (rqstp, transp);
47 #define sm_prog_1 sm_prog_1_wrapper
56 log (L_FATAL, "Caught signal %d, un-registering and exiting.", sig);
57 pmap_unset (SM_PROG, SM_VERS);
63 * Entry routine/main loop.
66 main (int argc, char **argv)
73 if (argc == 2 && strcmp (argv [1], "-F") == 0) {
81 simulator (--argc, ++argv); /* simulator() does exit() */
87 if ((pid = fork ()) < 0) {
88 perror ("Could not fork");
90 } else if (pid != 0) {
98 for (filedes = 0; filedes < sysconf (_SC_OPEN_MAX); filedes++) {
104 signal (SIGHUP, killer);
105 signal (SIGINT, killer);
106 signal (SIGTERM, killer);
107 /* WARNING: the following works on Linux and SysV, but not BSD! */
108 signal(SIGCHLD, SIG_IGN);
111 pmap_unset (SM_PROG, SM_VERS);
116 do_regist (SM_PROG, sm_prog_1);
117 my_svc_run (); /* I rolled my own, Olaf made it better... */
127 do_regist(u_long prog, void (*sm_prog_1)())
128 /* do_regist(u_long prog, __dispatch_fn_t sm_prog_1) */
132 if ((transp = svcudp_create(RPC_ANYSOCK)) == NULL)
133 die("cannot create udp service.");
135 if (!svc_register(transp, prog, SM_VERS, sm_prog_1, IPPROTO_UDP))
136 die("unable to register (SM_PROG, SM_VERS, udp).");
138 if ((transp = svctcp_create(RPC_ANYSOCK, 0, 0)) == NULL)
139 die("cannot create tcp service.");
141 if (!svc_register(transp, prog, SM_VERS, sm_prog_1, IPPROTO_TCP))
142 die("unable to register (SM_PROG, SM_VERS, tcp).");