Error Message „The directory service is unavailable“ when querying ApacheDS LDAP Server

Quick note to myself: An error message

The directory service is unavailable (English)
Der Verzeichnisdienst ist nicht verfügbar (German)

when querying an LDAP ApacheDS server can be caused by the wrong authentication type.

The full exception trace was:

System.Runtime.InteropServices.COMException occurred
ErrorCode=-2147016689
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.get_AdsObject()
at System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne)
at System.DirectoryServices.DirectorySearcher.FindAll()

In my code, I did a call to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.Secure);

which failed. After I changed it to

var de =
  new DirectoryEntry(
    @"LDAP://localhost:10389/ou=users,ou=someou,dc=domain,dc=com",
    @"uid=admin, ou=system",
    @"********",
    AuthenticationTypes.None);

everything worked as expected.

AllocSysString

Hartnäckigkeit zahlt sich oft aus: Heute habe ich ein Speicherleck (englisch „Memory leak“) in Zeta Producer korrigiert, das seit Version 5 drin war:

Beim Aufruf der Microsoft Scripting Engine habe ich beim Aufruf der Funktion IActiveScriptParse::ParseScriptText irrtümlicherweise CStringT::AllocSysString aufgerufen und den so angeforderten Speicher selbst nicht mehr freigegeben. Dies hätte ich jedoch machen müssen, was ich in der korrigierten Version nun mache.

Das hätte ich aber machen sollen! „RTFM“ hat Mario mir da gleich geantwortet als ich es ihm erzählt habe.

Hiermit also nochmals der ultimative Artikel wann wer für die Freigabe von Zeichenfolgen die mittels AllocSysString reserviert wurden verantwortlich ist: „Allocating and Releasing Memory for a BSTR (Visual C++ Concepts)„.