mirror of
https://github.com/sheumann/telnetd.git
synced 2024-10-31 12:04:35 +00:00
(scrub_env): change to only accept a listed set of variables,
including only non-filename contents for TERMCAP git-svn-id: http://svn0.us-east.freebsd.org/base/head/contrib/telnet@69825 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
This commit is contained in:
parent
fe910aa69a
commit
40b68302ee
@ -1839,34 +1839,48 @@ addarg(argv, val)
|
||||
/*
|
||||
* scrub_env()
|
||||
*
|
||||
* Remove a few things from the environment that
|
||||
* don't need to be there.
|
||||
* We only accept the environment variables listed below.
|
||||
*/
|
||||
void
|
||||
scrub_env()
|
||||
{
|
||||
register char **cpp, **cpp2;
|
||||
static const char *reject[] = {
|
||||
"TERMCAP=/",
|
||||
NULL
|
||||
};
|
||||
|
||||
static const char *accept[] = {
|
||||
"XAUTH=", "XAUTHORITY=", "DISPLAY=",
|
||||
"TERM=",
|
||||
"EDITOR=",
|
||||
"PAGER=",
|
||||
"LOGNAME=",
|
||||
"POSIXLY_CORRECT=",
|
||||
"PRINTER=",
|
||||
NULL
|
||||
};
|
||||
|
||||
char **cpp, **cpp2;
|
||||
const char **p;
|
||||
|
||||
for (cpp2 = cpp = environ; *cpp; cpp++) {
|
||||
#ifdef __FreeBSD__
|
||||
if (strncmp(*cpp, "LD_LIBRARY_PATH=", 16) &&
|
||||
strncmp(*cpp, "LD_PRELOAD=", 11) &&
|
||||
#else
|
||||
if (strncmp(*cpp, "LD_", 3) &&
|
||||
strncmp(*cpp, "_RLD_", 5) &&
|
||||
strncmp(*cpp, "LIBPATH=", 8) &&
|
||||
#endif
|
||||
strncmp(*cpp, "LOCALDOMAIN=", 12) &&
|
||||
strncmp(*cpp, "RES_OPTIONS=", 12) &&
|
||||
strncmp(*cpp, "TERMINFO=", 9) &&
|
||||
strncmp(*cpp, "TERMINFO_DIRS=", 14) &&
|
||||
strncmp(*cpp, "TERMPATH=", 9) &&
|
||||
strncmp(*cpp, "TERMCAP=/", 9) &&
|
||||
strncmp(*cpp, "ENV=", 4) &&
|
||||
strncmp(*cpp, "IFS=", 4))
|
||||
int reject_it = 0;
|
||||
|
||||
for(p = reject; *p; p++)
|
||||
if(strncmp(*cpp, *p, strlen(*p)) == 0) {
|
||||
reject_it = 1;
|
||||
break;
|
||||
}
|
||||
if (reject_it)
|
||||
continue;
|
||||
|
||||
for(p = accept; *p; p++)
|
||||
if(strncmp(*cpp, *p, strlen(*p)) == 0)
|
||||
break;
|
||||
if(*p != NULL)
|
||||
*cpp2++ = *cpp;
|
||||
}
|
||||
*cpp2 = 0;
|
||||
*cpp2 = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user