From dfc553d0a4c25d6c1f491b228e89402c0415acda Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 15 Aug 2008 13:13:39 +0000 Subject: Fix up master avatar handling for estate owners. Introduces a new hierarchical rights structure. MasterAvatar: Owner of the region server (may be null), net gods (users with GodLevel 200), Estate owner (from database). Look at Opensim.ini.example to enable net gods. Estate owner will default to master avatar. --- .../Modules/World/Archiver/ArchiveReadRequest.cs | 2 ++ .../Modules/World/Estate/EstateManagementModule.cs | 9 ++++++++- .../Modules/World/Land/LandManagementModule.cs | 15 ++++++++++++--- .../Modules/World/Permissions/PermissionsModule.cs | 13 +++++++------ 4 files changed, 29 insertions(+), 10 deletions(-) (limited to 'OpenSim/Region/Environment/Modules') diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs index 2b1a4ed..e6597c3 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs @@ -137,6 +137,8 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver // Try to retain the original creator/owner/lastowner if their uuid is present on this grid // otherwise, use the master avatar uuid instead LLUUID masterAvatarId = m_scene.RegionInfo.MasterAvatarAssignedUUID; + if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + masterAvatarId = m_scene.RegionInfo.EstateSettings.EstateOwner; foreach (SceneObjectPart part in sceneObject.Children.Values) { if (!resolveUserUuid(part.CreatorID)) diff --git a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs index d22aac6..1e622be 100644 --- a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs @@ -212,6 +212,8 @@ namespace OpenSim.Region.Environment.Modules.World.Estate { // EstateAccessDelta handles Estate Managers, Sim Access, Sim Banlist, allowed Groups.. etc. + if (user == m_scene.RegionInfo.EstateSettings.EstateOwner) + return; // never process EO if (user == m_scene.RegionInfo.MasterAvatarAssignedUUID) return; // never process owner @@ -557,7 +559,10 @@ namespace OpenSim.Region.Environment.Modules.World.Estate args.regionFlags = GetRegionFlags(); args.regionName = m_scene.RegionInfo.RegionName; - args.SimOwner = m_scene.RegionInfo.MasterAvatarAssignedUUID; + if (m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + args.SimOwner = m_scene.RegionInfo.EstateSettings.EstateOwner; + else + args.SimOwner = m_scene.RegionInfo.MasterAvatarAssignedUUID; args.terrainBase0 = LLUUID.Zero; args.terrainBase1 = LLUUID.Zero; args.terrainBase2 = LLUUID.Zero; @@ -811,6 +816,8 @@ namespace OpenSim.Region.Environment.Modules.World.Estate { if (avatarID == m_scene.RegionInfo.MasterAvatarAssignedUUID) return true; + if (avatarID == m_scene.RegionInfo.EstateSettings.EstateOwner) + return true; List ems = new List(m_scene.RegionInfo.EstateSettings.EstateManagers); if (ems.Contains(avatarID)) diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs index ca03035..d5cb0eb 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandManagementModule.cs @@ -162,7 +162,10 @@ namespace OpenSim.Region.Environment.Modules.World.Land ILandObject fullSimParcel = new LandObject(LLUUID.Zero, false, m_scene); fullSimParcel.setLandBitmap(fullSimParcel.getSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); - fullSimParcel.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; + if(m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + fullSimParcel.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; + else + fullSimParcel.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; fullSimParcel.landData.ClaimDate = Util.UnixTimeSinceEpoch(); AddLandObject(fullSimParcel); } @@ -931,7 +934,10 @@ namespace OpenSim.Region.Environment.Modules.World.Land { if (m_scene.ExternalChecks.ExternalChecksCanAbandonParcel(remote_client.AgentId, landList[local_id])) { - landList[local_id].landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; + if(m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + landList[local_id].landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; + else + landList[local_id].landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; m_scene.Broadcast(SendParcelOverlay); landList[local_id].sendLandUpdateToClient(remote_client); } @@ -945,7 +951,10 @@ namespace OpenSim.Region.Environment.Modules.World.Land { if (m_scene.ExternalChecks.ExternalChecksCanReclaimParcel(remote_client.AgentId, landList[local_id])) { - landList[local_id].landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; + if(m_scene.RegionInfo.EstateSettings.EstateOwner != LLUUID.Zero) + landList[local_id].landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; + else + landList[local_id].landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; landList[local_id].landData.ClaimDate = Util.UnixTimeSinceEpoch(); m_scene.Broadcast(SendParcelOverlay); landList[local_id].sendLandUpdateToClient(remote_client); diff --git a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs index 0fbd4fb..6f72767 100644 --- a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs @@ -32,6 +32,7 @@ using System.Collections; using System.Collections.Generic; using System.Reflection; using log4net; +using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Modules.Framework; using OpenSim.Region.Environment.Modules.Framework.InterfaceCommander; @@ -63,6 +64,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions private bool m_bypassPermissions = false; private bool m_bypassPermissionsValue = true; private bool m_debugPermissions = false; + private bool m_allowGridGods = false; #endregion @@ -136,6 +138,8 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions if (!modules.Contains("DefaultPermissionsModule")) return; + m_allowGridGods = myConfig.GetBoolean("allow_grid_gods", false); + m_bypassPermissions = !myConfig.GetBoolean("serverside_object_permissions", true); if (m_bypassPermissions) @@ -231,11 +235,6 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions protected bool IsAdministrator(LLUUID user) { -// m_log.DebugFormat( -// "[PERMISSIONS]: Is adminstrator called for {0} where region master avatar is {1}", -// user, m_scene.RegionInfo.MasterAvatarAssignedUUID); - - // If there is no master avatar, return false if (m_scene.RegionInfo.MasterAvatarAssignedUUID != LLUUID.Zero) { if (m_scene.RegionInfo.MasterAvatarAssignedUUID == user) @@ -246,7 +245,9 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions if (m_scene.RegionInfo.EstateSettings.EstateOwner == user) return true; } - + UserProfileData userProfile = m_scene.CommsManager.UserService.GetUserProfile(user); + if((userProfile.GodLevel) >= 200 && m_allowGridGods) + return true; return false; } -- cgit v1.1