Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[VB6] Verbinden met LDAP-store

Pagina: 1
Acties:

  • Vingro
  • Registratie: September 2008
  • Laatst online: 21:31
Momenteel ben ik bezig met het ontwikkelen van een koppeling tussen een LDAP-store en een documentengenerator, met als doel het synchroniseren van de gebruikers. Deze koppeling moet ontwikkeld worden in VB6. Helaas heb ik geen ervaring met LDAP en relatief weinig met VB6, dat helpt dus niet echt mee.

Ik probeer verbinding te krijgen met de LDAP-store met behulp van de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
path = "LDAP://xx.xxx.xxx.xxx:636/"
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Properties("User ID") = "USER_ID"
conn.Properties("Password") = "PASSWORD"
conn.Properties("Encrypt Password") = True
conn.Properties("ADSI Flag") = 34

conn.Open "ADs Provider"

Set rs = conn.Execute("<" & path & "ou=Some,ou=KindOf,o=Searchbase>;(objectclass=*);name;subtree")


Bovenstaand codevoorbeeld is op basis van een SSL-verbinding, maar zowel bij dit voorbeeld als bij een niet-SSL-verbinding met user en password "anoniem" (poortnummer 389 ipv 636 en properties "Encrypt Password en "ADSI Flag" weggelaten) werkt het niet. De volgende foutmelding doet zich voor:
-2147217865: Search table does not exist.

Wanneer ik de searchbase weglaat om fouten daarin uit te sluiten krijg ik de foutmelding:
-2147463168: Bad pathname.

Via een LDAP-browser krijg ik wel gewoon verbinding met de LDAP-store. Verder heb ik geprobeerd in .NET verbinding te krijgen, dit ging ook zonder problemen met de volgende code:

C#:
1
2
3
4
5
DirectoryEntry entry = new DirectoryEntry("LDAP://xx.xxx.xxx.xxx:389/ou=Some,ou=KindOf,o=Searchbase", "anonymous", "anonymous", AuthenticationTypes.Anonymous);
DirectorySearcher search = new DirectorySearcher(entry);
foreach (SearchResult result in search.FindAll())
MessageBox.Show(result.GetDirectoryEntry().Path);
entry.Close();


De volgende sites heb ik als hulp gebruikt:
http://rulink.rutgers.edu/ldap-vb.html
http://www.freevbcode.com/ShowCode.asp?ID=611
How To Use ADO to Access Objects Through an ADSI LDAP Provider

En natuurlijk Google, waar ik helaas ook niet echt iets kon vinden.

Heeft iemand van jullie misschien een idee waarom ik geen verbinding kan krijgen? Zie ik iets over het hoofd?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

De < en > zorgen ook niet voor het probleem?

Nu met Land Rover Series 3 en Defender 90


  • Vingro
  • Registratie: September 2008
  • Laatst online: 21:31
MTWZZ schreef op maandag 22 september 2008 @ 11:34:
De < en > zorgen ook niet voor het probleem?
Denk ik niet. Volgens de diverse bronnen moeten die erbij worden opgenomen. Weglaten resulteert in een ongespecificeerde error (gewoon een soort van syntax error waarschijnlijk).

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Er zijn ook diverse voorbeelden te vinden waarbij IADS objecten worden gebruikt in plaats van ADO, dus misschien dat je het op die manier wel aan de praat kunt krijgen. Het uitvragen van de LDAP ziet er dan meer uit als in jouw tweede codevoorbeeld.

  • Vingro
  • Registratie: September 2008
  • Laatst online: 21:31
bigbeng schreef op maandag 22 september 2008 @ 12:57:
Er zijn ook diverse voorbeelden te vinden waarbij IADS objecten worden gebruikt in plaats van ADO, dus misschien dat je het op die manier wel aan de praat kunt krijgen. Het uitvragen van de LDAP ziet er dan meer uit als in jouw tweede codevoorbeeld.
Dit heb ik geprobeerd. Ik krijg ook hier een foutmelding (wel een andere). Dit kan ook komen omdat ik niet helemaal begrijp wat ik precies in moet vullen (vooral m.b.t. de eerste twee regels). Dit is wat ik heb geprobeerd:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Set oRoot = GetObject("LDAP://xx.xxx.xxx.xxx:389")
sDomain = oRoot.Get("SOMETHING")
Set oDomain = GetObject("LDAP://" & sDomain)
sBase = "<" & oDomain.ADsPath & ">"
sFilter = "(&(objectCategory=person)(objectClass=user))"
sAttribs = "name"
sDepth = "subTree"

sQuery = sBase & ";" & sFilter & ";" & sAttribs & ";" & sDepth

conn.Open _
      "Data Source=Active Directory Provider;Provider=ADsDSOObject"

Set rs = conn.Execute(sQuery)


De tweede regel resulteert in de fout:
2147463155: Property not found.

Dit lijkt op hetzelfde neer te komen als de eerdere foutmeldingen. Ik heb van alles geprobeerd m.b.t. root en domain, maar geen resultaat.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Het begint met het conceptueel benaderen van het probleem. Ik lees uit jouw informatie dat je aan het proberen bent alle users van een bepaald domein uit te lezen, klopt dit?

Als dat zo is, dan kun je bijvoorbeeld hier meer informatie vinden. Ik denk dat dit een typisch geval is van google gebruiken, tutorials doen en dan pas je probleem proberen op te lossen.

  • Vingro
  • Registratie: September 2008
  • Laatst online: 21:31
bigbeng schreef op maandag 22 september 2008 @ 15:34:
Het begint met het conceptueel benaderen van het probleem. Ik lees uit jouw informatie dat je aan het proberen bent alle users van een bepaald domein uit te lezen, klopt dit?
Het is de bedoeling om users en usergroups uit te lezen. Om dit te kunnen doen ben ik begonnen met het verbinding proberen te krijgen met LDAP en willekeurig gegevens proberen uit te lezen.
Als dat zo is, dan kun je bijvoorbeeld hier meer informatie vinden. Ik denk dat dit een typisch geval is van google gebruiken, tutorials doen en dan pas je probleem proberen op te lossen.
Die url had ik zelf al gevonden (zie openingspost) en dus ook gebruikt om te proberen gegevens uit te lezen. Dat is niet gelukt en verdere informatie (zie ook OP) heeft ook niets uitgehaald. Tutorials over LDAP in combinatie met VB6 kan ik niet vinden. Wel in combinatie met .NET, maar dat is hier helaas niet van toepassing. Vandaar dus dat ik een beroep zou willen doen op iemand die specifieke ervaring heeft op dit gebied. Niet om het probleem voor mij op te lossen, wel om mij een duw in de goede richting te geven.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik had je OP wel gelezen, linkje had ik niet gezien, stom :)

Ik heb daar jaren geleden wel iets mee gedaan en ik heb het mijzelf ook eigen moeten maken. Er is over IADS en ADSI wel het een en ander te vinden in de MSDN documentatie die hoort bij Visual Studio 6.
Als ik kijk naar jouw codevoorbeelden, dan ben je al een flink aantal stappen verder dan het ophalen van alle users van een domein. Persoonlijk vind ik het makkelijker om met een klein werkend voorbeeld te beginnen en van daaruit complexere zaken proberen te doen.

Het voorbeeld zoals dat gegeven wordt in de link die ik aangaf, zou moeten werken zonder aanpassingen, mits de machine waarop je hem draait deel uitmaakt van het domein dat je uitvraagt. En wat betreft tutorials over LDAP, voila, weer een link: http://msdn.microsoft.com/en-us/library/aa772217(VS.85).aspx. Veel plezier :)
Pagina: 1