dotnet/runtime

Unsupported LdapConnection.SessionOptions throws LdapException with Message "The LDAP server is unavailable" on Linux

Open

#84,825 opened on Apr 14, 2023

View on GitHub
 (4 comments) (0 reactions) (0 assignees)C# (5,445 forks)batch import
area-System.DirectoryServiceshelp wanted

Repository metrics

Stars
 (17,886 stars)
PR merge metrics
 (Avg merge 12d 11h) (661 merged PRs in 30d)

Description

Description

Unsupported LdapConnection.SessionOptions throws LdapException with Message "The LDAP server is unavailable" on Linux. This is very misleading.

Reproduction Steps

Run this Code:

var ldapDirectoryIdentifier = new LdapDirectoryIdentifier("server", 389);
using var conn = new LdapConnection(ldapDirectoryIdentifier);
conn.SessionOptions.AutoReconnect = true;

Expected behavior

A PlatformNotSupportedExeption or NotImplementedExeption must be thrown. When getting just return null or an empty string if possible.

Actual behavior

On set or get on an unsupported property LdapException with message "The LDAP server is unavailable" is thrown on Linux. See Quick Watch below

  Name Value Type
conn.SessionOptions {System.DirectoryServices.Protocols.LdapSessionOptions} System.DirectoryServices.Protocols.LdapSessionOptions
  ▶ AutoReconnect 'conn.SessionOptions.AutoReconnect' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' bool {System.DirectoryServices.Protocols.LdapException}
  ▶ DomainName 'conn.SessionOptions.DomainName' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' string {System.DirectoryServices.Protocols.LdapException}
  HostName "dc02.mydomain.de:389" string
  ▶ HostReachable 'conn.SessionOptions.HostReachable' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' bool {System.DirectoryServices.Protocols.LdapException}
  ▶ LocatorFlag 'conn.SessionOptions.LocatorFlag' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' System.DirectoryServices.Protocols.LocatorFlags {System.DirectoryServices.Protocols.LdapException}
  ▶ PingKeepAliveTimeout 'conn.SessionOptions.PingKeepAliveTimeout' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' System.TimeSpan {System.DirectoryServices.Protocols.LdapException}
  ▶ PingLimit 'conn.SessionOptions.PingLimit' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' int {System.DirectoryServices.Protocols.LdapException}
  ▶ PingWaitTimeout 'conn.SessionOptions.PingWaitTimeout' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' System.TimeSpan {System.DirectoryServices.Protocols.LdapException}
  ProtocolVersion 2 int
  QueryClientCertificate null System.DirectoryServices.Protocols.QueryClientCertificateCallback
  ▶ ReferralCallback {System.DirectoryServices.Protocols.ReferralCallback} System.DirectoryServices.Protocols.ReferralCallback
  ReferralChasing All System.DirectoryServices.Protocols.ReferralChasingOptions
  ▶ ReferralHopLimit 'conn.SessionOptions.ReferralHopLimit' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' int {System.DirectoryServices.Protocols.LdapException}
  ▶ RootDseCache 'conn.SessionOptions.RootDseCache' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' bool {System.DirectoryServices.Protocols.LdapException}
  SaslMethod "GSS-SPNEGO" string
  Sealing false bool
  SecureSocketLayer false bool
  ▶ SecurityContext {System.DirectoryServices.Protocols.SecurityHandle} object {System.DirectoryServices.Protocols.SecurityHandle}
  ▶ SendTimeout 'conn.SessionOptions.SendTimeout' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' System.TimeSpan {System.DirectoryServices.Protocols.LdapException}
  Signing false bool
  ▶ SslInformation 'conn.SessionOptions.SslInformation' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' System.DirectoryServices.Protocols.SecurityPackageContextConnectionInformation {System.DirectoryServices.Protocols.LdapException}
  SspiFlag 0 int
  ▶ TcpKeepAlive 'conn.SessionOptions.TcpKeepAlive' threw an exception of type 'System.DirectoryServices.Protocols.LdapException' bool {System.DirectoryServices.Protocols.LdapException}
  VerifyServerCertificate null System.DirectoryServices.Protocols.VerifyServerCertificateCallback

Regression?

No response

Known Workarounds

No response

Configuration

.NET 6.0.14 System.DirectoryServices.Protocols 7.0.0 Both WSL2 with Windows10 and 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 GNU/Linux

Other information

No response

Contributor guide