1: # include   "monitor.h"
   2: # include   <ingres.h>
   3: # include   <aux.h>
   4: # include   <opsys.h>
   5: # include   <sccs.h>
   6: 
   7: SCCSID(@(#)shell.c	8.1	12/31/84)
   8: 
   9: 
  10: 
  11: /*
  12: **  SHELL -- call unix shell
  13: **
  14: **	The UNIX shell is called.  Shell() first tries to call an
  15: **	alternate shell defined by the macro {shell}, and if it fails
  16: **	calls /bin/sh.
  17: **
  18: **	If an argument is supplied, it is a shell file which is
  19: **	supplied to the shell.
  20: **
  21: **	Trace Flags:
  22: **		34
  23: */
  24: 
  25: shell()
  26: {
  27:     register int    i;
  28:     register char   *p;
  29:     register char   *shellfile;
  30:     extern char *getfilenm();
  31:     extern char *macro();
  32: 
  33:     shellfile = getfilenm();
  34:     if (*shellfile == 0)
  35:         shellfile = 0;
  36: 
  37:     fclose(Qryiop);
  38:     if ((Xwaitpid = fork()) == -1)
  39:         syserr("shell: fork");
  40:     if (Xwaitpid == 0)
  41:     {
  42:         setuid(getuid());
  43: #		ifndef xB_UNIX
  44:         setgid(getgid());
  45: #		endif
  46:         for (i = 3; i < NOFILE; i++)
  47:             close(i);
  48:         p = macro("{shell}");
  49: #		ifdef xMTR3
  50:         tTfp(34, 0, "{shell} = '%o'\n", p);
  51: #		endif
  52:         if (p != 0)
  53:         {
  54:             execl(p, p, shellfile, Qbname, 0);
  55:             printf("Cannot call %s; using /bin/sh\n", p);
  56:         }
  57:         execl("/bin/sh", "sh", shellfile, Qbname, 0);
  58:         syserr("shell: exec");
  59:     }
  60: 
  61:     if (Nodayfile >= 0)
  62:         printf(">>shell\n");
  63:     /* wait for shell to complete */
  64:     xwait();
  65: }

Defined functions

shell defined in line 7; used 1 times
Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 762
Valid CSS Valid XHTML 1.0 Strict