v2: If secure open object fails fallback to simple bind as per MSDN.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/activeds/activeds_main.c | 10 +++++++--- dlls/adsldp/tests/ldap.c | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/activeds/activeds_main.c b/dlls/activeds/activeds_main.c index 564acab93e..6a825f0913 100644 --- a/dlls/activeds/activeds_main.c +++ b/dlls/activeds/activeds_main.c @@ -61,10 +61,14 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) /***************************************************** * ADsGetObject [ACTIVEDS.3] */ -HRESULT WINAPI ADsGetObject(LPCWSTR lpszPathName, REFIID riid, VOID** ppObject) +HRESULT WINAPI ADsGetObject(LPCWSTR path, REFIID riid, void **obj) { - FIXME("(%s)->(%s,%p)!stub\n",debugstr_w(lpszPathName), debugstr_guid(riid), ppObject); - return E_NOTIMPL; + HRESULT hr; + + hr = ADsOpenObject(path, NULL, NULL, ADS_SECURE_AUTHENTICATION, riid, obj); + if (hr != S_OK) + hr = ADsOpenObject(path, NULL, NULL, 0, riid, obj); + return hr; }
/***************************************************** diff --git a/dlls/adsldp/tests/ldap.c b/dlls/adsldp/tests/ldap.c index e0e562e8bf..28e41e4d95 100644 --- a/dlls/adsldp/tests/ldap.c +++ b/dlls/adsldp/tests/ldap.c @@ -104,6 +104,11 @@ static void test_LDAP(void) if (hr == S_OK) IADs_Release(ads);
+ hr = ADsGetObject(path, &IID_IDispatch, (void **)&disp); + ok(hr == test[i].hr || hr == test[i].hr_ads_get, "%d: got %#x, expected %#x\n", i, hr, test[i].hr); + if (hr == S_OK) + IDispatch_Release(disp); + SysFreeString(path); SysFreeString(user); SysFreeString(password);