Dmitry Timoshkov : adsldp: Add support for ADS_SEARCHPREF_SEARCH_SCOPE to IDirectorySearch::SetSearchPreference().
Alexandre Julliard
julliard at winehq.org
Wed Mar 25 17:07:28 CDT 2020
Module: wine
Branch: master
Commit: 88678882aaf06cae71305cf43351d2982a6598d8
URL: https://source.winehq.org/git/wine.git/?a=commit;h=88678882aaf06cae71305cf43351d2982a6598d8
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Wed Mar 25 11:17:48 2020 +0800
adsldp: Add support for ADS_SEARCHPREF_SEARCH_SCOPE to IDirectorySearch::SetSearchPreference().
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/adsldp/adsldp.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
include/iads.idl | 9 ++++++++-
2 files changed, 54 insertions(+), 3 deletions(-)
diff --git a/dlls/adsldp/adsldp.c b/dlls/adsldp/adsldp.c
index caf404c3c6..6330ba2d9c 100644
--- a/dlls/adsldp/adsldp.c
+++ b/dlls/adsldp/adsldp.c
@@ -21,6 +21,7 @@
#include <stdarg.h>
#define COBJMACROS
+#define NONAMELESSUNION
#include "windef.h"
#include "winbase.h"
@@ -389,6 +390,10 @@ typedef struct
ULONG port;
ULONG attrs_count, attrs_count_allocated;
struct ldap_attribute *attrs;
+ struct
+ {
+ ADS_SCOPEENUM scope;
+ } search;
} LDAP_namespace;
static inline LDAP_namespace *impl_from_IADs(IADs *iface)
@@ -1091,8 +1096,46 @@ static ULONG WINAPI search_Release(IDirectorySearch *iface)
static HRESULT WINAPI search_SetSearchPreference(IDirectorySearch *iface, PADS_SEARCHPREF_INFO prefs, DWORD count)
{
- FIXME("%p,%p,%u: stub\n", iface, prefs, count);
- return E_NOTIMPL;
+ LDAP_namespace *ldap = impl_from_IDirectorySearch(iface);
+ DWORD i;
+
+ TRACE("%p,%p,%u\n", iface, prefs, count);
+
+ for (i = 0; i < count; i++)
+ {
+ switch (prefs[i].dwSearchPref)
+ {
+ case ADS_SEARCHPREF_SEARCH_SCOPE:
+ if (prefs[i].vValue.dwType != ADSTYPE_INTEGER)
+ {
+ FIXME("ADS_SEARCHPREF_SEACH_SCOPE: not supportd dwType %d\n", prefs[i].vValue.dwType);
+ prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREFVALUE;
+ break;
+ }
+
+ switch (prefs[i].vValue.u.Integer)
+ {
+ case ADS_SCOPE_BASE:
+ case ADS_SCOPE_ONELEVEL:
+ case ADS_SCOPE_SUBTREE:
+ ldap->search.scope = prefs[i].vValue.u.Integer;
+ prefs[i].dwStatus = ADS_STATUS_S_OK;
+ break;
+
+ default:
+ prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREFVALUE;
+ break;
+ }
+ break;
+
+ default:
+ FIXME("pref %d, type %u: stub\n", prefs[i].dwSearchPref, prefs[i].vValue.dwType);
+ prefs[i].dwStatus = ADS_STATUS_INVALID_SEARCHPREF;
+ break;
+ }
+ }
+
+ return S_OK;
}
static HRESULT WINAPI search_ExecuteSearch(IDirectorySearch *iface, LPWSTR filter, LPWSTR *names,
@@ -1186,6 +1229,7 @@ static HRESULT LDAPNamespace_create(REFIID riid, void **obj)
ldap->attrs_count = 0;
ldap->attrs_count_allocated = 0;
ldap->attrs = NULL;
+ ldap->search.scope = ADS_SCOPE_SUBTREE;
hr = IADs_QueryInterface(&ldap->IADs_iface, riid, obj);
IADs_Release(&ldap->IADs_iface);
diff --git a/include/iads.idl b/include/iads.idl
index fdee17859d..6bb63afafb 100644
--- a/include/iads.idl
+++ b/include/iads.idl
@@ -139,6 +139,13 @@ typedef enum
ADSTYPE_DN_WITH_STRING
} ADSTYPEENUM;
+typedef enum
+{
+ ADS_SCOPE_BASE,
+ ADS_SCOPE_ONELEVEL,
+ ADS_SCOPE_SUBTREE
+} ADS_SCOPEENUM;
+
typedef enum
{
ADS_PASSWORD_ENCODE_REQUIRE_SSL,
@@ -318,7 +325,7 @@ typedef struct _adsvalue
ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor;
PADS_DN_WITH_BINARY pDNWithBinary;
PADS_DN_WITH_STRING pDNWithString;
- };
+ } DUMMYUNIONNAME;
} ADSVALUE, *PADSVALUE;
typedef struct ads_searchpref_info
More information about the wine-cvs
mailing list