|
|
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.