gwdg.Ldap.dll
3.5.0
dotnet add package gwdg.Ldap.dll --version 3.5.0
NuGet\Install-Package gwdg.Ldap.dll -Version 3.5.0
<PackageReference Include="gwdg.Ldap.dll" Version="3.5.0" />
<PackageVersion Include="gwdg.Ldap.dll" Version="3.5.0" />
<PackageReference Include="gwdg.Ldap.dll" />
paket add gwdg.Ldap.dll --version 3.5.0
#r "nuget: gwdg.Ldap.dll, 3.5.0"
#:package gwdg.Ldap.dll@3.5.0
#addin nuget:?package=gwdg.Ldap.dll&version=3.5.0
#tool nuget:?package=gwdg.Ldap.dll&version=3.5.0
Overview
Simple LDAP class to easily search and modify objects within a LDAP server. This package wraps some Classes around the Microsoft library System.DirectoryServices.Protocols.
Usage
On non windows systems the environment variable LDAPTLS_REQCERT should be set to "never" in order to connect via LDAPs. Otherwise it aborts with the unspecified message "LDAP server is not available".
Search objects
Create a searcher and start searching
LdapSearcher seacher = new("hostname", 636, "cn=admin,ou=admins,dc=example,dc=org", "mysecretpassword", useSsl: true);
# Search objects fased on a filter and define which attributes you want to read
List<LdapEntry> foundObjects = searcher.Search("ou=users,dc=example,dc=org", "(uid=mustermann)", "uid", "cn", "description")
foreach(LdapEntry entry in foundObjects)
{
string uid = entry.Attributes["uid"].Values.First();
// Do something
}
Search objects asynchronously
LdapSearcher seacher = new("hostname", 636, "cn=admin,ou=admins,dc=example,dc=org", "mysecretpassword", useSsl: true);
# Search objects fased on a filter and define which attributes you want to read
List<LdapEntry> foundObjects;
seacher.PartialResult += foundEntries =>
{
entries.AddRange(foundEntries);
Console.Write($"\Search objects: {entries.Count()}");
};
await searcher.SearchAsync("ou=users,dc=example,dc=org", "(uid=mustermann)", "uid", "cn", "description");
// if you cannot await you can use SearchCompleted property as well
while(!searcher.SearchCompleted)
Thread.Sleep(50);
foreach(LdapEntry entry in foundObjects)
{
string uid = entry.Attributes["uid"].Values.First();
// Do something
}
Modify objects
entry.Attributes["someAttribute"].Clear();
entry.Attributes["description"].Replace("This in my new description");
entry.Attributes["someOtherAttribute"].Add("A new value");
LdapModifier modifier = new("hostname", 636, "cn=admin,ou=admins,dc=example,dc=org", "mysecretpassword", useSsl: true);
modifier.Modify(entry);
// or async
await modifier.ModifyAysnc(entry);
Change passwords (OpenLDAP)
LdapModifier.ChangePassword uses the LDAP Password Modify extended operation
(RFC 3062, OID 1.3.6.1.4.1.4203.1.11.1), not a direct modification of userPassword.
The server must support this extension and permit the operation under its access
controls and password policy.
Use LDAPS or StartTLS with server certificate validation enabled. Passwords are sent as UTF-8 bytes, not hashed by the client.
string userDn = "uid=mustermann,ou=users,dc=example,dc=org";
string oldPassword = "current-password";
string newPassword = "new-password";
LdapModifier modifier = new("hostname", 636, "cn=admin,ou=admins,dc=example,dc=org", "mysecretpassword", useSsl: true);
modifier.ChangePassword(newPassword, distinguishedName: userDn, oldPassword: oldPassword);
Parameters:
newPassword: Required; must not be null or empty.distinguishedName: Optional; omit it or passnullto change the bound user's password.oldPassword: Optional; omit it or passnullonly if the server authorizes the change without it.
For the bound user, the last call can also be written as:
modifier.ChangePassword(newPassword, oldPassword: oldPassword);
For an administrative reset, use a modifier connected as an account with the required reset permissions and omit the old password:
adminModifier.ChangePassword(newPassword, distinguishedName: userDn);
Server rejections, such as insufficient permissions or password policy violations,
are reported as System.DirectoryServices.Protocols.DirectoryOperationException.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- System.DirectoryServices.Protocols (>= 8.0.0)
- System.Formats.Asn1 (>= 8.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.5.0 | 348 | 10/26/2026 |
| 3.4.1 | 60,829 | 5/9/2025 |
| 3.4.0 | 49,904 | 11/12/2024 |
| 3.3.0 | 44,104 | 10/7/2024 |
| 3.2.0 | 44,529 | 6/26/2024 |
| 3.1.0 | 43,988 | 5/2/2024 |
| 3.0.6 | 44,548 | 9/12/2023 |
| 3.0.5 | 44,361 | 9/7/2023 |
| 3.0.4 | 44,357 | 8/29/2023 |
| 3.0.3 | 44,347 | 8/29/2023 |
| 3.0.2 | 44,349 | 8/29/2023 |
| 3.0.1 | 44,370 | 8/16/2023 |
| 3.0.0 | 44,416 | 8/11/2023 |
| 2.1.3 | 46,401 | 11/21/2019 |
| 2.1.2 | 45,218 | 9/25/2019 |
| 2.1.1 | 44,917 | 9/25/2019 |
| 2.1.0 | 44,970 | 9/24/2019 |
| 2.0.1 | 547 | 9/5/2019 |
| 1.0.1 | 47,448 | 3/3/2016 |
Search, Create, Modify, Rename, Move and Delete objects within your LDAP