diff options
author | Oren Hurvitz | 2014-01-05 14:03:10 +0200 |
---|---|---|
committer | dahlia | 2014-01-20 00:38:44 -0800 |
commit | d1f16c4b4b3f5c0938f3f0572c70e92cb90b6a0b (patch) | |
tree | 8bfd9347ad00c25d3c2734bf39f82b19e143f841 /OpenSim | |
parent | When asked to change the Material for one face, change only that face; not th... (diff) | |
download | opensim-SC-d1f16c4b4b3f5c0938f3f0572c70e92cb90b6a0b.zip opensim-SC-d1f16c4b4b3f5c0938f3f0572c70e92cb90b6a0b.tar.gz opensim-SC-d1f16c4b4b3f5c0938f3f0572c70e92cb90b6a0b.tar.bz2 opensim-SC-d1f16c4b4b3f5c0938f3f0572c70e92cb90b6a0b.tar.xz |
Check agent permissions before modifying an object's materials. Also, when creating a Material asset, set the current agent as the Creator.
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs index 9779594..4b635d8 100644 --- a/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs +++ b/OpenSim/Region/OptionalModules/Materials/MaterialsModule.cs | |||
@@ -109,7 +109,10 @@ namespace OpenSim.Region.OptionalModules.Materials | |||
109 | string capsBase = "/CAPS/" + caps.CapsObjectPath; | 109 | string capsBase = "/CAPS/" + caps.CapsObjectPath; |
110 | 110 | ||
111 | IRequestHandler renderMaterialsPostHandler | 111 | IRequestHandler renderMaterialsPostHandler |
112 | = new RestStreamHandler("POST", capsBase + "/", RenderMaterialsPostCap, "RenderMaterials", null); | 112 | = new RestStreamHandler("POST", capsBase + "/", |
113 | (request, path, param, httpRequest, httpResponse) | ||
114 | => RenderMaterialsPostCap(request, agentID), | ||
115 | "RenderMaterials", null); | ||
113 | caps.RegisterHandler("RenderMaterials", renderMaterialsPostHandler); | 116 | caps.RegisterHandler("RenderMaterials", renderMaterialsPostHandler); |
114 | 117 | ||
115 | // OpenSimulator CAPs infrastructure seems to be somewhat hostile towards any CAP that requires both GET | 118 | // OpenSimulator CAPs infrastructure seems to be somewhat hostile towards any CAP that requires both GET |
@@ -117,12 +120,18 @@ namespace OpenSim.Region.OptionalModules.Materials | |||
117 | // handler normally and then add a GET handler via MainServer | 120 | // handler normally and then add a GET handler via MainServer |
118 | 121 | ||
119 | IRequestHandler renderMaterialsGetHandler | 122 | IRequestHandler renderMaterialsGetHandler |
120 | = new RestStreamHandler("GET", capsBase + "/", RenderMaterialsGetCap, "RenderMaterials", null); | 123 | = new RestStreamHandler("GET", capsBase + "/", |
124 | (request, path, param, httpRequest, httpResponse) | ||
125 | => RenderMaterialsGetCap(request), | ||
126 | "RenderMaterials", null); | ||
121 | MainServer.Instance.AddStreamHandler(renderMaterialsGetHandler); | 127 | MainServer.Instance.AddStreamHandler(renderMaterialsGetHandler); |
122 | 128 | ||
123 | // materials viewer seems to use either POST or PUT, so assign POST handler for PUT as well | 129 | // materials viewer seems to use either POST or PUT, so assign POST handler for PUT as well |
124 | IRequestHandler renderMaterialsPutHandler | 130 | IRequestHandler renderMaterialsPutHandler |
125 | = new RestStreamHandler("PUT", capsBase + "/", RenderMaterialsPostCap, "RenderMaterials", null); | 131 | = new RestStreamHandler("PUT", capsBase + "/", |
132 | (request, path, param, httpRequest, httpResponse) | ||
133 | => RenderMaterialsPostCap(request, agentID), | ||
134 | "RenderMaterials", null); | ||
126 | MainServer.Instance.AddStreamHandler(renderMaterialsPutHandler); | 135 | MainServer.Instance.AddStreamHandler(renderMaterialsPutHandler); |
127 | } | 136 | } |
128 | 137 | ||
@@ -195,9 +204,7 @@ namespace OpenSim.Region.OptionalModules.Materials | |||
195 | } | 204 | } |
196 | } | 205 | } |
197 | 206 | ||
198 | public string RenderMaterialsPostCap(string request, string path, | 207 | public string RenderMaterialsPostCap(string request, UUID agentID) |
199 | string param, IOSHttpRequest httpRequest, | ||
200 | IOSHttpResponse httpResponse) | ||
201 | { | 208 | { |
202 | OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); | 209 | OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); |
203 | OSDMap resp = new OSDMap(); | 210 | OSDMap resp = new OSDMap(); |
@@ -295,6 +302,12 @@ namespace OpenSim.Region.OptionalModules.Materials | |||
295 | continue; | 302 | continue; |
296 | } | 303 | } |
297 | 304 | ||
305 | if (!m_scene.Permissions.CanEditObject(sop.UUID, agentID)) | ||
306 | { | ||
307 | m_log.WarnFormat("User {0} can't edit object {1} {2}", agentID, sop.Name, sop.UUID); | ||
308 | continue; | ||
309 | } | ||
310 | |||
298 | Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length); | 311 | Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length); |
299 | if (te == null) | 312 | if (te == null) |
300 | { | 313 | { |
@@ -326,7 +339,7 @@ namespace OpenSim.Region.OptionalModules.Materials | |||
326 | // This asset might exist already, but it's ok to try to store it again | 339 | // This asset might exist already, but it's ok to try to store it again |
327 | string name = "Material " + ChooseMaterialName(mat, sop); | 340 | string name = "Material " + ChooseMaterialName(mat, sop); |
328 | name = name.Substring(0, Math.Min(64, name.Length)).Trim(); | 341 | name = name.Substring(0, Math.Min(64, name.Length)).Trim(); |
329 | AssetBase asset = new AssetBase(id, name, (sbyte)OpenSimAssetType.Material, sop.OwnerID.ToString()); | 342 | AssetBase asset = new AssetBase(id, name, (sbyte)OpenSimAssetType.Material, agentID.ToString()); |
330 | asset.Data = data; | 343 | asset.Data = data; |
331 | m_scene.AssetService.Store(asset); | 344 | m_scene.AssetService.Store(asset); |
332 | } | 345 | } |
@@ -422,9 +435,7 @@ namespace OpenSim.Region.OptionalModules.Materials | |||
422 | } | 435 | } |
423 | 436 | ||
424 | 437 | ||
425 | public string RenderMaterialsGetCap(string request, string path, | 438 | public string RenderMaterialsGetCap(string request) |
426 | string param, IOSHttpRequest httpRequest, | ||
427 | IOSHttpResponse httpResponse) | ||
428 | { | 439 | { |
429 | OSDMap resp = new OSDMap(); | 440 | OSDMap resp = new OSDMap(); |
430 | int matsCount = 0; | 441 | int matsCount = 0; |