1: # include "defs.h"
   2: /*
   3: 	nsh -c "comand to be executed"
   4: 
   5: 	This pseudo-shell is executed over the network
   6: 	as the login shell of an acount "network", no passwd.
   7: 	It will only execute certain allowed commands.
   8: 
   9: 	has these exit codes:
  10: 		EX_USAGE = 	wrong # arguments to nsh
  11: 		9 = 		command you execute may not take arguments
  12: 		10= 		the execl failed
  13: 		EX_UNAVAILABLE= could not find full path name for the command
  14: 
  15: 	count is the # of arguments (= argc) allowed.
  16: 	a count of 0 turns off the command
  17: */
  18: 
  19: struct {
  20:     char *app;
  21:     char count;
  22:     char *full;
  23:     char *full1;
  24:     } st[] = {
  25: /* I assume these are the same for RAND */
  26:     "mmail",    20, "/usr/net/bin/mmail",   "/usr/net/bin/mmail",
  27:     "mwrite",   20, "/usr/net/bin/mwrite",  "/usr/net/bin/mwrite",
  28:     "prmail",   20, "/usr/net/bin/prmail",  "/usr/net/bin/prmail",
  29: # ifndef NFREECMD
  30:     "bpq",      20, "/usr/bin/bpq",     "/bin/bpq",
  31:     "epq",      20, "/usr/bin/epq",     "/bin/epq",
  32:     "finger",   20, "/usr/ucb/finger",  "/usr/bin/finger",
  33:     "help",     20, "/bin/help",    "/usr/bin/help",
  34:     "lpq",      20, "/usr/bin/lpq",     "/bin/lpq",
  35: # ifdef FREELPR
  36:     "lpr",      20, "/usr/bin/lpr",     "/bin/lpr",
  37: # endif
  38:     "netlog",   20, "/usr/bin/netlog",  "/usr/ucb/netlog",
  39:     "netq",     20, "/usr/bin/netq",    "/usr/ucb/netq",
  40:     "news",     20, "/usr/bin/news",    "/usr/ucb/news",
  41:     "ps",       20, "/bin/ps",      "/usr/bin/ps",
  42:     "pstat",    20, "/usr/bin/pstat",   "/bin/pstat",
  43:     "rcs",      20, "/usr/bin/rcs",     "/bin/rcs",
  44:     "rcslog",   1,  "/usr/bin/rcslog",  "/bin/rcslog",
  45:     "rcsq",     20, "/usr/bin/rcsq",    "/bin/rcsq",
  46:     "trq",      20, "/usr/bin/trq",     "/bin/trq",
  47:     "vpq",      20, "/usr/ucb/vpq",     "/usr/bin/vpq",
  48:     "w",        20, "/usr/ucb/w",       "/usr/bin/w",
  49:     "wc",       20, "/usr/bin/wc",      "/bin/wc",
  50:     "where",    20, "/usr/bin/where",   "/bin/where",
  51:     "who",      20, "/bin/who",     "/usr/bin/who",
  52:     "whom",     20, "/usr/ucb/whom",    "/usr/bin/whom",
  53:     "write",    20, "/usr/bin/write",   "/bin/write",
  54:     "yank",     20, "/usr/ucb/yank",    "/usr/bin/yank",
  55: # endif
  56:     0,      0,      0,      0
  57:     };
  58: /* nsh -c cmd */
  59: main(argc,argv)
  60:   char **argv; {
  61:     char *s, buf[500];
  62:     int i, flg = 0;
  63:     if(argc != 3){
  64:         fprintf(stderr,"Wrong number of arguments to nsh.\n");
  65:         exit(EX_USAGE);
  66:     }
  67:     s = argv[2];
  68:     while(*s && *s != ' ')s++;
  69:     if(*s == ' ')flg++;
  70:     *s = 0;
  71:     if((i = mlookup(argv[2])) < 0){
  72:         fprintf(stderr,
  73:         "Command '%s' is not allowed if logged in as 'network'.\n",
  74:             argv[2]);
  75:         exit(11);
  76:     }
  77:     if(st[i].count == 0){
  78:         fprintf(stderr,
  79:         "The command '%s' is not allowed to have arguments.\n",argv[2]);
  80:         exit(9);
  81:         }
  82:     if(stat(st[i].full,buf) >= 0)
  83:         strcpy(buf,st[i].full);
  84:     else strcpy(buf,st[i].full1);
  85:     if(flg && st[i].count > 1){  /* some cmds don't allow parms */
  86:         *s = ' ';
  87:         strcat(buf,s);
  88:         }
  89:     /*
  90: 	fprintf(stderr,"%s\n",buf);
  91: 	*/
  92:     execl(Bsh,"sh","-c",buf,0);
  93:     fprintf(stderr,"Execute of shell failed.\n");
  94:     exit(EX_UNAVAILABLE);
  95:     }
  96: mlookup(s)
  97:   char *s; {
  98:     int i;
  99:     for(i = 0; st[i].app; i++)
 100:         if(strcmp(st[i].app,s) == 0 || strcmp(st[i].full,s) == 0
 101:          || strcmp(st[i].full1,s) == 0)return(i);
 102:     return(-1);
 103:     }

Defined functions

main defined in line 59; never used
mlookup defined in line 96; used 1 times
  • in line 71
Last modified: 1980-07-16
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 692
Valid CSS Valid XHTML 1.0 Strict