aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs71
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs30
2 files changed, 91 insertions, 10 deletions
diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
index ce4e921..3c546c4 100644
--- a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
+++ b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
@@ -91,6 +91,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
91 public void AddRegion(Scene scene) 91 public void AddRegion(Scene scene)
92 { 92 {
93 m_scene = scene; 93 m_scene = scene;
94 m_scene.RegisterModuleInterface<IMoapModule>(this);
94 } 95 }
95 96
96 public void RemoveRegion(Scene scene) {} 97 public void RemoveRegion(Scene scene) {}
@@ -156,20 +157,28 @@ namespace OpenSim.Region.CoreModules.Media.Moap
156 157
157 public MediaEntry GetMediaEntry(SceneObjectPart part, int face) 158 public MediaEntry GetMediaEntry(SceneObjectPart part, int face)
158 { 159 {
160 MediaEntry me = null;
161
159 CheckFaceParam(part, face); 162 CheckFaceParam(part, face);
160 163
161 List<MediaEntry> media = part.Shape.Media; 164 List<MediaEntry> media = part.Shape.Media;
162 165
163 if (null == media) 166 if (null == media)
164 { 167 {
165 return null; 168 me = null;
166 } 169 }
167 else 170 else
168 { 171 {
172 me = media[face];
173
169 // TODO: Really need a proper copy constructor down in libopenmetaverse 174 // TODO: Really need a proper copy constructor down in libopenmetaverse
170 MediaEntry me = media[face]; 175 if (me != null)
171 return (null == me ? null : MediaEntry.FromOSD(me.GetOSD())); 176 me = MediaEntry.FromOSD(me.GetOSD());
172 } 177 }
178
179// m_log.DebugFormat("[MOAP]: GetMediaEntry for {0} face {1} found {2}", part.Name, face, me);
180
181 return me;
173 } 182 }
174 183
175 public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me) 184 public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me)
@@ -295,6 +304,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap
295 304
296 if (null == media) 305 if (null == media)
297 { 306 {
307 m_log.DebugFormat("[MOAP]: Setting all new media list for {0}", part.Name);
298 part.Shape.Media = new List<MediaEntry>(omu.FaceMedia); 308 part.Shape.Media = new List<MediaEntry>(omu.FaceMedia);
299 } 309 }
300 else 310 else
@@ -309,7 +319,10 @@ namespace OpenSim.Region.CoreModules.Media.Moap
309 for (int i = 0; i < media.Count; i++) 319 for (int i = 0; i < media.Count; i++)
310 { 320 {
311 if (m_scene.Permissions.CanControlPrimMedia(agentId, part.UUID, i)) 321 if (m_scene.Permissions.CanControlPrimMedia(agentId, part.UUID, i))
322 {
312 media[i] = omu.FaceMedia[i]; 323 media[i] = omu.FaceMedia[i];
324// m_log.DebugFormat("[MOAP]: Set media entry for face {0} on {1}", i, part.Name);
325 }
313 } 326 }
314 } 327 }
315 328
@@ -362,10 +375,31 @@ namespace OpenSim.Region.CoreModules.Media.Moap
362 return string.Empty; 375 return string.Empty;
363 376
364 m_log.DebugFormat( 377 m_log.DebugFormat(
365 "[MOAP]: Updating media entry for face {0} on prim {1} {2} to {3}", 378 "[MOAP]: Received request to update media entry for face {0} on prim {1} {2} to {3}",
366 omn.Face, part.Name, part.UUID, omn.URL); 379 omn.Face, part.Name, part.UUID, omn.URL);
367 380
381 // If media has never been set for this prim, then just return.
382 if (null == part.Shape.Media)
383 return string.Empty;
384
368 MediaEntry me = part.Shape.Media[omn.Face]; 385 MediaEntry me = part.Shape.Media[omn.Face];
386
387 // Do the same if media has not been set up for a specific face
388 if (null == me)
389 return string.Empty;
390
391 if (me.EnableWhiteList)
392 {
393 if (!CheckUrlAgainstWhitelist(omn.URL, me.WhiteList))
394 {
395 m_log.DebugFormat(
396 "[MOAP]: Blocking change of face {0} on prim {1} {2} to {3} since it's not on the enabled whitelist",
397 omn.Face, part.Name, part.UUID, omn.URL);
398
399 return string.Empty;
400 }
401 }
402
369 me.CurrentURL = omn.URL; 403 me.CurrentURL = omn.URL;
370 404
371 UpdateMediaUrl(part); 405 UpdateMediaUrl(part);
@@ -413,5 +447,32 @@ namespace OpenSim.Region.CoreModules.Media.Moap
413 447
414 m_log.DebugFormat("[MOAP]: Storing media url [{0}] in prim {1} {2}", part.MediaUrl, part.Name, part.UUID); 448 m_log.DebugFormat("[MOAP]: Storing media url [{0}] in prim {1} {2}", part.MediaUrl, part.Name, part.UUID);
415 } 449 }
450
451 /// <summary>
452 /// Check the given url against the given whitelist.
453 /// </summary>
454 /// <param name="url"></param>
455 /// <param name="whitelist"></param>
456 /// <returns>true if the url matches an entry on the whitelist, false otherwise</returns>
457 protected bool CheckUrlAgainstWhitelist(string url, string[] whitelist)
458 {
459 foreach (string rawWlUrl in whitelist)
460 {
461 string wlUrl = rawWlUrl;
462
463 if (!wlUrl.StartsWith("http://"))
464 wlUrl = "http://" + wlUrl;
465
466 m_log.DebugFormat("[MOAP]: Checking whitelist URL {0}", wlUrl);
467
468 if (url.StartsWith(wlUrl))
469 {
470 m_log.DebugFormat("[MOAP]: Whitelist url {0} matches requested url {1}", wlUrl, url);
471 return true;
472 }
473 }
474
475 return false;
476 }
416 } 477 }
417} \ No newline at end of file 478} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 3a690af..7f6f851 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -178,7 +178,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
178 178
179 string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule"); 179 string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule");
180 180
181 List<string> modules=new List<string>(permissionModules.Split(',')); 181 List<string> modules = new List<string>(permissionModules.Split(','));
182 182
183 if (!modules.Contains("DefaultPermissionsModule")) 183 if (!modules.Contains("DefaultPermissionsModule"))
184 return; 184 return;
@@ -399,6 +399,10 @@ namespace OpenSim.Region.CoreModules.World.Permissions
399 m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work"); 399 m_log.Warn("[PERMISSIONS]: Groups module not found, group permissions will not work");
400 400
401 m_moapModule = m_scene.RequestModuleInterface<IMoapModule>(); 401 m_moapModule = m_scene.RequestModuleInterface<IMoapModule>();
402
403 // This log line will be commented out when no longer required for debugging
404 if (m_moapModule == null)
405 m_log.Warn("[PERMISSIONS]: Media on a prim module not found, media on a prim permissions will not work");
402 } 406 }
403 407
404 public void Close() 408 public void Close()
@@ -1901,7 +1905,11 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1901 } 1905 }
1902 1906
1903 private bool CanControlPrimMedia(UUID agentID, UUID primID, int face) 1907 private bool CanControlPrimMedia(UUID agentID, UUID primID, int face)
1904 { 1908 {
1909// m_log.DebugFormat(
1910// "[PERMISSONS]: Performing CanControlPrimMedia check with agentID {0}, primID {1}, face {2}",
1911// agentID, primID, face);
1912
1905 if (null == m_moapModule) 1913 if (null == m_moapModule)
1906 return false; 1914 return false;
1907 1915
@@ -1909,17 +1917,25 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1909 if (null == part) 1917 if (null == part)
1910 return false; 1918 return false;
1911 1919
1912 MediaEntry me = m_moapModule.GetMediaEntry(part, face); 1920 MediaEntry me = m_moapModule.GetMediaEntry(part, face);
1913 1921
1914 // If there is no existing media entry then it can be controlled (in this context, created). 1922 // If there is no existing media entry then it can be controlled (in this context, created).
1915 if (null == me) 1923 if (null == me)
1916 return true; 1924 return true;
1917 1925
1926 m_log.DebugFormat(
1927 "[PERMISSIONS]: Checking CanControlPrimMedia for {0} on {1} face {2} with control permissions {3}",
1928 agentID, primID, face, me.ControlPermissions);
1929
1918 return GenericPrimMediaPermission(part, agentID, me.ControlPermissions); 1930 return GenericPrimMediaPermission(part, agentID, me.ControlPermissions);
1919 } 1931 }
1920 1932
1921 private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face) 1933 private bool CanInteractWithPrimMedia(UUID agentID, UUID primID, int face)
1922 { 1934 {
1935// m_log.DebugFormat(
1936// "[PERMISSONS]: Performing CanInteractWithPrimMedia check with agentID {0}, primID {1}, face {2}",
1937// agentID, primID, face);
1938
1923 if (null == m_moapModule) 1939 if (null == m_moapModule)
1924 return false; 1940 return false;
1925 1941
@@ -1933,13 +1949,17 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1933 if (null == me) 1949 if (null == me)
1934 return true; 1950 return true;
1935 1951
1952 m_log.DebugFormat(
1953 "[PERMISSIONS]: Checking CanInteractWithPrimMedia for {0} on {1} face {2} with interact permissions {3}",
1954 agentID, primID, face, me.InteractPermissions);
1955
1936 return GenericPrimMediaPermission(part, agentID, me.InteractPermissions); 1956 return GenericPrimMediaPermission(part, agentID, me.InteractPermissions);
1937 } 1957 }
1938 1958
1939 private bool GenericPrimMediaPermission(SceneObjectPart part, UUID agentID, MediaPermission perms) 1959 private bool GenericPrimMediaPermission(SceneObjectPart part, UUID agentID, MediaPermission perms)
1940 { 1960 {
1941 if (IsAdministrator(agentID)) 1961// if (IsAdministrator(agentID))
1942 return true; 1962// return true;
1943 1963
1944 if ((perms & MediaPermission.Anyone) == MediaPermission.Anyone) 1964 if ((perms & MediaPermission.Anyone) == MediaPermission.Anyone)
1945 return true; 1965 return true;