aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.Inventory.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs46
1 files changed, 43 insertions, 3 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 2ce778d..8ddaa60 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -418,18 +418,57 @@ namespace OpenSim.Region.Framework.Scenes
418 418
419 if (itemUpd.NextPermissions != 0) // Use this to determine validity. Can never be 0 if valid 419 if (itemUpd.NextPermissions != 0) // Use this to determine validity. Can never be 0 if valid
420 { 420 {
421 // Create a set of base permissions that will not include export if the user
422 // is not allowed to change the export flag.
423 bool denyExportChange = false;
424
425 m_log.InfoFormat("[XXX]: B: {0} O: {1} E: {2}", itemUpd.BasePermissions, itemUpd.CurrentPermissions, itemUpd.EveryOnePermissions);
426
427 // If the user is not the creator or doesn't have "E" in both "B" and "O", deny setting export
428 if ((item.BasePermissions & (uint)(PermissionMask.All | PermissionMask.Export)) != (uint)(PermissionMask.All | PermissionMask.Export) || (item.CurrentPermissions & (uint)PermissionMask.Export) == 0 || item.CreatorIdAsUuid != item.Owner)
429 denyExportChange = true;
430
431 m_log.InfoFormat("[XXX]: Deny Export Update {0}", denyExportChange);
432
433 // If it is already set, force it set and also force full perm
434 // else prevent setting it. It can and should never be set unless
435 // set in base, so the condition above is valid
436 if (denyExportChange)
437 {
438 // If we are not allowed to change it, then force it to the
439 // original item's setting and if it was on, also force full perm
440 if ((item.EveryOnePermissions & (uint)PermissionMask.Export) != 0)
441 {
442 itemUpd.NextPermissions = (uint)(PermissionMask.All);
443 itemUpd.EveryOnePermissions |= (uint)PermissionMask.Export;
444 }
445 else
446 {
447 itemUpd.EveryOnePermissions &= ~(uint)PermissionMask.Export;
448 }
449 }
450 else
451 {
452 // If the new state is exportable, force full perm
453 if ((itemUpd.EveryOnePermissions & (uint)PermissionMask.Export) != 0)
454 {
455 m_log.InfoFormat("[XXX]: Force full perm");
456 itemUpd.NextPermissions = (uint)(PermissionMask.All);
457 }
458 }
459
421 if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions)) 460 if (item.NextPermissions != (itemUpd.NextPermissions & item.BasePermissions))
422 item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner; 461 item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteNextOwner;
423 item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions; 462 item.NextPermissions = itemUpd.NextPermissions & item.BasePermissions;
463
424 if (item.EveryOnePermissions != (itemUpd.EveryOnePermissions & item.BasePermissions)) 464 if (item.EveryOnePermissions != (itemUpd.EveryOnePermissions & item.BasePermissions))
425 item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteEveryone; 465 item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteEveryone;
426 item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions; 466 item.EveryOnePermissions = itemUpd.EveryOnePermissions & item.BasePermissions;
467
427 if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions)) 468 if (item.GroupPermissions != (itemUpd.GroupPermissions & item.BasePermissions))
428 item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup; 469 item.Flags |= (uint)InventoryItemFlags.ObjectOverwriteGroup;
429
430// m_log.DebugFormat("[USER INVENTORY]: item.Flags {0}", item.Flags);
431
432 item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions; 470 item.GroupPermissions = itemUpd.GroupPermissions & item.BasePermissions;
471
433 item.GroupID = itemUpd.GroupID; 472 item.GroupID = itemUpd.GroupID;
434 item.GroupOwned = itemUpd.GroupOwned; 473 item.GroupOwned = itemUpd.GroupOwned;
435 item.CreationDate = itemUpd.CreationDate; 474 item.CreationDate = itemUpd.CreationDate;
@@ -451,6 +490,7 @@ namespace OpenSim.Region.Framework.Scenes
451 item.SaleType = itemUpd.SaleType; 490 item.SaleType = itemUpd.SaleType;
452 491
453 InventoryService.UpdateItem(item); 492 InventoryService.UpdateItem(item);
493 remoteClient.SendBulkUpdateInventory(item);
454 } 494 }
455 495
456 if (UUID.Zero != transactionID) 496 if (UUID.Zero != transactionID)