aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs115
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs8
2 files changed, 56 insertions, 67 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 831922e..781cc69 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -412,17 +412,28 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
412 412
413 if (item == null) 413 if (item == null)
414 return null; 414 return null;
415
416 item.CreatorId = objlist[0].RootPart.CreatorID.ToString();
417 item.CreatorData = objlist[0].RootPart.CreatorData;
415 418
416 // Can't know creator is the same, so null it in inventory
417 if (objlist.Count > 1) 419 if (objlist.Count > 1)
418 { 420 {
419 item.CreatorId = UUID.Zero.ToString();
420 item.Flags = (uint)InventoryItemFlags.ObjectHasMultipleItems; 421 item.Flags = (uint)InventoryItemFlags.ObjectHasMultipleItems;
422
423 // If the objects have different creators then don't specify a creator at all
424 foreach (SceneObjectGroup objectGroup in objlist)
425 {
426 if ((objectGroup.RootPart.CreatorID.ToString() != item.CreatorId)
427 || (objectGroup.RootPart.CreatorData.ToString() != item.CreatorData))
428 {
429 item.CreatorId = UUID.Zero.ToString();
430 item.CreatorData = string.Empty;
431 break;
432 }
433 }
421 } 434 }
422 else 435 else
423 { 436 {
424 item.CreatorId = objlist[0].RootPart.CreatorID.ToString();
425 item.CreatorData = objlist[0].RootPart.CreatorData;
426 item.SaleType = objlist[0].RootPart.ObjectSaleType; 437 item.SaleType = objlist[0].RootPart.ObjectSaleType;
427 item.SalePrice = objlist[0].RootPart.SalePrice; 438 item.SalePrice = objlist[0].RootPart.SalePrice;
428 } 439 }
@@ -443,13 +454,13 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
443 } 454 }
444 else 455 else
445 { 456 {
446 AddPermissions(item, objlist[0], objlist, remoteClient);
447
448 item.CreationDate = Util.UnixTimeSinceEpoch(); 457 item.CreationDate = Util.UnixTimeSinceEpoch();
449 item.Description = asset.Description; 458 item.Description = asset.Description;
450 item.Name = asset.Name; 459 item.Name = asset.Name;
451 item.AssetType = asset.Type; 460 item.AssetType = asset.Type;
452 461
462 AddPermissions(item, objlist[0], objlist, remoteClient);
463
453 m_Scene.AddInventoryItem(item); 464 m_Scene.AddInventoryItem(item);
454 465
455 if (remoteClient != null && item.Owner == remoteClient.AgentId) 466 if (remoteClient != null && item.Owner == remoteClient.AgentId)
@@ -491,39 +502,42 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
491 IClientAPI remoteClient) 502 IClientAPI remoteClient)
492 { 503 {
493 uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7; 504 uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7;
505 uint allObjectsNextOwnerPerms = 0x7fffffff;
506 uint allObjectsEveryOnePerms = 0x7fffffff;
507 uint allObjectsGroupPerms = 0x7fffffff;
508
494 foreach (SceneObjectGroup grp in objsForEffectivePermissions) 509 foreach (SceneObjectGroup grp in objsForEffectivePermissions)
510 {
495 effectivePerms &= grp.GetEffectivePermissions(); 511 effectivePerms &= grp.GetEffectivePermissions();
512 allObjectsNextOwnerPerms &= grp.RootPart.NextOwnerMask;
513 allObjectsEveryOnePerms &= grp.RootPart.EveryoneMask;
514 allObjectsGroupPerms &= grp.RootPart.GroupMask;
515 }
496 effectivePerms |= (uint)PermissionMask.Move; 516 effectivePerms |= (uint)PermissionMask.Move;
497 517
518 //PermissionsUtil.LogPermissions(item.Name, "Before AddPermissions", item.BasePermissions, item.CurrentPermissions, item.NextPermissions);
519
498 if (remoteClient != null && (remoteClient.AgentId != so.RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions()) 520 if (remoteClient != null && (remoteClient.AgentId != so.RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions())
499 { 521 {
500 uint perms = effectivePerms; 522 uint perms = effectivePerms;
501 uint nextPerms = (perms & 7) << 13; 523 PermissionsUtil.ApplyFoldedPermissions(effectivePerms, ref perms);
502 if ((nextPerms & (uint)PermissionMask.Copy) == 0) 524
503 perms &= ~(uint)PermissionMask.Copy; 525 item.BasePermissions = perms & allObjectsNextOwnerPerms;
504 if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
505 perms &= ~(uint)PermissionMask.Transfer;
506 if ((nextPerms & (uint)PermissionMask.Modify) == 0)
507 perms &= ~(uint)PermissionMask.Modify;
508
509 item.BasePermissions = perms & so.RootPart.NextOwnerMask;
510 item.CurrentPermissions = item.BasePermissions; 526 item.CurrentPermissions = item.BasePermissions;
511 item.NextPermissions = perms & so.RootPart.NextOwnerMask; 527 item.NextPermissions = perms & allObjectsNextOwnerPerms;
512 item.EveryOnePermissions = so.RootPart.EveryoneMask & so.RootPart.NextOwnerMask; 528 item.EveryOnePermissions = allObjectsEveryOnePerms & allObjectsNextOwnerPerms;
513 item.GroupPermissions = so.RootPart.GroupMask & so.RootPart.NextOwnerMask; 529 item.GroupPermissions = allObjectsGroupPerms & allObjectsNextOwnerPerms;
514 530
515 // Magic number badness. Maybe this deserves an enum. 531 // apply next owner perms on rez
516 // bit 4 (16) is the "Slam" bit, it means treat as passed 532 item.CurrentPermissions |= SceneObjectGroup.SLAM;
517 // and apply next owner perms on rez
518 item.CurrentPermissions |= 16; // Slam!
519 } 533 }
520 else 534 else
521 { 535 {
522 item.BasePermissions = effectivePerms; 536 item.BasePermissions = effectivePerms;
523 item.CurrentPermissions = effectivePerms; 537 item.CurrentPermissions = effectivePerms;
524 item.NextPermissions = so.RootPart.NextOwnerMask & effectivePerms; 538 item.NextPermissions = allObjectsNextOwnerPerms & effectivePerms;
525 item.EveryOnePermissions = so.RootPart.EveryoneMask & effectivePerms; 539 item.EveryOnePermissions = allObjectsEveryOnePerms & effectivePerms;
526 item.GroupPermissions = so.RootPart.GroupMask & effectivePerms; 540 item.GroupPermissions = allObjectsGroupPerms & effectivePerms;
527 541
528 item.CurrentPermissions &= 542 item.CurrentPermissions &=
529 ((uint)PermissionMask.Copy | 543 ((uint)PermissionMask.Copy |
@@ -532,8 +546,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
532 (uint)PermissionMask.Move | 546 (uint)PermissionMask.Move |
533 (uint)PermissionMask.Export | 547 (uint)PermissionMask.Export |
534 7); // Preserve folded permissions 548 7); // Preserve folded permissions
535 } 549 }
536 550
551 //PermissionsUtil.LogPermissions(item.Name, "After AddPermissions", item.BasePermissions, item.CurrentPermissions, item.NextPermissions);
552
537 return item; 553 return item;
538 } 554 }
539 555
@@ -809,11 +825,15 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
809 group.RootPart.Shape.LastAttachPoint = (byte)group.AttachmentPoint; 825 group.RootPart.Shape.LastAttachPoint = (byte)group.AttachmentPoint;
810 } 826 }
811 827
812 foreach (SceneObjectPart part in group.Parts) 828 if (item == null)
813 { 829 {
814 // Make the rezzer the owner, as this is not necessarily set correctly in the serialized asset. 830 // Change ownership. Normally this is done in DoPreRezWhenFromItem(), but in this case we must do it here.
815 part.LastOwnerID = part.OwnerID; 831 foreach (SceneObjectPart part in group.Parts)
816 part.OwnerID = remoteClient.AgentId; 832 {
833 // Make the rezzer the owner, as this is not necessarily set correctly in the serialized asset.
834 part.LastOwnerID = part.OwnerID;
835 part.OwnerID = remoteClient.AgentId;
836 }
817 } 837 }
818 838
819 if (!attachment) 839 if (!attachment)
@@ -969,44 +989,19 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
969// "[INVENTORY ACCESS MODULE]: rootPart.OwnedID {0}, item.Owner {1}, item.CurrentPermissions {2:X}", 989// "[INVENTORY ACCESS MODULE]: rootPart.OwnedID {0}, item.Owner {1}, item.CurrentPermissions {2:X}",
970// rootPart.OwnerID, item.Owner, item.CurrentPermissions); 990// rootPart.OwnerID, item.Owner, item.CurrentPermissions);
971 991
972 if ((rootPart.OwnerID != item.Owner) || 992 if ((rootPart.OwnerID != item.Owner) || (item.CurrentPermissions & SceneObjectGroup.SLAM) != 0)
973 (item.CurrentPermissions & 16) != 0)
974 { 993 {
975 //Need to kill the for sale here 994 //Need to kill the for sale here
976 rootPart.ObjectSaleType = 0; 995 rootPart.ObjectSaleType = 0;
977 rootPart.SalePrice = 10; 996 rootPart.SalePrice = 10;
978
979 if (m_Scene.Permissions.PropagatePermissions())
980 {
981 foreach (SceneObjectPart part in so.Parts)
982 {
983 if ((item.Flags & (uint)InventoryItemFlags.ObjectHasMultipleItems) == 0)
984 {
985 part.EveryoneMask = item.EveryOnePermissions;
986 part.NextOwnerMask = item.NextPermissions;
987 }
988 part.GroupMask = 0; // DO NOT propagate here
989 }
990
991 so.ApplyNextOwnerPermissions();
992 }
993 } 997 }
994 998
995 foreach (SceneObjectPart part in so.Parts) 999 foreach (SceneObjectPart part in so.Parts)
996 { 1000 {
997 part.FromUserInventoryItemID = fromUserInventoryItemId; 1001 part.FromUserInventoryItemID = fromUserInventoryItemId;
998 1002 part.ApplyPermissionsOnRez(item, true, m_Scene);
999 if ((part.OwnerID != item.Owner) ||
1000 (item.CurrentPermissions & 16) != 0)
1001 {
1002 part.Inventory.ChangeInventoryOwner(item.Owner);
1003 part.GroupMask = 0; // DO NOT propagate here
1004 }
1005
1006 part.EveryoneMask = item.EveryOnePermissions;
1007 part.NextOwnerMask = item.NextPermissions;
1008 } 1003 }
1009 1004
1010 rootPart.TrimPermissions(); 1005 rootPart.TrimPermissions();
1011 1006
1012 if (isAttachment) 1007 if (isAttachment)
diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
index e8eaeb7..b8d4855 100644
--- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs
@@ -193,13 +193,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
193 item.InvType = (int)InventoryType.Object; 193 item.InvType = (int)InventoryType.Object;
194 item.Folder = categoryID; 194 item.Folder = categoryID;
195 195
196 uint nextPerms=(perms & 7) << 13; 196 PermissionsUtil.ApplyFoldedPermissions(perms, ref perms);
197 if ((nextPerms & (uint)PermissionMask.Copy) == 0)
198 perms &= ~(uint)PermissionMask.Copy;
199 if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
200 perms &= ~(uint)PermissionMask.Transfer;
201 if ((nextPerms & (uint)PermissionMask.Modify) == 0)
202 perms &= ~(uint)PermissionMask.Modify;
203 197
204 item.BasePermissions = perms & part.NextOwnerMask; 198 item.BasePermissions = perms & part.NextOwnerMask;
205 item.CurrentPermissions = perms & part.NextOwnerMask; 199 item.CurrentPermissions = perms & part.NextOwnerMask;