Annotation of researchv9/ipc/src/mgrs/svcmgr/exec_act.c, revision 1.1.1.1

1.1       root        1: #include "mgr.h"
                      2: #include <sys/param.h>
                      3: #include <sys/ioctl.h>
                      4: #include <pwd.h>
                      5: #include <ctype.h>
                      6: #include "defs.h"
                      7: 
                      8: /*
                      9:  *  get parameters from caller
                     10:  */
                     11: parms(rp, ap)
                     12:        Request *rp;
                     13:        Action *ap;
                     14: {
                     15:        char pbuf[ARB];
                     16:        char *s;
                     17:        char *rdline();
                     18:        char *strchr();
                     19: 
                     20:        USE(ap);
                     21:        if ((s = rdline(rp->i->cfd)) == NULL)
                     22:                return -1;
                     23:        rp->args = strdup(s);
                     24:        return 0;
                     25: }
                     26: 
                     27: /*
                     28:  *  get terminal type(speed, etc) from caller
                     29:  */
                     30: term(rp, ap)
                     31:        Request *rp;
                     32:        Action *ap;
                     33: {
                     34:        char pbuf[ARB];
                     35:        char *s, *sl;
                     36:        char *rdline();
                     37:        char *strchr();
                     38: 
                     39:        USE(ap);
                     40:        if (ap->arg!=NULL && *(ap->arg)!='\0') {
                     41:                rp->term = strdup(ap->arg);
                     42:        } else {
                     43:                if((s = rdline(rp->i->cfd)) == NULL)
                     44:                        return -1;
                     45:                if(sl=strchr(s, '/'))
                     46:                        *sl = '\0';
                     47:                rp->term = strdup(s);
                     48:        }
                     49:        return 0;
                     50: }
                     51: 
                     52: /*
                     53:  *  action routines that end in execs
                     54:  */
                     55: 
                     56: doconn(rp, ap)
                     57:        Request *rp;
                     58:        Action *ap;
                     59: {
                     60:        USE(ap);
                     61:        ioctl(rp->i->cfd, TCPIOHUP, 0);         /* hang-up TCP on FIN */
                     62:        login(rp, rp->line, (char *)NULL);
                     63: }
                     64: 
                     65: doexec(rp, ap)
                     66:        Request *rp;
                     67:        Action *ap;
                     68: {
                     69:        USE(ap);
                     70:        login(rp, rp->line, rp->args);
                     71: }
                     72: 
                     73: docmd(rp, ap)
                     74:        Request *rp;
                     75:        Action *ap;
                     76: {
                     77:        register char *p;
                     78:        char buf[ARB];
                     79: 
                     80:        for(p=rp->args; *p; p++)
                     81:                if (strchr("\n&;^|<>(){}`", *p))
                     82:                        *p = ' ';
                     83:        strcpy(buf, ap->arg);
                     84:        strcat(buf, " ");
                     85:        /*
                     86:        for(p=rp->args; *p && !isspace(*p); p++)
                     87:                ;
                     88:         */
                     89:        strcat(buf, rp->args);
                     90:        login(rp, rp->line, buf);
                     91: }
                     92: 
                     93: login(rp, pw, cmd)
                     94:        Request *rp;
                     95:        char *pw, *cmd;
                     96: {
                     97:        char *args[5];
                     98:        register char **ap;
                     99:        register int i;
                    100:        char **inienv;
                    101:        char **srcenv(), **termenv();
                    102: 
                    103:        ap = args;
                    104:        *ap++ = "login";
                    105:        if (pw) {
                    106:                *ap++ = "-p";
                    107:                *ap++ = pw;
                    108:                if (cmd)
                    109:                        *ap++ = cmd;
                    110:        }
                    111:        *ap = NULL;
                    112:        for (i = 0; i < NSYSFILE; i++)
                    113:                dup2(rp->i->cfd, i);
                    114:        for (; i < NOFILE; i++)
                    115:                close(i);
                    116:        termenv(rp);
                    117:        inienv = srcenv(rp);
                    118:        ioctl(0, TIOCSPGRP, 0);
                    119:        execve("/etc/login", args, inienv);
                    120:        execve("/bin/login", args, inienv);
                    121:        _exit(1);
                    122: }
                    123: 
                    124: char **newep;  /* set up by init */
                    125: char *newenv[5];
                    126: 
                    127: char **
                    128: srcenv(rp)
                    129:        Request *rp;
                    130: {
                    131:        static char buf[100];
                    132: 
                    133:        sprintf(buf, "CSOURCE=%s!%s", rp->i->machine, rp->i->user);
                    134:        *newep++ = buf;
                    135:        *newep = NULL;
                    136:        return (newenv);
                    137: }
                    138: 
                    139: char **
                    140: termenv(rp)
                    141:        Request *rp;
                    142: {
                    143:        static char buf[100];
                    144: 
                    145:        if (rp->term == NULL)
                    146:                return (newenv);
                    147:        sprintf(buf, "TERM=%s", rp->term);
                    148:        *newep++ = buf;
                    149:        *newep = NULL;
                    150:        return (newenv);
                    151: }

unix.superglobalmegacorp.com

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