1df930be7Sderaadt /*
23f49765fSguenther * Please do not edit this file.
33f49765fSguenther * It was generated using rpcgen.
4df930be7Sderaadt */
5df930be7Sderaadt
63f49765fSguenther #include "amq.h"
73f49765fSguenther #include "am.h"
83f49765fSguenther #include <arpa/inet.h>
93f49765fSguenther #include <unistd.h>
103f49765fSguenther #include <stdio.h>
113f49765fSguenther #include <stdlib.h>/* getenv, exit */
123f49765fSguenther #include <rpc/pmap_clnt.h> /* for pmap_unset */
133f49765fSguenther #include <string.h> /* strcmp */
143f49765fSguenther #include <netdb.h>
153f49765fSguenther #include <signal.h>
163f49765fSguenther #include <sys/ttycom.h>/* TIOCNOTTY */
173f49765fSguenther #ifdef __cplusplus
183f49765fSguenther #include <sysent.h> /* getdtablesize, open */
193f49765fSguenther #endif /* __cplusplus */
203f49765fSguenther #include <memory.h>
21b5a78835Sdavid #include <sys/socket.h>
22b5a78835Sdavid #include <netinet/in.h>
2308183bb5Sderaadt #include <syslog.h>
243f49765fSguenther #include <errno.h>
2508183bb5Sderaadt
263f49765fSguenther #ifdef __STDC__
273f49765fSguenther #define SIG_PF void(*)(int)
283f49765fSguenther #endif
293f49765fSguenther
303f49765fSguenther #ifdef DEBUG
313f49765fSguenther #define RPC_SVC_FG
323f49765fSguenther #endif
333f49765fSguenther
343f49765fSguenther #define _RPCSVC_CLOSEDOWN 120
353f49765fSguenther extern int _rpcpmstart; /* Started by a port monitor ? */
363f49765fSguenther extern int _rpcfdtype; /* Whether Stream or Datagram ? */
373f49765fSguenther
383f49765fSguenther
39*584b0037Sguenther void amq_program_57(struct svc_req *rqstp, SVCXPRT *transp);
40df930be7Sderaadt
41df930be7Sderaadt void
amq_program_57(struct svc_req * rqstp,SVCXPRT * transp)42*584b0037Sguenther amq_program_57(struct svc_req *rqstp, SVCXPRT *transp)
43df930be7Sderaadt {
44df930be7Sderaadt union {
45*584b0037Sguenther amq_string amqproc_mnttree_57_arg;
46*584b0037Sguenther amq_string amqproc_umnt_57_arg;
47*584b0037Sguenther amq_setopt amqproc_setopt_57_arg;
48df930be7Sderaadt } argument;
49df930be7Sderaadt char *result;
503f49765fSguenther xdrproc_t xdr_argument, xdr_result;
513f49765fSguenther char *(*local)(char *, struct svc_req *);
5208183bb5Sderaadt extern SVCXPRT *lamqp;
5308183bb5Sderaadt
5408183bb5Sderaadt if (transp != lamqp) {
5508183bb5Sderaadt struct sockaddr_in *fromsin = svc_getcaller(transp);
5608183bb5Sderaadt
5708183bb5Sderaadt syslog(LOG_WARNING,
5808183bb5Sderaadt "non-local amq attempt (might be from %s)",
5908183bb5Sderaadt inet_ntoa(fromsin->sin_addr));
6008183bb5Sderaadt svcerr_noproc(transp);
6108183bb5Sderaadt return;
6208183bb5Sderaadt }
63df930be7Sderaadt
64df930be7Sderaadt switch (rqstp->rq_proc) {
65df930be7Sderaadt case AMQPROC_NULL:
663f49765fSguenther xdr_argument = (xdrproc_t) xdr_void;
673f49765fSguenther xdr_result = (xdrproc_t) xdr_void;
68*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_null_57_svc;
69df930be7Sderaadt break;
70df930be7Sderaadt
71df930be7Sderaadt case AMQPROC_MNTTREE:
723f49765fSguenther xdr_argument = (xdrproc_t) xdr_amq_string;
733f49765fSguenther xdr_result = (xdrproc_t) xdr_amq_mount_tree_p;
74*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_mnttree_57_svc;
75df930be7Sderaadt break;
76df930be7Sderaadt
77df930be7Sderaadt case AMQPROC_UMNT:
783f49765fSguenther xdr_argument = (xdrproc_t) xdr_amq_string;
793f49765fSguenther xdr_result = (xdrproc_t) xdr_void;
80*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_umnt_57_svc;
81df930be7Sderaadt break;
82df930be7Sderaadt
83df930be7Sderaadt case AMQPROC_STATS:
843f49765fSguenther xdr_argument = (xdrproc_t) xdr_void;
853f49765fSguenther xdr_result = (xdrproc_t) xdr_amq_mount_stats;
86*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_stats_57_svc;
87df930be7Sderaadt break;
88df930be7Sderaadt
89df930be7Sderaadt case AMQPROC_EXPORT:
903f49765fSguenther xdr_argument = (xdrproc_t) xdr_void;
913f49765fSguenther xdr_result = (xdrproc_t) xdr_amq_mount_tree_list;
92*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_export_57_svc;
93df930be7Sderaadt break;
94df930be7Sderaadt
95df930be7Sderaadt case AMQPROC_SETOPT:
963f49765fSguenther xdr_argument = (xdrproc_t) xdr_amq_setopt;
973f49765fSguenther xdr_result = (xdrproc_t) xdr_int;
98*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_setopt_57_svc;
99df930be7Sderaadt break;
100df930be7Sderaadt
101df930be7Sderaadt case AMQPROC_GETMNTFS:
1023f49765fSguenther xdr_argument = (xdrproc_t) xdr_void;
1033f49765fSguenther xdr_result = (xdrproc_t) xdr_amq_mount_info_list;
104*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_getmntfs_57_svc;
105df930be7Sderaadt break;
106df930be7Sderaadt
107df930be7Sderaadt case AMQPROC_GETVERS:
1083f49765fSguenther xdr_argument = (xdrproc_t) xdr_void;
1093f49765fSguenther xdr_result = (xdrproc_t) xdr_amq_string;
110*584b0037Sguenther local = (char *(*)(char *, struct svc_req *)) amqproc_getvers_57_svc;
111df930be7Sderaadt break;
112df930be7Sderaadt
113df930be7Sderaadt default:
114df930be7Sderaadt svcerr_noproc(transp);
115df930be7Sderaadt return;
116df930be7Sderaadt }
1173f49765fSguenther (void) memset((char *)&argument, 0, sizeof (argument));
1183f49765fSguenther if (!svc_getargs(transp, xdr_argument, (caddr_t) &argument)) {
119df930be7Sderaadt svcerr_decode(transp);
120df930be7Sderaadt return;
121df930be7Sderaadt }
1223f49765fSguenther result = (*local)((char *)&argument, rqstp);
123df930be7Sderaadt if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
124df930be7Sderaadt svcerr_systemerr(transp);
125df930be7Sderaadt }
1263f49765fSguenther if (!svc_freeargs(transp, xdr_argument, (caddr_t) &argument)) {
1273f49765fSguenther plog(XLOG_FATAL, "unable to free rpc arguments in amqprog");
128df930be7Sderaadt going_down(1);
129df930be7Sderaadt }
1303f49765fSguenther return;
131df930be7Sderaadt }
132