diff options
4 files changed, 21 insertions, 11 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index aa5d381..0104823 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -1141,6 +1141,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
1141 | part.OwnerID = item.Owner; | 1141 | part.OwnerID = item.Owner; |
1142 | part.RezzerID = item.Owner; | 1142 | part.RezzerID = item.Owner; |
1143 | part.Inventory.ChangeInventoryOwner(item.Owner); | 1143 | part.Inventory.ChangeInventoryOwner(item.Owner); |
1144 | |||
1145 | // This applies the base mask from the item as the next | ||
1146 | // permissions for the object. This is correct because the | ||
1147 | // giver's base mask was masked by the giver's next owner | ||
1148 | // mask, so the base mask equals the original next owner mask. | ||
1149 | part.NextOwnerMask = item.BasePermissions; | ||
1144 | } | 1150 | } |
1145 | 1151 | ||
1146 | so.ApplyNextOwnerPermissions(); | 1152 | so.ApplyNextOwnerPermissions(); |
@@ -1152,10 +1158,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
1152 | { | 1158 | { |
1153 | if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0) | 1159 | if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0) |
1154 | { | 1160 | { |
1155 | if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteEveryone) != 0) | 1161 | part.EveryoneMask = item.EveryOnePermissions & part.BaseMask; |
1156 | part.EveryoneMask = item.EveryOnePermissions & part.BaseMask; | 1162 | part.NextOwnerMask = item.NextPermissions & part.BaseMask; |
1157 | if ((item.Flags & (uint)InventoryItemFlags.ObjectOverwriteNextOwner) != 0) | ||
1158 | part.NextOwnerMask = item.NextPermissions & part.BaseMask; | ||
1159 | } | 1163 | } |
1160 | } | 1164 | } |
1161 | } | 1165 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 9c8dbb6..cb06540 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -627,6 +627,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
627 | itemCopy.AssetType = item.AssetType; | 627 | itemCopy.AssetType = item.AssetType; |
628 | itemCopy.InvType = item.InvType; | 628 | itemCopy.InvType = item.InvType; |
629 | itemCopy.Folder = recipientFolderId; | 629 | itemCopy.Folder = recipientFolderId; |
630 | itemCopy.Flags = item.Flags; | ||
630 | 631 | ||
631 | if (Permissions.PropagatePermissions() && recipient != senderId) | 632 | if (Permissions.PropagatePermissions() && recipient != senderId) |
632 | { | 633 | { |
@@ -643,7 +644,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
643 | // | 644 | // |
644 | // Transfer | 645 | // Transfer |
645 | // Copy | 646 | // Copy |
646 | // Modufy | 647 | // Modify |
647 | uint permsMask = ~ ((uint)PermissionMask.Copy | | 648 | uint permsMask = ~ ((uint)PermissionMask.Copy | |
648 | (uint)PermissionMask.Transfer | | 649 | (uint)PermissionMask.Transfer | |
649 | (uint)PermissionMask.Modify); | 650 | (uint)PermissionMask.Modify); |
@@ -718,6 +719,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
718 | itemCopy.BasePermissions = basePerms; | 719 | itemCopy.BasePermissions = basePerms; |
719 | itemCopy.CurrentPermissions = ownerPerms; | 720 | itemCopy.CurrentPermissions = ownerPerms; |
720 | itemCopy.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; | 721 | itemCopy.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; |
722 | // Need to clear the other inventory slam options. | ||
723 | // That is so we can handle the case where the recipient | ||
724 | // changes the bits in inventory before rezzing | ||
725 | itemCopy.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner); | ||
721 | 726 | ||
722 | itemCopy.NextPermissions = item.NextPermissions; | 727 | itemCopy.NextPermissions = item.NextPermissions; |
723 | 728 | ||
@@ -767,9 +772,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
767 | 772 | ||
768 | itemCopy.GroupID = UUID.Zero; | 773 | itemCopy.GroupID = UUID.Zero; |
769 | itemCopy.GroupOwned = false; | 774 | itemCopy.GroupOwned = false; |
770 | itemCopy.Flags = item.Flags; | 775 | itemCopy.SalePrice = 0; //item.SalePrice; |
771 | itemCopy.SalePrice = item.SalePrice; | 776 | itemCopy.SaleType = 0; //item.SaleType; |
772 | itemCopy.SaleType = item.SaleType; | ||
773 | 777 | ||
774 | IInventoryAccessModule invAccess = RequestModuleInterface<IInventoryAccessModule>(); | 778 | IInventoryAccessModule invAccess = RequestModuleInterface<IInventoryAccessModule>(); |
775 | if (invAccess != null) | 779 | if (invAccess != null) |
@@ -1251,9 +1255,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1251 | agentItem.CurrentPermissions = agentItem.BasePermissions; | 1255 | agentItem.CurrentPermissions = agentItem.BasePermissions; |
1252 | 1256 | ||
1253 | agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; | 1257 | agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; |
1258 | agentItem.Flags &= ~(uint)(InventoryItemFlags.ObjectOverwriteBase | InventoryItemFlags.ObjectOverwriteOwner | InventoryItemFlags.ObjectOverwriteGroup | InventoryItemFlags.ObjectOverwriteEveryone | InventoryItemFlags.ObjectOverwriteNextOwner); | ||
1254 | agentItem.NextPermissions = taskItem.NextPermissions; | 1259 | agentItem.NextPermissions = taskItem.NextPermissions; |
1255 | agentItem.EveryOnePermissions = taskItem.EveryonePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); | 1260 | agentItem.EveryOnePermissions = taskItem.EveryonePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); |
1256 | agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions; | 1261 | // Group permissions make no sense here |
1262 | agentItem.GroupPermissions = 0; | ||
1257 | } | 1263 | } |
1258 | else | 1264 | else |
1259 | { | 1265 | { |
@@ -1261,7 +1267,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1261 | agentItem.CurrentPermissions = taskItem.CurrentPermissions; | 1267 | agentItem.CurrentPermissions = taskItem.CurrentPermissions; |
1262 | agentItem.NextPermissions = taskItem.NextPermissions; | 1268 | agentItem.NextPermissions = taskItem.NextPermissions; |
1263 | agentItem.EveryOnePermissions = taskItem.EveryonePermissions; | 1269 | agentItem.EveryOnePermissions = taskItem.EveryonePermissions; |
1264 | agentItem.GroupPermissions = taskItem.GroupPermissions; | 1270 | agentItem.GroupPermissions = 0; |
1265 | } | 1271 | } |
1266 | 1272 | ||
1267 | message = null; | 1273 | message = null; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index b97cceb..99be06b 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -5242,6 +5242,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
5242 | BaseMask &= NextOwnerMask | (uint)PermissionMask.Export; | 5242 | BaseMask &= NextOwnerMask | (uint)PermissionMask.Export; |
5243 | OwnerMask &= NextOwnerMask; | 5243 | OwnerMask &= NextOwnerMask; |
5244 | EveryoneMask &= NextOwnerMask | (uint)PermissionMask.Export; | 5244 | EveryoneMask &= NextOwnerMask | (uint)PermissionMask.Export; |
5245 | GroupMask = 0; // Giving an object zaps group permissions | ||
5245 | 5246 | ||
5246 | Inventory.ApplyNextOwnerPermissions(); | 5247 | Inventory.ApplyNextOwnerPermissions(); |
5247 | } | 5248 | } |
diff --git a/OpenSim/Services/UserAccountService/UserAccountService.cs b/OpenSim/Services/UserAccountService/UserAccountService.cs index 7120aeb..f6b003a 100644 --- a/OpenSim/Services/UserAccountService/UserAccountService.cs +++ b/OpenSim/Services/UserAccountService/UserAccountService.cs | |||
@@ -947,7 +947,6 @@ namespace OpenSim.Services.UserAccountService | |||
947 | if (item.InvType == (int)InventoryType.Object) | 947 | if (item.InvType == (int)InventoryType.Object) |
948 | { | 948 | { |
949 | uint perms = item.CurrentPermissions; | 949 | uint perms = item.CurrentPermissions; |
950 | PermissionsUtil.ApplyFoldedPermissions(item.CurrentPermissions, ref perms); | ||
951 | item.CurrentPermissions = perms; | 950 | item.CurrentPermissions = perms; |
952 | } | 951 | } |
953 | 952 | ||