Annotation of 43BSD/ingres/source/monitor/shell.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.