aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.Inventory.cs18
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneExternalChecks.cs143
2 files changed, 150 insertions, 11 deletions
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