Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.67 KB | None | 0 0
  1. /*
  2.  * Please do not edit this file.
  3.  * It was generated using rpcgen.
  4.  */
  5.  
  6. #include "load.h"
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <rpc/pmap_clnt.h>
  10. #include <string.h>
  11. #include <memory.h>
  12. #include <sys/socket.h>
  13. #include <netinet/in.h>
  14.  
  15. #ifndef SIG_PF
  16. #define SIG_PF void(*)(int)
  17. #endif
  18.  
  19. #define BANNEDUID 1000
  20.  
  21. static void
  22. unix_auth(struct svc_req *rqstp, register SVCXPRT *transp)
  23. {
  24.     struct authunix_parms *unix_cred;
  25.     int uid;
  26.  
  27.     /*
  28.     * we don't care about authentication for null proc
  29.     */
  30.     if (rqstp->rq_proc == NULLPROC) {
  31.         (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
  32.         return;
  33.     }
  34.     /*
  35.     * now get the uid
  36.     */
  37.     switch (rqstp->rq_cred.oa_flavor) {
  38.         case AUTH_UNIX:
  39.             unix_cred =
  40.                     (struct authunix_parms *)rqstp->rq_clntcred;
  41.             uid = unix_cred->aup_uid;
  42.             break;
  43.         case AUTH_NULL:
  44.         default:
  45.             svcerr_weakauth(transp);
  46.             return;
  47.     }
  48.    
  49.     switch (rqstp->rq_proc) {
  50.         case GET_LOAD:
  51.             /*
  52.             * user with BANNEDUID gid cannot change the directory :)
  53.             */
  54.             if (uid == BANNEDUID) {
  55.                 svcerr_weakauth(transp);
  56.                 return;
  57.             }
  58.             return;
  59.         default:
  60.             return;
  61.     }
  62. }
  63.  
  64. static void
  65. load_prog_1(struct svc_req *rqstp, register SVCXPRT *transp)
  66. {
  67.     unix_auth (rqstp, transp);
  68.    
  69.     union {
  70.         command get_load_1_arg;
  71.         file open_file_1_arg;
  72.         int close_file_1_arg;
  73.         int read_file_1_arg;
  74.     } argument;
  75.     char *result;
  76.     xdrproc_t _xdr_argument, _xdr_result;
  77.     char *(*local)(char *, struct svc_req *);
  78.  
  79.     switch (rqstp->rq_proc) {
  80.         case NULLPROC:
  81.             (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
  82.             return;
  83.  
  84.         case GET_LOAD:
  85.             _xdr_argument = (xdrproc_t) xdr_command;
  86.             _xdr_result = (xdrproc_t) xdr_result;
  87.             local = (char *(*)(char *, struct svc_req *)) get_load_1_svc;
  88.             break;
  89.  
  90.         case OPEN_FILE:
  91.             _xdr_argument = (xdrproc_t) xdr_file;
  92.             _xdr_result = (xdrproc_t) xdr_int;
  93.             local = (char *(*)(char *, struct svc_req *)) open_file_1_svc;
  94.             break;
  95.  
  96.         case CLOSE_FILE:
  97.             _xdr_argument = (xdrproc_t) xdr_int;
  98.             _xdr_result = (xdrproc_t) xdr_int;
  99.             local = (char *(*)(char *, struct svc_req *)) close_file_1_svc;
  100.             break;
  101.  
  102.         case READ_FILE:
  103.             _xdr_argument = (xdrproc_t) xdr_int;
  104.             _xdr_result = (xdrproc_t) xdr_result;
  105.             local = (char *(*)(char *, struct svc_req *)) read_file_1_svc;
  106.             break;
  107.  
  108.         default:
  109.             svcerr_noproc (transp);
  110.             return;
  111.     }
  112.     memset ((char *)&argument, 0, sizeof (argument));
  113.     if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
  114.         svcerr_decode (transp);
  115.         return;
  116.     }
  117.     result = (*local)((char *)&argument, rqstp);
  118.     if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) {
  119.         svcerr_systemerr (transp);
  120.     }
  121.     if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
  122.         fprintf (stderr, "%s", "unable to free arguments");
  123.         exit (1);
  124.     }
  125.     return;
  126. }
  127.  
  128. int
  129. main (int argc, char **argv)
  130. {
  131.     register SVCXPRT *transp;
  132.  
  133.     pmap_unset (LOAD_PROG, LOAD_VERS);
  134.  
  135.     transp = svcudp_create(RPC_ANYSOCK);
  136.     if (transp == NULL) {
  137.         fprintf (stderr, "%s", "cannot create udp service.");
  138.         exit(1);
  139.     }
  140.     if (!svc_register(transp, LOAD_PROG, LOAD_VERS, load_prog_1, IPPROTO_UDP)) {
  141.         fprintf (stderr, "%s", "unable to register (LOAD_PROG, LOAD_VERS, udp).");
  142.         exit(1);
  143.     }
  144.  
  145.     transp = svctcp_create(RPC_ANYSOCK, 0, 0);
  146.     if (transp == NULL) {
  147.         fprintf (stderr, "%s", "cannot create tcp service.");
  148.         exit(1);
  149.     }
  150.     if (!svc_register(transp, LOAD_PROG, LOAD_VERS, load_prog_1, IPPROTO_TCP)) {
  151.         fprintf (stderr, "%s", "unable to register (LOAD_PROG, LOAD_VERS, tcp).");
  152.         exit(1);
  153.     }
  154.  
  155.     svc_run ();
  156.     fprintf (stderr, "%s", "svc_run returned");
  157.     exit (1);
  158.     /* NOTREACHED */
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement