aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-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