2008-09-22 4 views
2

У меня проблема с Visual Basic (6) в сочетании с LDAP. Когда я пытаюсь подключиться к хранилищу LDAP, я всегда получаю такие ошибки, как «Bad Pathname» или «Таблица не существует» (в зависимости от того, как выглядит код).Как подключиться к хранилищу LDAP с VB6

Это часть кода, который я написал для подключения:

path = "LDAP://xx.xxx.xxx.xxx:xxx/" 
Logging.WriteToLogFile "Test1", logINFO 

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 

Logging.WriteToLogFile "Test2", logINFO 
conn.Open "Active Directory Provider" 
Logging.WriteToLogFile "Test3", logINFO 

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

Logging.WriteToLogFile "Test4", logINFO 

Файл журнала показывает «Test1», «Test2», «Test3», а затем «Таблица не существует», так что линия Msgstr "Установить rs = conn.Execute (...)", где все идет не так (довольно очевидно ...).

В моем коде я стараюсь подключаться безопасным способом. Я выяснил, что это не имеет никакого отношения к SSL/сертификатам, потому что также невозможно установить анонимное незащищенное соединение. Забавно: я написал небольшое тестовое приложение в .NET за пять минут. С этим приложением я смог подключиться (анонимно) и читать результаты из магазина LDAP, никаких проблем вообще.

Есть ли у кого-нибудь опыт работы с комбинацией LDAP и VB6 и, возможно, знаете, в чем проблема? Я googled и увидел некоторые примеры кода, но, к сожалению, никто из них не работал (такие же сообщения об ошибках, как результат). Заранее спасибо!

ответ

3

Я не уверен, насколько это поможет, но я использую этот код для доступа к объектам Active Directory.

Set oinfo = New ADSystemInfo 
    sDomain = Split(oinfo.DomainDNSName, ".") 
    '-- Get Datasets from the Active Directory 

    '-- Connect to Active Directory in logged in domain 
    con.Open "Provider=ADsDSOObject;Encrypt Password=False;Integrated Security=SSPI;Data Source=ADSDSOObject;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648" 

    '-- Query all serviceConnectionPoints in the Active Directory 
    '-- that contain the keyword "urn://tavis.net/TM/Database" 
    '-- and return the full path to the object 

    Set rst = con.Execute("<LDAP://DC=" & sDomain(0) & ",DC=" & sDomain(1) & ">;(&(objectCategory=serviceConnectionPoint)(keywords=urn://tavis.net/TM/Database));Name, AdsPath;subTree") 
1

2 вещи:

  • Вызов Open() метод принимает дополнительные параметры, сервер/имя пользователя/пароль
  • Запрос LDAP, переданное в Execute() должно быть:

    "<" & path & "ou=Some/ou=Kindof/o=Searchbase>;(objectclass=*);name;subtree"