Annotation of 41BSD/cmd/berknet/environ.c, revision 1.1.1.1

1.1       root        1: # include "defs.h"
                      2: /* 
                      3:        environ.c
                      4: 
                      5:        examine the environment variables and see if they
                      6:        have network login name and password information
                      7: */
                      8: 
                      9: envloginpasswd(mch,sn,spasswd)
                     10: register char *sn, *spasswd;{
                     11:        register char *senv;
                     12:        char stemp[30], fgetlogin;
                     13:        char *envlook();
                     14: # ifdef V6
                     15:        return;                 /* doesn't work on V6 */
                     16: # endif
                     17:        senv = envlook(mch);
                     18:        if(senv == NULL)return;
                     19:        if(!isalpha(senv[0]))return;    /* not login name, ignore */
                     20:        fgetlogin = (sn[0] == 0);
                     21:        while(*senv && *senv != ','){
                     22:                if(fgetlogin)*sn++ = *senv;
                     23:                else if(*sn++ != *senv)return;
                     24:                senv++;
                     25:        }
                     26:        strcpy(stemp,++senv);
                     27:        mkpwclear(stemp,mch,spasswd);
                     28: }
                     29: extern char **environ;
                     30: char *envlook(mch){
                     31:        static char svalue[100];
                     32:        register char *s, *sv, **env;
                     33:        env = environ;
                     34:        while(*env != NULL){
                     35:                s = *env++;
                     36:                if(s[0] == 'M' && s[1] == 'A' && s[2] == 'C' && s[3] == 'H'){
                     37:                        sv = s+4;
                     38:                        while(*sv && *sv != '=')sv++;
                     39:                        *sv++ = 0;
                     40:                        if(lookup(s+4) == mch){
                     41:                                strcpy(svalue,sv);
                     42:                                return(svalue);
                     43:                        }
                     44:                }
                     45:        }
                     46:        return(NULL);
                     47: }
                     48: /*
                     49:        reverse the sfrom string, copying into sto.
                     50:        sfrom and sto may not be the same string
                     51: */
                     52: sreverse(sto,sfrom)
                     53: register char *sto, *sfrom;
                     54: {
                     55:        register int i;
                     56:        i = strlen(sfrom);
                     57:        while(i >= 0)
                     58:                *sto++ = sfrom[i--];
                     59: }
                     60: /* 
                     61:        mkenvkey
                     62:        
                     63:        make key to encrypt environment passwds.
                     64:        return NULL if error
                     65: */
                     66: static char *mkenvkey(mch)
                     67: char mch;
                     68: {
                     69:        static char skey[40];
                     70:        register struct utmp *putmp;
                     71:        char stemp[40], stemp1[40], sttyname[30];
                     72:        register char *sk,*p;
                     73: 
                     74:        if(isatty(2))strcpy(sttyname,ttyname(2));
                     75:        else if(isatty(0))strcpy(sttyname,ttyname(0));
                     76:        else if(isatty(1))strcpy(sttyname,ttyname(1));
                     77:        else return(NULL);
                     78:        putmp = getutmp(sttyname);
                     79:        if(putmp == NULL) return(NULL);
                     80:        sk = skey;
                     81:        p = putmp->ut_line;
                     82:        while(*p)*sk++ = *p++;
                     83:        *sk++ = mch;
                     84:        sprintf(stemp,"%ld",putmp->ut_time);
                     85:        sreverse(stemp1,stemp);
                     86:        p = stemp1;
                     87:        while(*p)*sk++ = *p++;
                     88:        *sk = 0;
                     89:        return(skey);
                     90: }
                     91: /*
                     92:        make an encrypted passwd
                     93: */
                     94: mkpwunclear(spasswd,mch,sencpasswd)
                     95:        char mch,*spasswd,*sencpasswd;
                     96: {
                     97:        register char *skey;
                     98:        if(spasswd[0] == 0){
                     99:                sencpasswd[0] = 0;
                    100:                return;
                    101:        }
                    102:        skey = mkenvkey(mch);
                    103:        if(skey == NULL){
                    104:                fprintf(stderr,"Can't make key\n");
                    105:                exit(EX_OSERR);
                    106:        }
                    107:        nbsencrypt(spasswd,skey,sencpasswd);
                    108: }
                    109: /* 
                    110:        make an unecrypted passwd
                    111: */
                    112: mkpwclear(sencpasswd,mch,spasswd)
                    113: char mch,*spasswd,*sencpasswd;
                    114: {
                    115:        register char *skey;
                    116:        if(sencpasswd[0] == 0){
                    117:                spasswd[0] = 0;
                    118:                return;
                    119:        }
                    120:        skey = mkenvkey(mch);
                    121:        if(skey == NULL){
                    122:                fprintf(stderr,"Can't make key\n");
                    123:                exit(EX_OSERR);
                    124:        }
                    125:        nbsdecrypt(sencpasswd,skey,spasswd);
                    126: }

unix.superglobalmegacorp.com

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