* 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.
0.6.0-stable
Teravus Ovares 2008-08-26 05:20:46 +00:00
parent 9f635e354b
commit b3a6f8d688
2 changed files with 68 additions and 0 deletions

View File

@ -272,6 +272,13 @@ namespace OpenSim.Framework.Servers
case "text/xml": case "text/xml":
case "application/xml": case "application/xml":
default: default:
if (DoWeHaveALLSDHandler(request.RawUrl))
{
m_log.ErrorFormat("[BASE HTTP SERVER]: Potentially incorrect content type on Registered LLSD CAP: Content Type:{0}", request.ContentType);
HandleLLSDRequests(request, response);
return;
}
HandleXmlRpcRequests(request, response); HandleXmlRpcRequests(request, response);
return; return;
} }
@ -532,6 +539,47 @@ namespace OpenSim.Framework.Servers
} }
} }
private bool DoWeHaveALLSDHandler(string path)
{
string[] pathbase = path.Split('/');
string searchquery = "/";
if (pathbase.Length < 1)
return false;
for (int i = 1; i < pathbase.Length; i++)
{
searchquery += pathbase[i];
if (pathbase.Length - 1 != i)
searchquery += "/";
}
string bestMatch = null;
foreach (string pattern in m_llsdHandlers.Keys)
{
if (searchquery.StartsWith(searchquery))
{
if (String.IsNullOrEmpty(bestMatch) || searchquery.Length > bestMatch.Length)
{
bestMatch = pattern;
}
}
}
if (String.IsNullOrEmpty(bestMatch))
{
return false;
}
else
{
return true;
}
}
private bool TryGetLLSDHandler(string path, out LLSDMethod llsdHandler) private bool TryGetLLSDHandler(string path, out LLSDMethod llsdHandler)
{ {
llsdHandler = null; llsdHandler = null;

View File

@ -30,6 +30,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Net.Security; using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Net.Sockets; using System.Net.Sockets;
using System.Reflection; using System.Reflection;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -113,6 +114,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
if (m_scene.Count == 0) if (m_scene.Count == 0)
{ {
scene.AddLLSDHandler("/agent/", ProcessAgentDomainMessage); scene.AddLLSDHandler("/agent/", ProcessAgentDomainMessage);
ServicePointManager.ServerCertificateValidationCallback += customXertificateValidation;
} }
if (!m_scene.Contains(scene)) if (!m_scene.Contains(scene))
@ -586,10 +588,12 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
private LLSDMap invokeRezAvatarCap(LLSDMap responseMap, string CapAddress, OGPState userState) private LLSDMap invokeRezAvatarCap(LLSDMap responseMap, string CapAddress, OGPState userState)
{ {
WebRequest DeRezRequest = WebRequest.Create(CapAddress); WebRequest DeRezRequest = WebRequest.Create(CapAddress);
DeRezRequest.Method = "POST"; DeRezRequest.Method = "POST";
DeRezRequest.ContentType = "application/xml+llsd"; DeRezRequest.ContentType = "application/xml+llsd";
LLSDMap RAMap = new LLSDMap(); LLSDMap RAMap = new LLSDMap();
LLSDMap AgentParms = new LLSDMap(); LLSDMap AgentParms = new LLSDMap();
LLSDMap RegionParms = new LLSDMap(); LLSDMap RegionParms = new LLSDMap();
@ -842,6 +846,22 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
ta.Start(); ta.Start();
} }
} }
// Temporary hack to allow teleporting to and from Vaak
private static bool customXertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
{
//if (cert.Subject == "E=root@lindenlab.com, CN=*.vaak.lindenlab.com, O=\"Linden Lab, Inc.\", L=San Francisco, S=California, C=US")
//{
return true;
//}
//return false;
}
} }
public class KillAUser public class KillAUser