aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/PermissionsUtil.cs28
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs15
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs6
4 files changed, 30 insertions, 23 deletions
diff --git a/OpenSim/Framework/PermissionsUtil.cs b/OpenSim/Framework/PermissionsUtil.cs
index a7f933c..39ccaba 100644
--- a/OpenSim/Framework/PermissionsUtil.cs
+++ b/OpenSim/Framework/PermissionsUtil.cs
@@ -65,9 +65,9 @@ namespace OpenSim.Framework
65 return str; 65 return str;
66 } 66 }
67 67
68 public static void ApplyFoldedPermissions(uint source, ref uint target) 68 public static void ApplyFoldedPermissions(uint foldedSourcePerms, ref uint targetPerms)
69 { 69 {
70 uint folded = source & (uint)PermissionMask.FoldedMask; 70 uint folded = foldedSourcePerms & (uint)PermissionMask.FoldedMask;
71 if(folded == 0) // invalid we need to ignore 71 if(folded == 0) // invalid we need to ignore
72 return; 72 return;
73 73
@@ -75,15 +75,15 @@ namespace OpenSim.Framework
75 folded &= (uint)PermissionMask.UnfoldedMask; // not really necessary but well 75 folded &= (uint)PermissionMask.UnfoldedMask; // not really necessary but well
76 folded |= ~(uint)PermissionMask.UnfoldedMask; 76 folded |= ~(uint)PermissionMask.UnfoldedMask;
77 77
78 uint tmp = target; 78 uint tmp = targetPerms;
79 tmp &= folded; 79 tmp &= folded;
80 target = tmp; 80 targetPerms = tmp;
81 } 81 }
82 82
83 // do not touch MOD 83 // do not touch MOD
84 public static void ApplyNoModFoldedPermissions(uint source, ref uint target) 84 public static void ApplyNoModFoldedPermissions(uint foldedSourcePerms, ref uint target)
85 { 85 {
86 uint folded = source & (uint)PermissionMask.FoldedMask; 86 uint folded = foldedSourcePerms & (uint)PermissionMask.FoldedMask;
87 if(folded == 0) // invalid we need to ignore 87 if(folded == 0) // invalid we need to ignore
88 return; 88 return;
89 89
@@ -96,5 +96,21 @@ namespace OpenSim.Framework
96 target = tmp; 96 target = tmp;
97 } 97 }
98 98
99 public static uint FixAndFoldPermissions(uint perms)
100 {
101 uint tmp = perms;
102
103 // C & T rule
104 if((tmp & (uint)(PermissionMask.Copy | PermissionMask.Transfer)) == 0)
105 tmp |= (uint)PermissionMask.Transfer;
106
107 // unlock
108 tmp |= (uint)PermissionMask.Move;
109
110 tmp &= ~(uint)PermissionMask.FoldedMask;
111 tmp |= ((tmp >> (int)PermissionMask.FoldingShift) & (uint)PermissionMask.FoldedMask);
112
113 return tmp;
114 }
99 } 115 }
100} 116}
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index bce0610..d4f9c16 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -594,16 +594,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
594 uint basePerms = effectivePerms & so.RootPart.NextOwnerMask; 594 uint basePerms = effectivePerms & so.RootPart.NextOwnerMask;
595 595
596 // rebuild folded perms since we don't have then on inworld objects 596 // rebuild folded perms since we don't have then on inworld objects
597 // possible existent ones where already unfolded 597 basePerms = PermissionsUtil.FixAndFoldPermissions(basePerms);
598
599 if((basePerms & (uint)PermissionMask.Copy) == 0)
600 basePerms |= (uint)PermissionMask.Transfer;
601
602 // unlock
603 basePerms |= (uint)PermissionMask.Move;
604
605 basePerms &= ~(uint)PermissionMask.FoldedMask;
606 basePerms |= ((basePerms >> (int)PermissionMask.FoldingShift) & (uint)PermissionMask.FoldedMask);
607 598
608 item.BasePermissions = basePerms; 599 item.BasePermissions = basePerms;
609 item.CurrentPermissions = item.BasePermissions; 600 item.CurrentPermissions = item.BasePermissions;
@@ -1146,9 +1137,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
1146 if ((item.BasePermissions & (uint)PermissionMask.FoldedMask) != 0) 1137 if ((item.BasePermissions & (uint)PermissionMask.FoldedMask) != 0)
1147 { 1138 {
1148 // We have permissions stored there so use them 1139 // We have permissions stored there so use them
1149 part.NextOwnerMask = ((item.BasePermissions & 7) << 13); 1140 part.NextOwnerMask = ((item.BasePermissions & (uint)PermissionMask.FoldedMask) << (int)PermissionMask.FoldingShift);
1150 if ((item.BasePermissions & (uint)PermissionMask.FoldedExport) != 0)
1151 part.NextOwnerMask |= (uint)PermissionMask.Export;
1152 part.NextOwnerMask |= (uint)PermissionMask.Move; 1141 part.NextOwnerMask |= (uint)PermissionMask.Move;
1153 } 1142 }
1154 else 1143 else
diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
index 84f33d1..af53aa3 100644
--- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
@@ -210,9 +210,9 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
210 210
211 PermissionsUtil.ApplyFoldedPermissions(perms, ref perms); 211 PermissionsUtil.ApplyFoldedPermissions(perms, ref perms);
212 212
213 item.BasePermissions = perms & part.NextOwnerMask; 213 perms &= part.NextOwnerMask;
214 214
215// we need to rebuild folded here 215 item.BasePermissions = PermissionsUtil.FixAndFoldPermissions(perms);
216 216
217 item.CurrentPermissions = item.BasePermissions; 217 item.CurrentPermissions = item.BasePermissions;
218 item.NextPermissions = part.NextOwnerMask; 218 item.NextPermissions = part.NextOwnerMask;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 5e19a8a..0549571 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -1272,14 +1272,16 @@ namespace OpenSim.Region.Framework.Scenes
1272 { 1272 {
1273 uint perms = agentItem.BasePermissions; 1273 uint perms = agentItem.BasePermissions;
1274 PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms ); 1274 PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms );
1275 agentItem.BasePermissions = perms; 1275// perms |= (uint)PermissionMask.Move;
1276// agentItem.BasePermissions = perms;
1277 agentItem.BasePermissions = PermissionsUtil.FixAndFoldPermissions(perms);
1276 } 1278 }
1277 else 1279 else
1278 agentItem.BasePermissions &= taskItem.CurrentPermissions; 1280 agentItem.BasePermissions &= taskItem.CurrentPermissions;
1279 1281
1280 // always unlock 1282 // always unlock
1281 agentItem.BasePermissions |= (uint)PermissionMask.Move; 1283 agentItem.BasePermissions |= (uint)PermissionMask.Move;
1282 1284
1283 agentItem.CurrentPermissions = agentItem.BasePermissions; 1285 agentItem.CurrentPermissions = agentItem.BasePermissions;
1284 1286
1285 agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm; 1287 agentItem.Flags |= (uint)InventoryItemFlags.ObjectSlamPerm;