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