diff options
author | UbitUmarov | 2017-01-21 14:22:32 +0000 |
---|---|---|
committer | UbitUmarov | 2017-01-21 14:22:32 +0000 |
commit | c14ec1a9bdefc01ae817c17973d85daec10ebb3d (patch) | |
tree | 5f376cc0f89420cce9bfcfa72b624e07cc4a66cb /OpenSim/Region/CoreModules/World | |
parent | fix CanReturnObjects (diff) | |
download | opensim-SC-c14ec1a9bdefc01ae817c17973d85daec10ebb3d.zip opensim-SC-c14ec1a9bdefc01ae817c17973d85daec10ebb3d.tar.gz opensim-SC-c14ec1a9bdefc01ae817c17973d85daec10ebb3d.tar.bz2 opensim-SC-c14ec1a9bdefc01ae817c17973d85daec10ebb3d.tar.xz |
a few more changes on permissions
Diffstat (limited to 'OpenSim/Region/CoreModules/World')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | 98 |
1 files changed, 47 insertions, 51 deletions
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index f3afac7..890d07a 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -69,10 +69,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
69 | } | 69 | } |
70 | 70 | ||
71 | #region Constants | 71 | #region Constants |
72 | // These are here for testing. They will be taken out | ||
73 | |||
74 | private uint PERM_LOCKED = (uint)524288; // same as move | ||
75 | |||
76 | /// <value> | 72 | /// <value> |
77 | /// Different user set names that come in from the configuration file. | 73 | /// Different user set names that come in from the configuration file. |
78 | /// </value> | 74 | /// </value> |
@@ -866,7 +862,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
866 | return 0; | 862 | return 0; |
867 | 863 | ||
868 | UUID objectOwner = group.OwnerID; | 864 | UUID objectOwner = group.OwnerID; |
869 | bool locked = denyOnLocked && ((root.OwnerMask & PERM_LOCKED) == 0); | 865 | bool locked = denyOnLocked && ((root.OwnerMask & (uint)PermissionMask.Move) == 0); |
870 | 866 | ||
871 | if (IsAdministrator(currentUser)) | 867 | if (IsAdministrator(currentUser)) |
872 | { | 868 | { |
@@ -920,7 +916,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
920 | UUID spID = sp.UUID; | 916 | UUID spID = sp.UUID; |
921 | UUID objectOwner = group.OwnerID; | 917 | UUID objectOwner = group.OwnerID; |
922 | 918 | ||
923 | bool locked = denyOnLocked && ((root.OwnerMask & PERM_LOCKED) == 0); | 919 | bool locked = denyOnLocked && ((root.OwnerMask & (uint)PermissionMask.Move) == 0); |
924 | 920 | ||
925 | if (sp.IsGod) | 921 | if (sp.IsGod) |
926 | { | 922 | { |
@@ -960,12 +956,14 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
960 | return group.EffectiveEveryOnePerms & lockmask; | 956 | return group.EffectiveEveryOnePerms & lockmask; |
961 | } | 957 | } |
962 | 958 | ||
963 | private uint GetObjectItemPermissions(UUID userID, TaskInventoryItem ti, bool notEveryone) | 959 | private uint GetObjectItemPermissions(UUID userID, TaskInventoryItem ti) |
964 | { | 960 | { |
965 | UUID tiOwnerID = ti.OwnerID; | 961 | UUID tiOwnerID = ti.OwnerID; |
966 | if(tiOwnerID == userID) | 962 | if(tiOwnerID == userID) |
967 | return ti.CurrentPermissions; | 963 | return ti.CurrentPermissions; |
968 | 964 | ||
965 | if(IsAdministrator(userID)) | ||
966 | return (uint)PermissionMask.AllEffective; | ||
969 | // ?? | 967 | // ?? |
970 | if (IsFriendWithPerms(userID, tiOwnerID)) | 968 | if (IsFriendWithPerms(userID, tiOwnerID)) |
971 | return ti.CurrentPermissions; | 969 | return ti.CurrentPermissions; |
@@ -981,17 +979,11 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
981 | if((powers & (ulong)GroupPowers.ObjectManipulate) != 0) | 979 | if((powers & (ulong)GroupPowers.ObjectManipulate) != 0) |
982 | return ti.CurrentPermissions; | 980 | return ti.CurrentPermissions; |
983 | } | 981 | } |
984 | uint p = ti.GroupPermissions; | 982 | return ti.GroupPermissions; |
985 | if(!notEveryone) | ||
986 | p |= ti.EveryonePermissions; | ||
987 | return p; | ||
988 | } | 983 | } |
989 | } | 984 | } |
990 | 985 | ||
991 | if(notEveryone) | 986 | return 0; |
992 | return 0; | ||
993 | |||
994 | return ti.EveryonePermissions; | ||
995 | } | 987 | } |
996 | 988 | ||
997 | private uint GetObjectItemPermissions(ScenePresence sp, TaskInventoryItem ti, bool notEveryone) | 989 | private uint GetObjectItemPermissions(ScenePresence sp, TaskInventoryItem ti, bool notEveryone) |
@@ -1104,19 +1096,24 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1104 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1096 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1105 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1097 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1106 | 1098 | ||
1107 | if (parcel.LandData.OwnerID != user) // Only the owner can deed! | 1099 | if(parcel.LandData.GroupID == UUID.Zero) |
1108 | return false; | 1100 | return false; |
1109 | 1101 | ||
1110 | if(parcel.LandData.GroupID == UUID.Zero) | 1102 | if (IsAdministrator(user)) |
1103 | return true; | ||
1104 | |||
1105 | if (parcel.LandData.OwnerID != user) // Only the owner can deed! | ||
1111 | return false; | 1106 | return false; |
1112 | 1107 | ||
1113 | ScenePresence sp = scene.GetScenePresence(user); | 1108 | ScenePresence sp = scene.GetScenePresence(user); |
1114 | IClientAPI client = sp.ControllingClient; | 1109 | if(sp == null) |
1110 | return false; | ||
1115 | 1111 | ||
1112 | IClientAPI client = sp.ControllingClient; | ||
1116 | if ((client.GetGroupPowers(parcel.LandData.GroupID) & (ulong)GroupPowers.LandDeed) == 0) | 1113 | if ((client.GetGroupPowers(parcel.LandData.GroupID) & (ulong)GroupPowers.LandDeed) == 0) |
1117 | return false; | 1114 | return false; |
1118 | 1115 | ||
1119 | return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandDeed, false); | 1116 | return true; |
1120 | } | 1117 | } |
1121 | 1118 | ||
1122 | private bool CanDeedObject(ScenePresence sp, SceneObjectGroup sog, UUID targetGroupID) | 1119 | private bool CanDeedObject(ScenePresence sp, SceneObjectGroup sog, UUID targetGroupID) |
@@ -1383,13 +1380,10 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1383 | if (IsAdministrator(user)) | 1380 | if (IsAdministrator(user)) |
1384 | return true; | 1381 | return true; |
1385 | 1382 | ||
1386 | if (m_scene.RegionInfo.EstateSettings.IsEstateOwner(user)) | ||
1387 | return true; | ||
1388 | |||
1389 | if (ownerCommand) | 1383 | if (ownerCommand) |
1390 | return false; | 1384 | return m_scene.RegionInfo.EstateSettings.IsEstateOwner(user); |
1391 | 1385 | ||
1392 | return GenericEstatePermission(user); | 1386 | return IsEstateManager(user); |
1393 | } | 1387 | } |
1394 | 1388 | ||
1395 | private bool CanMoveObject(SceneObjectGroup sog, ScenePresence sp) | 1389 | private bool CanMoveObject(SceneObjectGroup sog, ScenePresence sp) |
@@ -1764,7 +1758,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1764 | /// <param name="user"></param> | 1758 | /// <param name="user"></param> |
1765 | /// <param name="scene"></param> | 1759 | /// <param name="scene"></param> |
1766 | /// <returns></returns> | 1760 | /// <returns></returns> |
1767 | private bool CanViewScript(UUID script, UUID objectID, UUID user, Scene scene) | 1761 | private bool CanViewScript(UUID script, UUID objectID, UUID userID, Scene scene) |
1768 | { | 1762 | { |
1769 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1763 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1770 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1764 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
@@ -1772,7 +1766,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1772 | if (objectID == UUID.Zero) // User inventory | 1766 | if (objectID == UUID.Zero) // User inventory |
1773 | { | 1767 | { |
1774 | IInventoryService invService = m_scene.InventoryService; | 1768 | IInventoryService invService = m_scene.InventoryService; |
1775 | InventoryItemBase assetRequestItem = invService.GetItem(user, script); | 1769 | InventoryItemBase assetRequestItem = invService.GetItem(userID, script); |
1776 | if (assetRequestItem == null && LibraryRootFolder != null) // Library item | 1770 | if (assetRequestItem == null && LibraryRootFolder != null) // Library item |
1777 | { | 1771 | { |
1778 | assetRequestItem = LibraryRootFolder.FindItem(script); | 1772 | assetRequestItem = LibraryRootFolder.FindItem(script); |
@@ -1792,12 +1786,16 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1792 | // readable only if it's really full perms | 1786 | // readable only if it's really full perms |
1793 | // | 1787 | // |
1794 | if ((assetRequestItem.CurrentPermissions & | 1788 | if ((assetRequestItem.CurrentPermissions & |
1789 | /* | ||
1795 | ((uint)PermissionMask.Modify | | 1790 | ((uint)PermissionMask.Modify | |
1796 | (uint)PermissionMask.Copy | | 1791 | (uint)PermissionMask.Copy | |
1797 | (uint)PermissionMask.Transfer)) != | 1792 | (uint)PermissionMask.Transfer)) != |
1798 | ((uint)PermissionMask.Modify | | 1793 | ((uint)PermissionMask.Modify | |
1799 | (uint)PermissionMask.Copy | | 1794 | (uint)PermissionMask.Copy | |
1800 | (uint)PermissionMask.Transfer)) | 1795 | (uint)PermissionMask.Transfer)) |
1796 | */ | ||
1797 | (uint)(PermissionMask.Modify | PermissionMask.Copy)) != | ||
1798 | (uint)(PermissionMask.Modify | PermissionMask.Copy)) | ||
1801 | return false; | 1799 | return false; |
1802 | } | 1800 | } |
1803 | else // Prim inventory | 1801 | else // Prim inventory |
@@ -1810,7 +1808,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1810 | if (sog == null) | 1808 | if (sog == null) |
1811 | return false; | 1809 | return false; |
1812 | 1810 | ||
1813 | uint perms = GetObjectPermissions(user, sog, true); | 1811 | uint perms = GetObjectPermissions(userID, sog, true); |
1814 | if((perms & (uint)PermissionMask.Modify) == 0) | 1812 | if((perms & (uint)PermissionMask.Modify) == 0) |
1815 | return false; | 1813 | return false; |
1816 | 1814 | ||
@@ -1820,23 +1818,21 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1820 | if (ti == null) // legacy may not have type | 1818 | if (ti == null) // legacy may not have type |
1821 | return false; | 1819 | return false; |
1822 | 1820 | ||
1823 | if (ti.OwnerID != user) | 1821 | uint itperms = GetObjectItemPermissions(userID, ti); |
1824 | { | ||
1825 | if (ti.GroupID == UUID.Zero) | ||
1826 | return false; | ||
1827 | |||
1828 | if (!IsGroupMember(ti.GroupID, user, 0)) | ||
1829 | return false; | ||
1830 | } | ||
1831 | 1822 | ||
1832 | // Require full perms | 1823 | // Require full perms |
1833 | if ((ti.CurrentPermissions & | 1824 | |
1834 | ((uint)PermissionMask.Modify | | 1825 | if ((itperms & |
1826 | /* | ||
1827 | ((uint)(PermissionMask.Modify | | ||
1835 | (uint)PermissionMask.Copy | | 1828 | (uint)PermissionMask.Copy | |
1836 | (uint)PermissionMask.Transfer)) != | 1829 | (uint)PermissionMask.Transfer)) != |
1837 | ((uint)PermissionMask.Modify | | 1830 | ((uint)PermissionMask.Modify | |
1838 | (uint)PermissionMask.Copy | | 1831 | (uint)PermissionMask.Copy | |
1839 | (uint)PermissionMask.Transfer)) | 1832 | (uint)PermissionMask.Transfer)) |
1833 | */ | ||
1834 | (uint)(PermissionMask.Modify | PermissionMask.Copy)) != | ||
1835 | (uint)(PermissionMask.Modify | PermissionMask.Copy)) | ||
1840 | return false; | 1836 | return false; |
1841 | } | 1837 | } |
1842 | 1838 | ||
@@ -1851,7 +1847,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1851 | /// <param name="user"></param> | 1847 | /// <param name="user"></param> |
1852 | /// <param name="scene"></param> | 1848 | /// <param name="scene"></param> |
1853 | /// <returns></returns> | 1849 | /// <returns></returns> |
1854 | private bool CanViewNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) | 1850 | private bool CanViewNotecard(UUID notecard, UUID objectID, UUID userID, Scene scene) |
1855 | { | 1851 | { |
1856 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1852 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1857 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1853 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
@@ -1859,7 +1855,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1859 | if (objectID == UUID.Zero) // User inventory | 1855 | if (objectID == UUID.Zero) // User inventory |
1860 | { | 1856 | { |
1861 | IInventoryService invService = m_scene.InventoryService; | 1857 | IInventoryService invService = m_scene.InventoryService; |
1862 | InventoryItemBase assetRequestItem = invService.GetItem(user, notecard); | 1858 | InventoryItemBase assetRequestItem = invService.GetItem(userID, notecard); |
1863 | if (assetRequestItem == null && LibraryRootFolder != null) // Library item | 1859 | if (assetRequestItem == null && LibraryRootFolder != null) // Library item |
1864 | { | 1860 | { |
1865 | assetRequestItem = LibraryRootFolder.FindItem(notecard); | 1861 | assetRequestItem = LibraryRootFolder.FindItem(notecard); |
@@ -1885,7 +1881,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1885 | if (sog == null) | 1881 | if (sog == null) |
1886 | return false; | 1882 | return false; |
1887 | 1883 | ||
1888 | uint perms = GetObjectPermissions(user, sog, true); | 1884 | uint perms = GetObjectPermissions(userID, sog, true); |
1889 | if((perms & (uint)PermissionMask.Modify) == 0) | 1885 | if((perms & (uint)PermissionMask.Modify) == 0) |
1890 | return false; | 1886 | return false; |
1891 | 1887 | ||
@@ -1895,18 +1891,11 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1895 | if (ti == null) | 1891 | if (ti == null) |
1896 | return false; | 1892 | return false; |
1897 | 1893 | ||
1898 | if (ti.OwnerID != user) | 1894 | uint itperms = GetObjectItemPermissions(userID, ti); |
1899 | { | ||
1900 | if (ti.GroupID == UUID.Zero) | ||
1901 | return false; | ||
1902 | |||
1903 | if (!IsGroupMember(ti.GroupID, user, 0)) | ||
1904 | return false; | ||
1905 | } | ||
1906 | 1895 | ||
1907 | // Notecards are always readable unless no copy | 1896 | // Notecards are always readable unless no copy |
1908 | // | 1897 | // |
1909 | if ((ti.CurrentPermissions & | 1898 | if ((itperms & |
1910 | (uint)PermissionMask.Copy) != | 1899 | (uint)PermissionMask.Copy) != |
1911 | (uint)PermissionMask.Copy) | 1900 | (uint)PermissionMask.Copy) |
1912 | return false; | 1901 | return false; |
@@ -1976,7 +1965,14 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1976 | if(ti == null) | 1965 | if(ti == null) |
1977 | return false; | 1966 | return false; |
1978 | 1967 | ||
1979 | //TODO item perm ? | 1968 | uint itperms = GetObjectItemPermissions(userID, ti); |
1969 | |||
1970 | if((itperms & (uint)PermissionMask.Copy) == 0) | ||
1971 | return false; | ||
1972 | |||
1973 | if(sog.OwnerID != userID && (itperms & (uint)PermissionMask.Transfer) == 0) | ||
1974 | return false; | ||
1975 | |||
1980 | return true; | 1976 | return true; |
1981 | } | 1977 | } |
1982 | 1978 | ||