* 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 "application/xml":
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);
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)
{
llsdHandler = null;

View File

@ -30,6 +30,7 @@ using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Net.Sockets;
using System.Reflection;
using System.Text.RegularExpressions;
@ -113,6 +114,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
if (m_scene.Count == 0)
{
scene.AddLLSDHandler("/agent/", ProcessAgentDomainMessage);
ServicePointManager.ServerCertificateValidationCallback += customXertificateValidation;
}
if (!m_scene.Contains(scene))
@ -586,10 +588,12 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
private LLSDMap invokeRezAvatarCap(LLSDMap responseMap, string CapAddress, OGPState userState)
{
WebRequest DeRezRequest = WebRequest.Create(CapAddress);
DeRezRequest.Method = "POST";
DeRezRequest.ContentType = "application/xml+llsd";
LLSDMap RAMap = new LLSDMap();
LLSDMap AgentParms = new LLSDMap();
LLSDMap RegionParms = new LLSDMap();
@ -842,6 +846,22 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
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