Restore group membership check for HG users in QueryAccess.

0.7.6-extended
Diva Canto 2013-09-05 07:44:27 -07:00
parent aa4479c4bc
commit e2b7d941b6
3 changed files with 17 additions and 12 deletions

View File

@ -623,10 +623,13 @@ namespace OpenSim.Groups
if (agent != null) if (agent != null)
break; break;
} }
if (agent == null) // oops if (agent != null)
return AgentID.ToString();
return Util.ProduceUserUniversalIdentifier(agent); return Util.ProduceUserUniversalIdentifier(agent);
// we don't know anything about this foreign user
// try asking the user management module, which may know more
return m_UserManagement.GetUserUUI(AgentID);
} }
private string AgentUUIForOutside(string AgentIDStr) private string AgentUUIForOutside(string AgentIDStr)

View File

@ -481,14 +481,20 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
public string GetUserUUI(UUID userID) public string GetUserUUI(UUID userID)
{ {
UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, userID);
if (account != null)
return userID.ToString();
UserData ud; UserData ud;
lock (m_UserCache) lock (m_UserCache)
m_UserCache.TryGetValue(userID, out ud); m_UserCache.TryGetValue(userID, out ud);
if (ud == null) // It's not in the cache
{
string[] names = new string[2];
// This will pull the data from either UserAccounts or GridUser
// and stick it into the cache
TryGetUserNamesFromServices(userID, names);
lock (m_UserCache)
m_UserCache.TryGetValue(userID, out ud);
}
if (ud != null) if (ud != null)
{ {
string homeURL = ud.HomeURL; string homeURL = ud.HomeURL;

View File

@ -5801,11 +5801,7 @@ namespace OpenSim.Region.Framework.Scenes
try try
{ {
// If this is a hypergrid user, then we can't perform a successful groups access check here since this if (!AuthorizeUser(aCircuit, false, out reason))
// 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; return false;