home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume6
/
shadow-2.pt3
/
env.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-03
|
1KB
|
79 lines
#include <stdio.h>
#include <string.h>
extern char **environ;
extern char *newenvp[];
extern int newenvc;
extern int maxenv;
char *strdup ();
void free ();
static char *forbid[] = {
"HOME",
"IFS",
"PATH",
"SHELL",
(char *) 0
};
void addenv (entry)
char *entry;
{
char *cp;
int i;
int len;
if (cp = strchr (entry, '='))
len = cp - entry;
else
len = strlen (entry);
for (i = 0;i < newenvc;i++)
if (strncmp (entry, newenvp[i], len) == 0 &&
(newenvp[i][len] == '=' || newenvp[i][len] == '\0'))
break;
if (i == maxenv) {
puts ("Environment overflow");
return;
}
if (i == newenvc) {
newenvp[newenvc++] = strdup (entry);
} else {
free (newenvp[i]);
newenvp[i] = strdup (entry);
}
}
void setenv (argc, argv)
int argc;
char **argv;
{
int i;
int n;
char variable[BUFSIZ];
char *cp;
for (i = 0;i < argc;i++) {
if ((n = strlen (argv[i])) >= BUFSIZ)
continue; /* ignore long entries */
if (! (cp = strchr (argv[i], '='))) {
(void) strcpy (variable, argv[i]);
} else {
(void) strncpy (variable, argv[i], cp - argv[i]);
variable[cp - argv[i]] = '\0';
}
for (n = 0;forbid[n] != (char *) 0;n++)
if (strcmp (variable, forbid[n]) == 0)
break;
if (forbid[n] != (char *) 0) {
printf ("You may not change $%s\n", forbid[n]);
continue;
}
addenv (argv[i]);
}
}