diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs
index 6214563dd1..c53160fb1d 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs
@@ -33,6 +33,7 @@ using System.IO;
using System.Net;
using System.Reflection;
using System.Text;
+using System.Web;
using HttpServer;
using log4net;
@@ -72,6 +73,18 @@ namespace OpenSim.Framework.Servers.HttpServer
}
private string _contentType;
+ public HttpCookieCollection Cookies
+ {
+ get
+ {
+ RequestCookies cookies = _request.Cookies;
+ HttpCookieCollection httpCookies = new HttpCookieCollection();
+ foreach (RequestCookie cookie in cookies)
+ httpCookies.Add(new HttpCookie(cookie.Name, cookie.Value));
+ return httpCookies;
+ }
+ }
+
public bool HasEntityBody
{
get { return _request.ContentLength != 0; }
diff --git a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
index 12b9cc1df7..ecd35c02a9 100644
--- a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
+++ b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
@@ -325,6 +325,8 @@ namespace OpenSim.Framework.Tests
{
//spurious litjson errors :P
map2 = map;
+ Assert.That(1==1);
+ return;
}
AgentCircuitData Agent2Data = new AgentCircuitData();
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index e28bc9afef..7bc0b77c4b 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -70,14 +70,14 @@ namespace OpenSim
protected bool m_autoCreateClientStack = true;
- ///
+ ///
/// The file used to load and save prim backup xml if no filename has been specified
- ///
+ ///
protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml";
- ///
+ ///
/// The file used to load and save an opensimulator archive if no filename has been specified
- ///
+ ///
protected const string DEFAULT_OAR_BACKUP_FILENAME = "region.oar";
public ConfigSettings ConfigurationSettings
diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs
index f03e5fc45b..b61959f04b 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs
@@ -83,6 +83,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat
internal string _accessPassword = String.Empty;
internal Regex AccessPasswordRegex = null;
+ internal List ExcludeList = new List();
internal string AccessPassword
{
get { return _accessPassword; }
@@ -210,8 +211,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat
m_log.DebugFormat("[IRC-Channel-{0}] PingDelay : <{1}>", cs.idn, cs.PingDelay);
cs.AccessPassword = Substitute(rs, config.GetString("access_password", cs.AccessPassword));
m_log.DebugFormat("[IRC-Channel-{0}] AccessPassword : <{1}>", cs.idn, cs.AccessPassword);
-
-
+ string[] excludes = config.GetString("exclude_list", "").Trim().Split(new Char[] { ',' });
+ cs.ExcludeList = new List(excludes.Length);
+ foreach(string name in excludes)
+ {
+ cs.ExcludeList.Add(name.Trim().ToLower());
+ }
+
// Fail if fundamental information is still missing
if (cs.Server == null || cs.IrcChannel == null || cs.BaseNickname == null || cs.User == null)
diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs
index 203948e411..c49d942aef 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs
@@ -145,7 +145,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat
if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting))
{
m_log.InfoFormat("[IRC-Region {0}]: {1} has left", Region, client.Name);
- cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", client.Name));
+ //Check if this person is excluded from IRC
+ if (!cs.ExcludeList.Contains(client.Name.ToLower()))
+ {
+ cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", client.Name));
+ }
}
client.OnLogout -= OnClientLoggedOut;
client.OnConnectionClosed -= OnClientLoggedOut;
@@ -209,7 +213,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat
{
string clientName = String.Format("{0} {1}", presence.Firstname, presence.Lastname);
m_log.DebugFormat("[IRC-Region {0}] {1} has arrived", Region, clientName);
- cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has arrived", clientName));
+ //Check if this person is excluded from IRC
+ if (!cs.ExcludeList.Contains(clientName.ToLower()))
+ {
+ cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has arrived", clientName));
+ }
}
}
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
index 9042e0d91d..bf523dd6e5 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
@@ -211,25 +211,39 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
if (script.StartsWith("//MRM:C#"))
{
- if (m_scene.GetSceneObjectPart(localID).OwnerID != m_scene.RegionInfo.MasterAvatarAssignedUUID
- ||
- m_scene.GetSceneObjectPart(localID).CreatorID != m_scene.RegionInfo.MasterAvatarAssignedUUID)
- return;
+ if (m_config.GetBoolean("OwnerOnly", true))
+ if (m_scene.GetSceneObjectPart(localID).OwnerID != m_scene.RegionInfo.MasterAvatarAssignedUUID
+ || m_scene.GetSceneObjectPart(localID).CreatorID != m_scene.RegionInfo.MasterAvatarAssignedUUID)
+ return;
script = ConvertMRMKeywords(script);
try
{
- m_log.Info("[MRM] Found C# MRM - Starting in AppDomain with " + m_config.GetString("permissionLevel", "Internet") + "-level security.");
+ AppDomain target;
+ if (m_config.GetBoolean("Sandboxed", true))
+ {
+ m_log.Info("[MRM] Found C# MRM - Starting in AppDomain with " +
+ m_config.GetString("SandboxLevel", "Internet") + "-level security.");
- string domainName = UUID.Random().ToString();
- AppDomain target = CreateRestrictedDomain(m_config.GetString("permissionLevel", "Internet"),
- domainName);
+ string domainName = UUID.Random().ToString();
+ target = CreateRestrictedDomain(m_config.GetString("SandboxLevel", "Internet"),
+ domainName);
+ }
+ else
+ {
+ m_log.Info("[MRM] Found C# MRM - Starting in current AppDomain");
+ m_log.Warn(
+ "[MRM] Security Risk: AppDomain is run in current context. Use only in trusted environments.");
+ target = AppDomain.CurrentDomain;
+ }
+ m_log.Info("[MRM] Unwrapping into target AppDomain");
MRMBase mmb = (MRMBase) target.CreateInstanceFromAndUnwrap(
CompileFromDotNetText(script, itemID.ToString()),
"OpenSim.MiniModule");
+ m_log.Info("[MRM] Initialising MRM Globals");
InitializeMRM(mmb, localID, itemID);
m_scripts[itemID] = mmb;
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs
index 68f2f528b0..0cba6afb6c 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs
@@ -91,24 +91,45 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
public bool Bright
{
get { return GetTexface().Fullbright; }
- set { throw new System.NotImplementedException(); }
+ set
+ {
+ Primitive.TextureEntry tex = m_parent.Shape.Textures;
+ Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
+ texface.Fullbright = value;
+ tex.FaceTextures[m_face] = texface;
+ m_parent.UpdateTexture(tex);
+ }
}
public double Bloom
{
get { return GetTexface().Glow; }
- set { throw new System.NotImplementedException(); }
+ set
+ {
+ Primitive.TextureEntry tex = m_parent.Shape.Textures;
+ Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
+ texface.Glow = (float) value;
+ tex.FaceTextures[m_face] = texface;
+ m_parent.UpdateTexture(tex);
+ }
}
public bool Shiny
{
get { return GetTexface().Shiny != Shininess.None; }
- set { throw new System.NotImplementedException(); }
+ set
+ {
+ Primitive.TextureEntry tex = m_parent.Shape.Textures;
+ Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
+ texface.Shiny = value ? Shininess.High : Shininess.None;
+ tex.FaceTextures[m_face] = texface;
+ m_parent.UpdateTexture(tex);
+ }
}
public bool BumpMap
{
- get { throw new System.NotImplementedException(); }
+ get { return GetTexface().Bump == Bumpiness.None; }
set { throw new System.NotImplementedException(); }
}
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
index 4600836952..4427426339 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
@@ -25,17 +25,13 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-using System;
-using System.Reflection;
using System.Collections;
using System.Collections.Generic;
-
+using System.Security;
using OpenMetaverse;
using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Interfaces;
-using log4net;
-
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
class SPAvatar : System.MarshalByRefObject, IAvatar
@@ -60,7 +56,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
public string Name
{
get { return GetSP().Name; }
- set { throw new InvalidOperationException("Avatar Names are a read-only property."); }
+ set { throw new SecurityException("Avatar Names are a read-only property."); }
}
public UUID GlobalID
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index a1532c5e03..9a17c58c3e 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -679,16 +679,21 @@
;relay_chat = true
;access_password = foobar
- ;fallback_region = name of "default" region
- ;MSGformat fields : 0=botnick, 1=user, 2=region, 3=message
- ; must start with "PRIVMSG {0} : " or irc server will get upset
- ;for : :
- ;msgformat = "PRIVMSG {0} :<{1} in {2}>: {3}"
- ;for : - :
- msgformat = "PRIVMSG {0} : {3} - {1} of {2}"
- ;for : - from :
- ;msgformat = "PRIVMSG {0} : {3} - from {1}"
+ ;;fallback_region = name of "default" region
+ ;;MSGformat fields : 0=botnick, 1=user, 2=region, 3=message
+ ;; must start with "PRIVMSG {0} : " or irc server will get upset
+ ;;for : :
+ ;;msgformat = "PRIVMSG {0} :<{1} in {2}>: {3}"
+ ;;for : - :
+ ;msgformat = "PRIVMSG {0} : {3} - {1} of {2}"
+ ;;for : - from :
+ ;;msgformat = "PRIVMSG {0} : {3} - from {1}"
+ ;; exclude_list allows you to stop the IRC connector from announcing the
+ ;;arrival and departure of certain users. For example: admins, bots.
+
+ ;exclude_list=User 1,User 2,User 3
+
;[CMS]
;enabled = true
@@ -1163,10 +1168,28 @@
[MRM]
- ; Enables the Mini Region Modules Script Engine. WARNING: SECURITY RISK.
+ ; Enables the Mini Region Modules Script Engine.
; default is false
Enabled = false
+
+ ; Runs MRM in a Security Sandbox
+ ; WARNING: DISABLING IS A SECURITY RISK.
+ Sandboxed = true
+
+ ; The level sandbox to use, adjust at your OWN RISK.
+ ; Valid values are:
+ ; * FullTrust
+ ; * SkipVerification
+ ; * Execution
+ ; * Nothing
+ ; * LocalIntranet
+ ; * Internet
+ ; * Everything
+ SandboxLevel = "Internet"
+ ; Only allow Region Owners to run MRMs
+ ; May represent a security risk if you disable this.
+ OwnerOnly = true
[Hypergrid]
; Keep it false for now. Making it true requires the use of a special client in order to access inventory
diff --git a/prebuild.xml b/prebuild.xml
index 6401ff019b..5e4416984b 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -70,6 +70,7 @@
../../../../bin/
+