aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorTeravus Ovares2008-08-26 05:20:46 +0000
committerTeravus Ovares2008-08-26 05:20:46 +0000
commitb3a6f8d688fa68d45cde43d81c1e7607e4f7cf57 (patch)
treee9b66194e28d505c5d5123382f9dc3b1b903b8f0
parent* Fixed a bug that occurred if your home region wasn't logged in, in standalo... (diff)
downloadopensim-SC-b3a6f8d688fa68d45cde43d81c1e7607e4f7cf57.zip
opensim-SC-b3a6f8d688fa68d45cde43d81c1e7607e4f7cf57.tar.gz
opensim-SC-b3a6f8d688fa68d45cde43d81c1e7607e4f7cf57.tar.bz2
opensim-SC-b3a6f8d688fa68d45cde43d81c1e7607e4f7cf57.tar.xz
* Workaround for application/llsd+xml requests coming in as application/xml
* When OGP is active, disable SSL certificate chain validation. I'll add more options here to come, as well as a way to test against a group of known certificate subjects.
-rw-r--r--OpenSim/Framework/Servers/BaseHttpServer.cs48
-rw-r--r--OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs20
2 files changed, 68 insertions, 0 deletions
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs
index 7b2b599..13c5752 100644
--- a/OpenSim/Framework/Servers/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/BaseHttpServer.cs
@@ -272,6 +272,13 @@ namespace OpenSim.Framework.Servers
272 case "text/xml": 272 case "text/xml":
273 case "application/xml": 273 case "application/xml":
274 default: 274 default:
275 if (DoWeHaveALLSDHandler(request.RawUrl))
276 {
277 m_log.ErrorFormat("[BASE HTTP SERVER]: Potentially incorrect content type on Registered LLSD CAP: Content Type:{0}", request.ContentType);
278 HandleLLSDRequests(request, response);
279
280 return;
281 }
275 HandleXmlRpcRequests(request, response); 282 HandleXmlRpcRequests(request, response);
276 return; 283 return;
277 } 284 }
@@ -532,6 +539,47 @@ namespace OpenSim.Framework.Servers
532 } 539 }
533 } 540 }
534 541
542 private bool DoWeHaveALLSDHandler(string path)
543 {
544
545 string[] pathbase = path.Split('/');
546 string searchquery = "/";
547
548 if (pathbase.Length < 1)
549 return false;
550
551 for (int i = 1; i < pathbase.Length; i++)
552 {
553 searchquery += pathbase[i];
554 if (pathbase.Length - 1 != i)
555 searchquery += "/";
556 }
557
558 string bestMatch = null;
559
560 foreach (string pattern in m_llsdHandlers.Keys)
561 {
562 if (searchquery.StartsWith(searchquery))
563 {
564 if (String.IsNullOrEmpty(bestMatch) || searchquery.Length > bestMatch.Length)
565 {
566 bestMatch = pattern;
567 }
568 }
569 }
570
571 if (String.IsNullOrEmpty(bestMatch))
572 {
573
574 return false;
575 }
576 else
577 {
578
579 return true;
580 }
581 }
582
535 private bool TryGetLLSDHandler(string path, out LLSDMethod llsdHandler) 583 private bool TryGetLLSDHandler(string path, out LLSDMethod llsdHandler)
536 { 584 {
537 llsdHandler = null; 585 llsdHandler = null;
diff --git a/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs
index e2a46a1..5874d9b 100644
--- a/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs
+++ b/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs
@@ -30,6 +30,7 @@ using System.Collections.Generic;
30using System.IO; 30using System.IO;
31using System.Net; 31using System.Net;
32using System.Net.Security; 32using System.Net.Security;
33using System.Security.Cryptography.X509Certificates;
33using System.Net.Sockets; 34using System.Net.Sockets;
34using System.Reflection; 35using System.Reflection;
35using System.Text.RegularExpressions; 36using System.Text.RegularExpressions;
@@ -113,6 +114,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
113 if (m_scene.Count == 0) 114 if (m_scene.Count == 0)
114 { 115 {
115 scene.AddLLSDHandler("/agent/", ProcessAgentDomainMessage); 116 scene.AddLLSDHandler("/agent/", ProcessAgentDomainMessage);
117 ServicePointManager.ServerCertificateValidationCallback += customXertificateValidation;
116 } 118 }
117 119
118 if (!m_scene.Contains(scene)) 120 if (!m_scene.Contains(scene))
@@ -585,10 +587,12 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
585 587
586 private LLSDMap invokeRezAvatarCap(LLSDMap responseMap, string CapAddress, OGPState userState) 588 private LLSDMap invokeRezAvatarCap(LLSDMap responseMap, string CapAddress, OGPState userState)
587 { 589 {
590
588 591
589 WebRequest DeRezRequest = WebRequest.Create(CapAddress); 592 WebRequest DeRezRequest = WebRequest.Create(CapAddress);
590 DeRezRequest.Method = "POST"; 593 DeRezRequest.Method = "POST";
591 DeRezRequest.ContentType = "application/xml+llsd"; 594 DeRezRequest.ContentType = "application/xml+llsd";
595
592 596
593 LLSDMap RAMap = new LLSDMap(); 597 LLSDMap RAMap = new LLSDMap();
594 LLSDMap AgentParms = new LLSDMap(); 598 LLSDMap AgentParms = new LLSDMap();
@@ -842,6 +846,22 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
842 ta.Start(); 846 ta.Start();
843 } 847 }
844 } 848 }
849 // Temporary hack to allow teleporting to and from Vaak
850 private static bool customXertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
851 {
852
853 //if (cert.Subject == "E=root@lindenlab.com, CN=*.vaak.lindenlab.com, O=\"Linden Lab, Inc.\", L=San Francisco, S=California, C=US")
854 //{
855
856 return true;
857
858 //}
859
860 //return false;
861
862 }
863
864
845 } 865 }
846 866
847 public class KillAUser 867 public class KillAUser