remove redundant IsGod, rename some GOD as Administrator (both only on permissions module)

httptests
UbitUmarov 2017-01-20 13:45:44 +00:00
parent 69bcbd856b
commit df40cdc83e
2 changed files with 67 additions and 120 deletions

View File

@ -91,12 +91,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
private bool m_bypassPermissionsValue = true; private bool m_bypassPermissionsValue = true;
private bool m_propagatePermissions = false; private bool m_propagatePermissions = false;
private bool m_debugPermissions = false; private bool m_debugPermissions = false;
private bool m_allowGridGods = false; private bool m_allowGridAdmins = false;
private bool m_RegionOwnerIsGod = false; private bool m_RegionOwnerIsAdmin = false;
private bool m_RegionManagerIsGod = false; private bool m_RegionManagerIsAdmin = false;
private bool m_forceGridGodsOnly; private bool m_forceGridAdminsOnly;
private bool m_forceGodModeAlwaysOn; private bool m_forceAdminModeAlwaysOn;
private bool m_allowGodActionsWithoutGodMode; private bool m_allowAdminActionsWithoutGodMode;
private bool m_SimpleBuildPermissions = false; private bool m_SimpleBuildPermissions = false;
@ -167,23 +167,23 @@ namespace OpenSim.Region.CoreModules.World.Permissions
string[] sections = new string[] { "Startup", "Permissions" }; string[] sections = new string[] { "Startup", "Permissions" };
m_allowGridGods = Util.GetConfigVarFromSections<bool>(config, "allow_grid_gods", sections, false); m_allowGridAdmins = Util.GetConfigVarFromSections<bool>(config, "allow_grid_gods", sections, false);
m_bypassPermissions = !Util.GetConfigVarFromSections<bool>(config, "serverside_object_permissions", sections, true); m_bypassPermissions = !Util.GetConfigVarFromSections<bool>(config, "serverside_object_permissions", sections, true);
m_propagatePermissions = Util.GetConfigVarFromSections<bool>(config, "propagate_permissions", sections, true); m_propagatePermissions = Util.GetConfigVarFromSections<bool>(config, "propagate_permissions", sections, true);
m_forceGridGodsOnly = Util.GetConfigVarFromSections<bool>(config, "force_grid_gods_only", sections, false); m_forceGridAdminsOnly = Util.GetConfigVarFromSections<bool>(config, "force_grid_gods_only", sections, false);
if(!m_forceGridGodsOnly) if(!m_forceGridAdminsOnly)
{ {
m_RegionOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_owner_is_god",sections, true); m_RegionOwnerIsAdmin = Util.GetConfigVarFromSections<bool>(config, "region_owner_is_god",sections, true);
m_RegionManagerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god",sections, false); m_RegionManagerIsAdmin = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god",sections, false);
} }
else else
m_allowGridGods = true; m_allowGridAdmins = true;
m_forceGodModeAlwaysOn = Util.GetConfigVarFromSections<bool>(config, "automatic_gods", sections, false); m_forceAdminModeAlwaysOn = Util.GetConfigVarFromSections<bool>(config, "automatic_gods", sections, false);
m_allowGodActionsWithoutGodMode = Util.GetConfigVarFromSections<bool>(config, "implicit_gods", sections, false); m_allowAdminActionsWithoutGodMode = Util.GetConfigVarFromSections<bool>(config, "implicit_gods", sections, false);
if(m_allowGodActionsWithoutGodMode) if(m_allowAdminActionsWithoutGodMode)
m_forceGodModeAlwaysOn = false; m_forceAdminModeAlwaysOn = false;
m_SimpleBuildPermissions = Util.GetConfigVarFromSections<bool>(config, "simple_build_permissions",sections, false); m_SimpleBuildPermissions = Util.GetConfigVarFromSections<bool>(config, "simple_build_permissions",sections, false);
@ -271,8 +271,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
m_scene.Permissions.OnReclaimParcel += CanReclaimParcel; m_scene.Permissions.OnReclaimParcel += CanReclaimParcel;
m_scene.Permissions.OnDeedParcel += CanDeedParcel; m_scene.Permissions.OnDeedParcel += CanDeedParcel;
m_scene.Permissions.OnDeedObject += CanDeedObject; m_scene.Permissions.OnDeedObject += CanDeedObject;
m_scene.Permissions.OnIsGod += IsGod; m_scene.Permissions.OnIsGridGod += IsGridAdministrator;
m_scene.Permissions.OnIsGridGod += IsGridGod;
m_scene.Permissions.OnIsAdministrator += IsAdministrator; m_scene.Permissions.OnIsAdministrator += IsAdministrator;
m_scene.Permissions.OnIsEstateManager += IsEstateManager; m_scene.Permissions.OnIsEstateManager += IsEstateManager;
m_scene.Permissions.OnDuplicateObject += CanDuplicateObject; m_scene.Permissions.OnDuplicateObject += CanDuplicateObject;
@ -552,13 +551,13 @@ namespace OpenSim.Region.CoreModules.World.Permissions
if (user == UUID.Zero) if (user == UUID.Zero)
return false; return false;
if (m_scene.RegionInfo.EstateSettings.EstateOwner == user && m_RegionOwnerIsGod) if (m_RegionOwnerIsAdmin && m_scene.RegionInfo.EstateSettings.EstateOwner == user)
return true; return true;
if (IsEstateManager(user) && m_RegionManagerIsGod) if (m_RegionManagerIsAdmin && IsEstateManager(user))
return true; return true;
if (IsGridGod(user, null)) if (IsGridAdministrator(user))
return true; return true;
return false; return false;
@ -570,14 +569,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions
/// <param name="user">The user</param> /// <param name="user">The user</param>
/// <param name="scene">Unused, can be null</param> /// <param name="scene">Unused, can be null</param>
/// <returns></returns> /// <returns></returns>
protected bool IsGridGod(UUID user, Scene scene) protected bool IsGridAdministrator(UUID user)
{ {
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
if (m_bypassPermissions) return m_bypassPermissionsValue; if (m_bypassPermissions) return m_bypassPermissionsValue;
if (user == UUID.Zero) return false; if (user == UUID.Zero)
return false;
if (m_allowGridGods) if (m_allowGridAdmins)
{ {
ScenePresence sp = m_scene.GetScenePresence(user); ScenePresence sp = m_scene.GetScenePresence(user);
if (sp != null) if (sp != null)
@ -631,7 +631,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
} }
#region Object Permissions #region Object Permissions
#pragma warning disable 0612
const uint DEFAULT_FLAGS = (uint)( const uint DEFAULT_FLAGS = (uint)(
PrimFlags.ObjectCopy | // Tells client you can copy the object PrimFlags.ObjectCopy | // Tells client you can copy the object
PrimFlags.ObjectModify | // tells client you can modify the object PrimFlags.ObjectModify | // tells client you can modify the object
@ -651,7 +651,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
PrimFlags.ObjectAnyOwner | // Tells client that someone owns the object PrimFlags.ObjectAnyOwner | // Tells client that someone owns the object
PrimFlags.ObjectOwnerModify // Tells client that you're the owner of the object PrimFlags.ObjectOwnerModify // Tells client that you're the owner of the object
); );
#pragma warning restore 0612
const uint EXTRAOWNERMASK = (uint)( const uint EXTRAOWNERMASK = (uint)(
PrimFlags.ObjectYouOwner | PrimFlags.ObjectYouOwner |
@ -693,7 +692,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
uint returnMask; uint returnMask;
SceneObjectGroup grp = task.ParentGroup; SceneObjectGroup grp = task.ParentGroup;
if(grp == null) if(grp == null)
return 0; return 0;
@ -1059,85 +1057,54 @@ namespace OpenSim.Region.CoreModules.World.Permissions
public bool GenericEstatePermission(UUID user) public bool GenericEstatePermission(UUID user)
{ {
// Default: deny
bool permission = false;
// Estate admins should be able to use estate tools // Estate admins should be able to use estate tools
if (IsEstateManager(user)) if (IsEstateManager(user))
permission = true; return true;
// Administrators always have permission // Administrators always have permission
if (IsAdministrator(user)) if (IsAdministrator(user))
permission = true; return true;
return permission; return false;
} }
protected bool GenericParcelPermission(UUID user, ILandObject parcel, ulong groupPowers) protected bool GenericParcelPermission(UUID user, ILandObject parcel, ulong groupPowers)
{ {
bool permission = false;
if (parcel.LandData.OwnerID == user) if (parcel.LandData.OwnerID == user)
{ return true;
permission = true;
}
if ((parcel.LandData.GroupID != UUID.Zero) && IsGroupMember(parcel.LandData.GroupID, user, groupPowers)) if ((parcel.LandData.GroupID != UUID.Zero) && IsGroupMember(parcel.LandData.GroupID, user, groupPowers))
{ return true;
permission = true;
}
if (IsEstateManager(user)) if (IsEstateManager(user))
{ return true;
permission = true;
}
if (IsAdministrator(user)) if (IsAdministrator(user))
{ return true;
permission = true;
}
if (m_SimpleBuildPermissions && if (m_SimpleBuildPermissions &&
(parcel.LandData.Flags & (uint)ParcelFlags.UseAccessList) == 0 && parcel.IsInLandAccessList(user)) (parcel.LandData.Flags & (uint)ParcelFlags.UseAccessList) == 0 && parcel.IsInLandAccessList(user))
permission = true; return true;
return permission; return false;
} }
protected bool GenericParcelOwnerPermission(UUID user, ILandObject parcel, ulong groupPowers, bool allowEstateManager) protected bool GenericParcelOwnerPermission(UUID user, ILandObject parcel, ulong groupPowers, bool allowEstateManager)
{ {
if (parcel.LandData.OwnerID == user) if (parcel.LandData.OwnerID == user)
{
// Returning immediately so that group deeded objects on group deeded land don't trigger a NRE on
// the subsequent redundant checks when using lParcelMediaCommandList()
// See http://opensimulator.org/mantis/view.php?id=3999 for more details
return true; return true;
}
if (parcel.LandData.IsGroupOwned && IsGroupMember(parcel.LandData.GroupID, user, groupPowers)) if (parcel.LandData.IsGroupOwned && IsGroupMember(parcel.LandData.GroupID, user, groupPowers))
{
return true; return true;
}
if (allowEstateManager && IsEstateManager(user)) if (allowEstateManager && IsEstateManager(user))
{
return true; return true;
}
if (IsAdministrator(user)) if (IsAdministrator(user))
{
return true; return true;
}
return false; return false;
} }
protected bool GenericParcelPermission(UUID user, Vector3 pos, ulong groupPowers)
{
ILandObject parcel = m_scene.LandChannel.GetLandObject(pos.X, pos.Y);
if (parcel == null) return false;
return GenericParcelPermission(user, parcel, groupPowers);
}
#endregion #endregion
#region Permission Checks #region Permission Checks
@ -1165,6 +1132,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions
if (parcel.LandData.OwnerID != user) // Only the owner can deed! if (parcel.LandData.OwnerID != user) // Only the owner can deed!
return false; return false;
if(parcel.LandData.GroupID == UUID.Zero)
return false;
ScenePresence sp = scene.GetScenePresence(user); ScenePresence sp = scene.GetScenePresence(user);
IClientAPI client = sp.ControllingClient; IClientAPI client = sp.ControllingClient;
@ -1213,14 +1183,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
return true; return true;
} }
private bool IsGod(UUID user, Scene scene)
{
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
if (m_bypassPermissions) return m_bypassPermissionsValue;
return IsAdministrator(user);
}
private bool CanDuplicateObject(SceneObjectGroup sog, ScenePresence sp, Scene scene) private bool CanDuplicateObject(SceneObjectGroup sog, ScenePresence sp, Scene scene)
{ {
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
@ -1480,52 +1442,38 @@ namespace OpenSim.Region.CoreModules.World.Permissions
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
if (m_bypassPermissions) return m_bypassPermissionsValue; if (m_bypassPermissions) return m_bypassPermissionsValue;
// allow outide region?? // allow outide region this mb needed for crossings ???
if (newPoint.X < -1f || newPoint.Y < -1f) if (newPoint.X < -1f || newPoint.Y < -1f)
return true; return true;
if (newPoint.X > scene.RegionInfo.RegionSizeX + 1.0f || newPoint.Y > scene.RegionInfo.RegionSizeY + 1.0f) if (newPoint.X > scene.RegionInfo.RegionSizeX + 1.0f || newPoint.Y > scene.RegionInfo.RegionSizeY + 1.0f)
{
return true; return true;
}
SceneObjectGroup task = (SceneObjectGroup)m_scene.Entities[objectID]; ILandObject parcel = m_scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y);
if (parcel == null)
return false;
ILandObject land = m_scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y); if ((parcel.LandData.Flags & ((int)ParcelFlags.AllowAPrimitiveEntry)) != 0)
return true;
EntityBase ent = null;
if (!m_scene.Entities.TryGetValue(objectID, out ent))
return false;
if(ent == null || !(ent is SceneObjectGroup))
return false;
SceneObjectGroup task = (SceneObjectGroup)ent;
if (!enteringRegion) if (!enteringRegion)
{ {
ILandObject fromland = m_scene.LandChannel.GetLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y); ILandObject fromparcel = m_scene.LandChannel.GetLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y);
if (fromland == land) // Not entering if (fromparcel == parcel) // it already entered parcel ????
return true; return true;
} }
if (land == null) if (GenericParcelPermission(task.OwnerID, parcel, 0))
{
return false;
}
if ((land.LandData.Flags & ((int)ParcelFlags.AllowAPrimitiveEntry)) != 0)
{
return true; return true;
}
if (!m_scene.Entities.ContainsKey(objectID))
{
return false;
}
// If it's not an object, we cant edit it.
if (!(m_scene.Entities[objectID] is SceneObjectGroup))
{
return false;
}
if (GenericParcelPermission(task.OwnerID, newPoint, 0))
{
return true;
}
//Otherwise, false! //Otherwise, false!
return false; return false;
@ -1632,7 +1580,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
return true; return true;
} }
private bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene) private bool CanRezObject(int objectCount, UUID userID, Vector3 objectPosition, Scene scene)
{ {
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
if (m_bypassPermissions) if (m_bypassPermissions)
@ -1640,26 +1588,26 @@ namespace OpenSim.Region.CoreModules.World.Permissions
// m_log.DebugFormat("[PERMISSIONS MODULE]: Checking rez object at {0} in {1}", objectPosition, m_scene.Name); // m_log.DebugFormat("[PERMISSIONS MODULE]: Checking rez object at {0} in {1}", objectPosition, m_scene.Name);
ILandObject parcel = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y); ILandObject parcel = scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y);
if (parcel == null || parcel.LandData == null) if (parcel == null || parcel.LandData == null)
return false; return false;
LandData landdata = parcel.LandData; LandData landdata = parcel.LandData;
if ((owner == landdata.OwnerID)) if ((userID == landdata.OwnerID))
return true; return true;
if ((landdata.Flags & (uint)ParcelFlags.CreateObjects) != 0) if ((landdata.Flags & (uint)ParcelFlags.CreateObjects) != 0)
return true; return true;
if(IsAdministrator(owner)) if(IsAdministrator(userID))
return true; return true;
if(landdata.GroupID != UUID.Zero) if(landdata.GroupID != UUID.Zero)
{ {
if ((landdata.Flags & (uint)ParcelFlags.CreateGroupObjects) != 0) if ((landdata.Flags & (uint)ParcelFlags.CreateGroupObjects) != 0)
return IsGroupMember(landdata.GroupID, owner, 0); return IsGroupMember(landdata.GroupID, userID, 0);
if (landdata.IsGroupOwned && IsGroupMember(landdata.GroupID, owner, (ulong)GroupPowers.AllowRez)) if (landdata.IsGroupOwned && IsGroupMember(landdata.GroupID, userID, (ulong)GroupPowers.AllowRez))
return true; return true;
} }

View File

@ -68,8 +68,8 @@ namespace OpenSim.Region.Framework.Scenes
public delegate bool TerraformLandHandler(UUID user, Vector3 position, Scene requestFromScene); public delegate bool TerraformLandHandler(UUID user, Vector3 position, Scene requestFromScene);
public delegate bool RunConsoleCommandHandler(UUID user, Scene requestFromScene); public delegate bool RunConsoleCommandHandler(UUID user, Scene requestFromScene);
public delegate bool IssueEstateCommandHandler(UUID user, Scene requestFromScene, bool ownerCommand); public delegate bool IssueEstateCommandHandler(UUID user, Scene requestFromScene, bool ownerCommand);
public delegate bool IsGodHandler(UUID user, Scene requestFromScene); public delegate bool IsGodHandler(UUID user);
public delegate bool IsGridGodHandler(UUID user, Scene requestFromScene); public delegate bool IsGridGodHandler(UUID user);
public delegate bool IsAdministratorHandler(UUID user); public delegate bool IsAdministratorHandler(UUID user);
public delegate bool IsEstateManagerHandler(UUID user); public delegate bool IsEstateManagerHandler(UUID user);
public delegate bool EditParcelHandler(UUID user, ILandObject parcel, Scene scene); public delegate bool EditParcelHandler(UUID user, ILandObject parcel, Scene scene);
@ -139,7 +139,6 @@ namespace OpenSim.Region.Framework.Scenes
public event TerraformLandHandler OnTerraformLand; public event TerraformLandHandler OnTerraformLand;
public event RunConsoleCommandHandler OnRunConsoleCommand; public event RunConsoleCommandHandler OnRunConsoleCommand;
public event IssueEstateCommandHandler OnIssueEstateCommand; public event IssueEstateCommandHandler OnIssueEstateCommand;
public event IsGodHandler OnIsGod;
public event IsGridGodHandler OnIsGridGod; public event IsGridGodHandler OnIsGridGod;
public event IsAdministratorHandler OnIsAdministrator; public event IsAdministratorHandler OnIsAdministrator;
public event IsEstateManagerHandler OnIsEstateManager; public event IsEstateManagerHandler OnIsEstateManager;
@ -798,13 +797,13 @@ namespace OpenSim.Region.Framework.Scenes
#region CAN BE GODLIKE #region CAN BE GODLIKE
public bool IsGod(UUID user) public bool IsGod(UUID user)
{ {
IsGodHandler handler = OnIsGod; IsAdministratorHandler handler = OnIsAdministrator;
if (handler != null) if (handler != null)
{ {
Delegate[] list = handler.GetInvocationList(); Delegate[] list = handler.GetInvocationList();
foreach (IsGodHandler h in list) foreach (IsAdministratorHandler h in list)
{ {
if (h(user, m_scene) == false) if (h(user) == false)
return false; return false;
} }
} }
@ -819,7 +818,7 @@ namespace OpenSim.Region.Framework.Scenes
Delegate[] list = handler.GetInvocationList(); Delegate[] list = handler.GetInvocationList();
foreach (IsGridGodHandler h in list) foreach (IsGridGodHandler h in list)
{ {
if (h(user, m_scene) == false) if (h(user) == false)
return false; return false;
} }
} }