diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 695202f..ac4705c 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -159,7 +159,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
159 | client.OnParcelSelectObjects += ClientOnParcelSelectObjects; | 159 | client.OnParcelSelectObjects += ClientOnParcelSelectObjects; |
160 | client.OnParcelObjectOwnerRequest += ClientOnParcelObjectOwnerRequest; | 160 | client.OnParcelObjectOwnerRequest += ClientOnParcelObjectOwnerRequest; |
161 | client.OnParcelAccessListRequest += ClientOnParcelAccessListRequest; | 161 | client.OnParcelAccessListRequest += ClientOnParcelAccessListRequest; |
162 | client.OnParcelAccessListUpdateRequest += ClientOnParcelAccessUpdateListRequest; | 162 | client.OnParcelAccessListUpdateRequest += ClientOnParcelAccessListUpdateRequest; |
163 | client.OnParcelAbandonRequest += ClientOnParcelAbandonRequest; | 163 | client.OnParcelAbandonRequest += ClientOnParcelAbandonRequest; |
164 | client.OnParcelGodForceOwner += ClientOnParcelGodForceOwner; | 164 | client.OnParcelGodForceOwner += ClientOnParcelGodForceOwner; |
165 | client.OnParcelReclaim += ClientOnParcelReclaim; | 165 | client.OnParcelReclaim += ClientOnParcelReclaim; |
@@ -508,14 +508,22 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
508 | 508 | ||
509 | if (land != null) | 509 | if (land != null) |
510 | { | 510 | { |
511 | m_landList[landLocalID].SendAccessList(agentID, sessionID, flags, sequenceID, remote_client); | 511 | land.SendAccessList(agentID, sessionID, flags, sequenceID, remote_client); |
512 | } | 512 | } |
513 | } | 513 | } |
514 | 514 | ||
515 | public void ClientOnParcelAccessUpdateListRequest(UUID agentID, UUID sessionID, uint flags, int landLocalID, | 515 | public void ClientOnParcelAccessListUpdateRequest(UUID agentID, |
516 | List<ParcelManager.ParcelAccessEntry> entries, | 516 | uint flags, int landLocalID, UUID transactionID, int sequenceID, |
517 | IClientAPI remote_client) | 517 | int sections, List<ParcelManager.ParcelAccessEntry> entries, |
518 | IClientAPI remote_client) | ||
518 | { | 519 | { |
520 | // Flags is the list to update, it can mean either the ban or | ||
521 | // the access list (WTH is a pass list? Mentioned in ParcelFlags) | ||
522 | // | ||
523 | // There may be multiple packets, because these can get LONG. | ||
524 | // Use transactionID to determine a new chain of packets since | ||
525 | // packets may have come in out of sequence and that would be | ||
526 | // a big mess if using the sequenceID | ||
519 | ILandObject land; | 527 | ILandObject land; |
520 | lock (m_landList) | 528 | lock (m_landList) |
521 | { | 529 | { |
@@ -524,9 +532,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
524 | 532 | ||
525 | if (land != null) | 533 | if (land != null) |
526 | { | 534 | { |
527 | if (agentID == land.LandData.OwnerID) | 535 | GroupPowers requiredPowers = GroupPowers.LandManageAllowed; |
536 | if (flags == (uint)AccessList.Ban) | ||
537 | requiredPowers = GroupPowers.LandManageBanned; | ||
538 | |||
539 | if (m_scene.Permissions.CanEditParcelProperties(agentID, | ||
540 | land, requiredPowers)) | ||
528 | { | 541 | { |
529 | land.UpdateAccessList(flags, entries, remote_client); | 542 | land.UpdateAccessList(flags, transactionID, sequenceID, |
543 | sections, entries, remote_client); | ||
530 | } | 544 | } |
531 | } | 545 | } |
532 | else | 546 | else |
@@ -854,7 +868,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
854 | 868 | ||
855 | //If we are still here, then they are subdividing within one piece of land | 869 | //If we are still here, then they are subdividing within one piece of land |
856 | //Check owner | 870 | //Check owner |
857 | if (!m_scene.Permissions.CanEditParcel(attempting_user_id, startLandObject)) | 871 | if (!m_scene.Permissions.CanEditParcelProperties(attempting_user_id, startLandObject, GroupPowers.LandDivideJoin)) |
858 | { | 872 | { |
859 | return; | 873 | return; |
860 | } | 874 | } |
@@ -922,7 +936,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
922 | { | 936 | { |
923 | return; | 937 | return; |
924 | } | 938 | } |
925 | if (!m_scene.Permissions.CanEditParcel(attempting_user_id, masterLandObject)) | 939 | if (!m_scene.Permissions.CanEditParcelProperties(attempting_user_id, masterLandObject, GroupPowers.LandDivideJoin)) |
926 | { | 940 | { |
927 | return; | 941 | return; |
928 | } | 942 | } |
@@ -1570,7 +1584,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1570 | 1584 | ||
1571 | if (land == null) return; | 1585 | if (land == null) return; |
1572 | 1586 | ||
1573 | if (!m_scene.Permissions.CanEditParcel(remoteClient.AgentId, land)) | 1587 | if (!m_scene.Permissions.CanEditParcelProperties(remoteClient.AgentId, land, GroupPowers.LandOptions)) |
1574 | return; | 1588 | return; |
1575 | 1589 | ||
1576 | land.LandData.OtherCleanTime = otherCleanTime; | 1590 | land.LandData.OtherCleanTime = otherCleanTime; |