[PATCH 4/5] wldap32: Implement ldap_get_next_page_s.
Dmitry Timoshkov
dmitry at baikal.ru
Wed Apr 15 04:52:42 CDT 2020
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/wldap32/page.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/dlls/wldap32/page.c b/dlls/wldap32/page.c
index f1244dca0d..7424eb6251 100644
--- a/dlls/wldap32/page.c
+++ b/dlls/wldap32/page.c
@@ -173,10 +173,37 @@ ULONG CDECL ldap_get_next_page_s( WLDAP32_LDAP *ld, PLDAPSearch search,
struct l_timeval *timeout, ULONG pagesize, ULONG *count,
WLDAP32_LDAPMessage **results )
{
- FIXME( "(%p, %p, %p, 0x%08x, %p, %p)\n", ld, search, timeout,
+#ifdef HAVE_LDAP
+ ULONG ret;
+
+ TRACE( "(%p, %p, %p, %u, %p, %p)\n", ld, search, timeout,
pagesize, count, results );
+ if (!ld || !search || !count || !results) return ~0u;
- if (!ld) return ~0u;
+ if (search->cookie && search->cookie->bv_len == 0)
+ {
+ /* end of paged results */
+ return WLDAP32_LDAP_NO_RESULTS_RETURNED;
+ }
+
+ TRACE("search->cookie: %s\n", search->cookie ? debugstr_an(search->cookie->bv_val, search->cookie->bv_len) : "NULL");
+ ret = ldap_create_page_control( ld->ld, pagesize, search->cookie, 1, &search->serverctrls[0] );
+ if (search->cookie)
+ {
+ ber_bvfree( search->cookie );
+ search->cookie = NULL;
+ }
+ if (ret != LDAP_SUCCESS) return map_error( ret );
+
+ ret = ldap_search_ext_s( ld->ld, search->base, search->scope,
+ search->filter, search->attrs, search->attrsonly,
+ search->serverctrls, search->clientctrls,
+ search->timeout.tv_sec ? &search->timeout : NULL, search->sizelimit, results );
+ if (ret != LDAP_SUCCESS) return map_error( ret );
+
+ return ldap_get_paged_count( ld, search, count, *results );
+
+#endif
return WLDAP32_LDAP_NOT_SUPPORTED;
}
--
2.25.2
More information about the wine-devel
mailing list