1df930be7Sderaadt /*
2*3cf360acSguenther * Please do not edit this file.
3*3cf360acSguenther * It was generated using rpcgen.
4df930be7Sderaadt */
5df930be7Sderaadt
6*3cf360acSguenther #include "nfs_prot.h"
7df930be7Sderaadt #include "am.h"
8*3cf360acSguenther #include <arpa/inet.h>
9*3cf360acSguenther #include <unistd.h>
10*3cf360acSguenther #include <stdio.h>
11*3cf360acSguenther #include <stdlib.h>/* getenv, exit */
12*3cf360acSguenther #include <rpc/pmap_clnt.h> /* for pmap_unset */
13*3cf360acSguenther #include <string.h> /* strcmp */
14*3cf360acSguenther #include <netdb.h>
15*3cf360acSguenther #include <signal.h>
16*3cf360acSguenther #include <sys/ttycom.h>/* TIOCNOTTY */
17*3cf360acSguenther #ifdef __cplusplus
18*3cf360acSguenther #include <sysent.h> /* getdtablesize, open */
19*3cf360acSguenther #endif /* __cplusplus */
20*3cf360acSguenther #include <memory.h>
21*3cf360acSguenther #include <sys/socket.h>
22*3cf360acSguenther #include <netinet/in.h>
23*3cf360acSguenther #include <syslog.h>
24*3cf360acSguenther #include <errno.h>
25*3cf360acSguenther
26*3cf360acSguenther #ifdef __STDC__
27*3cf360acSguenther #define SIG_PF void(*)(int)
28*3cf360acSguenther #endif
29*3cf360acSguenther
30*3cf360acSguenther #ifdef DEBUG
31*3cf360acSguenther #define RPC_SVC_FG
32*3cf360acSguenther #endif
33*3cf360acSguenther
34*3cf360acSguenther #define _RPCSVC_CLOSEDOWN 120
35*3cf360acSguenther extern int _rpcpmstart; /* Started by a port monitor ? */
36*3cf360acSguenther extern int _rpcfdtype; /* Whether Stream or Datagram ? */
37*3cf360acSguenther
38*3cf360acSguenther
39*3cf360acSguenther void nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp);
40df930be7Sderaadt
419cd31872Sguenther void
nfs_program_2(struct svc_req * rqstp,SVCXPRT * transp)429cd31872Sguenther nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp)
43df930be7Sderaadt {
44df930be7Sderaadt union {
45df930be7Sderaadt nfs_fh nfsproc_getattr_2_arg;
46df930be7Sderaadt sattrargs nfsproc_setattr_2_arg;
47df930be7Sderaadt diropargs nfsproc_lookup_2_arg;
48df930be7Sderaadt nfs_fh nfsproc_readlink_2_arg;
49df930be7Sderaadt readargs nfsproc_read_2_arg;
50df930be7Sderaadt writeargs nfsproc_write_2_arg;
51df930be7Sderaadt createargs nfsproc_create_2_arg;
52df930be7Sderaadt diropargs nfsproc_remove_2_arg;
53df930be7Sderaadt renameargs nfsproc_rename_2_arg;
54df930be7Sderaadt linkargs nfsproc_link_2_arg;
55df930be7Sderaadt symlinkargs nfsproc_symlink_2_arg;
56df930be7Sderaadt createargs nfsproc_mkdir_2_arg;
57df930be7Sderaadt diropargs nfsproc_rmdir_2_arg;
58df930be7Sderaadt readdirargs nfsproc_readdir_2_arg;
59df930be7Sderaadt nfs_fh nfsproc_statfs_2_arg;
60df930be7Sderaadt } argument;
61df930be7Sderaadt char *result;
62*3cf360acSguenther xdrproc_t xdr_argument, xdr_result;
63*3cf360acSguenther char *(*local)(char *, struct svc_req *);
64df930be7Sderaadt
65df930be7Sderaadt switch (rqstp->rq_proc) {
66df930be7Sderaadt case NFSPROC_NULL:
67*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_void;
68*3cf360acSguenther xdr_result = (xdrproc_t) xdr_void;
69*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_null_2_svc;
70df930be7Sderaadt break;
71df930be7Sderaadt
72df930be7Sderaadt case NFSPROC_GETATTR:
73*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_nfs_fh;
74*3cf360acSguenther xdr_result = (xdrproc_t) xdr_attrstat;
75*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_getattr_2_svc;
76df930be7Sderaadt break;
77df930be7Sderaadt
78df930be7Sderaadt case NFSPROC_SETATTR:
79*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_sattrargs;
80*3cf360acSguenther xdr_result = (xdrproc_t) xdr_attrstat;
81*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_setattr_2_svc;
82df930be7Sderaadt break;
83df930be7Sderaadt
84df930be7Sderaadt case NFSPROC_ROOT:
85*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_void;
86*3cf360acSguenther xdr_result = (xdrproc_t) xdr_void;
87*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_root_2_svc;
88df930be7Sderaadt break;
89df930be7Sderaadt
90df930be7Sderaadt case NFSPROC_LOOKUP:
91*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_diropargs;
92*3cf360acSguenther xdr_result = (xdrproc_t) xdr_diropres;
93*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_lookup_2_svc;
94df930be7Sderaadt break;
95df930be7Sderaadt
96df930be7Sderaadt case NFSPROC_READLINK:
97*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_nfs_fh;
98*3cf360acSguenther xdr_result = (xdrproc_t) xdr_readlinkres;
99*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_readlink_2_svc;
100df930be7Sderaadt break;
101df930be7Sderaadt
102df930be7Sderaadt case NFSPROC_READ:
103*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_readargs;
104*3cf360acSguenther xdr_result = (xdrproc_t) xdr_readres;
105*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_read_2_svc;
106df930be7Sderaadt break;
107df930be7Sderaadt
108df930be7Sderaadt case NFSPROC_WRITECACHE:
109*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_void;
110*3cf360acSguenther xdr_result = (xdrproc_t) xdr_void;
111*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_writecache_2_svc;
112df930be7Sderaadt break;
113df930be7Sderaadt
114df930be7Sderaadt case NFSPROC_WRITE:
115*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_writeargs;
116*3cf360acSguenther xdr_result = (xdrproc_t) xdr_attrstat;
117*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_write_2_svc;
118df930be7Sderaadt break;
119df930be7Sderaadt
120df930be7Sderaadt case NFSPROC_CREATE:
121*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_createargs;
122*3cf360acSguenther xdr_result = (xdrproc_t) xdr_diropres;
123*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_create_2_svc;
124df930be7Sderaadt break;
125df930be7Sderaadt
126df930be7Sderaadt case NFSPROC_REMOVE:
127*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_diropargs;
128*3cf360acSguenther xdr_result = (xdrproc_t) xdr_nfsstat;
129*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_remove_2_svc;
130df930be7Sderaadt break;
131df930be7Sderaadt
132df930be7Sderaadt case NFSPROC_RENAME:
133*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_renameargs;
134*3cf360acSguenther xdr_result = (xdrproc_t) xdr_nfsstat;
135*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_rename_2_svc;
136df930be7Sderaadt break;
137df930be7Sderaadt
138df930be7Sderaadt case NFSPROC_LINK:
139*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_linkargs;
140*3cf360acSguenther xdr_result = (xdrproc_t) xdr_nfsstat;
141*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_link_2_svc;
142df930be7Sderaadt break;
143df930be7Sderaadt
144df930be7Sderaadt case NFSPROC_SYMLINK:
145*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_symlinkargs;
146*3cf360acSguenther xdr_result = (xdrproc_t) xdr_nfsstat;
147*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_symlink_2_svc;
148df930be7Sderaadt break;
149df930be7Sderaadt
150df930be7Sderaadt case NFSPROC_MKDIR:
151*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_createargs;
152*3cf360acSguenther xdr_result = (xdrproc_t) xdr_diropres;
153*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_mkdir_2_svc;
154df930be7Sderaadt break;
155df930be7Sderaadt
156df930be7Sderaadt case NFSPROC_RMDIR:
157*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_diropargs;
158*3cf360acSguenther xdr_result = (xdrproc_t) xdr_nfsstat;
159*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_rmdir_2_svc;
160df930be7Sderaadt break;
161df930be7Sderaadt
162df930be7Sderaadt case NFSPROC_READDIR:
163*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_readdirargs;
164*3cf360acSguenther xdr_result = (xdrproc_t) xdr_readdirres;
165*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_readdir_2_svc;
166df930be7Sderaadt break;
167df930be7Sderaadt
168df930be7Sderaadt case NFSPROC_STATFS:
169*3cf360acSguenther xdr_argument = (xdrproc_t) xdr_nfs_fh;
170*3cf360acSguenther xdr_result = (xdrproc_t) xdr_statfsres;
171*3cf360acSguenther local = (char *(*)(char *, struct svc_req *)) nfsproc_statfs_2_svc;
172df930be7Sderaadt break;
173df930be7Sderaadt
174df930be7Sderaadt default:
175df930be7Sderaadt svcerr_noproc(transp);
176df930be7Sderaadt return;
177df930be7Sderaadt }
178*3cf360acSguenther (void) memset((char *)&argument, 0, sizeof (argument));
179*3cf360acSguenther if (!svc_getargs(transp, xdr_argument, (caddr_t) &argument)) {
180df930be7Sderaadt svcerr_decode(transp);
181df930be7Sderaadt return;
182df930be7Sderaadt }
183*3cf360acSguenther result = (*local)((char *)&argument, rqstp);
184*3cf360acSguenther if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
185df930be7Sderaadt svcerr_systemerr(transp);
186*3cf360acSguenther }
187*3cf360acSguenther if (!svc_freeargs(transp, xdr_argument, (caddr_t) &argument)) {
188*3cf360acSguenther plog(XLOG_FATAL, "unable to free rpc arguments in nfs_program");
189df930be7Sderaadt going_down(1);
190df930be7Sderaadt }
191*3cf360acSguenther return;
192df930be7Sderaadt }
193