merge fix
commit
5f5b7e56db
|
@ -357,7 +357,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
rootpart.NextOwnerMask = next_owner_mask;
|
||||
rootpart.Material = (byte)material;
|
||||
|
||||
obj.AggregatePerms();
|
||||
obj.InvalidateDeepEffectivePerms();
|
||||
|
||||
m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
|
||||
|
||||
|
|
|
@ -1182,7 +1182,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
|||
}
|
||||
|
||||
rootPart.TrimPermissions();
|
||||
so.AggregateDeepPerms();
|
||||
so.InvalidateDeepEffectivePerms();
|
||||
|
||||
if (isAttachment)
|
||||
so.FromItemID = item.ID;
|
||||
|
|
|
@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
|
|||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||
child.ApplyNextOwnerPermissions();
|
||||
}
|
||||
group.AggregatePerms();
|
||||
group.InvalidateDeepEffectivePerms();
|
||||
}
|
||||
|
||||
part.ObjectSaleType = 0;
|
||||
|
|
|
@ -293,6 +293,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
scenePermissions.OnDeleteObject += CanDeleteObject;
|
||||
scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs;
|
||||
scenePermissions.OnEditObject += CanEditObject;
|
||||
scenePermissions.OnEditObjectPerms += CanEditObjectPerms;
|
||||
scenePermissions.OnInventoryTransfer += CanInventoryTransfer;
|
||||
scenePermissions.OnMoveObject += CanMoveObject;
|
||||
scenePermissions.OnTakeObject += CanTakeObject;
|
||||
|
@ -391,6 +392,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
scenePermissions.OnDeleteObject -= CanDeleteObject;
|
||||
scenePermissions.OnEditObjectByIDs -= CanEditObjectByIDs;
|
||||
scenePermissions.OnEditObject -= CanEditObject;
|
||||
scenePermissions.OnEditObjectPerms -= CanEditObjectPerms;
|
||||
scenePermissions.OnInventoryTransfer -= CanInventoryTransfer;
|
||||
scenePermissions.OnMoveObject -= CanMoveObject;
|
||||
scenePermissions.OnTakeObject -= CanTakeObject;
|
||||
|
@ -1387,6 +1389,35 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
return true;
|
||||
}
|
||||
|
||||
private bool CanEditObjectPerms(SceneObjectGroup sog, UUID userID)
|
||||
{
|
||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||
if (m_bypassPermissions) return m_bypassPermissionsValue;
|
||||
|
||||
if (sog == null)
|
||||
return false;
|
||||
|
||||
if(sog.OwnerID == userID || IsAdministrator(userID))
|
||||
return true;
|
||||
|
||||
UUID sogGroupID = sog.GroupID;
|
||||
if(sogGroupID == UUID.Zero || sogGroupID != sog.OwnerID)
|
||||
return false;
|
||||
|
||||
uint perms = sog.EffectiveOwnerPerms;
|
||||
if((perms & (uint)PermissionMask.Modify) == 0)
|
||||
return false;
|
||||
|
||||
ulong powers = 0;
|
||||
if(GroupMemberPowers(sogGroupID, userID, ref powers))
|
||||
{
|
||||
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool CanEditObjectInventory(UUID objectID, UUID userID)
|
||||
{
|
||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||
|
@ -1678,7 +1709,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
|
||||
{
|
||||
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
|
||||
|
@ -2289,23 +2319,31 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
if (sog == null)
|
||||
return false;
|
||||
|
||||
uint perms = GetObjectPermissions(userID, sog, true);
|
||||
if((perms & (uint)PermissionMask.Modify) == 0)
|
||||
if(sog.OwnerID == userID || IsAdministrator(userID))
|
||||
return true;
|
||||
|
||||
if(sog.IsAttachment)
|
||||
return false;
|
||||
|
||||
UUID sogGroupID = sog.GroupID;
|
||||
|
||||
if(sogGroupID == UUID.Zero || sogGroupID != sog.OwnerID)
|
||||
return false;
|
||||
|
||||
TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID);
|
||||
if(ti == null)
|
||||
return false;
|
||||
|
||||
uint itperms = GetObjectItemPermissions(userID, ti);
|
||||
|
||||
if((itperms & (uint)PermissionMask.Copy) == 0)
|
||||
return false;
|
||||
|
||||
if(sog.OwnerID != userID && (itperms & (uint)PermissionMask.Transfer) == 0)
|
||||
return false;
|
||||
|
||||
ulong powers = 0;
|
||||
if(GroupMemberPowers(sogGroupID, userID, ref powers))
|
||||
{
|
||||
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
|
||||
return true;
|
||||
|
||||
if((ti.EveryonePermissions & (uint)PermissionMask.Copy) != 0)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// object inventory to object inventory item drag and drop
|
||||
|
|
|
@ -107,7 +107,7 @@ namespace OpenSim.Region.CoreModules.World.Vegetation
|
|||
|
||||
sceneObject.SetGroup(groupID, null);
|
||||
m_scene.AddNewSceneObject(sceneObject, true);
|
||||
sceneObject.AggregatePerms();
|
||||
sceneObject.InvalidateDeepEffectivePerms();
|
||||
|
||||
return sceneObject;
|
||||
}
|
||||
|
|
|
@ -338,7 +338,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// Update item with new asset
|
||||
item.AssetID = asset.FullID;
|
||||
group.UpdateInventoryItem(item);
|
||||
group.AggregatePerms();
|
||||
group.InvalidateEffectivePerms();
|
||||
|
||||
part.SendPropertiesToClient(remoteClient);
|
||||
|
||||
|
@ -1216,7 +1216,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
group.RemoveInventoryItem(localID, itemID);
|
||||
group.AggregatePerms();
|
||||
group.InvalidateEffectivePerms();
|
||||
}
|
||||
|
||||
part.SendPropertiesToClient(remoteClient);
|
||||
|
@ -1388,11 +1388,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
if (!Permissions.CanCopyObjectInventory(itemId, part.UUID, remoteClient.AgentId))
|
||||
{
|
||||
// check also if we can delete the no copy item
|
||||
if(!Permissions.CanEditObject(part.UUID, remoteClient.AgentId))
|
||||
return;
|
||||
}
|
||||
|
||||
string message;
|
||||
InventoryItemBase item = MoveTaskInventoryItem(remoteClient, folderId, part, itemId, out message);
|
||||
|
@ -1742,7 +1738,24 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// Check if we're allowed to mess with permissions
|
||||
if (!Permissions.IsGod(remoteClient.AgentId)) // Not a god
|
||||
{
|
||||
bool noChange;
|
||||
if (remoteClient.AgentId != part.OwnerID) // Not owner
|
||||
{
|
||||
noChange = true;
|
||||
if(itemInfo.OwnerID == UUID.Zero && itemInfo.GroupID != UUID.Zero)
|
||||
{
|
||||
if(remoteClient.IsGroupMember(itemInfo.GroupID))
|
||||
{
|
||||
ulong powers = remoteClient.GetGroupPowers(itemInfo.GroupID);
|
||||
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
|
||||
noChange = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
noChange = false;
|
||||
|
||||
if(noChange)
|
||||
{
|
||||
// Friends and group members can't change any perms
|
||||
itemInfo.BasePermissions = currentItem.BasePermissions;
|
||||
|
@ -1769,7 +1782,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
itemInfo.CurrentPermissions &= currentItem.BasePermissions;
|
||||
itemInfo.NextPermissions &= currentItem.BasePermissions;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1955,7 +1967,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
part.Inventory.AddInventoryItem(taskItem, false);
|
||||
part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0);
|
||||
|
||||
part.ParentGroup.AggregatePerms();
|
||||
part.ParentGroup.InvalidateEffectivePerms();
|
||||
|
||||
// tell anyone managing scripts that a new script exists
|
||||
EventManager.TriggerNewScript(agentID, part, taskItem.ItemID);
|
||||
|
@ -2643,7 +2655,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
// We can only call this after adding the scene object, since the scene object references the scene
|
||||
// to find out if scripts should be activated at all.
|
||||
group.AggregatePerms();
|
||||
group.InvalidateEffectivePerms();
|
||||
group.CreateScriptInstances(param, true, DefaultScriptEngine, 3);
|
||||
|
||||
group.ScheduleGroupForFullUpdate();
|
||||
|
@ -2740,7 +2752,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// and with this comented code, if user does not set next permissions on the object
|
||||
// and on ALL contents of ALL prims, he may loose rights, making the object useless
|
||||
sog.ApplyNextOwnerPermissions();
|
||||
sog.AggregatePerms();
|
||||
sog.InvalidateEffectivePerms();
|
||||
|
||||
sog.ScheduleGroupForFullUpdate();
|
||||
|
||||
|
|
|
@ -53,6 +53,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public delegate bool DuplicateObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
||||
public delegate bool EditObjectByIDsHandler(UUID objectID, UUID editorID);
|
||||
public delegate bool EditObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
||||
public delegate bool EditObjectPermsHandler(SceneObjectGroup sog, UUID editorID);
|
||||
public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
|
||||
public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
|
||||
public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
|
||||
|
@ -133,6 +134,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public event DuplicateObjectHandler OnDuplicateObject;
|
||||
public event EditObjectByIDsHandler OnEditObjectByIDs;
|
||||
public event EditObjectHandler OnEditObject;
|
||||
public event EditObjectPermsHandler OnEditObjectPerms;
|
||||
public event EditObjectInventoryHandler OnEditObjectInventory;
|
||||
public event MoveObjectHandler OnMoveObject;
|
||||
public event ObjectEntryHandler OnObjectEntry;
|
||||
|
@ -511,6 +513,24 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return true;
|
||||
}
|
||||
|
||||
public bool CanEditObjectPermissions(SceneObjectGroup sog, UUID editorID)
|
||||
{
|
||||
EditObjectPermsHandler handler = OnEditObjectPerms;
|
||||
if (handler != null)
|
||||
{
|
||||
if(sog == null)
|
||||
return false;
|
||||
Delegate[] list = handler.GetInvocationList();
|
||||
foreach (EditObjectPermsHandler h in list)
|
||||
{
|
||||
if (h(sog, editorID) == false)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public bool CanEditObjectInventory(UUID objectID, UUID editorID)
|
||||
{
|
||||
EditObjectInventoryHandler handler = OnEditObjectInventory;
|
||||
|
|
|
@ -978,6 +978,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_maxDrawDistance = startupConfig.GetFloat("MaxDrawDistance", m_maxDrawDistance);
|
||||
m_maxRegionViewDistance = startupConfig.GetFloat("MaxRegionsViewDistance", m_maxRegionViewDistance);
|
||||
|
||||
// old versions compatibility
|
||||
LegacySitOffsets = startupConfig.GetBoolean("LegacySitOffsets", LegacySitOffsets);
|
||||
|
||||
if (m_defaultDrawDistance > m_maxDrawDistance)
|
||||
|
@ -2390,8 +2391,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
EventManager.TriggerOnSceneObjectLoaded(group);
|
||||
SceneObjectPart rootPart = group.GetPart(group.UUID);
|
||||
rootPart.Flags &= ~PrimFlags.Scripted;
|
||||
group.AggregateDeepPerms();
|
||||
|
||||
rootPart.TrimPermissions();
|
||||
group.InvalidateDeepEffectivePerms();
|
||||
|
||||
// Don't do this here - it will get done later on when sculpt data is loaded.
|
||||
// group.CheckSculptAndLoad();
|
||||
|
@ -2662,7 +2664,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (UserManagementModule != null)
|
||||
sceneObject.RootPart.CreatorIdentification = UserManagementModule.GetUserUUI(ownerID);
|
||||
|
||||
sceneObject.AggregateDeepPerms();
|
||||
sceneObject.InvalidateDeepEffectivePerms();;
|
||||
sceneObject.ScheduleGroupForFullUpdate();
|
||||
|
||||
return sceneObject;
|
||||
|
|
|
@ -343,7 +343,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
sceneObject.ForceInventoryPersistence();
|
||||
sceneObject.HasGroupChanged = true;
|
||||
}
|
||||
sceneObject.AggregateDeepPerms();
|
||||
sceneObject.InvalidateDeepEffectivePerms();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -2094,7 +2094,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||
child.ApplyNextOwnerPermissions();
|
||||
}
|
||||
copy.AggregatePerms();
|
||||
copy.InvalidateEffectivePerms();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -183,7 +183,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
addFromAllowedDrop = (part.ParentGroup.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.AllowInventoryDrop) != 0;
|
||||
|
||||
part.Inventory.AddInventoryItem(taskItem, addFromAllowedDrop);
|
||||
part.ParentGroup.AggregatePerms();
|
||||
part.ParentGroup.InvalidateEffectivePerms();
|
||||
return true;
|
||||
|
||||
}
|
||||
|
@ -254,13 +254,26 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// new test code, to place in better place later
|
||||
private object m_PermissionsLock = new object();
|
||||
private bool m_EffectivePermsInvalid = true;
|
||||
private bool m_DeepEffectivePermsInvalid = true;
|
||||
|
||||
// should called when parts chanced by their contents did not, so we know their cacche is valid
|
||||
// in case of doubt call InvalidateDeepEffectivePerms(), it only costs a bit more cpu time
|
||||
public void InvalidateEffectivePerms()
|
||||
{
|
||||
lock(m_PermissionsLock)
|
||||
m_EffectivePermsInvalid = true;
|
||||
}
|
||||
|
||||
// should called when parts chanced and their contents where accounted for
|
||||
public void InvalidateDeepEffectivePerms()
|
||||
{
|
||||
lock(m_PermissionsLock)
|
||||
{
|
||||
m_DeepEffectivePermsInvalid = true;
|
||||
m_EffectivePermsInvalid = true;
|
||||
}
|
||||
}
|
||||
|
||||
private uint m_EffectiveEveryOnePerms;
|
||||
public uint EffectiveEveryOnePerms
|
||||
{
|
||||
|
@ -317,79 +330,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
// aggregates perms scanning parts and their contents
|
||||
// AggregatePerms does same using cached parts content perms
|
||||
public void AggregateDeepPerms()
|
||||
{
|
||||
lock(m_PermissionsLock)
|
||||
{
|
||||
// aux
|
||||
const uint allmask = (uint)PermissionMask.AllEffective;
|
||||
const uint movemodmask = (uint)(PermissionMask.Move | PermissionMask.Modify);
|
||||
const uint copytransfermask = (uint)(PermissionMask.Copy | PermissionMask.Transfer);
|
||||
|
||||
uint basePerms = (RootPart.BaseMask & allmask) | (uint)PermissionMask.Move;
|
||||
bool noBaseTransfer = (basePerms & (uint)PermissionMask.Transfer) == 0;
|
||||
|
||||
uint rootOwnerPerms = RootPart.OwnerMask;
|
||||
uint owner = rootOwnerPerms;
|
||||
uint rootGroupPerms = RootPart.GroupMask;
|
||||
uint group = rootGroupPerms;
|
||||
uint rootEveryonePerms = RootPart.EveryoneMask;
|
||||
uint everyone = rootEveryonePerms;
|
||||
|
||||
// date is time of writing april 30th 2017
|
||||
bool newObject = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994);
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
part.AggregateInnerPerms();
|
||||
owner &= part.AggregatedInnerOwnerPerms;
|
||||
group &= part.AggregatedInnerGroupPerms;
|
||||
if(newObject)
|
||||
everyone &= part.AggregatedInnerEveryonePerms;
|
||||
}
|
||||
// recover modify and move
|
||||
rootOwnerPerms &= movemodmask;
|
||||
owner |= rootOwnerPerms;
|
||||
if((owner & copytransfermask) == 0)
|
||||
owner |= (uint)PermissionMask.Transfer;
|
||||
|
||||
owner &= basePerms;
|
||||
m_EffectiveOwnerPerms = owner;
|
||||
uint ownertransfermask = owner & (uint)PermissionMask.Transfer;
|
||||
|
||||
// recover modify and move
|
||||
rootGroupPerms &= movemodmask;
|
||||
group |= rootGroupPerms;
|
||||
if(noBaseTransfer)
|
||||
group &=~(uint)PermissionMask.Copy;
|
||||
else
|
||||
group |= ownertransfermask;
|
||||
|
||||
uint groupOrEveryone = group;
|
||||
m_EffectiveGroupPerms = group & owner;
|
||||
|
||||
// recover move
|
||||
rootEveryonePerms &= (uint)PermissionMask.Move;
|
||||
everyone |= rootEveryonePerms;
|
||||
everyone &= ~(uint)PermissionMask.Modify;
|
||||
if(noBaseTransfer)
|
||||
everyone &=~(uint)PermissionMask.Copy;
|
||||
else
|
||||
everyone |= ownertransfermask;
|
||||
|
||||
groupOrEveryone |= everyone;
|
||||
|
||||
m_EffectiveEveryOnePerms = everyone & owner;
|
||||
m_EffectiveGroupOrEveryOnePerms = groupOrEveryone & owner;
|
||||
m_EffectivePermsInvalid = false;
|
||||
}
|
||||
}
|
||||
|
||||
// aggregates perms scanning parts, assuming their contents was already aggregated and cached
|
||||
// ie is AggregateDeepPerms without the part.AggregateInnerPerms() call on parts loop
|
||||
public void AggregatePerms()
|
||||
{
|
||||
lock(m_PermissionsLock)
|
||||
|
@ -411,14 +351,20 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
bool needUpdate = false;
|
||||
// date is time of writing april 30th 2017
|
||||
bool newObject = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994);
|
||||
bool newobj = (RootPart.CreationDate == 0 || RootPart.CreationDate > 1493574994);
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
{
|
||||
SceneObjectPart part = parts[i];
|
||||
|
||||
if(m_DeepEffectivePermsInvalid)
|
||||
part.AggregateInnerPerms();
|
||||
|
||||
owner &= part.AggregatedInnerOwnerPerms;
|
||||
group &= part.AggregatedInnerGroupPerms;
|
||||
if(newObject)
|
||||
if(newobj)
|
||||
group &= part.AggregatedInnerGroupPerms;
|
||||
if(newobj)
|
||||
everyone &= part.AggregatedInnerEveryonePerms;
|
||||
}
|
||||
// recover modify and move
|
||||
|
@ -477,6 +423,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_EffectiveGroupOrEveryOnePerms = tmpPerms;
|
||||
}
|
||||
|
||||
m_DeepEffectivePermsInvalid = false;
|
||||
m_EffectivePermsInvalid = false;
|
||||
|
||||
if(needUpdate)
|
||||
|
|
|
@ -2677,7 +2677,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (dupe.m_rootPart.PhysActor != null)
|
||||
dupe.m_rootPart.PhysActor.Building = false; // tell physics to finish building
|
||||
|
||||
dupe.AggregateDeepPerms();
|
||||
dupe.InvalidateDeepEffectivePerms();
|
||||
|
||||
dupe.HasGroupChanged = true;
|
||||
dupe.AttachToBackup();
|
||||
|
@ -2943,7 +2943,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (!m_scene.Permissions.BypassPermissions())
|
||||
{
|
||||
ApplyNextOwnerPermissions();
|
||||
AggregatePerms();
|
||||
InvalidateEffectivePerms();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3605,7 +3605,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
InvalidBoundsRadius();
|
||||
InvalidatePartsLinkMaps();
|
||||
objectGroup.AggregatePerms();
|
||||
objectGroup.InvalidateEffectivePerms();
|
||||
|
||||
if (sendEvents)
|
||||
linkPart.TriggerScriptChangedEvent(Changed.LINK);
|
||||
|
@ -4163,7 +4163,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// m_log.DebugFormat(
|
||||
// "[SCENE OBJECT GROUP]: RootPart.OwnerMask now {0} for {1} in {2}",
|
||||
// (OpenMetaverse.PermissionMask)RootPart.OwnerMask, Name, Scene.Name);
|
||||
AggregatePerms();
|
||||
InvalidateEffectivePerms();
|
||||
RootPart.ScheduleFullUpdate();
|
||||
}
|
||||
|
||||
|
@ -4188,7 +4188,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
foreach (SceneObjectPart part in Parts)
|
||||
part.Inventory.ApplyGodPermissions(RootPart.BaseMask);
|
||||
AggregatePerms();
|
||||
InvalidateEffectivePerms();
|
||||
}
|
||||
|
||||
HasGroupChanged = true;
|
||||
|
@ -5447,7 +5447,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
part.ResetOwnerChangeFlag();
|
||||
});
|
||||
AggregatePerms();
|
||||
InvalidateEffectivePerms();
|
||||
}
|
||||
|
||||
// clear some references to easy cg
|
||||
|
|
|
@ -4460,8 +4460,11 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
|
|||
if (god)
|
||||
baseMask = 0x7ffffff0;
|
||||
|
||||
// Are we the owner?
|
||||
if ((AgentID == OwnerID) || god)
|
||||
bool canChange = (AgentID == OwnerID) || god;
|
||||
if(!canChange)
|
||||
canChange = ParentGroup.Scene.Permissions.CanEditObjectPermissions(ParentGroup, AgentID);
|
||||
|
||||
if (canChange)
|
||||
{
|
||||
switch (field)
|
||||
{
|
||||
|
|
|
@ -235,12 +235,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values);
|
||||
foreach (TaskInventoryItem item in items)
|
||||
{
|
||||
if (groupID != item.GroupID)
|
||||
{
|
||||
item.GroupID = groupID;
|
||||
}
|
||||
}
|
||||
m_items.LockItemsForWrite(false);
|
||||
}
|
||||
|
||||
|
@ -982,7 +979,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
// old code end
|
||||
rootPart.TrimPermissions();
|
||||
group.AggregateDeepPerms();
|
||||
group.InvalidateDeepEffectivePerms();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -1020,6 +1017,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (item.GroupPermissions != (uint)PermissionMask.None)
|
||||
item.GroupID = m_part.GroupID;
|
||||
|
||||
if(item.OwnerID == UUID.Zero) // viewer to internal enconding of group owned
|
||||
item.OwnerID = item.GroupID;
|
||||
|
||||
if (item.AssetID == UUID.Zero)
|
||||
item.AssetID = m_items[item.ItemID].AssetID;
|
||||
|
||||
|
@ -1031,8 +1031,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
if (considerChanged)
|
||||
{
|
||||
m_part.AggregateInnerPerms();
|
||||
m_part.ParentGroup.AggregatePerms();
|
||||
m_part.ParentGroup.InvalidateDeepEffectivePerms();
|
||||
HasInventoryChanged = true;
|
||||
m_part.ParentGroup.HasGroupChanged = true;
|
||||
}
|
||||
|
@ -1075,8 +1074,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_items.Remove(itemID);
|
||||
m_items.LockItemsForWrite(false);
|
||||
|
||||
m_part.AggregateInnerPerms();
|
||||
m_part.ParentGroup.AggregatePerms();
|
||||
m_part.ParentGroup.InvalidateDeepEffectivePerms();
|
||||
|
||||
m_inventorySerial++;
|
||||
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
||||
|
@ -1199,15 +1197,20 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
invString.AddNameValueLine("next_owner_mask", Utils.UIntToHexString(item.NextPermissions));
|
||||
|
||||
invString.AddNameValueLine("creator_id", item.CreatorID.ToString());
|
||||
invString.AddNameValueLine("owner_id", ownerID.ToString());
|
||||
|
||||
invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString());
|
||||
|
||||
invString.AddNameValueLine("group_id",groupID.ToString());
|
||||
if(groupID != UUID.Zero && ownerID == groupID)
|
||||
{
|
||||
invString.AddNameValueLine("owner_id", UUID.Zero.ToString());
|
||||
invString.AddNameValueLine("group_owned","1");
|
||||
}
|
||||
else
|
||||
{
|
||||
invString.AddNameValueLine("owner_id", ownerID.ToString());
|
||||
invString.AddNameValueLine("group_owned","0");
|
||||
}
|
||||
|
||||
invString.AddSectionEnd();
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
|||
// Script state may, or may not, exist. Not having any, is NOT
|
||||
// ever a problem.
|
||||
sceneObject.LoadScriptState(reader);
|
||||
sceneObject.AggregateDeepPerms();
|
||||
sceneObject.InvalidateDeepEffectivePerms();
|
||||
return sceneObject;
|
||||
}
|
||||
|
||||
|
@ -278,7 +278,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
|||
// Script state may, or may not, exist. Not having any, is NOT
|
||||
// ever a problem.
|
||||
sceneObject.LoadScriptState(doc);
|
||||
sceneObject.AggregatePerms();
|
||||
// sceneObject.AggregatePerms();
|
||||
return sceneObject;
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
|
@ -70,7 +70,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
|||
//obj.RegenerateFullIDs();
|
||||
|
||||
scene.AddNewSceneObject(obj, true);
|
||||
obj.AggregateDeepPerms();
|
||||
obj.InvalidateDeepEffectivePerms();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -174,7 +174,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments
|
|||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||
child.ApplyNextOwnerPermissions();
|
||||
}
|
||||
hostgroup.AggregatePerms();
|
||||
hostgroup.InvalidateEffectivePerms();
|
||||
}
|
||||
|
||||
hostgroup.RootPart.ObjectSaleType = 0;
|
||||
|
|
|
@ -665,7 +665,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
|
|||
taskItem.AssetID = asset.FullID;
|
||||
|
||||
host.Inventory.AddInventoryItem(taskItem, false);
|
||||
host.ParentGroup.AggregatePerms();
|
||||
host.ParentGroup.InvalidateEffectivePerms();
|
||||
m_comms.DispatchReply(scriptID,1,assetID.ToString(),reqID.ToString());
|
||||
}
|
||||
|
||||
|
|
|
@ -525,7 +525,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
|||
|
||||
sceneObject.SetGroup(groupID, null);
|
||||
m_scene.AddNewSceneObject(sceneObject, true);
|
||||
sceneObject.AggregatePerms();
|
||||
sceneObject.InvalidateEffectivePerms();
|
||||
return sceneObject;
|
||||
}
|
||||
|
||||
|
|
|
@ -2048,7 +2048,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.Inventory.AddInventoryItemExclusive(taskItem, false);
|
||||
else
|
||||
m_host.Inventory.AddInventoryItem(taskItem, false);
|
||||
m_host.ParentGroup.AggregatePerms();
|
||||
m_host.ParentGroup.InvalidateDeepEffectivePerms();
|
||||
|
||||
return taskItem;
|
||||
}
|
||||
|
|
|
@ -626,6 +626,7 @@ namespace OpenSim.Tests.Common
|
|||
//part.ObjectFlags |= (uint)PrimFlags.Phantom;
|
||||
|
||||
scene.AddNewSceneObject(so, true);
|
||||
so.InvalidateDeepEffectivePerms();
|
||||
|
||||
return so;
|
||||
}
|
||||
|
@ -652,6 +653,7 @@ namespace OpenSim.Tests.Common
|
|||
SceneObjectGroup so = CreateSceneObject(parts, ownerId, partNamePrefix, uuidTail);
|
||||
|
||||
scene.AddNewSceneObject(so, false);
|
||||
so.InvalidateDeepEffectivePerms();
|
||||
|
||||
return so;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue