From dcebbc3f1b27cf01ae28cb522c5180c195729823 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sun, 6 Sep 2009 15:55:14 +0100 Subject: Remove the encryption from the IAuthenticationService interface. That is too high up for that type of stuff. It needs to be at the connector/handler level --- OpenSim/Region/Framework/Scenes/Scene.cs | 30 ++++++++++++++++-- .../AuthenticationServiceBase.cs | 15 --------- .../PasswordAuthenticationService.cs | 5 --- .../WebkeyAuthenticationService.cs | 5 --- .../Services/Interfaces/IAuthenticationService.cs | 36 ---------------------- 5 files changed, 27 insertions(+), 64 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index c25ae10..8cd77f8 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -220,7 +220,7 @@ namespace OpenSim.Region.Framework.Scenes private bool m_scripts_enabled = true; private string m_defaultScriptEngine; private int m_LastLogin = 0; - private Thread HeartbeatThread; + private Thread HeartbeatThread = null; private volatile bool shuttingdown = false; private int m_lastUpdate = Environment.TickCount; @@ -876,6 +876,13 @@ namespace OpenSim.Region.Framework.Scenes //m_heartbeatTimer.Enabled = true; //m_heartbeatTimer.Interval = (int)(m_timespan * 1000); //m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat); + if (HeartbeatThread != null) + { + ThreadTracker.Remove(HeartbeatThread); + HeartbeatThread.Abort(); + HeartbeatThread = null; + } + m_lastUpdate = Environment.TickCount; HeartbeatThread = new Thread(new ParameterizedThreadStart(Heartbeat)); HeartbeatThread.SetApartmentState(ApartmentState.MTA); HeartbeatThread.Name = string.Format("Heartbeat for region {0}", RegionInfo.RegionName); @@ -912,9 +919,15 @@ namespace OpenSim.Region.Framework.Scenes /// private void Heartbeat(object sender) { - Update(); + try + { + Update(); - m_lastUpdate = Environment.TickCount; + m_lastUpdate = Environment.TickCount; + } + catch (ThreadAbortException) + { + } } /// @@ -2307,6 +2320,7 @@ namespace OpenSim.Region.Framework.Scenes /// public override void AddNewClient(IClientAPI client) { + CheckHeartbeat(); SubscribeToClientEvents(client); ScenePresence presence; @@ -2831,6 +2845,7 @@ namespace OpenSim.Region.Framework.Scenes /// protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client) { + CheckHeartbeat(); AvatarAppearance appearance = null; GetAvatarAppearance(client, out appearance); @@ -2873,6 +2888,7 @@ namespace OpenSim.Region.Framework.Scenes /// public override void RemoveClient(UUID agentID) { + CheckHeartbeat(); bool childagentYN = false; ScenePresence avatar = GetScenePresence(agentID); if (avatar != null) @@ -4374,6 +4390,8 @@ namespace OpenSim.Region.Framework.Scenes else return health; + CheckHeartbeat(); + return health; } @@ -4559,5 +4577,11 @@ namespace OpenSim.Region.Framework.Scenes return (((vsn.X * xdiff) + (vsn.Y * ydiff)) / (-1 * vsn.Z)) + p0.Z; } + + private void CheckHeartbeat() + { + if (System.Environment.TickCount - m_lastUpdate > 2000) + StartTimer(); + } } } diff --git a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs index 2ed177c..8904461 100644 --- a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs +++ b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs @@ -90,31 +90,16 @@ namespace OpenSim.Services.AuthenticationService throw new Exception("Could not find a storage interface in the given module"); } - public virtual byte[] GetPublicKey() - { - return new byte[0]; - } - public bool Verify(UUID principalID, string token, int lifetime) { return m_Database.CheckToken(principalID, token, lifetime); } - public bool VerifyEncrypted(byte[] cyphertext, byte[] key) - { - return false; - } - public virtual bool Release(UUID principalID, string token) { return m_Database.CheckToken(principalID, token, 0); } - public virtual bool ReleaseEncrypted(byte[] cyphertext, byte[] key) - { - return false; - } - protected string GetToken(UUID principalID, int lifetime) { UUID token = UUID.Random(); diff --git a/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs b/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs index 7fdbbf6..6c99b66 100644 --- a/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs @@ -76,10 +76,5 @@ namespace OpenSim.Services.AuthenticationService return String.Empty; } - - public byte[] AuthenticateEncrypted(byte[] cyphertext, byte[] key) - { - return new byte[0]; - } } } diff --git a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs index 0118c91..8831c8a 100644 --- a/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs +++ b/OpenSim/Services/AuthenticationService/WebkeyAuthenticationService.cs @@ -56,10 +56,5 @@ namespace OpenSim.Services.AuthenticationService { return String.Empty; } - - public byte[] AuthenticateEncrypted(byte[] cyphertext, byte[] key) - { - return new byte[0]; - } } } diff --git a/OpenSim/Services/Interfaces/IAuthenticationService.cs b/OpenSim/Services/Interfaces/IAuthenticationService.cs index b448a14..9225773 100644 --- a/OpenSim/Services/Interfaces/IAuthenticationService.cs +++ b/OpenSim/Services/Interfaces/IAuthenticationService.cs @@ -39,39 +39,12 @@ namespace OpenSim.Services.Interfaces public interface IAuthenticationService { ////////////////////////////////////////////////////// - // PKI Zone! - // - // HG2 authentication works by using a cryptographic - // exchange. - // This method must provide a public key, the other - // crypto methods must understand hoow to deal with - // messages encrypted to it. - // - // If the public key is of zero length, you will - // get NO encryption and NO security. - // - // For non-HG installations, this is not relevant - // - // Implementors who are not using PKI can treat the - // cyphertext as a string and provide a zero-length - // key. Encryptionless implementations will not - // interoperate with implementations using encryption. - // If one side uses encryption, both must do so. - // - byte[] GetPublicKey(); - - ////////////////////////////////////////////////////// // Authentication // // These methods will return a token, which can be used to access // various services. // - // The encrypted versions take the received cyphertext and - // the public key of the peer, which the connector must have - // obtained using a remote GetPublicKey call. - // string Authenticate(UUID principalID, string password, int lifetime); - byte[] AuthenticateEncrypted(byte[] cyphertext, byte[] key); ////////////////////////////////////////////////////// // Verification @@ -81,12 +54,7 @@ namespace OpenSim.Services.Interfaces // Tokens expire after 30 minutes and can be refreshed by // re-verifying. // - // If encrypted authentication was used, encrypted verification - // must be used to refresh. Unencrypted verification is still - // performed, but doesn't refresh token lifetime. - // bool Verify(UUID principalID, string token, int lifetime); - bool VerifyEncrypted(byte[] cyphertext, byte[] key); ////////////////////////////////////////////////////// // Teardown @@ -95,11 +63,7 @@ namespace OpenSim.Services.Interfaces // invalidates it and it can not subsequently be used // or refreshed. // - // Tokens created by encrypted authentication must - // be returned by encrypted release calls; - // bool Release(UUID principalID, string token); - bool ReleaseEncrypted(byte[] cyphertext, byte[] key); ////////////////////////////////////////////////////// // Grid -- cgit v1.1