static void test_ldap_parse_sort_control( LDAP *ld ) { ULONG ret, result; LDAPSortKeyA *sortkeys[2], key; LDAPControlA *sort, *ctrls[2], **server_ctrls; LDAPMessage *res = NULL; struct l_timeval timeout; key.sk_attrtype = (char *)"ou"; key.sk_matchruleoid = NULL; key.sk_reverseorder = FALSE; sortkeys[0] = &key; sortkeys[1] = NULL; ret = ldap_create_sort_controlA( ld, sortkeys, 0, &sort ); ok( !ret, "ldap_create_sort_controlA failed 0x%x\n", ret ); ctrls[0] = sort; ctrls[1] = NULL; timeout.tv_sec = 20; timeout.tv_usec = 0; ret = ldap_search_ext_sA( ld, (char *)"", LDAP_SCOPE_ONELEVEL, (char *)"(ou=*)", NULL, 0, ctrls, NULL, &timeout, 10, &res ); if (ret == LDAP_SERVER_DOWN || ret == LDAP_TIMEOUT) { skip("test server can't be reached\n"); ldap_control_freeA( sort ); return; } ok( !ret, "ldap_search_ext_sA failed 0x%x\n", ret ); ok( res != NULL, "expected res != NULL\n" ); if (GetProcAddress(GetModuleHandleA("wldap32.dll"), "ber_init")) { ret = ldap_parse_resultA( NULL, res, &result, NULL, NULL, NULL, &server_ctrls, 1 ); ok( ret == LDAP_PARAM_ERROR, "ldap_parse_resultA failed 0x%x\n", ret ); } else win_skip("Test would crash on older wldap32 versions\n"); result = ~0u; ret = ldap_parse_resultA( ld, res, &result, NULL, NULL, NULL, &server_ctrls, 1 ); ok( !ret, "ldap_parse_resultA failed 0x%x\n", ret ); ok( !result, "got 0x%x expected 0\n", result ); ret = ldap_parse_sort_controlA( NULL, NULL, NULL, NULL ); ok( ret == LDAP_PARAM_ERROR, "ldap_parse_sort_controlA failed 0x%d\n", ret ); ret = ldap_parse_sort_controlA( ld, NULL, NULL, NULL ); ok( ret == LDAP_CONTROL_NOT_FOUND, "ldap_parse_sort_controlA failed 0x%x\n", ret ); ret = ldap_parse_sort_controlA( ld, NULL, &result, NULL ); ok( ret == LDAP_CONTROL_NOT_FOUND, "ldap_parse_sort_controlA failed 0x%x\n", ret ); ret = ldap_parse_sort_controlA( ld, server_ctrls, &result, NULL ); ok( ret == LDAP_CONTROL_NOT_FOUND, "ldap_parse_sort_controlA failed 0x%x\n", ret ); ldap_control_freeA( sort ); ldap_controls_freeA( server_ctrls ); }
/*********************************************************************** * ldap_encode_sort_controlA (WLDAP32.@) * * See ldap_encode_sort_controlW. */ ULONG CDECL ldap_encode_sort_controlA( WLDAP32_LDAP *ld, PLDAPSortKeyA *sortkeys, PLDAPControlA ret, BOOLEAN critical ) { LDAPControlA *control; ULONG result; if ((result = ldap_create_sort_controlA( ld, sortkeys, critical, &control )) == WLDAP32_LDAP_SUCCESS) { ret->ldctl_oid = strdupU(control->ldctl_oid); bv_val_dup( &control->ldctl_value, &ret->ldctl_value ); ret->ldctl_iscritical = control->ldctl_iscritical; ldap_control_freeA( control ); } return result; }
/*********************************************************************** * ldap_encode_sort_controlA (WLDAP32.@) * * See ldap_encode_sort_controlW. */ ULONG CDECL ldap_encode_sort_controlA( WLDAP32_LDAP *ld, PLDAPSortKeyA *sortkeys, PLDAPControlA control, BOOLEAN critical ) { return ldap_create_sort_controlA( ld, sortkeys, critical, &control ); }