Move the env whitelists to an rc var and build in the system whitelist.
This commit is contained in:
		@@ -1,6 +0,0 @@
 | 
			
		||||
# /etc/conf.d/env_whitelist:  Environment whitelist for rc-system
 | 
			
		||||
 | 
			
		||||
# Specify which variables are allowed to be passed from the environment to the
 | 
			
		||||
# rc-system.  If it is not set by the environment, then the variable will be
 | 
			
		||||
# taken from /etc/profile.env - meaning, if you need to set LANG or such,
 | 
			
		||||
# do it in a /etc/env.d/99myownstuff file for example, and run env-update.
 | 
			
		||||
@@ -52,6 +52,10 @@ rc_force_auto="NO"
 | 
			
		||||
# /var/log/rc.log
 | 
			
		||||
rc_logger="NO"
 | 
			
		||||
 | 
			
		||||
# By default we filter the environment for our running scripts. To allow other
 | 
			
		||||
# variables through, add them here. Use a * to allow all variables through.
 | 
			
		||||
# rc_env_allow="VAR1 VAR2"
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
# MISC CONFIGURATION VARIABLES
 | 
			
		||||
# There variables are shared between many init scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
# System environment whitelist for rc-system
 | 
			
		||||
# See /etc/conf.d/env_whitelist for details.
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Internal variables needed for operation of rc-system
 | 
			
		||||
# NB: Do not modify below this line if you do not know what you are doing!!
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Hotplug
 | 
			
		||||
IN_HOTPLUG
 | 
			
		||||
 | 
			
		||||
# RC network script support
 | 
			
		||||
IN_BACKGROUND
 | 
			
		||||
RC_INTERFACE_KEEP_CONFIG
 | 
			
		||||
 | 
			
		||||
# Default shell stuff
 | 
			
		||||
PATH
 | 
			
		||||
SHELL
 | 
			
		||||
USER
 | 
			
		||||
HOME
 | 
			
		||||
TERM
 | 
			
		||||
 | 
			
		||||
# Language variables
 | 
			
		||||
LANG
 | 
			
		||||
LC_CTYPE
 | 
			
		||||
LC_NUMERIC
 | 
			
		||||
LC_TIME
 | 
			
		||||
LC_COLLATE
 | 
			
		||||
LC_MONETARY
 | 
			
		||||
LC_MESSAGES
 | 
			
		||||
LC_PAPER
 | 
			
		||||
LC_NAME
 | 
			
		||||
LC_ADDRESS
 | 
			
		||||
LC_TELEPHONE
 | 
			
		||||
LC_MEASUREMENT
 | 
			
		||||
LC_IDENTIFICATION
 | 
			
		||||
LC_ALL
 | 
			
		||||
 | 
			
		||||
# From /sbin/init
 | 
			
		||||
INIT_HALT
 | 
			
		||||
INIT_VERSION
 | 
			
		||||
RUNLEVEL
 | 
			
		||||
PREVLEVEL
 | 
			
		||||
CONSOLE
 | 
			
		||||
 | 
			
		||||
# Allow this through too so we can prefer stuff in /lib when shutting down
 | 
			
		||||
# or going to single mode.
 | 
			
		||||
LD_LIBRARY_PATH
 | 
			
		||||
@@ -44,8 +44,8 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "rc.h"
 | 
			
		||||
#include "rc-misc.h"
 | 
			
		||||
#include "strlist.h"
 | 
			
		||||
#include "../rc-misc.h"
 | 
			
		||||
#include "../strlist.h"
 | 
			
		||||
 | 
			
		||||
#define PROFILE_ENV     "/etc/profile.env"
 | 
			
		||||
#define SYS_WHITELIST   RC_LIBDIR "/conf.d/env_whitelist"
 | 
			
		||||
@@ -113,17 +113,54 @@ char **env_filter (void)
 | 
			
		||||
	char *p;
 | 
			
		||||
	int pplen = strlen (PATH_PREFIX);
 | 
			
		||||
 | 
			
		||||
	whitelist = rc_config_list (SYS_WHITELIST);
 | 
			
		||||
	if (! whitelist)
 | 
			
		||||
		fprintf (stderr, "system environment whitelist (" SYS_WHITELIST ") missing\n");
 | 
			
		||||
	/* Init a system whitelist, start with shell vars we need */
 | 
			
		||||
	rc_strlist_add (&whitelist, "PATH");
 | 
			
		||||
	rc_strlist_add (&whitelist, "SHELL");
 | 
			
		||||
	rc_strlist_add (&whitelist, "USER");
 | 
			
		||||
	rc_strlist_add (&whitelist, "HOME");
 | 
			
		||||
	rc_strlist_add (&whitelist, "TERM");
 | 
			
		||||
 | 
			
		||||
	env = rc_config_list (USR_WHITELIST);
 | 
			
		||||
	rc_strlist_join (&whitelist, env);
 | 
			
		||||
	rc_strlist_free (env);
 | 
			
		||||
	env = NULL;
 | 
			
		||||
	/* Add Language vars */
 | 
			
		||||
	rc_strlist_add (&whitelist, "LANG");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_CTYPE");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_NUMERIC");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_TIME");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_COLLATE");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_MONETARY");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_MESSAGES");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_PAPER");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_NAME");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_ADDRESS");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_TELEPHONE");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_MEASUREMENT");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_IDENTIFICATION");
 | 
			
		||||
	rc_strlist_add (&whitelist, "LC_ALL");
 | 
			
		||||
 | 
			
		||||
	if (! whitelist)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	/* Allow rc to override library path */
 | 
			
		||||
	rc_strlist_add (&whitelist, "LD_LIBRARY_PATH");
 | 
			
		||||
 | 
			
		||||
	/* We need to know sysvinit stuff - we emulate this for BSD too */
 | 
			
		||||
	rc_strlist_add (&whitelist, "INIT_HALT");
 | 
			
		||||
	rc_strlist_add (&whitelist, "INIT_VERSION");
 | 
			
		||||
	rc_strlist_add (&whitelist, "RUNLEVEL");
 | 
			
		||||
	rc_strlist_add (&whitelist, "PREVLEVEL");
 | 
			
		||||
	rc_strlist_add (&whitelist, "CONSOLE");
 | 
			
		||||
 | 
			
		||||
	/* Hotplug and daemon vars */
 | 
			
		||||
	rc_strlist_add (&whitelist, "IN_HOTPLUG");
 | 
			
		||||
	rc_strlist_add (&whitelist, "IN_BACKGROUND");
 | 
			
		||||
	rc_strlist_add (&whitelist, "RC_INTERFACE_KEEP_CONFIG");
 | 
			
		||||
 | 
			
		||||
	/* Add the user defined list of vars */
 | 
			
		||||
	e = env_name = xstrdup (rc_conf_value ("rc_env_allow"));
 | 
			
		||||
	while ((token = strsep (&e, " "))) {
 | 
			
		||||
		if (token[0] == '*') {
 | 
			
		||||
			free (env_name);
 | 
			
		||||
			return (NULL);
 | 
			
		||||
		}
 | 
			
		||||
		rc_strlist_add (&whitelist, token);
 | 
			
		||||
	}
 | 
			
		||||
	free (env_name);
 | 
			
		||||
 | 
			
		||||
	if (exists (PROFILE_ENV))
 | 
			
		||||
		profile = rc_config_load (PROFILE_ENV);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user