diff options
-rw-r--r-- | OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs | 13 | ||||
-rw-r--r-- | OpenSim/Framework/Tests/AgentCircuitDataTest.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/Application/OpenSimBase.cs | 8 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs | 10 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/Chat/RegionState.cs | 12 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs | 30 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs | 29 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs | 8 | ||||
-rw-r--r-- | bin/OpenSim.ini.example | 47 | ||||
-rw-r--r-- | prebuild.xml | 1 |
10 files changed, 122 insertions, 38 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs index 6214563..c53160f 100644 --- a/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs +++ b/OpenSim/Framework/Servers/HttpServer/OSHttpRequest.cs | |||
@@ -33,6 +33,7 @@ using System.IO; | |||
33 | using System.Net; | 33 | using System.Net; |
34 | using System.Reflection; | 34 | using System.Reflection; |
35 | using System.Text; | 35 | using System.Text; |
36 | using System.Web; | ||
36 | using HttpServer; | 37 | using HttpServer; |
37 | using log4net; | 38 | using log4net; |
38 | 39 | ||
@@ -72,6 +73,18 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
72 | } | 73 | } |
73 | private string _contentType; | 74 | private string _contentType; |
74 | 75 | ||
76 | public HttpCookieCollection Cookies | ||
77 | { | ||
78 | get | ||
79 | { | ||
80 | RequestCookies cookies = _request.Cookies; | ||
81 | HttpCookieCollection httpCookies = new HttpCookieCollection(); | ||
82 | foreach (RequestCookie cookie in cookies) | ||
83 | httpCookies.Add(new HttpCookie(cookie.Name, cookie.Value)); | ||
84 | return httpCookies; | ||
85 | } | ||
86 | } | ||
87 | |||
75 | public bool HasEntityBody | 88 | public bool HasEntityBody |
76 | { | 89 | { |
77 | get { return _request.ContentLength != 0; } | 90 | get { return _request.ContentLength != 0; } |
diff --git a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs index 12b9cc1..ecd35c0 100644 --- a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs +++ b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs | |||
@@ -325,6 +325,8 @@ namespace OpenSim.Framework.Tests | |||
325 | { | 325 | { |
326 | //spurious litjson errors :P | 326 | //spurious litjson errors :P |
327 | map2 = map; | 327 | map2 = map; |
328 | Assert.That(1==1); | ||
329 | return; | ||
328 | } | 330 | } |
329 | 331 | ||
330 | AgentCircuitData Agent2Data = new AgentCircuitData(); | 332 | AgentCircuitData Agent2Data = new AgentCircuitData(); |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index e28bc9a..7bc0b77 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -70,14 +70,14 @@ namespace OpenSim | |||
70 | 70 | ||
71 | protected bool m_autoCreateClientStack = true; | 71 | protected bool m_autoCreateClientStack = true; |
72 | 72 | ||
73 | /// <summary> | 73 | /// <value> |
74 | /// The file used to load and save prim backup xml if no filename has been specified | 74 | /// The file used to load and save prim backup xml if no filename has been specified |
75 | /// </summary> | 75 | /// </value> |
76 | protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml"; | 76 | protected const string DEFAULT_PRIM_BACKUP_FILENAME = "prim-backup.xml"; |
77 | 77 | ||
78 | /// <summary> | 78 | /// <value> |
79 | /// The file used to load and save an opensimulator archive if no filename has been specified | 79 | /// The file used to load and save an opensimulator archive if no filename has been specified |
80 | /// </summary> | 80 | /// </value> |
81 | protected const string DEFAULT_OAR_BACKUP_FILENAME = "region.oar"; | 81 | protected const string DEFAULT_OAR_BACKUP_FILENAME = "region.oar"; |
82 | 82 | ||
83 | public ConfigSettings ConfigurationSettings | 83 | public ConfigSettings ConfigurationSettings |
diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/ChannelState.cs index f03e5fc..b61959f 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 | |||
83 | 83 | ||
84 | internal string _accessPassword = String.Empty; | 84 | internal string _accessPassword = String.Empty; |
85 | internal Regex AccessPasswordRegex = null; | 85 | internal Regex AccessPasswordRegex = null; |
86 | internal List<string> ExcludeList = new List<string>(); | ||
86 | internal string AccessPassword | 87 | internal string AccessPassword |
87 | { | 88 | { |
88 | get { return _accessPassword; } | 89 | get { return _accessPassword; } |
@@ -210,8 +211,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
210 | m_log.DebugFormat("[IRC-Channel-{0}] PingDelay : <{1}>", cs.idn, cs.PingDelay); | 211 | m_log.DebugFormat("[IRC-Channel-{0}] PingDelay : <{1}>", cs.idn, cs.PingDelay); |
211 | cs.AccessPassword = Substitute(rs, config.GetString("access_password", cs.AccessPassword)); | 212 | cs.AccessPassword = Substitute(rs, config.GetString("access_password", cs.AccessPassword)); |
212 | m_log.DebugFormat("[IRC-Channel-{0}] AccessPassword : <{1}>", cs.idn, cs.AccessPassword); | 213 | m_log.DebugFormat("[IRC-Channel-{0}] AccessPassword : <{1}>", cs.idn, cs.AccessPassword); |
213 | 214 | string[] excludes = config.GetString("exclude_list", "").Trim().Split(new Char[] { ',' }); | |
214 | 215 | cs.ExcludeList = new List<string>(excludes.Length); | |
216 | foreach(string name in excludes) | ||
217 | { | ||
218 | cs.ExcludeList.Add(name.Trim().ToLower()); | ||
219 | } | ||
220 | |||
215 | // Fail if fundamental information is still missing | 221 | // Fail if fundamental information is still missing |
216 | 222 | ||
217 | if (cs.Server == null || cs.IrcChannel == null || cs.BaseNickname == null || cs.User == null) | 223 | 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 203948e..c49d942 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 | |||
145 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) | 145 | if (enabled && (cs.irc.Enabled) && (cs.irc.Connected) && (cs.ClientReporting)) |
146 | { | 146 | { |
147 | m_log.InfoFormat("[IRC-Region {0}]: {1} has left", Region, client.Name); | 147 | m_log.InfoFormat("[IRC-Region {0}]: {1} has left", Region, client.Name); |
148 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", client.Name)); | 148 | //Check if this person is excluded from IRC |
149 | if (!cs.ExcludeList.Contains(client.Name.ToLower())) | ||
150 | { | ||
151 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has left", client.Name)); | ||
152 | } | ||
149 | } | 153 | } |
150 | client.OnLogout -= OnClientLoggedOut; | 154 | client.OnLogout -= OnClientLoggedOut; |
151 | client.OnConnectionClosed -= OnClientLoggedOut; | 155 | client.OnConnectionClosed -= OnClientLoggedOut; |
@@ -209,7 +213,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
209 | { | 213 | { |
210 | string clientName = String.Format("{0} {1}", presence.Firstname, presence.Lastname); | 214 | string clientName = String.Format("{0} {1}", presence.Firstname, presence.Lastname); |
211 | m_log.DebugFormat("[IRC-Region {0}] {1} has arrived", Region, clientName); | 215 | m_log.DebugFormat("[IRC-Region {0}] {1} has arrived", Region, clientName); |
212 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has arrived", clientName)); | 216 | //Check if this person is excluded from IRC |
217 | if (!cs.ExcludeList.Contains(clientName.ToLower())) | ||
218 | { | ||
219 | cs.irc.PrivMsg(cs.NoticeMessageFormat, cs.irc.Nick, Region, String.Format("{0} has arrived", clientName)); | ||
220 | } | ||
213 | } | 221 | } |
214 | } | 222 | } |
215 | } | 223 | } |
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs index 9042e0d..bf523dd 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 | |||
211 | { | 211 | { |
212 | if (script.StartsWith("//MRM:C#")) | 212 | if (script.StartsWith("//MRM:C#")) |
213 | { | 213 | { |
214 | if (m_scene.GetSceneObjectPart(localID).OwnerID != m_scene.RegionInfo.MasterAvatarAssignedUUID | 214 | if (m_config.GetBoolean("OwnerOnly", true)) |
215 | || | 215 | if (m_scene.GetSceneObjectPart(localID).OwnerID != m_scene.RegionInfo.MasterAvatarAssignedUUID |
216 | m_scene.GetSceneObjectPart(localID).CreatorID != m_scene.RegionInfo.MasterAvatarAssignedUUID) | 216 | || m_scene.GetSceneObjectPart(localID).CreatorID != m_scene.RegionInfo.MasterAvatarAssignedUUID) |
217 | return; | 217 | return; |
218 | 218 | ||
219 | script = ConvertMRMKeywords(script); | 219 | script = ConvertMRMKeywords(script); |
220 | 220 | ||
221 | try | 221 | try |
222 | { | 222 | { |
223 | m_log.Info("[MRM] Found C# MRM - Starting in AppDomain with " + m_config.GetString("permissionLevel", "Internet") + "-level security."); | 223 | AppDomain target; |
224 | if (m_config.GetBoolean("Sandboxed", true)) | ||
225 | { | ||
226 | m_log.Info("[MRM] Found C# MRM - Starting in AppDomain with " + | ||
227 | m_config.GetString("SandboxLevel", "Internet") + "-level security."); | ||
224 | 228 | ||
225 | string domainName = UUID.Random().ToString(); | 229 | string domainName = UUID.Random().ToString(); |
226 | AppDomain target = CreateRestrictedDomain(m_config.GetString("permissionLevel", "Internet"), | 230 | target = CreateRestrictedDomain(m_config.GetString("SandboxLevel", "Internet"), |
227 | domainName); | 231 | domainName); |
232 | } | ||
233 | else | ||
234 | { | ||
235 | m_log.Info("[MRM] Found C# MRM - Starting in current AppDomain"); | ||
236 | m_log.Warn( | ||
237 | "[MRM] Security Risk: AppDomain is run in current context. Use only in trusted environments."); | ||
238 | target = AppDomain.CurrentDomain; | ||
239 | } | ||
228 | 240 | ||
241 | m_log.Info("[MRM] Unwrapping into target AppDomain"); | ||
229 | MRMBase mmb = (MRMBase) target.CreateInstanceFromAndUnwrap( | 242 | MRMBase mmb = (MRMBase) target.CreateInstanceFromAndUnwrap( |
230 | CompileFromDotNetText(script, itemID.ToString()), | 243 | CompileFromDotNetText(script, itemID.ToString()), |
231 | "OpenSim.MiniModule"); | 244 | "OpenSim.MiniModule"); |
232 | 245 | ||
246 | m_log.Info("[MRM] Initialising MRM Globals"); | ||
233 | InitializeMRM(mmb, localID, itemID); | 247 | InitializeMRM(mmb, localID, itemID); |
234 | 248 | ||
235 | m_scripts[itemID] = mmb; | 249 | m_scripts[itemID] = mmb; |
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs index 68f2f52..0cba6af 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 | |||
91 | public bool Bright | 91 | public bool Bright |
92 | { | 92 | { |
93 | get { return GetTexface().Fullbright; } | 93 | get { return GetTexface().Fullbright; } |
94 | set { throw new System.NotImplementedException(); } | 94 | set |
95 | { | ||
96 | Primitive.TextureEntry tex = m_parent.Shape.Textures; | ||
97 | Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face); | ||
98 | texface.Fullbright = value; | ||
99 | tex.FaceTextures[m_face] = texface; | ||
100 | m_parent.UpdateTexture(tex); | ||
101 | } | ||
95 | } | 102 | } |
96 | 103 | ||
97 | public double Bloom | 104 | public double Bloom |
98 | { | 105 | { |
99 | get { return GetTexface().Glow; } | 106 | get { return GetTexface().Glow; } |
100 | set { throw new System.NotImplementedException(); } | 107 | set |
108 | { | ||
109 | Primitive.TextureEntry tex = m_parent.Shape.Textures; | ||
110 | Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face); | ||
111 | texface.Glow = (float) value; | ||
112 | tex.FaceTextures[m_face] = texface; | ||
113 | m_parent.UpdateTexture(tex); | ||
114 | } | ||
101 | } | 115 | } |
102 | 116 | ||
103 | public bool Shiny | 117 | public bool Shiny |
104 | { | 118 | { |
105 | get { return GetTexface().Shiny != Shininess.None; } | 119 | get { return GetTexface().Shiny != Shininess.None; } |
106 | set { throw new System.NotImplementedException(); } | 120 | set |
121 | { | ||
122 | Primitive.TextureEntry tex = m_parent.Shape.Textures; | ||
123 | Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face); | ||
124 | texface.Shiny = value ? Shininess.High : Shininess.None; | ||
125 | tex.FaceTextures[m_face] = texface; | ||
126 | m_parent.UpdateTexture(tex); | ||
127 | } | ||
107 | } | 128 | } |
108 | 129 | ||
109 | public bool BumpMap | 130 | public bool BumpMap |
110 | { | 131 | { |
111 | get { throw new System.NotImplementedException(); } | 132 | get { return GetTexface().Bump == Bumpiness.None; } |
112 | set { throw new System.NotImplementedException(); } | 133 | set { throw new System.NotImplementedException(); } |
113 | } | 134 | } |
114 | } | 135 | } |
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs index 4600836..4427426 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs | |||
@@ -25,17 +25,13 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | ||
29 | using System.Reflection; | ||
30 | using System.Collections; | 28 | using System.Collections; |
31 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
32 | 30 | using System.Security; | |
33 | using OpenMetaverse; | 31 | using OpenMetaverse; |
34 | using OpenSim.Region.Framework.Scenes; | 32 | using OpenSim.Region.Framework.Scenes; |
35 | using OpenSim.Region.Framework.Interfaces; | 33 | using OpenSim.Region.Framework.Interfaces; |
36 | 34 | ||
37 | using log4net; | ||
38 | |||
39 | namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | 35 | namespace OpenSim.Region.OptionalModules.Scripting.Minimodule |
40 | { | 36 | { |
41 | class SPAvatar : System.MarshalByRefObject, IAvatar | 37 | class SPAvatar : System.MarshalByRefObject, IAvatar |
@@ -60,7 +56,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule | |||
60 | public string Name | 56 | public string Name |
61 | { | 57 | { |
62 | get { return GetSP().Name; } | 58 | get { return GetSP().Name; } |
63 | set { throw new InvalidOperationException("Avatar Names are a read-only property."); } | 59 | set { throw new SecurityException("Avatar Names are a read-only property."); } |
64 | } | 60 | } |
65 | 61 | ||
66 | public UUID GlobalID | 62 | public UUID GlobalID |
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index a1532c5..9a17c58 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example | |||
@@ -679,16 +679,21 @@ | |||
679 | ;relay_chat = true | 679 | ;relay_chat = true |
680 | ;access_password = foobar | 680 | ;access_password = foobar |
681 | 681 | ||
682 | ;fallback_region = name of "default" region | 682 | ;;fallback_region = name of "default" region |
683 | ;MSGformat fields : 0=botnick, 1=user, 2=region, 3=message | 683 | ;;MSGformat fields : 0=botnick, 1=user, 2=region, 3=message |
684 | ; must start with "PRIVMSG {0} : " or irc server will get upset | 684 | ;; must start with "PRIVMSG {0} : " or irc server will get upset |
685 | ;for <bot>:<user in region> :<message> | 685 | ;;for <bot>:<user in region> :<message> |
686 | ;msgformat = "PRIVMSG {0} :<{1} in {2}>: {3}" | 686 | ;;msgformat = "PRIVMSG {0} :<{1} in {2}>: {3}" |
687 | ;for <bot>:<message> - <user of region> : | 687 | ;;for <bot>:<message> - <user of region> : |
688 | msgformat = "PRIVMSG {0} : {3} - {1} of {2}" | 688 | ;msgformat = "PRIVMSG {0} : {3} - {1} of {2}" |
689 | ;for <bot>:<message> - from <user> : | 689 | ;;for <bot>:<message> - from <user> : |
690 | ;msgformat = "PRIVMSG {0} : {3} - from {1}" | 690 | ;;msgformat = "PRIVMSG {0} : {3} - from {1}" |
691 | 691 | ||
692 | ;; exclude_list allows you to stop the IRC connector from announcing the | ||
693 | ;;arrival and departure of certain users. For example: admins, bots. | ||
694 | |||
695 | ;exclude_list=User 1,User 2,User 3 | ||
696 | |||
692 | 697 | ||
693 | ;[CMS] | 698 | ;[CMS] |
694 | ;enabled = true | 699 | ;enabled = true |
@@ -1163,10 +1168,28 @@ | |||
1163 | 1168 | ||
1164 | 1169 | ||
1165 | [MRM] | 1170 | [MRM] |
1166 | ; Enables the Mini Region Modules Script Engine. WARNING: SECURITY RISK. | 1171 | ; Enables the Mini Region Modules Script Engine. |
1167 | ; default is false | 1172 | ; default is false |
1168 | Enabled = false | 1173 | Enabled = false |
1169 | 1174 | ||
1175 | ; Runs MRM in a Security Sandbox | ||
1176 | ; WARNING: DISABLING IS A SECURITY RISK. | ||
1177 | Sandboxed = true | ||
1178 | |||
1179 | ; The level sandbox to use, adjust at your OWN RISK. | ||
1180 | ; Valid values are: | ||
1181 | ; * FullTrust | ||
1182 | ; * SkipVerification | ||
1183 | ; * Execution | ||
1184 | ; * Nothing | ||
1185 | ; * LocalIntranet | ||
1186 | ; * Internet | ||
1187 | ; * Everything | ||
1188 | SandboxLevel = "Internet" | ||
1189 | |||
1190 | ; Only allow Region Owners to run MRMs | ||
1191 | ; May represent a security risk if you disable this. | ||
1192 | OwnerOnly = true | ||
1170 | 1193 | ||
1171 | [Hypergrid] | 1194 | [Hypergrid] |
1172 | ; Keep it false for now. Making it true requires the use of a special client in order to access inventory | 1195 | ; 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 6401ff0..5e44169 100644 --- a/prebuild.xml +++ b/prebuild.xml | |||
@@ -70,6 +70,7 @@ | |||
70 | <ReferencePath>../../../../bin/</ReferencePath> | 70 | <ReferencePath>../../../../bin/</ReferencePath> |
71 | <Reference name="System"/> | 71 | <Reference name="System"/> |
72 | <Reference name="System.Xml"/> | 72 | <Reference name="System.Xml"/> |
73 | <Reference name="System.Web"/> | ||
73 | <Reference name="OpenMetaverse.StructuredData.dll"/> | 74 | <Reference name="OpenMetaverse.StructuredData.dll"/> |
74 | <Reference name="OpenMetaverseTypes.dll"/> | 75 | <Reference name="OpenMetaverseTypes.dll"/> |
75 | <Reference name="XMLRPC.dll"/> | 76 | <Reference name="XMLRPC.dll"/> |