From 9a15c945c4f4cd593a90268b8e916f586dbb9dc7 Mon Sep 17 00:00:00 2001 From: Julius Hardt Date: Thu, 25 Nov 2021 03:43:27 +0100 Subject: [PATCH] Dispose LdapConnections used by ValidateCredentials Ensure that cached LdapConnection instances created by PrincipalContext.ValidateCredentials are disposed when the corresponding PrincipalContext is disposed. Fix #62035 --- .../DirectoryServices/AccountManagement/Context.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.DirectoryServices.AccountManagement/src/System/DirectoryServices/AccountManagement/Context.cs b/src/libraries/System.DirectoryServices.AccountManagement/src/System/DirectoryServices/AccountManagement/Context.cs index 1947b66f588821..d6a5563a0e4bbf 100644 --- a/src/libraries/System.DirectoryServices.AccountManagement/src/System/DirectoryServices/AccountManagement/Context.cs +++ b/src/libraries/System.DirectoryServices.AccountManagement/src/System/DirectoryServices/AccountManagement/Context.cs @@ -44,7 +44,7 @@ internal static class CapabilityMap public const string LDAP_CAP_ACTIVE_DIRECTORY_V61_OID = "1.2.840.113556.1.4.1935"; } - internal sealed class CredentialValidator + internal sealed class CredentialValidator : IDisposable { private enum AuthMethod { @@ -341,6 +341,14 @@ public bool Validate(string userName, string password, ContextOptions connection return (BindSam(_serverName, userName, password)); } } + + public void Dispose() + { + foreach (LdapConnection connection in _connCache.Values) + { + connection.Dispose(); + } + } } // ******************************************** public class PrincipalContext : IDisposable @@ -1014,6 +1022,8 @@ public void Dispose() if (_queryCtx != null) _queryCtx.Dispose(); + _credValidate.Dispose(); + _disposed = true; GC.SuppressFinalize(this); }