From 1c758ae01c514df4742a9cdae6480e8011debf38 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Jul 2011 03:08:58 +0100 Subject: [PATCH 01/21] make default TextureOnMapTile true for the older map imager Don't know of a good reason not to do this, seems to work fine. --- bin/OpenSim.ini.example | 4 ++-- bin/OpenSimDefaults.ini | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 60d37fbcec..b706926de3 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -68,9 +68,9 @@ ;; in a tag. ; regionload_webserver_url = "http://example.com/regions.xml"; - ;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} false + ;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} true ;; Use terrain texture for maptiles if true, use shaded green if false - ; TextureOnMapTile = false + ; TextureOnMapTile = true ;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false ;; Draw objects on maptile. This step might take a long time if you've diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 400d3dfac1..ffb3063b25 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -71,7 +71,7 @@ ; objects, so you can turn it off here if you'd like. DrawPrimOnMapTile = true ; Use terrain texture for maptiles if true, use shaded green if false - TextureOnMapTile = false + TextureOnMapTile = true ; Maximum size of non physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMax!). NonPhysicalPrimMax = 256 From 69c2d3434a314b962deda9557b280718c22bab9c Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Jul 2011 03:13:54 +0100 Subject: [PATCH 02/21] minor: remove the pointless quotes from the GenerateMaptiles option --- bin/OpenSim.ini.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index b706926de3..b21e3e2c46 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -190,7 +190,7 @@ ;; Map tile options. You can choose to generate no map tiles at all, ;; generate normal maptiles, or nominate an uploaded texture to ;; be the map tile - ; GenerateMaptiles = "true" + ; GenerateMaptiles = true ;; If desired, a running region can update the map tiles periodically ;; to reflect building activity. This names no sense of you don't have From d2d67a1abfe88e1f86e7edce279905602b8192cb Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Jul 2011 03:14:43 +0100 Subject: [PATCH 03/21] remove pointless quotes from GenerateMaptiles option in OpenSimDefaults.ini --- bin/OpenSimDefaults.ini | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index ffb3063b25..b6b4d6b98c 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -216,10 +216,13 @@ ;WorldMapModule = "WorldMap" ;MapImageModule = "MapImageModule" + ; Set to false to not generate any maptiles - ;GenerateMaptiles = "true" + ;GenerateMaptiles = true + ; Refresh (in seconds) the map tile periodically ;MaptileRefresh = 0 + ; If not generating maptiles, use this static texture asset ID ;MaptileStaticUUID = "00000000-0000-0000-0000-000000000000" From 0a09c45726a0115b34c34ecbfa5bf48dff501590 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Jul 2011 03:18:10 +0100 Subject: [PATCH 04/21] minor: group all the map tile options together --- bin/OpenSim.ini.example | 18 +++++++++--------- bin/OpenSimDefaults.ini | 13 +++++++------ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index b21e3e2c46..acad0f37b5 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -68,15 +68,6 @@ ;; in a tag. ; regionload_webserver_url = "http://example.com/regions.xml"; - ;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} true - ;; Use terrain texture for maptiles if true, use shaded green if false - ; TextureOnMapTile = true - - ;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false - ;; Draw objects on maptile. This step might take a long time if you've - ;; got a large number of objects, so you can turn it off here if you'd like. - ; DrawPrimOnMapTile = true - ;# {NonPhysicalPrimMax} {} {Maximum size of nonphysical prims?} {} 256 ;; Maximum size for non-physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMax!). ; NonPhysicalPrimMax = 256 @@ -200,6 +191,15 @@ ;; If not generating maptiles, use this static texture asset ID ; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000" + ;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} true + ;; Use terrain texture for maptiles if true, use shaded green if false + ; TextureOnMapTile = true + + ;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false + ;; Draw objects on maptile. This step might take a long time if you've + ;; got a large number of objects, so you can turn it off here if you'd like. + ; DrawPrimOnMapTile = true + ;; Http proxy setting for llHTTPRequest and dynamic texture loading, if required ; HttpProxy = "http://proxy.com:8080" diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index b6b4d6b98c..d1b3ae6bd9 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -67,12 +67,6 @@ ; except that everything is also enclosed in a tag. ; regionload_webserver_url = "http://example.com/regions.xml"; - ; Draw objects on maptile. This step might take a long time if you've got a large number of - ; objects, so you can turn it off here if you'd like. - DrawPrimOnMapTile = true - ; Use terrain texture for maptiles if true, use shaded green if false - TextureOnMapTile = true - ; Maximum size of non physical prims. Affects resizing of existing prims. This can be overriden in the region config file (as NonphysicalPrimMax!). NonPhysicalPrimMax = 256 @@ -226,6 +220,13 @@ ; If not generating maptiles, use this static texture asset ID ;MaptileStaticUUID = "00000000-0000-0000-0000-000000000000" + ; Draw objects on maptile. This step might take a long time if you've got a large number of + ; objects, so you can turn it off here if you'd like. + DrawPrimOnMapTile = true + + ; Use terrain texture for maptiles if true, use shaded green if false + TextureOnMapTile = true + ; ## ; ## EMAIL MODULE ; ## From e1ce1067902614df732422721b8806e978a36f5f Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Jul 2011 03:21:19 +0100 Subject: [PATCH 05/21] make [SMTP] default comment option match actual default --- bin/OpenSim.ini.example | 2 +- bin/OpenSimDefaults.ini | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index acad0f37b5..2fe4db7d26 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -218,7 +218,7 @@ ;; The SMTP server enabled the email module to send email to external ;; destinations. - ;# {enabled} {[Startup]emailmodule:DefaultEmailModule} {Enable SMTP service?} {true false} true + ;# {enabled} {[Startup]emailmodule:DefaultEmailModule} {Enable SMTP service?} {true false} false ;; Enable sending email via SMTP ; enabled = false diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index d1b3ae6bd9..bf3622828b 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -277,15 +277,15 @@ [SMTP] - enabled=false + enabled = false - ;enabled=true - ;internal_object_host=lsl.opensim.local - ;host_domain_header_from=127.0.0.1 - ;SMTP_SERVER_HOSTNAME=127.0.0.1 - ;SMTP_SERVER_PORT=25 - ;SMTP_SERVER_LOGIN=foo - ;SMTP_SERVER_PASSWORD=bar + ;enabled = true + ;internal_object_host = lsl.opensim.local + ;host_domain_header_from = 127.0.0.1 + ;SMTP_SERVER_HOSTNAME = 127.0.0.1 + ;SMTP_SERVER_PORT = 25 + ;SMTP_SERVER_LOGIN = foo + ;SMTP_SERVER_PASSWORD = bar [Network] From 630e11cbe1001d858a5af9aee0047f4a99af3b98 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Jul 2011 03:22:27 +0100 Subject: [PATCH 06/21] remove dead MXP default symbols. The MXP code is long, long gone. --- bin/MXP.pdb | Bin 382464 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/MXP.pdb diff --git a/bin/MXP.pdb b/bin/MXP.pdb deleted file mode 100644 index deadeefe4ff698c93ae68da6fd4489bcb26b95c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382464 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

I`tOrQ@BM$| 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 Bt}y@r From 6426492da04b48561a658382e8eba40c92cf4dd9 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Jul 2011 03:24:20 +0100 Subject: [PATCH 07/21] remove the windows debugging symbols for the long protobuf-net --- bin/protobuf-net.pdb | Bin 331264 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/protobuf-net.pdb diff --git a/bin/protobuf-net.pdb b/bin/protobuf-net.pdb deleted file mode 100644 index 9c85bdcab0a89aad9ea0d7b10d4de2d125562b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331264 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 From f97278610c2ab9717b32b9c64bc5865b0b47dd41 Mon Sep 17 00:00:00 2001 From: Oren Hurvitz Date: Mon, 4 Jul 2011 17:54:14 +0300 Subject: [PATCH 08/21] Fixed updating avatar appearance Signed-off-by: root --- OpenSim/Framework/AvatarAppearance.cs | 4 ++- .../AvatarFactory/AvatarFactoryModule.cs | 27 ++++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index 5a6b265aad..716baab300 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs @@ -196,6 +196,9 @@ namespace OpenSim.Framework if (appearance.VisualParams != null) m_visualparams = (byte[])appearance.VisualParams.Clone(); + m_avatarHeight = appearance.m_avatarHeight; + m_hipOffset = appearance.m_hipOffset; + // Copy the attachment, force append mode since that ensures consistency m_attachments = new Dictionary>(); foreach (AvatarAttachment attachment in appearance.GetAttachments()) @@ -237,7 +240,6 @@ namespace OpenSim.Framework { m_serial = 0; - SetDefaultParams(); SetDefaultTexture(); //for (int i = 0; i < BAKE_INDICES.Length; i++) diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 75dbeb898e..9037c804a0 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -210,7 +210,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory changed = sp.Appearance.SetVisualParams(visualParams); if (sp.Appearance.AvatarHeight > 0) sp.SetHeight(sp.Appearance.AvatarHeight); - } + } // Process the baked texture array if (textureEntry != null) @@ -387,11 +387,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory // m_log.WarnFormat("[AVFACTORY]: AvatarIsWearing called for {0}", client.AgentId); // we need to clean out the existing textures - sp.Appearance.ResetAppearance(); + sp.Appearance.ResetAppearance(); - // operate on a copy of the appearance so we don't have to lock anything + // operate on a copy of the appearance so we don't have to lock anything yet AvatarAppearance avatAppearance = new AvatarAppearance(sp.Appearance, false); - + foreach (AvatarWearingArgs.Wearable wear in e.NowWearing) { if (wear.Type < AvatarWearable.MAX_WEARABLES) @@ -403,12 +403,19 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory // This could take awhile since it needs to pull inventory SetAppearanceAssets(sp.UUID, ref avatAppearance); - // could get fancier with the locks here, but in the spirit of "last write wins" - // this should work correctly, also, we don't need to send the appearance here - // since the "iswearing" will trigger a new set of visual param and baked texture changes - // when those complete, the new appearance will be sent - sp.Appearance = avatAppearance; - QueueAppearanceSave(client.AgentId); + lock (m_setAppearanceLock) + { + // Update only those fields that we have changed. This is important because the viewer + // often sends AvatarIsWearing and SetAppearance packets at once, and AvatarIsWearing + // shouldn't overwrite the changes made in SetAppearance. + sp.Appearance.Wearables = avatAppearance.Wearables; + sp.Appearance.Texture = avatAppearance.Texture; + + // We don't need to send the appearance here since the "iswearing" will trigger a new set + // of visual param and baked texture changes. When those complete, the new appearance will be sent + + QueueAppearanceSave(client.AgentId); + } } private void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance) From 56830bfe07234b0f4b48737a921cc6eae68d9a39 Mon Sep 17 00:00:00 2001 From: Oren Hurvitz Date: Tue, 12 Jul 2011 12:56:34 +0300 Subject: [PATCH 09/21] When handling SetAppearance packet, always save the appearance; not only if the texture was changed --- .../Avatar/AvatarFactory/AvatarFactoryModule.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 9037c804a0..995a552bb6 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -224,12 +224,12 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory // update transaction. In theory, we should be able to do an immediate // appearance send and save here. - // save only if there were changes, send no matter what (doesn't hurt to send twice) - if (changed) - QueueAppearanceSave(client.AgentId); - - QueueAppearanceSend(client.AgentId); } + // save only if there were changes, send no matter what (doesn't hurt to send twice) + if (changed) + QueueAppearanceSave(client.AgentId); + + QueueAppearanceSend(client.AgentId); } // m_log.WarnFormat("[AVFACTORY]: complete SetAppearance for {0}:\n{1}",client.AgentId,sp.Appearance.ToString()); From 71ef4a8fb3f582ee76ceb1ec613b32ad2e4bc058 Mon Sep 17 00:00:00 2001 From: Oren Hurvitz Date: Mon, 18 Jul 2011 12:32:32 +0300 Subject: [PATCH 10/21] When an uncached asset is requested multiple times concurrently, only load it once Signed-off-by: root --- .../Connectors/Asset/AssetServiceConnector.cs | 56 ++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs index f1da4fa777..fdab254ed8 100644 --- a/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs +++ b/OpenSim/Services/Connectors/Asset/AssetServiceConnector.cs @@ -48,6 +48,13 @@ namespace OpenSim.Services.Connectors private string m_ServerURI = String.Empty; private IImprovedAssetCache m_Cache = null; + private delegate void AssetRetrievedEx(AssetBase asset); + + // Keeps track of concurrent requests for the same asset, so that it's only loaded once. + // Maps: Asset ID -> Handlers which will be called when the asset has been loaded + private Dictionary m_AssetHandlers = new Dictionary(); + + public AssetServicesConnector() { } @@ -178,23 +185,56 @@ namespace OpenSim.Services.Connectors if (asset == null) { - bool result = false; + lock (m_AssetHandlers) + { + AssetRetrievedEx handlerEx = new AssetRetrievedEx(delegate(AssetBase _asset) { handler(id, sender, _asset); }); - AsynchronousRestObjectRequester. - MakeRequest("GET", uri, 0, + AssetRetrievedEx handlers; + if (m_AssetHandlers.TryGetValue(id, out handlers)) + { + // Someone else is already loading this asset. It will notify our handler when done. + handlers += handlerEx; + return true; + } + + // Load the asset ourselves + handlers += handlerEx; + m_AssetHandlers.Add(id, handlers); + } + + bool success = false; + try + { + AsynchronousRestObjectRequester.MakeRequest("GET", uri, 0, delegate(AssetBase a) { if (m_Cache != null) m_Cache.Cache(a); - handler(id, sender, a); - result = true; - }); - return result; + AssetRetrievedEx handlers; + lock (m_AssetHandlers) + { + handlers = m_AssetHandlers[id]; + m_AssetHandlers.Remove(id); + } + handlers.Invoke(a); + }); + + success = true; + } + finally + { + if (!success) + { + lock (m_AssetHandlers) + { + m_AssetHandlers.Remove(id); + } + } + } } else { - //Util.FireAndForget(delegate { handler(id, sender, asset); }); handler(id, sender, asset); } From 02e54c57c4901167779f07ed3e89fb1d24ffc22a Mon Sep 17 00:00:00 2001 From: Oren Hurvitz Date: Fri, 22 Jul 2011 11:33:00 +0300 Subject: [PATCH 11/21] Generate the initial maptile asynchronously Signed-off-by: Melanie --- .../World/WorldMap/WorldMapModule.cs | 10 ++++---- OpenSim/Region/Framework/Scenes/Scene.cs | 24 +++++++++---------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 6e142bb2da..fac2dabd1e 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs @@ -1110,14 +1110,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap if (data == null) return; - UUID lastMapRegionUUID = m_scene.RegionInfo.RegionSettings.TerrainImageID; - m_log.Debug("[WORLDMAP]: STORING MAPTILE IMAGE"); - m_scene.RegionInfo.RegionSettings.TerrainImageID = UUID.Random(); + UUID terrainImageID = UUID.Random(); AssetBase asset = new AssetBase( - m_scene.RegionInfo.RegionSettings.TerrainImageID, + terrainImageID, "terrainImage_" + m_scene.RegionInfo.RegionID.ToString(), (sbyte)AssetType.Texture, m_scene.RegionInfo.RegionID.ToString()); @@ -1129,6 +1127,10 @@ namespace OpenSim.Region.CoreModules.World.WorldMap // Store the new one m_log.DebugFormat("[WORLDMAP]: Storing map tile {0}", asset.ID); m_scene.AssetService.Store(asset); + + // Switch to the new one + UUID lastMapRegionUUID = m_scene.RegionInfo.RegionSettings.TerrainImageID; + m_scene.RegionInfo.RegionSettings.TerrainImageID = terrainImageID; m_scene.RegionInfo.RegionSettings.Save(); // Delete the old one diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 6e666322f1..32a288724a 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1672,20 +1672,20 @@ namespace OpenSim.Region.Framework.Scenes m_sceneGridService.SetScene(this); - // If we generate maptiles internally at all, the maptile generator - // will register the region. If not, do it here + GridRegion region = new GridRegion(RegionInfo); + string error = GridService.RegisterRegion(RegionInfo.ScopeID, region); + if (error != String.Empty) + { + throw new Exception(error); + } + + // Generate the maptile asynchronously, because sometimes it can be very slow and we + // don't want this to delay starting the region. if (m_generateMaptiles) { - RegenerateMaptile(null, null); - } - else - { - GridRegion region = new GridRegion(RegionInfo); - string error = GridService.RegisterRegion(RegionInfo.ScopeID, region); - if (error != String.Empty) - { - throw new Exception(error); - } + Util.FireAndForget(delegate { + RegenerateMaptile(null, null); + }); } } From 6ac0bc72592b5fe338c98d3acfc973faed321d14 Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 22 Jul 2011 12:36:05 +0100 Subject: [PATCH 12/21] Thank you, Michelle Argus, for a patch that adds reading the agent limit from XML properly. --- OpenSim/Framework/RegionInfo.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs index 4c007d62b5..0e41535851 100644 --- a/OpenSim/Framework/RegionInfo.cs +++ b/OpenSim/Framework/RegionInfo.cs @@ -760,7 +760,10 @@ namespace OpenSim.Framework "Clamp prims to max size", "false", true); configMember.addConfigurationOption("object_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, - "Max objects this sim will hold", "0", true); + "Max objects this sim will hold", "15000", true); + + configMember.addConfigurationOption("agent_capacity", ConfigurationOption.ConfigurationTypes.TYPE_INT32, + "Max avatars this sim will hold", "100", true); configMember.addConfigurationOption("scope_id", ConfigurationOption.ConfigurationTypes.TYPE_UUID, "Scope ID for this region", UUID.Zero.ToString(), true); From aadc4eb3b8d1c4a30cee7b69efac9197a974f45b Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 22 Jul 2011 19:23:38 +0100 Subject: [PATCH 13/21] Fix problem where sculpts were not getting physical proxies Fixed this by inspecting Shape.SculptEntry at various places instead of Shape.SculptType. Sculpties actually have a SculptType of Cylinder - only true mesh is SculptType.Mesh This addresses http://opensimulator.org/mantis/view.php?id=5595 --- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 4629757de3..5791b9511f 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -1038,7 +1038,7 @@ namespace OpenSim.Region.Framework.Scenes { actor.Size = m_shape.Scale; - if (((OpenMetaverse.SculptType)Shape.SculptType) == SculptType.Mesh) + if (Shape.SculptEntry) CheckSculptAndLoad(); else ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); @@ -1906,7 +1906,7 @@ namespace OpenSim.Region.Framework.Scenes // If this part is a sculpt then delay the physics update until we've asynchronously loaded the // mesh data. - if (((OpenMetaverse.SculptType)Shape.SculptType) == SculptType.Mesh) + if (Shape.SculptEntry) CheckSculptAndLoad(); else m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); From 667b54f5a2a04fa5a2859397868d270eab3913f1 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 23 Jul 2011 01:59:14 +0100 Subject: [PATCH 14/21] Don't load current/next/everyone/base permissions from the library item xml files - always use PermissionMask.All instead (which was the existing default). Library items always need the same permissions, so it doesn't make sense to load them from the xml files. This just opens the door to permissions mistakes. --- OpenSim/Framework/InventoryFolderImpl.cs | 8 +- .../InventoryAccess/InventoryAccessModule.cs | 4 + .../Framework/Library/LibraryModule.cs | 8 +- .../Framework/Scenes/Scene.Inventory.cs | 5 +- .../InventoryService/LibraryService.cs | 37 +-- .../AnimationsLibraryItems.xml | 6 - .../BodyPartsLibraryItems.xml | 33 +-- .../ClothingLibrary/ClothingLibraryItems.xml | 14 +- .../GesturesLibrary/GesturesLibraryItems.xml | 80 +---- .../LandmarksLibraryItems.xml | 4 - .../NotecardsLibraryItems.xml | 14 +- .../ObjectsLibrary/ObjectsLibraryItems.xml | 4 - .../OpenSimLibrary/OpenSimLibrary.xml | 4 - .../PhotosLibrary/PhotosLibraryItems.xml | 4 - .../ScriptsLibrary/ScriptsLibraryItems.xml | 223 ++++---------- .../SoundsLibrary/SoundsLibraryItems.xml | 4 - .../TexturesLibrary/TexturesLibraryItems.xml | 274 ++++-------------- 17 files changed, 159 insertions(+), 567 deletions(-) diff --git a/OpenSim/Framework/InventoryFolderImpl.cs b/OpenSim/Framework/InventoryFolderImpl.cs index 29c7682c2b..139776bb39 100644 --- a/OpenSim/Framework/InventoryFolderImpl.cs +++ b/OpenSim/Framework/InventoryFolderImpl.cs @@ -27,13 +27,15 @@ using System; using System.Collections.Generic; +using System.Reflection; +using log4net; using OpenMetaverse; namespace OpenSim.Framework { public class InventoryFolderImpl : InventoryFolderBase { - //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); +// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static readonly string PATH_DELIMITER = "/"; @@ -402,6 +404,10 @@ namespace OpenSim.Framework { foreach (InventoryItemBase item in Items.Values) { +// m_log.DebugFormat( +// "[INVENTORY FOLDER IMPL]: Returning item {0} {1}, OwnerPermissions {2:X}", +// item.Name, item.ID, item.CurrentPermissions); + itemList.Add(item); } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index b714f2b6ab..493314700c 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -984,11 +984,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess public virtual bool CanGetAgentInventoryItem(IClientAPI remoteClient, UUID itemID, UUID requestID) { InventoryItemBase assetRequestItem = GetItem(remoteClient.AgentId, itemID); + if (assetRequestItem == null) { ILibraryService lib = m_Scene.RequestModuleInterface(); + if (lib != null) assetRequestItem = lib.LibraryRootFolder.FindItem(itemID); + if (assetRequestItem == null) return false; } @@ -1019,6 +1022,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess m_log.WarnFormat( "[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}", Name, requestID, itemID, assetRequestItem.AssetID); + return false; } diff --git a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs index d570608369..2ef445744b 100644 --- a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs @@ -185,6 +185,7 @@ namespace OpenSim.Region.CoreModules.Framework.Library archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName, false); archread.Execute(); } + foreach (InventoryNodeBase node in nodes) FixPerms(node); } @@ -197,18 +198,23 @@ namespace OpenSim.Region.CoreModules.Framework.Library archread.Close(); } } - } private void FixPerms(InventoryNodeBase node) { + m_log.DebugFormat("[LIBRARY MODULE]: Fixing perms for {0} {1}", node.Name, node.ID); + if (node is InventoryItemBase) { InventoryItemBase item = (InventoryItemBase)node; +// item.BasePermissions = (uint)PermissionMask.All; item.BasePermissions = 0x7FFFFFFF; item.EveryOnePermissions = 0x7FFFFFFF; item.CurrentPermissions = 0x7FFFFFFF; item.NextPermissions = 0x7FFFFFFF; +// item.EveryOnePermissions = (uint)PermissionMask.Copy; +// item.CurrentPermissions = (uint)PermissionMask.None; +// item.NextPermissions = (uint)PermissionMask.All; } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 30421d4224..afc1a4fce4 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -724,7 +724,10 @@ namespace OpenSim.Region.Framework.Scenes newName = item.Name; } - if (remoteClient.AgentId == oldAgentID || (LibraryService != null && LibraryService.LibraryRootFolder != null && oldAgentID == LibraryService.LibraryRootFolder.Owner)) + if (remoteClient.AgentId == oldAgentID + || (LibraryService != null + && LibraryService.LibraryRootFolder != null + && oldAgentID == LibraryService.LibraryRootFolder.Owner)) { CreateNewInventoryItem( remoteClient, item.CreatorId, item.CreatorData, newFolderID, newName, item.Flags, callbackID, asset, (sbyte)item.InvType, diff --git a/OpenSim/Services/InventoryService/LibraryService.cs b/OpenSim/Services/InventoryService/LibraryService.cs index 383f311fdf..b46add30cf 100644 --- a/OpenSim/Services/InventoryService/LibraryService.cs +++ b/OpenSim/Services/InventoryService/LibraryService.cs @@ -93,26 +93,6 @@ namespace OpenSim.Services.InventoryService LoadLibraries(pLibrariesLocation); } - public InventoryItemBase CreateItem(UUID inventoryID, UUID assetID, string name, string description, - int assetType, int invType, UUID parentFolderID) - { - InventoryItemBase item = new InventoryItemBase(); - item.Owner = libOwner; - item.CreatorId = libOwner.ToString(); - item.ID = inventoryID; - item.AssetID = assetID; - item.Description = description; - item.Name = name; - item.AssetType = assetType; - item.InvType = invType; - item.Folder = parentFolderID; - item.BasePermissions = 0x7FFFFFFF; - item.EveryOnePermissions = 0x7FFFFFFF; - item.CurrentPermissions = 0x7FFFFFFF; - item.NextPermissions = 0x7FFFFFFF; - return item; - } - ///

/// Use the asset set information at path to load assets /// @@ -193,22 +173,27 @@ namespace OpenSim.Services.InventoryService item.Description = config.GetString("description", item.Name); item.InvType = config.GetInt("inventoryType", 0); item.AssetType = config.GetInt("assetType", item.InvType); - item.CurrentPermissions = (uint)config.GetLong("currentPermissions", 0x7FFFFFFF); - item.NextPermissions = (uint)config.GetLong("nextPermissions", 0x7FFFFFFF); - item.EveryOnePermissions = (uint)config.GetLong("everyonePermissions", 0x7FFFFFFF); - item.BasePermissions = (uint)config.GetLong("basePermissions", 0x7FFFFFFF); - item.Flags = (uint)config.GetInt("flags", 0); + item.CurrentPermissions = (uint)PermissionMask.All; + item.NextPermissions = (uint)PermissionMask.All; + item.EveryOnePermissions = (uint)PermissionMask.All; +// item.EveryOnePermissions = (uint)PermissionMask.All - (uint)PermissionMask.Modify; + item.BasePermissions = (uint)PermissionMask.All; if (libraryFolders.ContainsKey(item.Folder)) { InventoryFolderImpl parentFolder = libraryFolders[item.Folder]; + try { +// m_log.DebugFormat( +// "[LIBRARY INVENTORY]: Adding item {0} {1}, OwnerPermissions {2:X} to {3}", +// item.Name, item.ID, item.CurrentPermissions, item.Folder); + parentFolder.Items.Add(item.ID, item); } catch (Exception) { - m_log.WarnFormat("[LIBRARY INVENTORY] Item {1} [{0}] not added, duplicate item", item.ID, item.Name); + m_log.WarnFormat("[LIBRARY INVENTORY]: Item {1} [{0}] not added, duplicate item", item.ID, item.Name); } } else diff --git a/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml b/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml index 2a6ceb4529..9cfadf0361 100644 --- a/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml +++ b/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml @@ -108,8 +108,6 @@ - - diff --git a/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml b/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml index aa8d9d964b..d9adf1c53c 100644 --- a/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml +++ b/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> + diff --git a/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml b/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml index 9e297f063e..a12bb8af21 100644 --- a/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml +++ b/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> + diff --git a/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml b/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml index 1312129ca6..ca3ce2d18c 100644 --- a/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml +++ b/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml @@ -7,11 +7,8 @@ - - - - +
@@ -20,11 +17,8 @@ - - - -
+
@@ -33,11 +27,8 @@ - - - -
+
@@ -46,11 +37,8 @@ - - - -
+
@@ -59,11 +47,8 @@ - - - -
+
@@ -72,11 +57,8 @@ - - - -
+
@@ -85,11 +67,8 @@ - - - -
+
@@ -98,11 +77,8 @@ - - - -
+
@@ -111,11 +87,8 @@ - - - -
+
@@ -124,11 +97,8 @@ - - - -
+
@@ -137,11 +107,8 @@ - - - -
+
@@ -150,11 +117,8 @@ - - - -
+
@@ -163,11 +127,8 @@ - - - -
+
@@ -176,11 +137,8 @@ - - - -
+
@@ -189,11 +147,8 @@ - - - -
+
@@ -202,9 +157,6 @@ - - - -
+ diff --git a/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml b/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml +++ b/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml b/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml index 713c365755..e232bcc350 100644 --- a/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml +++ b/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> @@ -24,11 +20,8 @@ - - - - +
@@ -37,9 +30,6 @@ - - - -
+ diff --git a/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml b/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml +++ b/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml b/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml index 7eb8de3c1a..bef59d8add 100644 --- a/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml +++ b/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml @@ -10,10 +10,6 @@ - - - - --> diff --git a/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml b/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml +++ b/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml b/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml index 9641f7db6b..df9d867b5d 100644 --- a/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml +++ b/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml @@ -25,11 +25,8 @@ - - - - +
@@ -38,11 +35,8 @@ - - - -
+
@@ -51,11 +45,8 @@ - - - -
+
@@ -64,11 +55,8 @@ - - - -
+
@@ -77,11 +65,8 @@ - - - -
+
@@ -90,11 +75,8 @@ - - - -
+
@@ -103,11 +85,8 @@ - - - -
+
@@ -116,11 +95,8 @@ - - - -
+
@@ -129,11 +105,8 @@ - - - -
+
@@ -142,11 +115,8 @@ - - - -
+
@@ -155,11 +125,8 @@ - - - -
+
@@ -169,11 +136,8 @@ - - - -
+ @@ -187,6 +151,7 @@ +
@@ -195,11 +160,8 @@ - - - -
+
@@ -208,11 +170,8 @@ - - - -
+
@@ -221,11 +180,8 @@ - - - -
+
@@ -234,11 +190,8 @@ - - - -
+
@@ -248,11 +201,8 @@ - - - -
+
@@ -261,11 +211,8 @@ - - - -
+
@@ -274,11 +221,8 @@ - - - -
+ @@ -288,213 +232,166 @@
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+ +
@@ -503,11 +400,8 @@ - - - -
+
@@ -516,11 +410,8 @@ - - - -
+
@@ -529,9 +420,5 @@ - - - -
diff --git a/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml b/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml +++ b/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml b/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml index adba99aae5..a018a0de78 100644 --- a/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml +++ b/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> @@ -24,11 +20,8 @@ - - - - +
@@ -37,11 +30,8 @@ - - - -
+
@@ -50,11 +40,8 @@ - - - -
+
@@ -63,11 +50,8 @@ - - - -
+
@@ -76,11 +60,8 @@ - - - -
+
@@ -89,11 +70,8 @@ - - - -
+
@@ -102,11 +80,8 @@ - - - -
+
@@ -115,11 +90,8 @@ - - - -
+
@@ -128,11 +100,8 @@ - - - -
+
@@ -141,11 +110,8 @@ - - - -
+
@@ -154,11 +120,8 @@ - - - -
+
@@ -167,11 +130,8 @@ - - - -
+
@@ -180,11 +140,8 @@ - - - -
+
@@ -193,11 +150,8 @@ - - - -
+
@@ -206,11 +160,8 @@ - - - -
+
@@ -219,11 +170,8 @@ - - - -
+
@@ -232,11 +180,8 @@ - - - -
+
@@ -245,11 +190,8 @@ - - - -
+
@@ -258,11 +200,8 @@ - - - -
+
@@ -271,11 +210,8 @@ - - - -
+
@@ -284,11 +220,8 @@ - - - -
+
@@ -297,11 +230,8 @@ - - - -
+
@@ -310,11 +240,8 @@ - - - -
+
@@ -323,11 +250,8 @@ - - - -
+
@@ -336,11 +260,8 @@ - - - -
+
@@ -349,11 +270,8 @@ - - - -
+
@@ -362,11 +280,8 @@ - - - -
+
@@ -375,11 +290,8 @@ - - - -
+
@@ -388,11 +300,8 @@ - - - -
+
@@ -401,11 +310,8 @@ - - - -
+
@@ -414,11 +320,8 @@ - - - -
+
@@ -427,11 +330,8 @@ - - - -
+
@@ -440,11 +340,8 @@ - - - -
+
@@ -453,11 +350,8 @@ - - - -
+
@@ -466,11 +360,8 @@ - - - -
+
@@ -479,11 +370,8 @@ - - - -
+
@@ -492,11 +380,8 @@ - - - -
+
@@ -505,11 +390,8 @@ - - - -
+
@@ -518,11 +400,8 @@ - - - -
+
@@ -531,11 +410,8 @@ - - - -
+
@@ -544,11 +420,8 @@ - - - -
+
@@ -557,11 +430,8 @@ - - - -
+
@@ -570,11 +440,8 @@ - - - -
+
@@ -583,11 +450,8 @@ - - - -
+
@@ -596,11 +460,8 @@ - - - -
+
@@ -609,11 +470,8 @@ - - - -
+
@@ -622,11 +480,8 @@ - - - -
+
@@ -635,10 +490,6 @@ - - - -
@@ -649,11 +500,8 @@ - - - -
+
@@ -662,11 +510,8 @@ - - - -
+
@@ -675,11 +520,8 @@ - - - -
+
@@ -688,10 +530,6 @@ - - - -
@@ -702,10 +540,6 @@ - - - -
@@ -716,10 +550,6 @@ - - - -
@@ -730,9 +560,5 @@ - - - -
From fcaa4f601231a6feb7fd5ea40e35fba6220c6235 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 23 Jul 2011 02:05:51 +0100 Subject: [PATCH 15/21] Revert "Don't load current/next/everyone/base permissions from the library item xml files - always use PermissionMask.All instead (which was the existing default)." There actually are uses for this. I will correct the perms instead since some entries appear to be wrong. This reverts commit 667b54f5a2a04fa5a2859397868d270eab3913f1. --- OpenSim/Framework/InventoryFolderImpl.cs | 8 +- .../InventoryAccess/InventoryAccessModule.cs | 4 - .../Framework/Library/LibraryModule.cs | 8 +- .../Framework/Scenes/Scene.Inventory.cs | 5 +- .../InventoryService/LibraryService.cs | 37 ++- .../AnimationsLibraryItems.xml | 6 + .../BodyPartsLibraryItems.xml | 33 ++- .../ClothingLibrary/ClothingLibraryItems.xml | 14 +- .../GesturesLibrary/GesturesLibraryItems.xml | 80 ++++- .../LandmarksLibraryItems.xml | 4 + .../NotecardsLibraryItems.xml | 14 +- .../ObjectsLibrary/ObjectsLibraryItems.xml | 4 + .../OpenSimLibrary/OpenSimLibrary.xml | 4 + .../PhotosLibrary/PhotosLibraryItems.xml | 4 + .../ScriptsLibrary/ScriptsLibraryItems.xml | 223 ++++++++++---- .../SoundsLibrary/SoundsLibraryItems.xml | 4 + .../TexturesLibrary/TexturesLibraryItems.xml | 274 ++++++++++++++---- 17 files changed, 567 insertions(+), 159 deletions(-) diff --git a/OpenSim/Framework/InventoryFolderImpl.cs b/OpenSim/Framework/InventoryFolderImpl.cs index 139776bb39..29c7682c2b 100644 --- a/OpenSim/Framework/InventoryFolderImpl.cs +++ b/OpenSim/Framework/InventoryFolderImpl.cs @@ -27,15 +27,13 @@ using System; using System.Collections.Generic; -using System.Reflection; -using log4net; using OpenMetaverse; namespace OpenSim.Framework { public class InventoryFolderImpl : InventoryFolderBase { -// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static readonly string PATH_DELIMITER = "/"; @@ -404,10 +402,6 @@ namespace OpenSim.Framework { foreach (InventoryItemBase item in Items.Values) { -// m_log.DebugFormat( -// "[INVENTORY FOLDER IMPL]: Returning item {0} {1}, OwnerPermissions {2:X}", -// item.Name, item.ID, item.CurrentPermissions); - itemList.Add(item); } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 493314700c..b714f2b6ab 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -984,14 +984,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess public virtual bool CanGetAgentInventoryItem(IClientAPI remoteClient, UUID itemID, UUID requestID) { InventoryItemBase assetRequestItem = GetItem(remoteClient.AgentId, itemID); - if (assetRequestItem == null) { ILibraryService lib = m_Scene.RequestModuleInterface(); - if (lib != null) assetRequestItem = lib.LibraryRootFolder.FindItem(itemID); - if (assetRequestItem == null) return false; } @@ -1022,7 +1019,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess m_log.WarnFormat( "[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}", Name, requestID, itemID, assetRequestItem.AssetID); - return false; } diff --git a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs index 2ef445744b..d570608369 100644 --- a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs @@ -185,7 +185,6 @@ namespace OpenSim.Region.CoreModules.Framework.Library archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName, false); archread.Execute(); } - foreach (InventoryNodeBase node in nodes) FixPerms(node); } @@ -198,23 +197,18 @@ namespace OpenSim.Region.CoreModules.Framework.Library archread.Close(); } } + } private void FixPerms(InventoryNodeBase node) { - m_log.DebugFormat("[LIBRARY MODULE]: Fixing perms for {0} {1}", node.Name, node.ID); - if (node is InventoryItemBase) { InventoryItemBase item = (InventoryItemBase)node; -// item.BasePermissions = (uint)PermissionMask.All; item.BasePermissions = 0x7FFFFFFF; item.EveryOnePermissions = 0x7FFFFFFF; item.CurrentPermissions = 0x7FFFFFFF; item.NextPermissions = 0x7FFFFFFF; -// item.EveryOnePermissions = (uint)PermissionMask.Copy; -// item.CurrentPermissions = (uint)PermissionMask.None; -// item.NextPermissions = (uint)PermissionMask.All; } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index afc1a4fce4..30421d4224 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -724,10 +724,7 @@ namespace OpenSim.Region.Framework.Scenes newName = item.Name; } - if (remoteClient.AgentId == oldAgentID - || (LibraryService != null - && LibraryService.LibraryRootFolder != null - && oldAgentID == LibraryService.LibraryRootFolder.Owner)) + if (remoteClient.AgentId == oldAgentID || (LibraryService != null && LibraryService.LibraryRootFolder != null && oldAgentID == LibraryService.LibraryRootFolder.Owner)) { CreateNewInventoryItem( remoteClient, item.CreatorId, item.CreatorData, newFolderID, newName, item.Flags, callbackID, asset, (sbyte)item.InvType, diff --git a/OpenSim/Services/InventoryService/LibraryService.cs b/OpenSim/Services/InventoryService/LibraryService.cs index b46add30cf..383f311fdf 100644 --- a/OpenSim/Services/InventoryService/LibraryService.cs +++ b/OpenSim/Services/InventoryService/LibraryService.cs @@ -93,6 +93,26 @@ namespace OpenSim.Services.InventoryService LoadLibraries(pLibrariesLocation); } + public InventoryItemBase CreateItem(UUID inventoryID, UUID assetID, string name, string description, + int assetType, int invType, UUID parentFolderID) + { + InventoryItemBase item = new InventoryItemBase(); + item.Owner = libOwner; + item.CreatorId = libOwner.ToString(); + item.ID = inventoryID; + item.AssetID = assetID; + item.Description = description; + item.Name = name; + item.AssetType = assetType; + item.InvType = invType; + item.Folder = parentFolderID; + item.BasePermissions = 0x7FFFFFFF; + item.EveryOnePermissions = 0x7FFFFFFF; + item.CurrentPermissions = 0x7FFFFFFF; + item.NextPermissions = 0x7FFFFFFF; + return item; + } + /// /// Use the asset set information at path to load assets /// @@ -173,27 +193,22 @@ namespace OpenSim.Services.InventoryService item.Description = config.GetString("description", item.Name); item.InvType = config.GetInt("inventoryType", 0); item.AssetType = config.GetInt("assetType", item.InvType); - item.CurrentPermissions = (uint)PermissionMask.All; - item.NextPermissions = (uint)PermissionMask.All; - item.EveryOnePermissions = (uint)PermissionMask.All; -// item.EveryOnePermissions = (uint)PermissionMask.All - (uint)PermissionMask.Modify; - item.BasePermissions = (uint)PermissionMask.All; + item.CurrentPermissions = (uint)config.GetLong("currentPermissions", 0x7FFFFFFF); + item.NextPermissions = (uint)config.GetLong("nextPermissions", 0x7FFFFFFF); + item.EveryOnePermissions = (uint)config.GetLong("everyonePermissions", 0x7FFFFFFF); + item.BasePermissions = (uint)config.GetLong("basePermissions", 0x7FFFFFFF); + item.Flags = (uint)config.GetInt("flags", 0); if (libraryFolders.ContainsKey(item.Folder)) { InventoryFolderImpl parentFolder = libraryFolders[item.Folder]; - try { -// m_log.DebugFormat( -// "[LIBRARY INVENTORY]: Adding item {0} {1}, OwnerPermissions {2:X} to {3}", -// item.Name, item.ID, item.CurrentPermissions, item.Folder); - parentFolder.Items.Add(item.ID, item); } catch (Exception) { - m_log.WarnFormat("[LIBRARY INVENTORY]: Item {1} [{0}] not added, duplicate item", item.ID, item.Name); + m_log.WarnFormat("[LIBRARY INVENTORY] Item {1} [{0}] not added, duplicate item", item.ID, item.Name); } } else diff --git a/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml b/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml index 9cfadf0361..2a6ceb4529 100644 --- a/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml +++ b/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml @@ -108,6 +108,8 @@ + + diff --git a/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml b/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml index d9adf1c53c..aa8d9d964b 100644 --- a/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml +++ b/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> - diff --git a/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml b/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml index a12bb8af21..9e297f063e 100644 --- a/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml +++ b/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> - diff --git a/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml b/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml index ca3ce2d18c..1312129ca6 100644 --- a/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml +++ b/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml @@ -7,8 +7,11 @@ + + + + -
@@ -17,8 +20,11 @@ + + + +
-
@@ -27,8 +33,11 @@ + + + +
-
@@ -37,8 +46,11 @@ + + + +
-
@@ -47,8 +59,11 @@ + + + +
-
@@ -57,8 +72,11 @@ + + + +
-
@@ -67,8 +85,11 @@ + + + +
-
@@ -77,8 +98,11 @@ + + + +
-
@@ -87,8 +111,11 @@ + + + +
-
@@ -97,8 +124,11 @@ + + + +
-
@@ -107,8 +137,11 @@ + + + +
-
@@ -117,8 +150,11 @@ + + + +
-
@@ -127,8 +163,11 @@ + + + +
-
@@ -137,8 +176,11 @@ + + + +
-
@@ -147,8 +189,11 @@ + + + +
-
@@ -157,6 +202,9 @@ + + + +
- diff --git a/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml b/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml index 44194cd52f..4047a5838e 100644 --- a/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml +++ b/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> diff --git a/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml b/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml index e232bcc350..713c365755 100644 --- a/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml +++ b/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> @@ -20,8 +24,11 @@ + + + + -
@@ -30,6 +37,9 @@ + + + +
- diff --git a/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml b/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml index 44194cd52f..4047a5838e 100644 --- a/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml +++ b/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> diff --git a/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml b/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml index bef59d8add..7eb8de3c1a 100644 --- a/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml +++ b/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml @@ -10,6 +10,10 @@ + + + + --> diff --git a/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml b/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml index 44194cd52f..4047a5838e 100644 --- a/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml +++ b/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> diff --git a/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml b/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml index df9d867b5d..9641f7db6b 100644 --- a/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml +++ b/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml @@ -25,8 +25,11 @@ + + + + -
@@ -35,8 +38,11 @@ + + + +
-
@@ -45,8 +51,11 @@ + + + +
-
@@ -55,8 +64,11 @@ + + + +
-
@@ -65,8 +77,11 @@ + + + +
-
@@ -75,8 +90,11 @@ + + + +
-
@@ -85,8 +103,11 @@ + + + +
-
@@ -95,8 +116,11 @@ + + + +
-
@@ -105,8 +129,11 @@ + + + +
-
@@ -115,8 +142,11 @@ + + + +
-
@@ -125,8 +155,11 @@ + + + +
-
@@ -136,8 +169,11 @@ + + + +
- @@ -151,7 +187,6 @@ -
@@ -160,8 +195,11 @@ + + + +
-
@@ -170,8 +208,11 @@ + + + +
-
@@ -180,8 +221,11 @@ + + + +
-
@@ -190,8 +234,11 @@ + + + +
-
@@ -201,8 +248,11 @@ + + + +
-
@@ -211,8 +261,11 @@ + + + +
-
@@ -221,8 +274,11 @@ + + + +
- @@ -232,166 +288,213 @@
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
-
- + + + + +
- -
@@ -400,8 +503,11 @@ + + + +
-
@@ -410,8 +516,11 @@ + + + +
-
@@ -420,5 +529,9 @@ + + + +
diff --git a/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml b/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml index 44194cd52f..4047a5838e 100644 --- a/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml +++ b/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> diff --git a/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml b/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml index a018a0de78..adba99aae5 100644 --- a/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml +++ b/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml @@ -9,6 +9,10 @@ + + + + --> @@ -20,8 +24,11 @@ + + + + -
@@ -30,8 +37,11 @@ + + + +
-
@@ -40,8 +50,11 @@ + + + +
-
@@ -50,8 +63,11 @@ + + + +
-
@@ -60,8 +76,11 @@ + + + +
-
@@ -70,8 +89,11 @@ + + + +
-
@@ -80,8 +102,11 @@ + + + +
-
@@ -90,8 +115,11 @@ + + + +
-
@@ -100,8 +128,11 @@ + + + +
-
@@ -110,8 +141,11 @@ + + + +
-
@@ -120,8 +154,11 @@ + + + +
-
@@ -130,8 +167,11 @@ + + + +
-
@@ -140,8 +180,11 @@ + + + +
-
@@ -150,8 +193,11 @@ + + + +
-
@@ -160,8 +206,11 @@ + + + +
-
@@ -170,8 +219,11 @@ + + + +
-
@@ -180,8 +232,11 @@ + + + +
-
@@ -190,8 +245,11 @@ + + + +
-
@@ -200,8 +258,11 @@ + + + +
-
@@ -210,8 +271,11 @@ + + + +
-
@@ -220,8 +284,11 @@ + + + +
-
@@ -230,8 +297,11 @@ + + + +
-
@@ -240,8 +310,11 @@ + + + +
-
@@ -250,8 +323,11 @@ + + + +
-
@@ -260,8 +336,11 @@ + + + +
-
@@ -270,8 +349,11 @@ + + + +
-
@@ -280,8 +362,11 @@ + + + +
-
@@ -290,8 +375,11 @@ + + + +
-
@@ -300,8 +388,11 @@ + + + +
-
@@ -310,8 +401,11 @@ + + + +
-
@@ -320,8 +414,11 @@ + + + +
-
@@ -330,8 +427,11 @@ + + + +
-
@@ -340,8 +440,11 @@ + + + +
-
@@ -350,8 +453,11 @@ + + + +
-
@@ -360,8 +466,11 @@ + + + +
-
@@ -370,8 +479,11 @@ + + + +
-
@@ -380,8 +492,11 @@ + + + +
-
@@ -390,8 +505,11 @@ + + + +
-
@@ -400,8 +518,11 @@ + + + +
-
@@ -410,8 +531,11 @@ + + + +
-
@@ -420,8 +544,11 @@ + + + +
-
@@ -430,8 +557,11 @@ + + + +
-
@@ -440,8 +570,11 @@ + + + +
-
@@ -450,8 +583,11 @@ + + + +
-
@@ -460,8 +596,11 @@ + + + +
-
@@ -470,8 +609,11 @@ + + + +
-
@@ -480,8 +622,11 @@ + + + +
-
@@ -490,6 +635,10 @@ + + + +
@@ -500,8 +649,11 @@ + + + +
-
@@ -510,8 +662,11 @@ + + + +
-
@@ -520,8 +675,11 @@ + + + +
-
@@ -530,6 +688,10 @@ + + + +
@@ -540,6 +702,10 @@ + + + +
@@ -550,6 +716,10 @@ + + + +
@@ -560,5 +730,9 @@ + + + +
From f0895028e96e39ca179cad8c103042397ad870e5 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 23 Jul 2011 02:13:11 +0100 Subject: [PATCH 16/21] Remove manually permissions settings on all current library items so that they use the defaults instead. Some items had completely wrong permissions - this is easier than correcting them all. The ability to set permissions in xml is retained since there are use cases for this (e.g. to create no-mod library scripts) --- OpenSim/Framework/InventoryFolderImpl.cs | 8 +- .../InventoryAccess/InventoryAccessModule.cs | 4 + .../Framework/Library/LibraryModule.cs | 8 +- .../Framework/Scenes/Scene.Inventory.cs | 5 +- .../InventoryService/LibraryService.cs | 8 +- .../AnimationsLibraryItems.xml | 6 - .../BodyPartsLibraryItems.xml | 33 +-- .../ClothingLibrary/ClothingLibraryItems.xml | 14 +- .../GesturesLibrary/GesturesLibraryItems.xml | 80 +---- .../LandmarksLibraryItems.xml | 4 - .../NotecardsLibraryItems.xml | 14 +- .../ObjectsLibrary/ObjectsLibraryItems.xml | 4 - .../OpenSimLibrary/OpenSimLibrary.xml | 4 - .../PhotosLibrary/PhotosLibraryItems.xml | 4 - .../ScriptsLibrary/ScriptsLibraryItems.xml | 223 ++++---------- .../SoundsLibrary/SoundsLibraryItems.xml | 4 - .../TexturesLibrary/TexturesLibraryItems.xml | 274 ++++-------------- 17 files changed, 152 insertions(+), 545 deletions(-) diff --git a/OpenSim/Framework/InventoryFolderImpl.cs b/OpenSim/Framework/InventoryFolderImpl.cs index 29c7682c2b..139776bb39 100644 --- a/OpenSim/Framework/InventoryFolderImpl.cs +++ b/OpenSim/Framework/InventoryFolderImpl.cs @@ -27,13 +27,15 @@ using System; using System.Collections.Generic; +using System.Reflection; +using log4net; using OpenMetaverse; namespace OpenSim.Framework { public class InventoryFolderImpl : InventoryFolderBase { - //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); +// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public static readonly string PATH_DELIMITER = "/"; @@ -402,6 +404,10 @@ namespace OpenSim.Framework { foreach (InventoryItemBase item in Items.Values) { +// m_log.DebugFormat( +// "[INVENTORY FOLDER IMPL]: Returning item {0} {1}, OwnerPermissions {2:X}", +// item.Name, item.ID, item.CurrentPermissions); + itemList.Add(item); } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index b714f2b6ab..493314700c 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -984,11 +984,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess public virtual bool CanGetAgentInventoryItem(IClientAPI remoteClient, UUID itemID, UUID requestID) { InventoryItemBase assetRequestItem = GetItem(remoteClient.AgentId, itemID); + if (assetRequestItem == null) { ILibraryService lib = m_Scene.RequestModuleInterface(); + if (lib != null) assetRequestItem = lib.LibraryRootFolder.FindItem(itemID); + if (assetRequestItem == null) return false; } @@ -1019,6 +1022,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess m_log.WarnFormat( "[CLIENT]: {0} requested asset {1} from item {2} but this does not match item's asset {3}", Name, requestID, itemID, assetRequestItem.AssetID); + return false; } diff --git a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs index d570608369..2ef445744b 100644 --- a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs @@ -185,6 +185,7 @@ namespace OpenSim.Region.CoreModules.Framework.Library archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName, false); archread.Execute(); } + foreach (InventoryNodeBase node in nodes) FixPerms(node); } @@ -197,18 +198,23 @@ namespace OpenSim.Region.CoreModules.Framework.Library archread.Close(); } } - } private void FixPerms(InventoryNodeBase node) { + m_log.DebugFormat("[LIBRARY MODULE]: Fixing perms for {0} {1}", node.Name, node.ID); + if (node is InventoryItemBase) { InventoryItemBase item = (InventoryItemBase)node; +// item.BasePermissions = (uint)PermissionMask.All; item.BasePermissions = 0x7FFFFFFF; item.EveryOnePermissions = 0x7FFFFFFF; item.CurrentPermissions = 0x7FFFFFFF; item.NextPermissions = 0x7FFFFFFF; +// item.EveryOnePermissions = (uint)PermissionMask.Copy; +// item.CurrentPermissions = (uint)PermissionMask.None; +// item.NextPermissions = (uint)PermissionMask.All; } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 30421d4224..afc1a4fce4 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -724,7 +724,10 @@ namespace OpenSim.Region.Framework.Scenes newName = item.Name; } - if (remoteClient.AgentId == oldAgentID || (LibraryService != null && LibraryService.LibraryRootFolder != null && oldAgentID == LibraryService.LibraryRootFolder.Owner)) + if (remoteClient.AgentId == oldAgentID + || (LibraryService != null + && LibraryService.LibraryRootFolder != null + && oldAgentID == LibraryService.LibraryRootFolder.Owner)) { CreateNewInventoryItem( remoteClient, item.CreatorId, item.CreatorData, newFolderID, newName, item.Flags, callbackID, asset, (sbyte)item.InvType, diff --git a/OpenSim/Services/InventoryService/LibraryService.cs b/OpenSim/Services/InventoryService/LibraryService.cs index 383f311fdf..2e9d2b1d52 100644 --- a/OpenSim/Services/InventoryService/LibraryService.cs +++ b/OpenSim/Services/InventoryService/LibraryService.cs @@ -193,10 +193,10 @@ namespace OpenSim.Services.InventoryService item.Description = config.GetString("description", item.Name); item.InvType = config.GetInt("inventoryType", 0); item.AssetType = config.GetInt("assetType", item.InvType); - item.CurrentPermissions = (uint)config.GetLong("currentPermissions", 0x7FFFFFFF); - item.NextPermissions = (uint)config.GetLong("nextPermissions", 0x7FFFFFFF); - item.EveryOnePermissions = (uint)config.GetLong("everyonePermissions", 0x7FFFFFFF); - item.BasePermissions = (uint)config.GetLong("basePermissions", 0x7FFFFFFF); + item.CurrentPermissions = (uint)config.GetLong("currentPermissions", (uint)PermissionMask.All); + item.NextPermissions = (uint)config.GetLong("nextPermissions", (uint)PermissionMask.All); + item.EveryOnePermissions = (uint)config.GetLong("everyonePermissions", (uint)PermissionMask.All); + item.BasePermissions = (uint)config.GetLong("basePermissions", (uint)PermissionMask.All); item.Flags = (uint)config.GetInt("flags", 0); if (libraryFolders.ContainsKey(item.Folder)) diff --git a/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml b/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml index 2a6ceb4529..9cfadf0361 100644 --- a/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml +++ b/bin/inventory/AnimationsLibrary/AnimationsLibraryItems.xml @@ -108,8 +108,6 @@ - - diff --git a/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml b/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml index aa8d9d964b..d9adf1c53c 100644 --- a/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml +++ b/bin/inventory/BodyPartsLibrary/BodyPartsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> + diff --git a/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml b/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml index 9e297f063e..a12bb8af21 100644 --- a/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml +++ b/bin/inventory/ClothingLibrary/ClothingLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> + diff --git a/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml b/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml index 1312129ca6..ca3ce2d18c 100644 --- a/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml +++ b/bin/inventory/GesturesLibrary/GesturesLibraryItems.xml @@ -7,11 +7,8 @@ - - - - +
@@ -20,11 +17,8 @@ - - - -
+
@@ -33,11 +27,8 @@ - - - -
+
@@ -46,11 +37,8 @@ - - - -
+
@@ -59,11 +47,8 @@ - - - -
+
@@ -72,11 +57,8 @@ - - - -
+
@@ -85,11 +67,8 @@ - - - -
+
@@ -98,11 +77,8 @@ - - - -
+
@@ -111,11 +87,8 @@ - - - -
+
@@ -124,11 +97,8 @@ - - - -
+
@@ -137,11 +107,8 @@ - - - -
+
@@ -150,11 +117,8 @@ - - - -
+
@@ -163,11 +127,8 @@ - - - -
+
@@ -176,11 +137,8 @@ - - - -
+
@@ -189,11 +147,8 @@ - - - -
+
@@ -202,9 +157,6 @@ - - - -
+ diff --git a/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml b/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml +++ b/bin/inventory/LandmarksLibrary/LandmarksLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml b/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml index 713c365755..e232bcc350 100644 --- a/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml +++ b/bin/inventory/NotecardsLibrary/NotecardsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> @@ -24,11 +20,8 @@ - - - - +
@@ -37,9 +30,6 @@ - - - -
+ diff --git a/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml b/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml +++ b/bin/inventory/ObjectsLibrary/ObjectsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml b/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml index 7eb8de3c1a..bef59d8add 100644 --- a/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml +++ b/bin/inventory/OpenSimLibrary/OpenSimLibrary.xml @@ -10,10 +10,6 @@ - - - - --> diff --git a/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml b/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml +++ b/bin/inventory/PhotosLibrary/PhotosLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml b/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml index 9641f7db6b..df9d867b5d 100644 --- a/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml +++ b/bin/inventory/ScriptsLibrary/ScriptsLibraryItems.xml @@ -25,11 +25,8 @@ - - - - +
@@ -38,11 +35,8 @@ - - - -
+
@@ -51,11 +45,8 @@ - - - -
+
@@ -64,11 +55,8 @@ - - - -
+
@@ -77,11 +65,8 @@ - - - -
+
@@ -90,11 +75,8 @@ - - - -
+
@@ -103,11 +85,8 @@ - - - -
+
@@ -116,11 +95,8 @@ - - - -
+
@@ -129,11 +105,8 @@ - - - -
+
@@ -142,11 +115,8 @@ - - - -
+
@@ -155,11 +125,8 @@ - - - -
+
@@ -169,11 +136,8 @@ - - - -
+ @@ -187,6 +151,7 @@ +
@@ -195,11 +160,8 @@ - - - -
+
@@ -208,11 +170,8 @@ - - - -
+
@@ -221,11 +180,8 @@ - - - -
+
@@ -234,11 +190,8 @@ - - - -
+
@@ -248,11 +201,8 @@ - - - -
+
@@ -261,11 +211,8 @@ - - - -
+
@@ -274,11 +221,8 @@ - - - -
+ @@ -288,213 +232,166 @@
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+
- + - - - -
+ +
@@ -503,11 +400,8 @@ - - - -
+
@@ -516,11 +410,8 @@ - - - -
+
@@ -529,9 +420,5 @@ - - - -
diff --git a/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml b/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml index 4047a5838e..44194cd52f 100644 --- a/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml +++ b/bin/inventory/SoundsLibrary/SoundsLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> diff --git a/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml b/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml index adba99aae5..a018a0de78 100644 --- a/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml +++ b/bin/inventory/TexturesLibrary/TexturesLibraryItems.xml @@ -9,10 +9,6 @@ - - - - --> @@ -24,11 +20,8 @@ - - - - +
@@ -37,11 +30,8 @@ - - - -
+
@@ -50,11 +40,8 @@ - - - -
+
@@ -63,11 +50,8 @@ - - - -
+
@@ -76,11 +60,8 @@ - - - -
+
@@ -89,11 +70,8 @@ - - - -
+
@@ -102,11 +80,8 @@ - - - -
+
@@ -115,11 +90,8 @@ - - - -
+
@@ -128,11 +100,8 @@ - - - -
+
@@ -141,11 +110,8 @@ - - - -
+
@@ -154,11 +120,8 @@ - - - -
+
@@ -167,11 +130,8 @@ - - - -
+
@@ -180,11 +140,8 @@ - - - -
+
@@ -193,11 +150,8 @@ - - - -
+
@@ -206,11 +160,8 @@ - - - -
+
@@ -219,11 +170,8 @@ - - - -
+
@@ -232,11 +180,8 @@ - - - -
+
@@ -245,11 +190,8 @@ - - - -
+
@@ -258,11 +200,8 @@ - - - -
+
@@ -271,11 +210,8 @@ - - - -
+
@@ -284,11 +220,8 @@ - - - -
+
@@ -297,11 +230,8 @@ - - - -
+
@@ -310,11 +240,8 @@ - - - -
+
@@ -323,11 +250,8 @@ - - - -
+
@@ -336,11 +260,8 @@ - - - -
+
@@ -349,11 +270,8 @@ - - - -
+
@@ -362,11 +280,8 @@ - - - -
+
@@ -375,11 +290,8 @@ - - - -
+
@@ -388,11 +300,8 @@ - - - -
+
@@ -401,11 +310,8 @@ - - - -
+
@@ -414,11 +320,8 @@ - - - -
+
@@ -427,11 +330,8 @@ - - - -
+
@@ -440,11 +340,8 @@ - - - -
+
@@ -453,11 +350,8 @@ - - - -
+
@@ -466,11 +360,8 @@ - - - -
+
@@ -479,11 +370,8 @@ - - - -
+
@@ -492,11 +380,8 @@ - - - -
+
@@ -505,11 +390,8 @@ - - - -
+
@@ -518,11 +400,8 @@ - - - -
+
@@ -531,11 +410,8 @@ - - - -
+
@@ -544,11 +420,8 @@ - - - -
+
@@ -557,11 +430,8 @@ - - - -
+
@@ -570,11 +440,8 @@ - - - -
+
@@ -583,11 +450,8 @@ - - - -
+
@@ -596,11 +460,8 @@ - - - -
+
@@ -609,11 +470,8 @@ - - - -
+
@@ -622,11 +480,8 @@ - - - -
+
@@ -635,10 +490,6 @@ - - - -
@@ -649,11 +500,8 @@ - - - -
+
@@ -662,11 +510,8 @@ - - - -
+
@@ -675,11 +520,8 @@ - - - -
+
@@ -688,10 +530,6 @@ - - - -
@@ -702,10 +540,6 @@ - - - -
@@ -716,10 +550,6 @@ - - - -
@@ -730,9 +560,5 @@ - - - -
From be9b4ad23abcb2dec2291679c758f0dc0bc6096e Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 23 Jul 2011 02:18:23 +0100 Subject: [PATCH 17/21] For default everyone permissions on library items, make notecards and scripts non-modifiable (but still copyable, etc). Users should not be given the impression that they can modify these items. This still does not solve the issue where library items cannot be dragged into prims or user inventory any time after they are initially seen. Curiously, manually copying and pasting still appears to work. On the surface, this seems to have something to do with library item caching on the client, since deleting the cache allows drag to work again once Not sure what the exact problem is. --- .../CoreModules/Framework/Library/LibraryModule.cs | 12 ++++-------- OpenSim/Services/InventoryService/LibraryService.cs | 3 ++- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs index 2ef445744b..3155ce7cc9 100644 --- a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs @@ -207,14 +207,10 @@ namespace OpenSim.Region.CoreModules.Framework.Library if (node is InventoryItemBase) { InventoryItemBase item = (InventoryItemBase)node; -// item.BasePermissions = (uint)PermissionMask.All; - item.BasePermissions = 0x7FFFFFFF; - item.EveryOnePermissions = 0x7FFFFFFF; - item.CurrentPermissions = 0x7FFFFFFF; - item.NextPermissions = 0x7FFFFFFF; -// item.EveryOnePermissions = (uint)PermissionMask.Copy; -// item.CurrentPermissions = (uint)PermissionMask.None; -// item.NextPermissions = (uint)PermissionMask.All; + item.BasePermissions = (uint)PermissionMask.All; + item.EveryOnePermissions = (uint)PermissionMask.All - (uint)PermissionMask.Modify; + item.CurrentPermissions = (uint)PermissionMask.All; + item.NextPermissions = (uint)PermissionMask.All; } } diff --git a/OpenSim/Services/InventoryService/LibraryService.cs b/OpenSim/Services/InventoryService/LibraryService.cs index 2e9d2b1d52..f90895b203 100644 --- a/OpenSim/Services/InventoryService/LibraryService.cs +++ b/OpenSim/Services/InventoryService/LibraryService.cs @@ -195,7 +195,8 @@ namespace OpenSim.Services.InventoryService item.AssetType = config.GetInt("assetType", item.InvType); item.CurrentPermissions = (uint)config.GetLong("currentPermissions", (uint)PermissionMask.All); item.NextPermissions = (uint)config.GetLong("nextPermissions", (uint)PermissionMask.All); - item.EveryOnePermissions = (uint)config.GetLong("everyonePermissions", (uint)PermissionMask.All); + item.EveryOnePermissions + = (uint)config.GetLong("everyonePermissions", (uint)PermissionMask.All - (uint)PermissionMask.Modify); item.BasePermissions = (uint)config.GetLong("basePermissions", (uint)PermissionMask.All); item.Flags = (uint)config.GetInt("flags", 0); From 4eaca4884eca26ca4cb73a6ce4c7edee38b789ac Mon Sep 17 00:00:00 2001 From: Makopoppo Date: Sun, 17 Jul 2011 11:22:29 +0900 Subject: [PATCH 18/21] Fixed serverside_object_permission default value confliction --- .../Region/CoreModules/World/Permissions/PermissionsModule.cs | 2 +- bin/OpenSimDefaults.ini | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index a40517cf3e..7cb375180e 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs @@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions = ParseUserSetConfigSetting(myConfig, "allowed_script_editors", m_allowedScriptEditors); if (m_bypassPermissions) - m_log.Info("[PERMISSIONS]: serviceside_object_permissions = false in ini file so disabling all region service permission checks"); + m_log.Info("[PERMISSIONS]: serverside_object_permissions = false in ini file so disabling all region service permission checks"); else m_log.Debug("[PERMISSIONS]: Enabling all region service permission checks"); diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index bf3622828b..a7e40db312 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -169,8 +169,8 @@ ; If set to false, then, in theory, the server never carries out permission checks (allowing anybody to copy ; any item, etc. This may not yet be implemented uniformally. ; If set to true, then all permissions checks are carried out - ; Default is false - serverside_object_permissions = false + ; Default is true + serverside_object_permissions = true allow_grid_gods = false From ea58aee338a1e1fa0b1ecc8898c38686c12be44c Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 23 Jul 2011 02:31:00 +0100 Subject: [PATCH 19/21] Change default AllowScriptCrossings config setting to true. When this setting is false and other defaults haven't been changed, scripts entering the simulator from another sim are automatically restarted but their state is not preserved. When this setting is true, state that accompanies the script is reloaded (e.g. if a script had a variable i = 1 when leaving the source region, it will still have i = 1 on the destination region). This setting does not affect crossings when regions are run in the same simulator. In this case, state is already preserved. --- bin/OpenSim.ini.example | 8 +++++--- bin/OpenSimDefaults.ini | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 2fe4db7d26..e3b127f406 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -80,9 +80,11 @@ ;; This can be overriden in the region config file. ; ClampPrimSize = false - ;# {AllowScriptCrossing} {} {Allow scripts to cross into this region} {true false} false - ;; Allow scripts to keep running when they cross region boundaries, rather than being restarted. Script code is recompiled on the destination region and the state reloaded. - ; AllowScriptCrossing = false + ;# {AllowScriptCrossing} {} {Allow scripts to cross into this region} {true false} true + ;; Allow scripts to keep running when they cross region boundaries, rather than being restarted. State is reloaded on the destination region. + ;; This only applies when crossing to a region running in a different simulator. + ;; For crossings where the regions are on the same simulator the script is always kept running. + ; AllowScriptCrossing = true ;# {TrustBinaries} {AllowScriptCrossing:true} {Accept compiled binary script code? (DANGEROUS!)} {true false} false ;; Allow compiled script binary code to cross region boundaries. diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index a7e40db312..b689f88900 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -77,8 +77,10 @@ ; This can be overriden in the region config file. ClampPrimSize = false - ; Allow scripts to keep running when they cross region boundaries, rather than being restarted. Script code is recompiled on the destination region and the state reloaded. - AllowScriptCrossing = false + ; Allow scripts to keep running when they cross region boundaries, rather than being restarted. State is reloaded on the destination region. + ; This only applies when crossing to a region running in a different simulator. + ; For crossings where the regions are on the same simulator the script is always kept running. + AllowScriptCrossing = true ; Allow compiled script binary code to cross region boundaries. ; If you set this to "true", any region that can teleport to you can From 504de8bc4792eda165d71a2c7481cb43cb92759a Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 23 Jul 2011 03:46:55 +0100 Subject: [PATCH 20/21] Pass the first name and last name from the agent circuit data to the authorization service rather than from the account. This is to accomodate situations where the authorization service is being used by the hypergrid, where visitors have no user account. See http://opensimulator.org/mantis/view.php?id=5517, this code is somewhat adapted/cleaned up from Michelle's patch I'm a little ambivalent about this since visitors could put anything in firstname/lastname so it's not much of an auth measure. It's up to the auth service to decide which data it actually uses. Possibly we should be passing through other info such as agent circuit ip --- OpenSim/Framework/TaskInventoryDictionary.cs | 2 +- .../LocalAuthorizationServiceConnector.cs | 17 +++++----- .../RemoteAuthorizationServiceConnector.cs | 24 +++++++++----- OpenSim/Region/Framework/Scenes/Scene.cs | 5 +-- .../AuthorizationServerPostHandler.cs | 2 +- .../AuthorizationService.cs | 5 +-- .../Interfaces/IAuthorizationService.cs | 32 +++++++++++-------- 7 files changed, 50 insertions(+), 37 deletions(-) diff --git a/OpenSim/Framework/TaskInventoryDictionary.cs b/OpenSim/Framework/TaskInventoryDictionary.cs index 25ae6b05c6..421bd5ddcf 100644 --- a/OpenSim/Framework/TaskInventoryDictionary.cs +++ b/OpenSim/Framework/TaskInventoryDictionary.cs @@ -59,7 +59,7 @@ namespace OpenSim.Framework clone.Add(uuid, (TaskInventoryItem) this[uuid].Clone()); } } - + return clone; } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs index 85a1ac3b64..18a7177b6f 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs @@ -39,8 +39,7 @@ using OpenMetaverse; namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization { - public class LocalAuthorizationServicesConnector : - ISharedRegionModule, IAuthorizationService + public class LocalAuthorizationServicesConnector : ISharedRegionModule, IAuthorizationService { private static readonly ILog m_log = LogManager.GetLogger( @@ -127,15 +126,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization if (!m_Enabled) return; - m_log.InfoFormat("[AUTHORIZATION CONNECTOR]: Enabled local authorization for region {0}", scene.RegionInfo.RegionName); - - + m_log.InfoFormat( + "[AUTHORIZATION CONNECTOR]: Enabled local authorization for region {0}", + scene.RegionInfo.RegionName); } - public bool IsAuthorizedForRegion(string userID, string regionID, out string message) + public bool IsAuthorizedForRegion( + string userID, string firstName, string lastName, string regionID, out string message) { - return m_AuthorizationService.IsAuthorizedForRegion(userID, regionID, out message); + return m_AuthorizationService.IsAuthorizedForRegion(userID, firstName, lastName, regionID, out message); } - } -} +} \ No newline at end of file diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs index 66994facff..5fa27b8704 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs @@ -117,12 +117,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization } - public bool IsAuthorizedForRegion(string userID, string regionID, out string message) + public bool IsAuthorizedForRegion( + string userID, string firstName, string lastName, string regionID, out string message) { - m_log.InfoFormat("[REMOTE AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} for region {1}", userID, regionID); + m_log.InfoFormat( + "[REMOTE AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} for region {1}", userID, regionID); bool isAuthorized = true; message = String.Empty; + string mail = String.Empty; // get the scene this call is being made for Scene scene = null; @@ -140,17 +143,22 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization if (scene != null) { UserAccount account = scene.UserAccountService.GetUserAccount(UUID.Zero, new UUID(userID)); - isAuthorized = IsAuthorizedForRegion(userID, account.FirstName, account.LastName, - account.Email, scene.RegionInfo.RegionName, regionID, out message); + + if (account != null) + mail = account.Email; + + isAuthorized + = IsAuthorizedForRegion( + userID, firstName, lastName, account.Email, scene.RegionInfo.RegionName, regionID, out message); } else { - m_log.ErrorFormat("[REMOTE AUTHORIZATION CONNECTOR] IsAuthorizedForRegion, can't find scene to match region id of {0} ",regionID); + m_log.ErrorFormat( + "[REMOTE AUTHORIZATION CONNECTOR] IsAuthorizedForRegion, can't find scene to match region id of {0}", + regionID); } - return isAuthorized; - } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 32a288724a..1a32510715 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -3553,11 +3553,12 @@ namespace OpenSim.Region.Framework.Scenes if (AuthorizationService != null) { - if (!AuthorizationService.IsAuthorizedForRegion(agent.AgentID.ToString(), RegionInfo.RegionID.ToString(),out reason)) + if (!AuthorizationService.IsAuthorizedForRegion( + agent.AgentID.ToString(), agent.firstname, agent.lastname, RegionInfo.RegionID.ToString(), out reason)) { m_log.WarnFormat("[CONNECTION BEGIN]: Denied access to: {0} ({1} {2}) at {3} because the user does not have access to the region", agent.AgentID, agent.firstname, agent.lastname, RegionInfo.RegionName); - //reason = String.Format("You are not currently on the access list for {0}",RegionInfo.RegionName); + return false; } } diff --git a/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs b/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs index f987de4ef1..d656238cf0 100644 --- a/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs @@ -61,7 +61,7 @@ namespace OpenSim.Server.Handlers.Authorization AuthorizationRequest Authorization = (AuthorizationRequest) xs.Deserialize(request); string message = String.Empty; - bool authorized = m_AuthorizationService.IsAuthorizedForRegion(Authorization.ID, Authorization.RegionID,out message); + bool authorized = m_AuthorizationService.IsAuthorizedForRegion(Authorization.ID, Authorization.FirstName, Authorization.SurName, Authorization.RegionID, out message); AuthorizationResponse result = new AuthorizationResponse(authorized, Authorization.ID + " has been authorized"); diff --git a/OpenSim/Services/AuthorizationService/AuthorizationService.cs b/OpenSim/Services/AuthorizationService/AuthorizationService.cs index d658368320..03da6e144f 100644 --- a/OpenSim/Services/AuthorizationService/AuthorizationService.cs +++ b/OpenSim/Services/AuthorizationService/AuthorizationService.cs @@ -48,10 +48,11 @@ namespace OpenSim.Services.AuthorizationService m_log.Info("[AUTHORIZATION CONNECTOR]: Local Authorization service enabled"); } - public bool IsAuthorizedForRegion(string userID, string regionID, out string message) + public bool IsAuthorizedForRegion( + string userID, string firstName, string lastName, string regionID, out string message) { message = "Authorized"; return true; } } -} +} \ No newline at end of file diff --git a/OpenSim/Services/Interfaces/IAuthorizationService.cs b/OpenSim/Services/Interfaces/IAuthorizationService.cs index c5d577ad9a..e5c68f62fa 100644 --- a/OpenSim/Services/Interfaces/IAuthorizationService.cs +++ b/OpenSim/Services/Interfaces/IAuthorizationService.cs @@ -34,14 +34,21 @@ namespace OpenSim.Services.Interfaces public interface IAuthorizationService { - ////////////////////////////////////////////////////// - // Authorized - // - // This method returns a simple true false indicating - // whether or not a user has access to the region - // - bool IsAuthorizedForRegion(string userID, string regionID, out string message); - + /// + /// Check whether the user should be given access to the region. + /// + /// + /// We also supply user first name and last name for situations where the user does not have an account + /// on the region (e.g. they're a visitor via Hypergrid). + /// + /// + /// /param> + /// + /// + /// + /// + bool IsAuthorizedForRegion( + string userID, string firstName, string lastName, string regionID, out string message); } public class AuthorizationRequest @@ -63,7 +70,8 @@ namespace OpenSim.Services.Interfaces m_regionID = RegionID; } - public AuthorizationRequest(string ID,string FirstName, string SurName, string Email, string RegionName, string RegionID) + public AuthorizationRequest( + string ID, string FirstName, string SurName, string Email, string RegionName, string RegionID) { m_userID = ID; m_firstname = FirstName; @@ -108,9 +116,6 @@ namespace OpenSim.Services.Interfaces get { return m_regionID; } set { m_regionID = value; } } - - - } public class AuthorizationResponse @@ -126,7 +131,6 @@ namespace OpenSim.Services.Interfaces { m_isAuthorized = isAuthorized; m_message = message; - } public bool IsAuthorized @@ -141,4 +145,4 @@ namespace OpenSim.Services.Interfaces set { m_message = value; } } } -} +} \ No newline at end of file From 4cdc8806fbc0d0d9b0ff878b30a4491b347cf2dc Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 23 Jul 2011 11:39:32 +0100 Subject: [PATCH 21/21] Fix LLTextBox to work with the updated libOMV --- OpenSim/Framework/IClientAPI.cs | 2 +- OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 7 ++++++- OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs | 4 +++- OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | 2 +- .../Agent/InternetRelayClientView/Server/IRCClientView.cs | 2 +- OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | 2 +- OpenSim/Tests/Common/Mock/TestClient.cs | 2 +- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index f6e29771d8..6b95a58440 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -1395,7 +1395,7 @@ namespace OpenSim.Framework void SendGroupTransactionsSummaryDetails(IClientAPI sender,UUID groupID, UUID transactionID, UUID sessionID,int amt); void SendChangeUserRights(UUID agentID, UUID friendID, int rights); - void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId); + void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId); void StopFlying(ISceneEntity presence); diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index a34ad62545..60f0075108 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -12083,7 +12083,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(packet, ThrottleOutPacketType.Task); } - public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) + public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId) { ScriptDialogPacket dialog = (ScriptDialogPacket)PacketPool.Instance.GetPacket(PacketType.ScriptDialog); dialog.Data.ObjectID = objectId; @@ -12099,6 +12099,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP buttons[0] = new ScriptDialogPacket.ButtonsBlock(); buttons[0].ButtonLabel = Util.StringToBytes256("!!llTextBox!!"); dialog.Buttons = buttons; + + dialog.OwnerData = new ScriptDialogPacket.OwnerDataBlock[1]; + dialog.OwnerData[0] = new ScriptDialogPacket.OwnerDataBlock(); + dialog.OwnerData[0].OwnerID = ownerID; + OutPacket(dialog, ThrottleOutPacketType.Task); } diff --git a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs index 0db31eb48f..36fe040327 100644 --- a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs @@ -141,10 +141,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog { UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, ownerid); string ownerFirstName, ownerLastName; + UUID ownerID = UUID.Zero; if (account != null) { ownerFirstName = account.FirstName; ownerLastName = account.LastName; + ownerID = account.PrincipalID; } else { @@ -155,7 +157,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog ScenePresence sp = m_scene.GetScenePresence(avatarid); if (sp != null) - sp.ControllingClient.SendTextBoxRequest(message, chatChannel, name, ownerFirstName, ownerLastName, objectid); + sp.ControllingClient.SendTextBoxRequest(message, chatChannel, name, ownerID, ownerFirstName, ownerLastName, objectid); } public void SendNotificationToUsersInRegion( diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 56b46d7f44..17766eadd1 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs @@ -1152,7 +1152,7 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) + public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId) { } diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 88db20ef8a..3335f2e408 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs @@ -1678,7 +1678,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server { } - public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) + public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId) { } diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 15bc1b7644..3afcc8dcab 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs @@ -1157,7 +1157,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC { } - public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) + public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId) { } diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index bf91ab5817..f548a9eeb3 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs @@ -1214,7 +1214,7 @@ namespace OpenSim.Tests.Common.Mock { } - public void SendTextBoxRequest(string message, int chatChannel, string objectname, string ownerFirstName, string ownerLastName, UUID objectId) + public void SendTextBoxRequest(string message, int chatChannel, string objectname, UUID ownerID, string ownerFirstName, string ownerLastName, UUID objectId) { }