Ik zit met het volgende probleem.
In asp.net ben ik bezig met het maken van een beheermodule voor onze ldapserver.
De boom van de ldap begint met het domein, en daarin komen klanten van ons te hangen.
|-nl
|--bedrijf
|---klantnaam
|---nogeenklantnaam
Deze klanten zijn van het ldap type "organization" EN dcObject.
Mijn probleem hierbij is hoe ik dit in code aanpak.
Hieronder staat wat ik heb geprobeerd en waarom.
Wat ik hierbij als idee had was dat ik eerst het basis object moest maken. Dat is organization, dit is een structural object dus die zou eerst moeten (althans, dat idee heb ik). Vervolgens probeer ik de objectClass dcObject toe tevoegen wat als verplichte veld dc heeft.
Als ik deze code run, dan klap ik er uit op de onderste CommitChanges().
De foutmelding die ik krijg is "De gevraagde bewerking voldoet niet aan een of meer beperkingen die zijn verbonden met de klasse van het object. (Exception from HRESULT: 0x80072014)".
Hier kan ik mij enigzins in vinden, want als ik de propertie dc probeer te zetten bestaat die nog niet als de objectClass nog niet is toegevoegd. Maar als ik zonder de propertie dc probeer om de objectClass dcObject toe te voegen, dan is het verplichte veld niet gezet.
Mijn virtuele ldapserver voor het ontwikkelen beheer ik met phpldapadmin waarin ik wel gewoon de objectClass kan toevoegen, en vervolgens de verplichte velden moet toevoegen. Dit sterkt mij in het vermoeden dat wat ik doe niet onmogelijk is.
Hopelijk kan iemand mij een zetje de goede kant opgeven.
In asp.net ben ik bezig met het maken van een beheermodule voor onze ldapserver.
De boom van de ldap begint met het domein, en daarin komen klanten van ons te hangen.
|-nl
|--bedrijf
|---klantnaam
|---nogeenklantnaam
Deze klanten zijn van het ldap type "organization" EN dcObject.
Mijn probleem hierbij is hoe ik dit in code aanpak.
Hieronder staat wat ik heb geprobeerd en waarom.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| DirectoryEntry directoryEntry = new DirectoryEntry(); directoryEntry.Path = "LDAP://" + _ldapServer + "/ou=Sites, " + _startPath; directoryEntry.Username = _ldapUsername; directoryEntry.Password = _ldapPassword; directoryEntry.AuthenticationType = AuthenticationTypes.None; //default voor OpenLdap DirectorySearcher searcher = new DirectorySearcher(directoryEntry); searcher.Filter = "(objectclass=dcObject)"; searcher.SearchScope = SearchScope.OneLevel; SearchResult result = searcher.FindOne(); if (result != null) { DirectoryEntry newEntry = directoryEntry.Children.Add("o=Testbedrijf", "organization"); newEntry.Properties["o"].Add("Testbedrijf"); newEntry.CommitChanges(); newEntry.Properties["objectClass"].Add("dcObject"); newEntry.Properties["dc"].Add("Testbedrijf"); newEntry.CommitChanges(); } |
Wat ik hierbij als idee had was dat ik eerst het basis object moest maken. Dat is organization, dit is een structural object dus die zou eerst moeten (althans, dat idee heb ik). Vervolgens probeer ik de objectClass dcObject toe tevoegen wat als verplichte veld dc heeft.
Als ik deze code run, dan klap ik er uit op de onderste CommitChanges().
De foutmelding die ik krijg is "De gevraagde bewerking voldoet niet aan een of meer beperkingen die zijn verbonden met de klasse van het object. (Exception from HRESULT: 0x80072014)".
Hier kan ik mij enigzins in vinden, want als ik de propertie dc probeer te zetten bestaat die nog niet als de objectClass nog niet is toegevoegd. Maar als ik zonder de propertie dc probeer om de objectClass dcObject toe te voegen, dan is het verplichte veld niet gezet.
Mijn virtuele ldapserver voor het ontwikkelen beheer ik met phpldapadmin waarin ik wel gewoon de objectClass kan toevoegen, en vervolgens de verplichte velden moet toevoegen. Dit sterkt mij in het vermoeden dat wat ik doe niet onmogelijk is.
Hopelijk kan iemand mij een zetje de goede kant opgeven.
[ Voor 0% gewijzigd door denyos op 12-02-2009 14:20 . Reden: indents in code ]