wldap32: Fix handling of zero timeout value in ldap_search_extW. (try 2)
Hans Leidekker
hans at codeweavers.com
Wed Aug 18 05:33:35 CDT 2010
This one should pass on win98 and nt4 too.
--
Based on a patch by Adam Romanek.
Fixes http://bugs.winehq.org/show_bug.cgi?id=19529
---
dlls/wldap32/search.c | 12 ++++++++----
dlls/wldap32/tests/parse.c | 20 ++++++++++++++++++++
2 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/dlls/wldap32/search.c b/dlls/wldap32/search.c
index 16158a4..6b0f4de 100644
--- a/dlls/wldap32/search.c
+++ b/dlls/wldap32/search.c
@@ -243,7 +243,7 @@ ULONG CDECL ldap_search_extW( WLDAP32_LDAP *ld, PWCHAR base, ULONG scope,
#ifdef HAVE_LDAP
char *baseU = NULL, *filterU = NULL, **attrsU = NULL;
LDAPControl **serverctrlsU = NULL, **clientctrlsU = NULL;
- struct timeval tv;
+ struct timeval tv, *tvp = NULL;
ret = WLDAP32_LDAP_NO_MEMORY;
@@ -274,11 +274,15 @@ ULONG CDECL ldap_search_extW( WLDAP32_LDAP *ld, PWCHAR base, ULONG scope,
if (!clientctrlsU) goto exit;
}
- tv.tv_sec = timelimit;
- tv.tv_usec = 0;
+ if (timelimit)
+ {
+ tv.tv_sec = timelimit;
+ tv.tv_usec = 0;
+ tvp = &tv;
+ }
ret = map_error( ldap_search_ext( ld, baseU, scope, filterU, attrsU, attrsonly,
- serverctrlsU, clientctrlsU, &tv, sizelimit, (int *)message ));
+ serverctrlsU, clientctrlsU, tvp, sizelimit, (int *)message ));
exit:
strfreeU( baseU );
diff --git a/dlls/wldap32/tests/parse.c b/dlls/wldap32/tests/parse.c
index 0f22d23..61bc9ca 100644
--- a/dlls/wldap32/tests/parse.c
+++ b/dlls/wldap32/tests/parse.c
@@ -86,6 +86,25 @@ static void test_ldap_parse_sort_control( LDAP *ld )
ldap_controls_free( server_ctrls );
}
+static void test_ldap_search_extW( LDAP *ld )
+{
+ ULONG ret, message, timelimit;
+ WCHAR base[] = {0}, filter[] = {'o','u','=','*',0};
+
+ timelimit = 20;
+ ret = ldap_search_extW( ld, base, LDAP_SCOPE_SUBTREE, filter, NULL, 0, NULL, NULL, timelimit, 0, &message );
+ if (ret == LDAP_SERVER_DOWN)
+ {
+ skip("test server can't be reached\n");
+ return;
+ }
+ ok( !ret, "ldap_search_extW failed 0x%08x\n", ret );
+
+ timelimit = 0;
+ ret = ldap_search_extW( ld, base, LDAP_SCOPE_SUBTREE, filter, NULL, 0, NULL, NULL, timelimit, 0, &message );
+ ok( !ret, "ldap_search_extW failed 0x%08x\n", ret );
+}
+
START_TEST (parse)
{
LDAP *ld;
@@ -94,5 +113,6 @@ START_TEST (parse)
ok( ld != NULL, "ldap_init failed\n" );
test_ldap_parse_sort_control( ld );
+ test_ldap_search_extW( ld );
ldap_unbind( ld );
}
--
1.7.0.4
More information about the wine-patches
mailing list