When an asset is uploaded (e.g. a mesh) set individual copy/move/transfer permissions, not PermissionMask.All
Setting PermissionMask.All will cause next permissions to replace current permissions when the object is rezzed, since bit 4 will be set. This is not correct behaviour for a freshly uploaded mesh. Freshly rezzed in-world prims also do not have bit 4 set (don't yet know exactly what this is). Should resolve http://opensimulator.org/mantis/view.php?id=5651iar_mods
parent
e8cc1bd329
commit
ddca5347c3
|
@ -422,7 +422,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
string assetType)
|
string assetType)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
|
"[BUNCH OF CAPS]: Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
|
||||||
assetID, inventoryItem, inventoryType, assetType);
|
assetID, inventoryItem, inventoryType, assetType);
|
||||||
|
|
||||||
sbyte assType = 0;
|
sbyte assType = 0;
|
||||||
|
@ -625,7 +625,12 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
item.AssetType = assType;
|
item.AssetType = assType;
|
||||||
item.InvType = inType;
|
item.InvType = inType;
|
||||||
item.Folder = parentFolder;
|
item.Folder = parentFolder;
|
||||||
item.CurrentPermissions = (uint)PermissionMask.All;
|
|
||||||
|
// If we set PermissionMask.All then when we rez the item the next permissions will replace the current
|
||||||
|
// (owner) permissions. This becomes a problem if next permissions are changed.
|
||||||
|
item.CurrentPermissions
|
||||||
|
= (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
|
||||||
|
|
||||||
item.BasePermissions = (uint)PermissionMask.All;
|
item.BasePermissions = (uint)PermissionMask.All;
|
||||||
item.EveryOnePermissions = 0;
|
item.EveryOnePermissions = 0;
|
||||||
item.NextPermissions = (uint)PermissionMask.All;
|
item.NextPermissions = (uint)PermissionMask.All;
|
||||||
|
|
|
@ -50,8 +50,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||||
public class NewFileAgentInventoryVariablePriceModule : INonSharedRegionModule
|
public class NewFileAgentInventoryVariablePriceModule : INonSharedRegionModule
|
||||||
{
|
{
|
||||||
// private static readonly ILog m_log =
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
// private IAssetService m_assetService;
|
// private IAssetService m_assetService;
|
||||||
|
@ -210,6 +209,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
|
UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
|
||||||
string assetType,UUID AgentID)
|
string assetType,UUID AgentID)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[NEW FILE AGENT INVENTORY VARIABLE PRICE MODULE]: Upload complete for {0}", inventoryItem);
|
||||||
|
|
||||||
sbyte assType = 0;
|
sbyte assType = 0;
|
||||||
sbyte inType = 0;
|
sbyte inType = 0;
|
||||||
|
|
||||||
|
@ -259,13 +261,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
item.AssetType = assType;
|
item.AssetType = assType;
|
||||||
item.InvType = inType;
|
item.InvType = inType;
|
||||||
item.Folder = parentFolder;
|
item.Folder = parentFolder;
|
||||||
item.CurrentPermissions = (uint)PermissionMask.All;
|
item.CurrentPermissions
|
||||||
|
= (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer);
|
||||||
item.BasePermissions = (uint)PermissionMask.All;
|
item.BasePermissions = (uint)PermissionMask.All;
|
||||||
item.EveryOnePermissions = 0;
|
item.EveryOnePermissions = 0;
|
||||||
item.NextPermissions = (uint)PermissionMask.All;
|
item.NextPermissions = (uint)PermissionMask.All;
|
||||||
item.CreationDate = Util.UnixTimeSinceEpoch();
|
item.CreationDate = Util.UnixTimeSinceEpoch();
|
||||||
m_scene.AddInventoryItem(item);
|
m_scene.AddInventoryItem(item);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -339,7 +339,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_scene.AddSceneObject(grp);
|
m_scene.AddSceneObject(grp);
|
||||||
grp.AbsolutePosition = obj.Position;
|
grp.AbsolutePosition = obj.Position;
|
||||||
}
|
}
|
||||||
|
|
||||||
allparts[i] = grp;
|
allparts[i] = grp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -789,6 +789,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
{
|
{
|
||||||
group = objlist[i];
|
group = objlist[i];
|
||||||
|
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[InventoryAccessModule]: Preparing to rez {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
|
||||||
|
// group.Name, group.LocalId, group.UUID,
|
||||||
|
// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
|
||||||
|
// remoteClient.Name);
|
||||||
|
|
||||||
// Vector3 storedPosition = group.AbsolutePosition;
|
// Vector3 storedPosition = group.AbsolutePosition;
|
||||||
if (group.UUID == UUID.Zero)
|
if (group.UUID == UUID.Zero)
|
||||||
{
|
{
|
||||||
|
@ -854,9 +860,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
rootPart.ScheduleFullUpdate();
|
rootPart.ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[InventoryAccessModule]: Rezzed {0} {1} {2} for {3}",
|
// "[InventoryAccessModule]: Rezzed {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
|
||||||
// group.Name, group.LocalId, group.UUID, remoteClient.Name);
|
// group.Name, group.LocalId, group.UUID,
|
||||||
|
// group.RootPart.OwnerMask, group.RootPart.NextOwnerMask, group.RootPart.GroupMask, group.RootPart.EveryoneMask,
|
||||||
|
// remoteClient.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item != null)
|
if (item != null)
|
||||||
|
@ -937,7 +945,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
}
|
}
|
||||||
|
|
||||||
rootPart.FromFolderID = item.Folder;
|
rootPart.FromFolderID = item.Folder;
|
||||||
|
|
||||||
|
// Console.WriteLine("rootPart.OwnedID {0}, item.Owner {1}, item.CurrentPermissions {2:X}",
|
||||||
|
// rootPart.OwnerID, item.Owner, item.CurrentPermissions);
|
||||||
|
|
||||||
if ((rootPart.OwnerID != item.Owner) ||
|
if ((rootPart.OwnerID != item.Owner) ||
|
||||||
(item.CurrentPermissions & 16) != 0)
|
(item.CurrentPermissions & 16) != 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -347,6 +347,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
item.Name = itemUpd.Name;
|
item.Name = itemUpd.Name;
|
||||||
item.Description = itemUpd.Description;
|
item.Description = itemUpd.Description;
|
||||||
|
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[USER INVENTORY]: itemUpd {0} {1} {2} {3}, item {4} {5} {6} {7}",
|
||||||
|
// itemUpd.NextPermissions, itemUpd.GroupPermissions, itemUpd.EveryOnePermissions, item.Flags,
|
||||||
|
// item.NextPermissions, item.GroupPermissions, item.EveryOnePermissions, item.CurrentPermissions);
|
||||||
|
|
||||||
if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions))
|
if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions))
|
||||||
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
|
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
|
||||||
item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions;
|
item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions;
|
||||||
|
@ -355,6 +361,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions;
|
item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions;
|
||||||
if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions))
|
if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions))
|
||||||
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
|
item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[USER INVENTORY]: item.Flags {0}", item.Flags);
|
||||||
|
|
||||||
item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions;
|
item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions;
|
||||||
item.GroupID = itemUpd.GroupID;
|
item.GroupID = itemUpd.GroupID;
|
||||||
item.GroupOwned = itemUpd.GroupOwned;
|
item.GroupOwned = itemUpd.GroupOwned;
|
||||||
|
|
|
@ -265,6 +265,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public void ApplyNextOwnerPermissions()
|
public void ApplyNextOwnerPermissions()
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[PRIM INVENTORY]: Applying next owner permissions to {0} {1}", Name, UUID);
|
||||||
|
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
SceneObjectPart[] parts = m_parts.GetArray();
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
parts[i].ApplyNextOwnerPermissions();
|
parts[i].ApplyNextOwnerPermissions();
|
||||||
|
|
Loading…
Reference in New Issue