1 /* 2 * test parsing functions 3 * 4 * Copyright 2008 Hans Leidekker for CodeWeavers 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 #include <stdarg.h> 22 #include <stdlib.h> 23 #include <windef.h> 24 #include <winbase.h> 25 #include <winldap.h> 26 27 #include "wine/test.h" 28 29 static void test_ldap_parse_sort_control( LDAP *ld ) 30 { 31 ULONG ret, result; 32 LDAPSortKeyA *sortkeys[2], key; 33 LDAPControlA *sort, *ctrls[2], **server_ctrls; 34 LDAPMessage *res = NULL; 35 struct l_timeval timeout; 36 37 key.sk_attrtype = (char *)"ou"; 38 key.sk_matchruleoid = NULL; 39 key.sk_reverseorder = FALSE; 40 41 sortkeys[0] = &key; 42 sortkeys[1] = NULL; 43 ret = ldap_create_sort_controlA( ld, sortkeys, 0, &sort ); 44 ok( !ret, "ldap_create_sort_controlA failed 0x%x\n", ret ); 45 46 ctrls[0] = sort; 47 ctrls[1] = NULL; 48 timeout.tv_sec = 20; 49 timeout.tv_usec = 0; 50 ret = ldap_search_ext_sA( ld, (char *)"", LDAP_SCOPE_ONELEVEL, (char *)"(ou=*)", NULL, 0, ctrls, NULL, &timeout, 10, &res ); 51 if (ret == LDAP_SERVER_DOWN || ret == LDAP_TIMEOUT) 52 { 53 skip("test server can't be reached\n"); 54 ldap_control_freeA( sort ); 55 return; 56 } 57 ok( !ret, "ldap_search_ext_sA failed 0x%x\n", ret ); 58 ok( res != NULL, "expected res != NULL\n" ); 59 60 if (GetProcAddress(GetModuleHandleA("wldap32.dll"), "ber_init")) 61 { 62 ret = ldap_parse_resultA( NULL, res, &result, NULL, NULL, NULL, &server_ctrls, 1 ); 63 ok( ret == LDAP_PARAM_ERROR, "ldap_parse_resultA failed 0x%x\n", ret ); 64 } 65 else 66 win_skip("Test would crash on older wldap32 versions\n"); 67 68 result = ~0u; 69 ret = ldap_parse_resultA( ld, res, &result, NULL, NULL, NULL, &server_ctrls, 1 ); 70 ok( !ret, "ldap_parse_resultA failed 0x%x\n", ret ); 71 ok( !result, "got 0x%x expected 0\n", result ); 72 73 ret = ldap_parse_sort_controlA( NULL, NULL, NULL, NULL ); 74 ok( ret == LDAP_PARAM_ERROR, "ldap_parse_sort_controlA failed 0x%d\n", ret ); 75 76 ret = ldap_parse_sort_controlA( ld, NULL, NULL, NULL ); 77 ok( ret == LDAP_CONTROL_NOT_FOUND, "ldap_parse_sort_controlA failed 0x%x\n", ret ); 78 79 ret = ldap_parse_sort_controlA( ld, NULL, &result, NULL ); 80 ok( ret == LDAP_CONTROL_NOT_FOUND, "ldap_parse_sort_controlA failed 0x%x\n", ret ); 81 82 ret = ldap_parse_sort_controlA( ld, server_ctrls, &result, NULL ); 83 ok( ret == LDAP_CONTROL_NOT_FOUND, "ldap_parse_sort_controlA failed 0x%x\n", ret ); 84 85 ldap_control_freeA( sort ); 86 ldap_controls_freeA( server_ctrls ); 87 } 88 89 static void test_ldap_search_extW( LDAP *ld ) 90 { 91 ULONG ret, message, timelimit; 92 WCHAR base[] = {0}, filter[] = {'o','u','=','*',0}; 93 94 timelimit = 20; 95 ret = ldap_search_extW( ld, base, LDAP_SCOPE_SUBTREE, filter, NULL, 0, NULL, NULL, timelimit, 0, &message ); 96 if (ret == LDAP_SERVER_DOWN || ret == LDAP_UNAVAILABLE) 97 { 98 skip("test server can't be reached\n"); 99 return; 100 } 101 ok( !ret, "ldap_search_extW failed 0x%08x\n", ret ); 102 103 timelimit = 0; 104 ret = ldap_search_extW( ld, base, LDAP_SCOPE_SUBTREE, filter, NULL, 0, NULL, NULL, timelimit, 0, &message ); 105 ok( !ret, "ldap_search_extW failed 0x%08x\n", ret ); 106 } 107 108 static void test_ldap_set_optionW( LDAP *ld ) 109 { 110 ULONG ret, oldvalue; 111 112 ret = ldap_get_optionW( ld, LDAP_OPT_REFERRALS, &oldvalue ); 113 if (ret == LDAP_SERVER_DOWN || ret == LDAP_UNAVAILABLE) 114 { 115 skip("test server can't be reached\n"); 116 return; 117 } 118 119 ret = ldap_set_optionW( ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF ); 120 ok( !ret || broken(ret == LDAP_PARAM_ERROR) /* nt4, win2k */, "ldap_set_optionW failed 0x%08x\n", ret ); 121 122 ret = ldap_set_optionW( ld, LDAP_OPT_REFERRALS, (void *)&oldvalue ); 123 ok( !ret, "ldap_set_optionW failed 0x%08x\n", ret ); 124 } 125 126 static void test_ldap_get_optionW( LDAP *ld ) 127 { 128 ULONG ret, version; 129 130 ret = ldap_get_optionW( ld, LDAP_OPT_PROTOCOL_VERSION, &version ); 131 ok( !ret, "ldap_get_optionW failed 0x%08x\n", ret ); 132 ok( version == LDAP_VERSION3, "got %u\n", version ); 133 } 134 135 START_TEST (parse) 136 { 137 LDAP *ld; 138 139 ld = ldap_initA((char *)"ldap.itd.umich.edu", 389 ); 140 ok( ld != NULL, "ldap_init failed\n" ); 141 142 test_ldap_parse_sort_control( ld ); 143 test_ldap_search_extW( ld ); 144 test_ldap_get_optionW( ld ); 145 test_ldap_set_optionW( ld ); 146 ldap_unbind( ld ); 147 } 148