From d4e3a7fe81a155be841bc0d182aa7a14083ffa3e Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Sat, 19 Nov 2011 11:01:51 -0500
Subject: Shell Environment Variables in config

   Adding updated Nini and support to use shell environment variables in OpenSimulator configuration.

  Nini @ https://github.com/BlueWall/Nini-Dev
---
 OpenSim/Region/Application/ConfigurationLoader.cs |  20 +++++++++++++++++++-
 OpenSim/Region/Application/OpenSimBase.cs         |   9 ++++++++-
 OpenSim/Tests/ConfigurationLoaderTest.cs          |   4 +++-
 bin/Nini.dll                                      | Bin 61440 -> 55808 bytes
 4 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/OpenSim/Region/Application/ConfigurationLoader.cs b/OpenSim/Region/Application/ConfigurationLoader.cs
index d0f6ab7..4a7c8b0 100644
--- a/OpenSim/Region/Application/ConfigurationLoader.cs
+++ b/OpenSim/Region/Application/ConfigurationLoader.cs
@@ -70,7 +70,7 @@ namespace OpenSim
         /// <param name="networkInfo"></param>
         /// <returns>A configuration that gets passed to modules</returns>
         public OpenSimConfigSource LoadConfigSettings(
-                IConfigSource argvSource, out ConfigSettings configSettings,
+                IConfigSource argvSource, EnvConfigSource envConfigSource, out ConfigSettings configSettings,
                 out NetworkServersInfo networkInfo)
         {
             m_configSettings = configSettings = new ConfigSettings();
@@ -195,6 +195,24 @@ namespace OpenSim
             // Make sure command line options take precedence
             m_config.Source.Merge(argvSource);
 
+
+            IConfig enVars = m_config.Source.Configs["Environment"];
+
+            if( enVars != null )
+            {
+                string[] env_keys = enVars.GetKeys();
+
+                foreach ( string key in env_keys )
+                {
+                    envConfigSource.AddEnv(key, string.Empty);
+                }
+
+                envConfigSource.LoadEnv();
+                m_config.Source.Merge(envConfigSource);
+                m_config.Source.ExpandKeyValues();
+            }
+
+
             ReadConfigSettings();
 
             return m_config;
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 553786b..0a78df2 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -108,6 +108,13 @@ namespace OpenSim
             get { return m_clientServers; }
         }
 
+        protected EnvConfigSource m_EnvConfigSource = new EnvConfigSource();
+
+        public EnvConfigSource envConfigSource
+        {
+            get { return m_EnvConfigSource; }
+        }
+
         protected List<IClientNetworkServer> m_clientServers = new List<IClientNetworkServer>();
        
         public uint HttpServerPort
@@ -142,7 +149,7 @@ namespace OpenSim
         protected virtual void LoadConfigSettings(IConfigSource configSource)
         {
             m_configLoader = new ConfigurationLoader();
-            m_config = m_configLoader.LoadConfigSettings(configSource, out m_configSettings, out m_networkServersInfo);
+            m_config = m_configLoader.LoadConfigSettings(configSource, envConfigSource, out m_configSettings, out m_networkServersInfo);
             ReadExtraConfigSettings();
         }
 
diff --git a/OpenSim/Tests/ConfigurationLoaderTest.cs b/OpenSim/Tests/ConfigurationLoaderTest.cs
index c777acc..067264d 100644
--- a/OpenSim/Tests/ConfigurationLoaderTest.cs
+++ b/OpenSim/Tests/ConfigurationLoaderTest.cs
@@ -109,11 +109,13 @@ namespace OpenSim.Tests
             // Prepare call to ConfigurationLoader.LoadConfigSettings()
             ConfigurationLoader cl = new ConfigurationLoader();
             IConfigSource argvSource = new IniConfigSource();
+            EnvConfigSource envConfigSource = new EnvConfigSource();
             argvSource.AddConfig("Startup").Set("inifile", mainIniFile);
             ConfigSettings configSettings;
             NetworkServersInfo networkInfo;
 
-            OpenSimConfigSource source = cl.LoadConfigSettings(argvSource, out configSettings, out networkInfo);
+            OpenSimConfigSource source = cl.LoadConfigSettings(argvSource, envConfigSource,
+                out configSettings, out networkInfo);
 
             // Remove default config
             config = source.Source.Configs["Startup"];
diff --git a/bin/Nini.dll b/bin/Nini.dll
index 745057c..c421005 100755
Binary files a/bin/Nini.dll and b/bin/Nini.dll differ
-- 
cgit v1.1