|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.