Compare commits

...

3 Commits

Author SHA1 Message Date
Justin Clark-Casey (justincc)
2e7f7c41a7 Also check user authorization if looking to upgrade from a child to a root agent.
Relevant if a child agent has been allowed into the region which should not be upgraded to a root agent.
2013-08-27 00:35:33 +01:00
Diva Canto
ed0ffae151 Potential fix for access control bug on login introduced with SeeIntoRegion commit. 2013-08-26 20:28:52 +01:00
Justin Clark-Casey (justincc)
ea5bab5107 For a Hypergrid user, delay estate access checks until NewUserConnection() so that they work.
This is necessary because the hypergrid groups checks (as referenced by estates) require an agent circuit to be present to construct the hypergrid ID.
However, this is not around until Scene.NewUserConnection(), as called by CreateAgent() in EntityTransferModule.
Therefore, if we're dealing with a hypergrid user, delay the check until NewUserConnection()/CreateAgent()
The entity transfer impact should be minimal since CreateAgent() is the next significant call after NewUserConnection()
However, to preserve the accuracy of query access we will only relax the check for HG users.
2013-08-26 20:04:07 +01:00

View File

@@ -3824,7 +3824,7 @@ namespace OpenSim.Region.Framework.Scenes
try
{
if (!AuthorizeUser(acd, SeeIntoRegion, out reason))
if (!AuthorizeUser(acd, (vialogin ? false : SeeIntoRegion), out reason))
{
m_authenticateHandler.RemoveCircuit(acd.circuitcode);
return false;
@@ -3855,6 +3855,19 @@ namespace OpenSim.Region.Framework.Scenes
// Let the SP know how we got here. This has a lot of interesting
// uses down the line.
sp.TeleportFlags = (TPFlags)teleportFlags;
// We must carry out a further authorization check if there's an
// attempt to make a child agent into a root agent, since SeeIntoRegion may have allowed a child
// agent to login to a region where a full avatar would not be allowed.
//
// We determine whether this is a CreateAgent for a future non-child agent by inspecting
// TeleportFlags, which will be default for a child connection. This relies on input from the source
// region.
if (sp.TeleportFlags != TPFlags.Default)
{
if (!AuthorizeUser(acd, false, out reason))
return false;
}
if (sp.IsChildAgent)
{
@@ -5739,9 +5752,13 @@ namespace OpenSim.Region.Framework.Scenes
try
{
if (!AuthorizeUser(aCircuit, false, out reason))
// If this is a hypergrid user, then we can't perform a successful groups access check here since this
// currently relies on a circuit being present in the AuthenticateHandler to construct a Hypergrid ID.
// This is only present in NewUserConnection() which entity transfer calls very soon after QueryAccess().
// Therefore, we'll defer to the check in NewUserConnection() instead.
if (!AuthorizeUser(aCircuit, !UserManagementModule.IsLocalGridUser(agentID), out reason))
{
// m_log.DebugFormat("[SCENE]: Denying access for {0}", agentID);
//m_log.DebugFormat("[SCENE]: Denying access for {0}", agentID);
return false;
}
}