Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
- #include "load.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <rpc/pmap_clnt.h>
- #include <string.h>
- #include <memory.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #ifndef SIG_PF
- #define SIG_PF void(*)(int)
- #endif
- #define BANNEDUID 1000
- static void
- unix_auth(struct svc_req *rqstp, register SVCXPRT *transp)
- {
- struct authunix_parms *unix_cred;
- int uid;
- /*
- * we don't care about authentication for null proc
- */
- if (rqstp->rq_proc == NULLPROC) {
- (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
- return;
- }
- /*
- * now get the uid
- */
- switch (rqstp->rq_cred.oa_flavor) {
- case AUTH_UNIX:
- unix_cred =
- (struct authunix_parms *)rqstp->rq_clntcred;
- uid = unix_cred->aup_uid;
- break;
- case AUTH_NULL:
- default:
- svcerr_weakauth(transp);
- return;
- }
- switch (rqstp->rq_proc) {
- case GET_LOAD:
- /*
- * user with BANNEDUID gid cannot change the directory :)
- */
- if (uid == BANNEDUID) {
- svcerr_weakauth(transp);
- return;
- }
- return;
- default:
- return;
- }
- }
- static void
- load_prog_1(struct svc_req *rqstp, register SVCXPRT *transp)
- {
- unix_auth (rqstp, transp);
- union {
- command get_load_1_arg;
- file open_file_1_arg;
- int close_file_1_arg;
- int read_file_1_arg;
- } argument;
- char *result;
- xdrproc_t _xdr_argument, _xdr_result;
- char *(*local)(char *, struct svc_req *);
- switch (rqstp->rq_proc) {
- case NULLPROC:
- (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
- return;
- case GET_LOAD:
- _xdr_argument = (xdrproc_t) xdr_command;
- _xdr_result = (xdrproc_t) xdr_result;
- local = (char *(*)(char *, struct svc_req *)) get_load_1_svc;
- break;
- case OPEN_FILE:
- _xdr_argument = (xdrproc_t) xdr_file;
- _xdr_result = (xdrproc_t) xdr_int;
- local = (char *(*)(char *, struct svc_req *)) open_file_1_svc;
- break;
- case CLOSE_FILE:
- _xdr_argument = (xdrproc_t) xdr_int;
- _xdr_result = (xdrproc_t) xdr_int;
- local = (char *(*)(char *, struct svc_req *)) close_file_1_svc;
- break;
- case READ_FILE:
- _xdr_argument = (xdrproc_t) xdr_int;
- _xdr_result = (xdrproc_t) xdr_result;
- local = (char *(*)(char *, struct svc_req *)) read_file_1_svc;
- break;
- default:
- svcerr_noproc (transp);
- return;
- }
- memset ((char *)&argument, 0, sizeof (argument));
- if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
- svcerr_decode (transp);
- return;
- }
- result = (*local)((char *)&argument, rqstp);
- if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) {
- svcerr_systemerr (transp);
- }
- if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
- fprintf (stderr, "%s", "unable to free arguments");
- exit (1);
- }
- return;
- }
- int
- main (int argc, char **argv)
- {
- register SVCXPRT *transp;
- pmap_unset (LOAD_PROG, LOAD_VERS);
- transp = svcudp_create(RPC_ANYSOCK);
- if (transp == NULL) {
- fprintf (stderr, "%s", "cannot create udp service.");
- exit(1);
- }
- if (!svc_register(transp, LOAD_PROG, LOAD_VERS, load_prog_1, IPPROTO_UDP)) {
- fprintf (stderr, "%s", "unable to register (LOAD_PROG, LOAD_VERS, udp).");
- exit(1);
- }
- transp = svctcp_create(RPC_ANYSOCK, 0, 0);
- if (transp == NULL) {
- fprintf (stderr, "%s", "cannot create tcp service.");
- exit(1);
- }
- if (!svc_register(transp, LOAD_PROG, LOAD_VERS, load_prog_1, IPPROTO_TCP)) {
- fprintf (stderr, "%s", "unable to register (LOAD_PROG, LOAD_VERS, tcp).");
- exit(1);
- }
- svc_run ();
- fprintf (stderr, "%s", "svc_run returned");
- exit (1);
- /* NOTREACHED */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement