From 86c39d618e370953fba16ec4ad75c763bd8d470c Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 16 Sep 2013 19:45:42 +0100 Subject: [PATCH] To avoid viewers (particularly on the Hypergrid) from permanently caching a UUID -> "Unknown User" binding, drop the binding request rather than replying with "Unknown User" By not binding UUID -> "Unknown User", we leave open the possibility that the binding may be correctly resolved at a later time, which can still happen in some Hypergrid situations. Observed behaviour of LL viewer 3.3.4 is that a dropped bind request is not retried until the next session. --- .../UserManagement/UserManagementModule.cs | 77 ++++++++++--------- 1 file changed, 42 insertions(+), 35 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 8c983e68d5..25e8d69140 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs @@ -178,17 +178,20 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement m_ServiceThrottle.Enqueue("name", uuid.ToString(), delegate { //m_log.DebugFormat("[YYY]: Name request {0}", uuid); - bool foundRealName = TryGetUserNames(uuid, names); - - if (names.Length == 2) - { - if (!foundRealName) - m_log.DebugFormat("[USER MANAGEMENT MODULE]: Sending {0} {1} for {2} to {3} since no bound name found", names[0], names[1], uuid, client.Name); + // As least upto September 2013, clients permanently cache UUID -> Name bindings. Some clients + // appear to clear this when the user asks it to clear the cache, but others may not. + // + // So to avoid clients + // (particularly Hypergrid clients) permanently binding "Unknown User" to a given UUID, we will + // instead drop the request entirely. + if (TryGetUserNames(uuid, names)) client.SendNameReply(uuid, names[0], names[1]); - } +// else +// m_log.DebugFormat( +// "[USER MANAGEMENT MODULE]: No bound name for {0} found, ignoring request from {1}", +// uuid, client.Name); }); - } } @@ -391,7 +394,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement } names[0] = "Unknown"; - names[1] = "UserUMMTGUN8"; + names[1] = "UserUMMTGUN9"; return false; } @@ -539,7 +542,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement AddUser(uuid, homeURL + ";" + first + " " + last); } - public void AddUser (UUID id, string creatorData) + public void AddUser(UUID id, string creatorData) { //m_log.DebugFormat("[USER MANAGEMENT MODULE]: Adding user with id {0}, creatorData {1}", id, creatorData); @@ -549,24 +552,24 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement if (oldUser != null) { - if (creatorData == null || creatorData == String.Empty) - { - //ignore updates without creator data - return; - } - - //try update unknown users, but don't update anyone else - if (oldUser.FirstName == "Unknown" && !creatorData.Contains("Unknown")) - { - lock (m_UserCache) - m_UserCache.Remove(id); - m_log.DebugFormat("[USER MANAGEMENT MODULE]: Re-adding user with id {0}, creatorData [{1}] and old HomeURL {2}", id, creatorData, oldUser.HomeURL); - } - else - { +// if (creatorData == null || creatorData == String.Empty) +// { +// //ignore updates without creator data +// return; +// } +// +// //try update unknown users, but don't update anyone else +// if (oldUser.FirstName == "Unknown" && !creatorData.Contains("Unknown")) +// { +// lock (m_UserCache) +// m_UserCache.Remove(id); +// m_log.DebugFormat("[USER MANAGEMENT MODULE]: Re-adding user with id {0}, creatorData [{1}] and old HomeURL {2}", id, creatorData, oldUser.HomeURL); +// } +// else +// { //we have already a valid user within the cache return; - } +// } } UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, id); @@ -602,15 +605,19 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement if (parts.Length >= 2) user.FirstName = parts[1].Replace(' ', '.'); } - else - { - // Temporarily add unknown user entries of this type into the cache so that we can distinguish - // this source from other recent (hopefully resolved) bugs that fail to retrieve a user name binding - // TODO: Can be removed when GUN* unknown users have definitely dropped significantly or - // disappeared. - user.FirstName = "Unknown"; - user.LastName = "UserUMMAU4"; - } + + // To avoid issues with clients, particularly Hypergrid ones, permanently caching + // UUID -> "Unknown User" name bindings, elsewhere we will drop such requests rather than replying. + // This also means that we cannot add an unknown user binding to the cache here. +// else +// { +// // Temporarily add unknown user entries of this type into the cache so that we can distinguish +// // this source from other recent (hopefully resolved) bugs that fail to retrieve a user name binding +// // TODO: Can be removed when GUN* unknown users have definitely dropped significantly or +// // disappeared. +// user.FirstName = "Unknown"; +// user.LastName = "UserUMMAU4"; +// } AddUserInternal(user); }