Active Directory Import mit Schrägstrichen

Freitag 26. Februar 2010 von Christian Pohle

Bearbeite gerade ein Fehlerprotokoll von einem Active Directory Import, welches beim Versuch, zum Benutzerobjekt zu binden

Set objUser = GetObject(“GC://” & strDN)

einige Fehler E_ADS_BAD_PATHNAME auswirft. Die Referenz zum Benutzer (“strDN”) kommt aus einer Abfrage des Active Directory mit dem ADsDSOObject. Die fehlerhaften Benutzer enthalten doch tatsächlich in ihrem “distinguishedName” Schrägstriche, also ungefähr so

CN=Pohle, Christian – bis 31/12/2010,OU=…

Interessant dabei ist, daß die Schrägstriche nicht als Special Characters zurückgegeben werden, wie z.B. das Komma, das als “,” zurückgeliefert wird. Eine Suche im Internet fördert einen Artikel zutage, der dieses Problem auch behandelt und darauf hinweist, daß der Schrägstrich (“Slash”) im einschlägigen Microsoft Artikel nicht behandelt wird:

Tomeks DS World

Dieser Microsoft Artikel aus der MSDN allerdings listet den Forward Slash als Special Character auf, erklärt aber nicht, warum dieser dann vom ADsDSOObject nicht auch schon escaped zurückgegeben wird:

MSDN Special Characters

Eine mögliche Erklärung liegt vielleicht im Änderungsdatum: Der Microsoft Artikel ist vom 7.7.2009 und der Artikel von Tomek ist vom 27.12.2006 – wahrscheinlich hat Microsoft inzwischen seinen Artikel überarbeitet aber natürlich nicht die Möglichkeit gehabt, das ADsDSOObject via Patches zu überarbeiten – nur eine Theorie. ADSIEdit und andere Tools liefern die Schrägstriche übrigens auch einfach unescaped zurück.

Nachdem ich zuerst überlegt hatte, die ganze Leseroutine auf GUID umzustellen (was aufwändiger gewesen wäre) habe ich als nächstes versucht, die Abfrage über den ADsPath vorzunehmen (Dabei viel mir auf, daß dieser den Slash sehr wohl escaped zurückliefert!), aber auch dazu hätte ich an der Importroutine einiges ändern müssen.

So bleibt es bei der einfachen Lösung: Wenn das ADsDSOObject nicht escaped, dann machen wir’s halt selbst:

‘ Add Escape Character to DNs containing Slashes
strDN = Replace(strDN, “/”, “/”)

Natürlich könnte man auch darüber diskutieren, ob es Sinn macht, im distinguishedName eines Benutzerobjekte Schrägstriche zu verwenden, aber die hier gezeigte Lösung ist einfacher…


Artikel, die Sie auch interessieren könnten:

DeliciousTwitterTechnoratiFacebookLinkedInYahoo! BookmarksEmail

Dieser Beitrag wurde erstellt am Freitag 26. Februar 2010 um 10:50 und abgelegt unter Consulting, PSAG. Kommentare zu diesen Eintrag im RSS 2.0 Feed. Sie können einen Kommentar schreiben, oder einen Trackback auf Ihrer Seite einrichten. Drucken

Kommentar schreiben