aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorMelanie Thielker2008-12-05 20:30:00 +0000
committerMelanie Thielker2008-12-05 20:30:00 +0000
commitd24e4a9f2d860db87ca191242861453547f82e65 (patch)
tree5d80cbb6d9885cb1a8bf98e7a7c64e6fe1b50bad /OpenSim/Region
parent- Use the http-port that is now provided by the grid-server. If it isn't (bec... (diff)
downloadopensim-SC-d24e4a9f2d860db87ca191242861453547f82e65.zip
opensim-SC-d24e4a9f2d860db87ca191242861453547f82e65.tar.gz
opensim-SC-d24e4a9f2d860db87ca191242861453547f82e65.tar.bz2
opensim-SC-d24e4a9f2d860db87ca191242861453547f82e65.tar.xz
Committing the missing bits to enable script crossing. Disabled by default.
For a script to successfully cross, both source and destination region must enable the feature. WARNING: Trusting binaries from other sims allows ARBITRARY REMOTE CODE EXECUTION for ANYONE! Please do not use except in ultimate trust scenarios!
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs81
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs1
2 files changed, 81 insertions, 1 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 7e13671..79a626e 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -2098,9 +2098,16 @@ namespace OpenSim.Region.Environment.Scenes
2098 2098
2099 if (newRegionHandle != 0) 2099 if (newRegionHandle != 0)
2100 { 2100 {
2101 string objectState = grp.GetStateSnapshot();
2102
2101 successYN 2103 successYN
2102 = m_sceneGridService.PrimCrossToNeighboringRegion( 2104 = m_sceneGridService.PrimCrossToNeighboringRegion(
2103 newRegionHandle, grp.UUID, m_serialiser.SaveGroupToXml2(grp), primcrossingXMLmethod); 2105 newRegionHandle, grp.UUID, m_serialiser.SaveGroupToXml2(grp), primcrossingXMLmethod);
2106 if (successYN && (objectState != "") && m_allowScriptCrossings)
2107 {
2108 successYN = m_sceneGridService.PrimCrossToNeighboringRegion(
2109 newRegionHandle, grp.UUID, objectState, 100);
2110 }
2104 2111
2105 if (successYN) 2112 if (successYN)
2106 { 2113 {
@@ -2147,10 +2154,10 @@ namespace OpenSim.Region.Environment.Scenes
2147 /// <returns></returns> 2154 /// <returns></returns>
2148 public bool IncomingInterRegionPrimGroup(UUID primID, string objXMLData, int XMLMethod) 2155 public bool IncomingInterRegionPrimGroup(UUID primID, string objXMLData, int XMLMethod)
2149 { 2156 {
2150 m_log.DebugFormat("[INTERREGION]: A new prim {0} arrived from a neighbor", primID);
2151 2157
2152 if (XMLMethod == 0) 2158 if (XMLMethod == 0)
2153 { 2159 {
2160 m_log.DebugFormat("[INTERREGION]: A new prim {0} arrived from a neighbor", primID);
2154 SceneObjectGroup sceneObject = m_serialiser.DeserializeGroupFromXml2(objXMLData); 2161 SceneObjectGroup sceneObject = m_serialiser.DeserializeGroupFromXml2(objXMLData);
2155 2162
2156 // If the user is banned, we won't let any of their objects 2163 // If the user is banned, we won't let any of their objects
@@ -2242,6 +2249,78 @@ namespace OpenSim.Region.Environment.Scenes
2242 } 2249 }
2243 } 2250 }
2244 } 2251 }
2252 else if ((XMLMethod == 100) && m_allowScriptCrossings)
2253 {
2254 m_log.Warn("[INTERREGION]: Prim state data arrived from a neighbor");
2255 XmlDocument doc = new XmlDocument();
2256 doc.LoadXml(objXMLData);
2257
2258 XmlNodeList rootL = doc.GetElementsByTagName("ScriptData");
2259 if (rootL.Count == 1)
2260 {
2261 XmlNode rootNode = rootL[0];
2262 if (rootNode != null)
2263 {
2264 XmlNodeList partL = rootNode.ChildNodes;
2265
2266 foreach (XmlNode part in partL)
2267 {
2268 XmlNodeList nodeL = part.ChildNodes;
2269
2270 switch (part.Name)
2271 {
2272 case "Assemblies":
2273 foreach (XmlNode asm in nodeL)
2274 {
2275 string fn = asm.Attributes.GetNamedItem("Filename").Value;
2276
2277 Byte[] filedata = Convert.FromBase64String(asm.InnerText);
2278 string path = Path.Combine("ScriptEngines", RegionInfo.RegionID.ToString());
2279 path = Path.Combine(path, fn);
2280
2281 if (!File.Exists(path))
2282 {
2283 FileStream fs = File.Create(path);
2284 fs.Write(filedata, 0, filedata.Length);
2285 fs.Close();
2286 }
2287 }
2288 break;
2289 case "ScriptStates":
2290 foreach (XmlNode st in nodeL)
2291 {
2292 string id = st.Attributes.GetNamedItem("UUID").Value;
2293 UUID uuid = new UUID(id);
2294 XmlNode state = st.ChildNodes[0];
2295
2296 XmlDocument sdoc = new XmlDocument();
2297 XmlNode sxmlnode = sdoc.CreateNode(
2298 XmlNodeType.XmlDeclaration,
2299 "", "");
2300 sdoc.AppendChild(sxmlnode);
2301
2302 XmlNode newnode = sdoc.ImportNode(state, true);
2303 sdoc.AppendChild(newnode);
2304
2305 string spath = Path.Combine("ScriptEngines", RegionInfo.RegionID.ToString());
2306 spath = Path.Combine(spath, uuid.ToString());
2307 FileStream sfs = File.Create(spath + ".state");
2308 System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
2309 Byte[] buf = enc.GetBytes(sdoc.InnerXml);
2310 sfs.Write(buf, 0, buf.Length);
2311 sfs.Close();
2312 }
2313 break;
2314 }
2315 }
2316 }
2317 }
2318
2319 SceneObjectPart RootPrim = GetSceneObjectPart(primID);
2320 RootPrim.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 1);
2321
2322 return true;
2323 }
2245 2324
2246 return true; 2325 return true;
2247 } 2326 }
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs
index 545d603..8137a53 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs
@@ -250,6 +250,7 @@ namespace OpenSim.Region.Environment.Scenes
250 m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource); 250 m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource);
251 m_part.ParentGroup.AddActiveScriptCount(1); 251 m_part.ParentGroup.AddActiveScriptCount(1);
252 m_part.ScheduleFullUpdate(); 252 m_part.ScheduleFullUpdate();
253 return;
253 } 254 }
254 AssetCache cache = m_part.ParentGroup.Scene.AssetCache; 255 AssetCache cache = m_part.ParentGroup.Scene.AssetCache;
255 256