aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-11-13 20:29:41 +0000
committerJustin Clarke Casey2008-11-13 20:29:41 +0000
commitbd61b946df3b0589b03b23780a0eb3883268220d (patch)
treec1ea479c95d83b2a11e537761e3cf4b5207b3320
parent* refactor: rename object inventory permission checks to distinguish between ... (diff)
downloadopensim-SC_OLD-bd61b946df3b0589b03b23780a0eb3883268220d.zip
opensim-SC_OLD-bd61b946df3b0589b03b23780a0eb3883268220d.tar.gz
opensim-SC_OLD-bd61b946df3b0589b03b23780a0eb3883268220d.tar.bz2
opensim-SC_OLD-bd61b946df3b0589b03b23780a0eb3883268220d.tar.xz
* Add
public bool ExternalChecksCanCreateAvatarInventory(int invType, UUID userID) public bool ExternalChecksCanCopyAvatarInventory(UUID itemID, UUID userID) public bool ExternalChecksCanCopyAvatarInventory(UUID itemID, UUID userID) public bool ExternalChecksCanDeleteAvatarInventory(UUID itemID, UUID userID) to ExternalChecks to handle avatar inventory checks (as opposed to object inv checks). * opensim-dev e-mail to follow concerning this shortly
-rw-r--r--OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs68
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.Inventory.cs18
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs143
3 files changed, 214 insertions, 15 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
index 394690c..8ecea9e 100644
--- a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
@@ -186,7 +186,10 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
186 m_scene.ExternalChecks.addCheckCanBuyLand(CanBuyLand); //NOT YET IMPLEMENTED 186 m_scene.ExternalChecks.addCheckCanBuyLand(CanBuyLand); //NOT YET IMPLEMENTED
187 m_scene.ExternalChecks.addCheckCanCopyObjectInventory(CanCopyObjectInventory); //NOT YET IMPLEMENTED 187 m_scene.ExternalChecks.addCheckCanCopyObjectInventory(CanCopyObjectInventory); //NOT YET IMPLEMENTED
188 m_scene.ExternalChecks.addCheckCanDeleteObjectInventory(CanDeleteObjectInventory); //NOT YET IMPLEMENTED 188 m_scene.ExternalChecks.addCheckCanDeleteObjectInventory(CanDeleteObjectInventory); //NOT YET IMPLEMENTED
189 m_scene.ExternalChecks.addCheckCanCreateObjectInventory(CanCreateObjectInventory); //NOT YET IMPLEMENTED 189 m_scene.ExternalChecks.addCheckCanCreateAvatarInventory(CanCreateAvatarInventory); //NOT YET IMPLEMENTED
190 m_scene.ExternalChecks.addCheckCanCopyAvatarInventory(CanCopyAvatarInventory); //NOT YET IMPLEMENTED
191 m_scene.ExternalChecks.addCheckCanEditAvatarInventory(CanEditAvatarInventory); //NOT YET IMPLEMENTED
192 m_scene.ExternalChecks.addCheckCanDeleteAvatarInventory(CanDeleteAvatarInventory); //NOT YET IMPLEMENTED
190 m_scene.ExternalChecks.addCheckCanTeleport(CanTeleport); //NOT YET IMPLEMENTED 193 m_scene.ExternalChecks.addCheckCanTeleport(CanTeleport); //NOT YET IMPLEMENTED
191 194
192 //Register Debug Commands 195 //Register Debug Commands
@@ -1219,8 +1222,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
1219 1222
1220 /// <summary> 1223 /// <summary>
1221 /// Check whether the specified user is allowed to directly create the given inventory type in a prim's 1224 /// Check whether the specified user is allowed to directly create the given inventory type in a prim's
1222 /// inventory (e.g. the New Script button in the 1.21 Linden Lab client). This permission check does not 1225 /// inventory (e.g. the New Script button in the 1.21 Linden Lab client).
1223 /// apply to existing items that are being dragged in to that prim's inventory.
1224 /// </summary> 1226 /// </summary>
1225 /// <param name="invType"></param> 1227 /// <param name="invType"></param>
1226 /// <param name="objectID"></param> 1228 /// <param name="objectID"></param>
@@ -1228,13 +1230,71 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
1228 /// <returns></returns> 1230 /// <returns></returns>
1229 public bool CanCreateObjectInventory(int invType, UUID objectID, UUID userID) 1231 public bool CanCreateObjectInventory(int invType, UUID objectID, UUID userID)
1230 { 1232 {
1231 m_log.Debug("[PERMISSIONS]: CanCreateInventory called"); 1233 //m_log.Debug("[PERMISSIONS]: CanCreateObjectInventory called");
1232 1234
1233 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1235 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1234 if (m_bypassPermissions) return m_bypassPermissionsValue; 1236 if (m_bypassPermissions) return m_bypassPermissionsValue;
1235 1237
1236 return true; 1238 return true;
1237 } 1239 }
1240
1241 /// <summary>
1242 /// Check whether the specified user is allowed to create the given inventory type in their inventory.
1243 /// </summary>
1244 /// <param name="invType"></param>
1245 /// <param name="userID"></param>
1246 /// <returns></returns>
1247 public bool CanCreateAvatarInventory(int invType, UUID userID)
1248 {
1249 //m_log.Debug("[PERMISSIONS]: CanCreateAvatarInventory called");
1250
1251 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1252 if (m_bypassPermissions) return m_bypassPermissionsValue;
1253
1254 return true;
1255 }
1256
1257 /// <summary>
1258 /// Check whether the specified user is allowed to copy the given inventory type in their inventory.
1259 /// </summary>
1260 /// <param name="itemID"></param>
1261 /// <param name="userID"></param>
1262 /// <returns></returns>
1263 public bool CanCopyAvatarInventory(UUID itemID, UUID userID)
1264 {
1265 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1266 if (m_bypassPermissions) return m_bypassPermissionsValue;
1267
1268 return true;
1269 }
1270
1271 /// <summary>
1272 /// Check whether the specified user is allowed to edit the given inventory item within their own inventory.
1273 /// </summary>
1274 /// <param name="itemID"></param>
1275 /// <param name="userID"></param>
1276 /// <returns></returns>
1277 public bool CanEditAvatarInventory(UUID itemID, UUID userID)
1278 {
1279 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1280 if (m_bypassPermissions) return m_bypassPermissionsValue;
1281
1282 return true;
1283 }
1284
1285 /// <summary>
1286 /// Check whether the specified user is allowed to delete the given inventory item from their own inventory.
1287 /// </summary>
1288 /// <param name="itemID"></param>
1289 /// <param name="userID"></param>
1290 /// <returns></returns>
1291 public bool CanDeleteAvatarInventory(UUID itemID, UUID userID)
1292 {
1293 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1294 if (m_bypassPermissions) return m_bypassPermissionsValue;
1295
1296 return true;
1297 }
1238 1298
1239 public bool CanTeleport(UUID userID) 1299 public bool CanTeleport(UUID userID)
1240 { 1300 {
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index d47e068..e548f36 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -759,8 +759,11 @@ namespace OpenSim.Region.Environment.Scenes
759 sbyte assetType, 759 sbyte assetType,
760 byte wearableType, uint nextOwnerMask, int creationDate) 760 byte wearableType, uint nextOwnerMask, int creationDate)
761 { 761 {
762// m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID); 762 m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID);
763 763
764 if (!ExternalChecks.ExternalChecksCanCreateAvatarInventory(invType, remoteClient.AgentId))
765 return;
766
764 if (transactionID == UUID.Zero) 767 if (transactionID == UUID.Zero)
765 { 768 {
766 CachedUserInfo userInfo 769 CachedUserInfo userInfo
@@ -771,14 +774,16 @@ namespace OpenSim.Region.Environment.Scenes
771 ScenePresence presence; 774 ScenePresence presence;
772 TryGetAvatar(remoteClient.AgentId, out presence); 775 TryGetAvatar(remoteClient.AgentId, out presence);
773 byte[] data = null; 776 byte[] data = null;
777
774 if (invType == 3 && presence != null) // OpenMetaverse.asset.assettype.landmark = 3 - needs to be turned into an enum 778 if (invType == 3 && presence != null) // OpenMetaverse.asset.assettype.landmark = 3 - needs to be turned into an enum
775 { 779 {
776 Vector3 pos=presence.AbsolutePosition; 780 Vector3 pos = presence.AbsolutePosition;
777 string strdata=String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", 781 string strdata = String.Format(
782 "Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n",
778 presence.Scene.RegionInfo.RegionID, 783 presence.Scene.RegionInfo.RegionID,
779 pos.X, pos.Y, pos.Z, 784 pos.X, pos.Y, pos.Z,
780 presence.RegionHandle); 785 presence.RegionHandle);
781 data=Encoding.ASCII.GetBytes(strdata); 786 data = Encoding.ASCII.GetBytes(strdata);
782 } 787 }
783 788
784 AssetBase asset = CreateAsset(name, description, assetType, data); 789 AssetBase asset = CreateAsset(name, description, assetType, data);
@@ -1245,9 +1250,7 @@ namespace OpenSim.Region.Environment.Scenes
1245 if (part != null) 1250 if (part != null)
1246 { 1251 {
1247 if (!ExternalChecks.ExternalChecksCanEditObjectInventory(part.UUID, remoteClient.AgentId)) 1252 if (!ExternalChecks.ExternalChecksCanEditObjectInventory(part.UUID, remoteClient.AgentId))
1248 {
1249 return; 1253 return;
1250 }
1251 1254
1252 TaskInventoryItem currentItem = part.GetInventoryItem(itemID); 1255 TaskInventoryItem currentItem = part.GetInventoryItem(itemID);
1253 1256
@@ -1344,9 +1347,7 @@ namespace OpenSim.Region.Environment.Scenes
1344 if (part != null) 1347 if (part != null)
1345 { 1348 {
1346 if (!ExternalChecks.ExternalChecksCanEditObjectInventory(part.UUID, remoteClient.AgentId)) 1349 if (!ExternalChecks.ExternalChecksCanEditObjectInventory(part.UUID, remoteClient.AgentId))
1347 {
1348 return; 1350 return;
1349 }
1350 1351
1351 part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID); 1352 part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID);
1352 // TODO: switch to posting on_rez here when scripts 1353 // TODO: switch to posting on_rez here when scripts
@@ -1573,7 +1574,6 @@ namespace OpenSim.Region.Environment.Scenes
1573 //If they can take, they can delete! 1574 //If they can take, they can delete!
1574 permissionToDelete = permissionToTake; 1575 permissionToDelete = permissionToTake;
1575 } 1576 }
1576
1577 else if (destination == 6) //Delete 1577 else if (destination == 6) //Delete
1578 { 1578 {
1579 permissionToTake = 1579 permissionToTake =
diff --git a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs
index 0e018e8..cc627b0 100644
--- a/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs
@@ -1089,8 +1089,7 @@ namespace OpenSim.Region.Environment.Scenes
1089 1089
1090 /// <summary> 1090 /// <summary>
1091 /// Check whether the specified user is allowed to directly create the given inventory type in a prim's 1091 /// Check whether the specified user is allowed to directly create the given inventory type in a prim's
1092 /// inventory (e.g. the New Script button in the 1.21 Linden Lab client). This permission check does not 1092 /// inventory (e.g. the New Script button in the 1.21 Linden Lab client).
1093 /// apply to existing items that are being dragged in to that prim's inventory.
1094 /// </summary> 1093 /// </summary>
1095 /// <param name="invType"></param> 1094 /// <param name="invType"></param>
1096 /// <param name="objectID"></param> 1095 /// <param name="objectID"></param>
@@ -1164,7 +1163,147 @@ namespace OpenSim.Region.Environment.Scenes
1164 1163
1165 return true; 1164 return true;
1166 } 1165 }
1166
1167 public delegate bool CanCreateAvatarInventory(int invType, UUID userID);
1168 private List<CanCreateAvatarInventory> CanCreateAvatarInventoryCheckFunctions
1169 = new List<CanCreateAvatarInventory>();
1170
1171 public void addCheckCanCreateAvatarInventory(CanCreateAvatarInventory delegateFunc)
1172 {
1173 if (!CanCreateAvatarInventoryCheckFunctions.Contains(delegateFunc))
1174 CanCreateAvatarInventoryCheckFunctions.Add(delegateFunc);
1175 }
1176
1177 public void removeCheckCanCreateAvatarInventory(CanCreateAvatarInventory delegateFunc)
1178 {
1179 if (CanCreateAvatarInventoryCheckFunctions.Contains(delegateFunc))
1180 CanCreateAvatarInventoryCheckFunctions.Remove(delegateFunc);
1181 }
1182
1183 /// <summary>
1184 /// Check whether the specified user is allowed to create the given inventory type in their inventory.
1185 /// </summary>
1186 /// <param name="invType"></param>
1187 /// <param name="userID"></param>
1188 /// <returns></returns>
1189 public bool ExternalChecksCanCreateAvatarInventory(int invType, UUID userID)
1190 {
1191 foreach (CanCreateAvatarInventory check in CanCreateAvatarInventoryCheckFunctions)
1192 {
1193 if (check(invType, userID) == false)
1194 {
1195 return false;
1196 }
1197 }
1198
1199 return true;
1200 }
1201
1202 public delegate bool CanEditAvatarInventory(UUID itemID, UUID userID);
1203 private List<CanEditAvatarInventory> CanEditAvatarInventoryCheckFunctions
1204 = new List<CanEditAvatarInventory>();
1205
1206 public void addCheckCanEditAvatarInventory(CanEditAvatarInventory delegateFunc)
1207 {
1208 if (!CanEditAvatarInventoryCheckFunctions.Contains(delegateFunc))
1209 CanEditAvatarInventoryCheckFunctions.Add(delegateFunc);
1210 }
1167 1211
1212 public void removeCheckCanEditAvatarInventory(CanEditAvatarInventory delegateFunc)
1213 {
1214 if (CanEditAvatarInventoryCheckFunctions.Contains(delegateFunc))
1215 CanEditAvatarInventoryCheckFunctions.Remove(delegateFunc);
1216 }
1217
1218 /// <summary>
1219 /// Check whether the specified user is allowed to edit the given inventory item within their own inventory.
1220 /// </summary>
1221 /// <param name="itemID"></param>
1222 /// <param name="userID"></param>
1223 /// <returns></returns>
1224 public bool ExternalChecksCanEditAvatarInventory(UUID itemID, UUID userID)
1225 {
1226 foreach (CanEditAvatarInventory check in CanEditAvatarInventoryCheckFunctions)
1227 {
1228 if (check(itemID, userID) == false)
1229 {
1230 return false;
1231 }
1232 }
1233
1234 return true;
1235 }
1236
1237 public delegate bool CanCopyAvatarInventory(UUID itemID, UUID userID);
1238 private List<CanCopyAvatarInventory> CanCopyAvatarInventoryCheckFunctions
1239 = new List<CanCopyAvatarInventory>();
1240
1241 public void addCheckCanCopyAvatarInventory(CanCopyAvatarInventory delegateFunc)
1242 {
1243 if (!CanCopyAvatarInventoryCheckFunctions.Contains(delegateFunc))
1244 CanCopyAvatarInventoryCheckFunctions.Add(delegateFunc);
1245 }
1246
1247 public void removeCheckCanCopyAvatarInventory(CanCopyAvatarInventory delegateFunc)
1248 {
1249 if (CanCopyAvatarInventoryCheckFunctions.Contains(delegateFunc))
1250 CanCopyAvatarInventoryCheckFunctions.Remove(delegateFunc);
1251 }
1252
1253 /// <summary>
1254 /// Check whether the specified user is allowed to copy the given inventory item from their own inventory.
1255 /// </summary>
1256 /// <param name="itemID"></param>
1257 /// <param name="userID"></param>
1258 /// <returns></returns>
1259 public bool ExternalChecksCanCopyAvatarInventory(UUID itemID, UUID userID)
1260 {
1261 foreach (CanCopyAvatarInventory check in CanCopyAvatarInventoryCheckFunctions)
1262 {
1263 if (check(itemID, userID) == false)
1264 {
1265 return false;
1266 }
1267 }
1268
1269 return true;
1270 }
1271
1272 public delegate bool CanDeleteAvatarInventory(UUID itemID, UUID userID);
1273 private List<CanDeleteAvatarInventory> CanDeleteAvatarInventoryCheckFunctions
1274 = new List<CanDeleteAvatarInventory>();
1275
1276 public void addCheckCanDeleteAvatarInventory(CanDeleteAvatarInventory delegateFunc)
1277 {
1278 if (!CanDeleteAvatarInventoryCheckFunctions.Contains(delegateFunc))
1279 CanDeleteAvatarInventoryCheckFunctions.Add(delegateFunc);
1280 }
1281
1282 public void removeCheckCanDeleteAvatarInventory(CanDeleteAvatarInventory delegateFunc)
1283 {
1284 if (CanDeleteAvatarInventoryCheckFunctions.Contains(delegateFunc))
1285 CanDeleteAvatarInventoryCheckFunctions.Remove(delegateFunc);
1286 }
1287
1288 /// <summary>
1289 /// Check whether the specified user is allowed to edit the given inventory item within their own inventory.
1290 /// </summary>
1291 /// <param name="itemID"></param>
1292 /// <param name="userID"></param>
1293 /// <returns></returns>
1294 public bool ExternalChecksCanDeleteAvatarInventory(UUID itemID, UUID userID)
1295 {
1296 foreach (CanDeleteAvatarInventory check in CanDeleteAvatarInventoryCheckFunctions)
1297 {
1298 if (check(itemID, userID) == false)
1299 {
1300 return false;
1301 }
1302 }
1303
1304 return true;
1305 }
1306
1168 public delegate bool CanTeleport(UUID userID); 1307 public delegate bool CanTeleport(UUID userID);
1169 private List<CanTeleport> CanTeleportCheckFunctions = new List<CanTeleport>(); 1308 private List<CanTeleport> CanTeleportCheckFunctions = new List<CanTeleport>();
1170 1309