dotnet/runtime

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

Open

#84.825 aperta il 14 apr 2023

Vedi su GitHub
 (4 commenti) (0 reazioni) (0 assegnatari)C# (5445 fork)batch import
area-System.DirectoryServiceshelp wanted

Metriche repository

Star
 (17.886 star)
Metriche merge PR
 (Merge medio 12g 11h) (661 PR mergiate in 30 g)

Descrizione

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

Guida contributor