aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs34
1 files changed, 24 insertions, 10 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index cb06540..0d09cef 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -647,7 +647,8 @@ namespace OpenSim.Region.Framework.Scenes
647 // Modify 647 // Modify
648 uint permsMask = ~ ((uint)PermissionMask.Copy | 648 uint permsMask = ~ ((uint)PermissionMask.Copy |
649 (uint)PermissionMask.Transfer | 649 (uint)PermissionMask.Transfer |
650 (uint)PermissionMask.Modify); 650 (uint)PermissionMask.Modify |
651 (uint)PermissionMask.Export);
651 652
652 // Now, reduce the next perms to the mask bits 653 // Now, reduce the next perms to the mask bits
653 // relevant to the operation 654 // relevant to the operation
@@ -677,6 +678,23 @@ namespace OpenSim.Region.Framework.Scenes
677 (uint)PermissionMask.Move; 678 (uint)PermissionMask.Move;
678 uint ownerPerms = item.CurrentPermissions; 679 uint ownerPerms = item.CurrentPermissions;
679 680
681 // These will be applied to the root prim at next rez.
682 // The legacy slam bit (bit 3) and folded permission (bits 0-2)
683 // are preserved due to the above mangling
684 ownerPerms &= nextPerms;
685
686 // Mask the base permissions. This is a conservative
687 // approach altering only the three main perms
688 basePerms &= nextPerms;
689
690 // Mask out the folded portion of the base mask.
691 // While the owner mask carries the actual folded
692 // permissions, the base mask carries the original
693 // base mask, before masking with the folded perms.
694 // We need this later for rezzing.
695 basePerms &= ~(uint)PermissionMask.FoldedMask;
696 basePerms |= ((basePerms >> 13) & 7) | (((basePerms & (uint)PermissionMask.Export) != 0) ? (uint)PermissionMask.FoldedExport : 0);
697
680 // If this is an object, root prim perms may be more 698 // If this is an object, root prim perms may be more
681 // permissive than folded perms. Use folded perms as 699 // permissive than folded perms. Use folded perms as
682 // a mask 700 // a mask
@@ -684,6 +702,9 @@ namespace OpenSim.Region.Framework.Scenes
684 { 702 {
685 // Create a safe mask for the current perms 703 // Create a safe mask for the current perms
686 uint foldedPerms = (item.CurrentPermissions & 7) << 13; 704 uint foldedPerms = (item.CurrentPermissions & 7) << 13;
705 if ((item.CurrentPermissions & (uint)PermissionMask.FoldedExport) != 0)
706 foldedPerms |= (uint)PermissionMask.Export;
707
687 foldedPerms |= permsMask; 708 foldedPerms |= permsMask;
688 709
689 bool isRootMod = (item.CurrentPermissions & 710 bool isRootMod = (item.CurrentPermissions &
@@ -691,6 +712,8 @@ namespace OpenSim.Region.Framework.Scenes
691 true : false; 712 true : false;
692 713
693 // Mask the owner perms to the folded perms 714 // Mask the owner perms to the folded perms
715 // Note that this is only to satisfy the viewer.
716 // The effect of this will be reversed on rez.
694 ownerPerms &= foldedPerms; 717 ownerPerms &= foldedPerms;
695 basePerms &= foldedPerms; 718 basePerms &= foldedPerms;
696 719
@@ -705,15 +728,6 @@ namespace OpenSim.Region.Framework.Scenes
705 } 728 }
706 } 729 }
707 730
708 // These will be applied to the root prim at next rez.
709 // The slam bit (bit 3) and folded permission (bits 0-2)
710 // are preserved due to the above mangling
711 ownerPerms &= nextPerms;
712
713 // Mask the base permissions. This is a conservative
714 // approach altering only the three main perms
715 basePerms &= nextPerms;
716
717 // Assign to the actual item. Make sure the slam bit is 731 // Assign to the actual item. Make sure the slam bit is
718 // set, if it wasn't set before. 732 // set, if it wasn't set before.
719 itemCopy.BasePermissions = basePerms; 733 itemCopy.BasePermissions = basePerms;