LDAP – ein paar C# Codesnippets

 Allerlei, Entwicklung  Kommentare deaktiviert für LDAP – ein paar C# Codesnippets
Jan 232007
 

Einwenig Code habe ich natürlich auch produziert.
Das meiste mit Hilfe des Internet und einem Forum.

/// <summary>
///
 Ermittelt ob das Passwort abgelaufen ist.
/// </summary>
private bool IsPasswordExpired(DirectoryEntry User)
{
     
const int ADS_UF_PASSWORD_EXPIRED = 0x80000;
     
int val = (int)User.Properties[„userAccountControl“].Value;
     
return (val & ADS_UF_PASSWORD_EXPIRED) == ADS_UF_PASSWORD_EXPIRED;
}

/// <summary>
///
 Ermittelt ob das Konto deaktiviert ist.
/// </summary>
private bool IsAccountDisabled(DirectoryEntry User)
{
     
const int ADS_UF_ACCOUNTDISABLE = 0x2;
     
int val = (int)User.Properties[„userAccountControl“].Value;
     
return (val & ADS_UF_ACCOUNTDISABLE) == ADS_UF_ACCOUNTDISABLE;
}

/// <summary>
///
 Ermittelt ob das Passwort abgelaufen ist.
/// </summary>
private bool IsExpirePassword(DirectoryEntry User)
{
     
const int ADS_UF_DONT_EXPIRE_PASSWD = (int)ADS_USER_FLAG.ADS_UF_DONT_EXPIRE_PASSWD;
     
int val = (int)User.Properties[„userAccountControl“].Value;
     
return (val & ADS_UF_DONT_EXPIRE_PASSWD) == ADS_UF_DONT_EXPIRE_PASSWD;

}

/// <summary>
///
 Setzt das Passwort so, dass es nie Abläuft
/// this.DeUser = new DirectoryEntry(this.DN, g_AuthUserName, g_AuthPassword);
/// </summary>
public void DontExpirePassword()
{
     
const int ADS_UF_DONT_EXPIRE_PASSWD = 0x10000;
     
int val = (int)this.DeUser.Properties[„userAccountControl“].Value;
     
this.DeUser.Properties[„userAccountControl“].Value = val | ADS_UF_DONT_EXPIRE_PASSWD;
     
this.DeUser.CommitChanges();
     
//this.IstPasswortNieAblaufend = true;
}

/// <summary>
///
 this.DeUser = new DirectoryEntry(this.DN, g_AuthUserName, g_AuthPassword);
/// this.AdUser = (IADsUser)this.DeUser.NativeObject;
/// </summary>
public void UnlockAccount()
{
     
this.AdUser.IsAccountLocked = false;
     
this.AdUser.SetInfo();
}
 

Bei dieser Methode war das ~ (zweitletzte Zeile) ein Problem. Dauerte lange bis ich merkte
wie diese Bitoperation genau tut. Wenn ich ehrlich bin weiss ich es auch jetzt noch nicht. 🙂

/// <summary>
///
 this.DeUser = new DirectoryEntry(this.DN, g_AuthUserName, g_AuthPassword);
/// </summary>
public void EnabelAccount()
{
     const int ADS_UF_ACCOUNTDISABLE = 0x2;
      int val = (
int)this.DeUser.Properties[„userAccountControl“].Value;
     
this.DeUser.Properties[„userAccountControl“].Value = val & ~ADS_UF_ACCOUNTDISABLE;
     
this.DeUser.CommitChanges();
}
 

Alle Angaben ohne Gewähr! 🙂

Tags: , ,

LDAP mit C# – der Einstieg

 Allerlei, Entwicklung  Kommentare deaktiviert für LDAP mit C# – der Einstieg
Jan 232007
 

Ich durfte mich einwenig mit dem anprogrammieren von LDAP,
genauer dem Active Directory unter Windows Server 2003, beschäftigen.
Das Tool scheint jetzt mal so weit fertig zu sein. Da ich noch nie was
mit LDAP gemacht habe suchte ich natürlich allerhand an Quellen und Hilfe.

Hier fasse ich mal alles einwenig zusammen. Wenn es mir geholfen hat,
dann wird es Anderen sicher auch noch helfen.

Begonnen habe ich mit zwei Webcasts. Die waren wirklich hilfreich.

-> Verzeichnisprogrammierung mit System.DirectoryServices (Teil 1) – Basiswissen
-> Verzeichnisprogrammierung mit System.DirectoryServices (Teil 2) – Aufbauwissen

Danach wird einem so allerhand klar.

Dann gibt es noch ein paar Links die auch nützlich sind.

In den Webcasts war auch immer mal wieder die Rede vom Active Directory Browser.
Der war aber nicht einfach zu finden. Einfach dieses SDK runterladen und entpacken.
-> http://www.microsoft.com/ntworkstation/downloads/other/adsi25.asp
Wie der Browser konfiguriert wird habe ich schon mal erwähnt.
-> LDAP – Active Directory Browser

Hier noch ein paar weiter Links.

[alle Klassen im Active Directory]
-> MSDN – All Classes
[Attribute der Klasse User]
-> MSDN – Attributes User
[Alle Attribute im AD (sofern ich das richtig interpretiere)]
-> MSDN – All Attributes
[ADS_USER_FLAG_ENUM]
-> MSDN – ADS_USER_FLAG_ENUM
[dot.net Magazin]
-> Aktive Daten – Verzeichnisdienste optimal einsetzen
[www.IT-Visions.de – Dr. Holger Schwichtenberg]
-> Anlegen eines User-Objekts im Active Directory
[GUI to Property Map]
-> GUI to Property Map
[zwei Tools die in einem Forum erwähnt wurden]
-> ADSI Browser (written in Delphi)
-> BeaverTail (written entirely in C#)

[sonstiges]
-> Example: Enabling or Disabling a User Account in Active Directory
-> Verwendung der UserAccountControl-Flags zur Bearbeitung von Benutzerkontoeigenschaften
-> User-Account-Control
-> Verwalten von Benutzerkennwörtern 

Die Liste ist sicher nicht vollständig. Aber mehr brauchte ich für mein
Projekt(chen) nicht. 🙂
Wenn jemand noch gute Links hat soll er sie mir doch einfach mitteilen.

LDAP – Datumswerte

 Entwicklung  Kommentare deaktiviert für LDAP – Datumswerte
Jan 162007
 

Datumswerte werden im AD (Active Directory) in der Regel als 8 Byte (IADsLargeInteger)
gespeichert. Dazu gibt es Hilfsmethoden die daraus ein Datum machen.

Eine solche hatte ich auch gefunden. In den Webcasts zu dem Thema
wurde eine solche gezeigt.

Allerdings funktioniert die nicht ganz immer. z.B.: bei Account-Expires
(Ldap-Display-Name = accountExpires) nicht. Und zwar aus diesem
Grund hier.
[…] hier

A value of 0 or 0x7FFFFFFFFFFFFFFF (9223372036854775807) indicates that the account never expires.

[…]

Hier mal mein erster Prototyp der Methode. Mal schauen wie sie sich bewährt. 

private static DateTime GetDateTime(DirectoryEntry DN, string Attribute)
{
     
IADsLargeInteger li = (IADsLargeInteger)DN.Properties[Attribute][0];
     
long date = (long)li.HighPart << 32 | (uint)li.LowPart;

     if (date == 9223372036854775807)
     {
          date = 0;
     }

     DateTime time = DateTime.FromFileTime(date);
     
return time;
}

LDAP – Active Directory Browser

 Allerlei, Entwicklung  Kommentare deaktiviert für LDAP – Active Directory Browser
Jan 152007
 

Vor kurzem habe ich den Active Directory Browser gesucht.
Das war gar nicht so einfach das Teil zu finden.

Bei Microsoft gibt es noch eine Site für NT4 und ADSI 2.5.
Dort kann man das ADSI 2.5 SDK (English Language) downloaden.
Die Datei heisst dann schlicht sdk.exe und ist ein ZIP Archiv.
Entpacken und in das Verzeichnis sdk\ADsVw\i386 wechseln.

Danach hatte ich das Problem, dass ich mich nicht mit unserem
AD verbinden konnte. Das AD läuft bei uns auf einem
Windows 2003 Server ohne Kompatibilitätsmodus.
Hier mal die Einstellungen um eine Verbindung aufzubauen.

Alles was markiert ist, ist wichtig. 🙂

  1. Beim Pfad MUSS LDAP://….. stehen.
  2. User Encrypt musste ich ausschalten.
Jan 092007
 

Ich sollte mich in die LDAP Programmierung einarbeiten da wir
einwenig was automatisieren wollen. Dazu habe ich mir zwei
sehr gute Webcasts angeschaut.

-> Verzeichnisprogrammierung mit System.DirectoryServices (Teil 1) – Basiswissen
-> Verzeichnisprogrammierung mit System.DirectoryServices (Teil 2) – Aufbauwissen

Dort ist immer mal wieder die Rede vom ADSI SDK und dem
Active Directory Browser. Dazu findet man auch viel im Netz und bei MS.

Allerdings habe ich keinen Link mehr gefunden der auch funktioniert.
MS Intern scheint irgendwie alles zu dem Thema einwenig falsch verlinkt
zu sein.

Weiss wer wo man das ADSI SDK und den Active Directory Browser findet?