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: sreverses(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: }