From: Tilghman Lesher Date: Fri, 28 May 2010 22:50:06 +0000 (+0000) Subject: Setup environment variables for the benefit of child processes and disallow changing... X-Git-Tag: 11.0.0-beta1~2949 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2da88f1977295c7945a2cd3a5c6a79246439ccd0;p=thirdparty%2Fasterisk.git Setup environment variables for the benefit of child processes and disallow changing them. (closes issue #14899) Reported by: jmls Patches: 20090916__issue14899.diff.txt uploaded by tilghman (license 14) Tested by: jmls git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@266385 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/UPGRADE.txt b/UPGRADE.txt index 67fa6a628e..f603caab42 100644 --- a/UPGRADE.txt +++ b/UPGRADE.txt @@ -82,6 +82,9 @@ From 1.6.2 to 1.8: of a Mailbox or Password, will, if it exists, jump to the 'a' extension in the current dialplan context. +* Environment variables that start with "AST_" are reserved to the system and + may no longer be set from the dialplan. + From 1.6.1 to 1.6.2: * SIP no longer sends the 183 progress message for early media by diff --git a/funcs/func_env.c b/funcs/func_env.c index 70a87776bc..b770bbc9b2 100644 --- a/funcs/func_env.c +++ b/funcs/func_env.c @@ -44,6 +44,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") + Variables starting with AST_ are reserved to the system and may not be set. @@ -106,7 +107,7 @@ static int env_read(struct ast_channel *chan, const char *cmd, char *data, static int env_write(struct ast_channel *chan, const char *cmd, char *data, const char *value) { - if (!ast_strlen_zero(data)) { + if (!ast_strlen_zero(data) && strncmp(data, "AST_", 4)) { if (!ast_strlen_zero(value)) { setenv(data, value, 1); } else { diff --git a/main/asterisk.c b/main/asterisk.c index 9ae67a9d80..d11fc8dcec 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -3128,6 +3128,18 @@ static void run_startup_commands(void) ast_config_destroy(cfg); } +static void env_init(void) +{ + setenv("AST_SYSTEMNAME", ast_config_AST_SYSTEM_NAME, 1); + setenv("AST_BUILD_HOST", ast_build_hostname, 1); + setenv("AST_BUILD_DATE", ast_build_date, 1); + setenv("AST_BUILD_KERNEL", ast_build_kernel, 1); + setenv("AST_BUILD_MACHINE", ast_build_machine, 1); + setenv("AST_BUILD_OS", ast_build_os, 1); + setenv("AST_BUILD_USER", ast_build_user, 1); + setenv("AST_VERSION", ast_get_version(), 1); +} + int main(int argc, char *argv[]) { int c; @@ -3314,6 +3326,7 @@ int main(int argc, char *argv[]) } ast_readconfig(); + env_init(); if (ast_opt_remote && remotesock != NULL) ast_copy_string((char *) cfg_paths.socket_path, remotesock, sizeof(cfg_paths.socket_path));