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