Lines Matching refs:cookie

60 static int validate_filter(ns_ldap_cookie_t *cookie);
323 * (cookie->i_extra_info_attr) are requested and returns
328 set_extra_info(ns_ldap_cookie_t *cookie)
336 iattr = cookie->i_extra_info_attr;
354 for (iattr = cookie->i_extra_info_attr; *iattr != NULL; iattr++) {
357 if (cookie->conn == NULL)
359 switch (cookie->conn->serverType) {
412 cookie->extra_info = ep;
1280 __s_api_getEntry(ns_ldap_cookie_t *cookie)
1291 if (cookie->resultMsg == NULL) {
1295 ret = __s_api_cvtEntry(cookie->conn->ld, cookie->service,
1296 cookie->resultMsg, cookie->i_flags,
1297 &curEntry, &cookie->errorp, &cookie->range_info);
1301 if (!cookie->get_next_range) {
1302 if (cookie->result == NULL) {
1303 cookie->result = (ns_ldap_result_t *)
1305 if (cookie->result == NULL) {
1309 cookie->result->entry = curEntry;
1310 cookie->nextEntry = curEntry;
1312 cookie->nextEntry->next = curEntry;
1313 cookie->nextEntry = curEntry;
1315 cookie->result->entries_count++;
1318 if (cookie->i_extra_info_attr != NULL &&
1319 cookie->extra_info == NULL)
1320 set_extra_info(cookie);
1322 if (cookie->range_info == NULL)
1325 info = cookie->range_info;
1331 if (!cookie->get_next_range) {
1332 cookie->get_next_range = B_TRUE;
1407 if (cookie->i_extra_info_attr != NULL &&
1408 cookie->extra_info == NULL)
1409 set_extra_info(cookie);
1427 if (cookie->range_info != NULL)
1428 free_range_info(&cookie->range_info);
1429 if (ret != NS_LDAP_SUCCESS && cookie->extra_info != NULL) {
1430 __ns_ldap_freeEntry(cookie->extra_info);
1431 cookie->extra_info = NULL;
1590 ns_ldap_cookie_t *cookie;
1593 cookie = (ns_ldap_cookie_t *)calloc(1, sizeof (ns_ldap_cookie_t));
1594 if (cookie == NULL)
1596 cookie->state = INIT;
1599 cookie->connectionId = -1;
1602 cookie->search_timeout.tv_sec = NS_DEFAULT_SEARCH_TIMEOUT;
1604 cookie->search_timeout.tv_sec =
1609 cookie->search_timeout.tv_usec = 0;
1611 return (cookie);
1615 delete_search_cookie(ns_ldap_cookie_t *cookie)
1617 if (cookie == NULL)
1619 if (cookie->connectionId > -1)
1620 DropConnection(cookie->connectionId, cookie->i_flags);
1621 if (cookie->filter)
1622 free(cookie->filter);
1623 if (cookie->i_filter)
1624 free(cookie->i_filter);
1625 if (cookie->service)
1626 free(cookie->service);
1627 if (cookie->sdlist)
1628 (void) __ns_ldap_freeSearchDescriptors(&(cookie->sdlist));
1629 if (cookie->result)
1630 (void) __ns_ldap_freeResult(&cookie->result);
1631 if (cookie->extra_info)
1632 (void) __ns_ldap_freeEntry(cookie->extra_info);
1633 cookie->extra_info = NULL;
1634 if (cookie->attribute)
1635 __s_api_free2dArray(cookie->attribute);
1636 if (cookie->errorp)
1637 (void) __ns_ldap_freeError(&cookie->errorp);
1638 if (cookie->referral_list)
1639 __s_api_deleteReferral(cookie->referral_list);
1640 if (cookie->basedn)
1641 free(cookie->basedn);
1642 if (cookie->ctrlCookie)
1643 ber_bvfree(cookie->ctrlCookie);
1644 _freeControlList(&cookie->p_serverctrls);
1645 if (cookie->resultctrl)
1646 ldap_controls_free(cookie->resultctrl);
1647 if (cookie->range_info)
1648 free_range_info(&cookie->range_info);
1649 free(cookie);
1653 get_mapped_filter(ns_ldap_cookie_t *cookie, char **new_filter)
1680 if (cookie == NULL || new_filter == NULL)
1684 service = cookie->service;
1685 filter = cookie->filter;
1961 MKERROR(LOG_WARNING, cookie->errorp,
2050 setup_next_search(ns_ldap_cookie_t *cookie)
2059 dptr = *cookie->sdpos;
2060 scope = cookie->i_flags & (NS_LDAP_SCOPE_BASE |
2064 cookie->scope = scope;
2066 cookie->scope = dptr->scope;
2067 switch (cookie->scope) {
2069 cookie->scope = LDAP_SCOPE_BASE;
2072 cookie->scope = LDAP_SCOPE_ONELEVEL;
2075 cookie->scope = LDAP_SCOPE_SUBTREE;
2080 if (cookie->use_filtercb && cookie->init_filter_cb &&
2082 (*cookie->init_filter_cb)(dptr, &filter,
2083 cookie->userdata);
2086 if (cookie->i_filter == NULL) {
2087 cookie->err_rc = NS_LDAP_INVALID_PARAM;
2090 if (cookie->filter)
2091 free(cookie->filter);
2092 cookie->filter = strdup(cookie->i_filter);
2093 if (cookie->filter == NULL) {
2094 cookie->err_rc = NS_LDAP_MEMORY;
2099 if (cookie->filter)
2100 free(cookie->filter);
2101 cookie->filter = strdup(filter);
2103 if (cookie->filter == NULL) {
2104 cookie->err_rc = NS_LDAP_MEMORY;
2114 if (cookie->service) {
2115 rc = get_mapped_filter(cookie, &filter);
2117 cookie->err_rc = rc;
2126 free(cookie->filter);
2127 cookie->filter = filter;
2136 rc = validate_filter(cookie);
2138 cookie->err_rc = rc;
2145 (void ***)&param, &cookie->errorp);
2147 cookie->err_rc = rc;
2152 if (cookie->basedn)
2153 free(cookie->basedn);
2154 cookie->basedn = (char *)malloc(baselen);
2155 if (cookie->basedn == NULL) {
2156 cookie->err_rc = NS_LDAP_MEMORY;
2159 (void) strcpy(cookie->basedn, dptr->basedn);
2160 (void) strcat(cookie->basedn, str);
2163 if (cookie->basedn)
2164 free(cookie->basedn);
2165 cookie->basedn = strdup(dptr->basedn);
2171 setup_referral_search(ns_ldap_cookie_t *cookie)
2175 ref_info = cookie->ref_info;
2176 cookie->scope = ref_info->refScope;
2177 if (cookie->filter) {
2178 free(cookie->filter);
2180 cookie->filter = strdup(ref_info->refFilter);
2181 if (cookie->basedn) {
2182 free(cookie->basedn);
2184 cookie->basedn = strdup(ref_info->refDN);
2185 if (cookie->filter == NULL || cookie->basedn == NULL) {
2186 cookie->err_rc = NS_LDAP_MEMORY;
2193 get_current_session(ns_ldap_cookie_t *cookie)
2200 rc = __s_api_getConnection(NULL, cookie->i_flags,
2201 cookie->i_auth, &connectionId, &conp,
2202 &cookie->errorp, fail_if_new_pwd_reqd,
2203 cookie->nopasswd_acct_mgmt, cookie->conn_user);
2206 * If password control attached in *cookie->errorp,
2214 &cookie->errorp);
2215 cookie->errorp = NULL;
2220 cookie->err_rc = rc;
2223 cookie->conn = conp;
2224 cookie->connectionId = connectionId;
2230 get_next_session(ns_ldap_cookie_t *cookie)
2237 if (cookie->connectionId > -1) {
2238 DropConnection(cookie->connectionId, cookie->i_flags);
2239 cookie->connectionId = -1;
2240 cookie->conn = NULL;
2248 if (cookie->conn_user != NULL) {
2249 if (cookie->conn_user->conn_mt != NULL)
2250 __s_api_conn_mt_return(cookie->conn_user);
2252 __s_api_conn_user_reset(cookie->conn_user);
2255 rc = __s_api_getConnection(NULL, cookie->i_flags,
2256 cookie->i_auth, &connectionId, &conp,
2257 &cookie->errorp, fail_if_new_pwd_reqd,
2258 cookie->nopasswd_acct_mgmt, cookie->conn_user);
2261 * If password control attached in *cookie->errorp,
2269 &cookie->errorp);
2270 cookie->errorp = NULL;
2275 cookie->err_rc = rc;
2278 cookie->conn = conp;
2279 cookie->connectionId = connectionId;
2284 get_referral_session(ns_ldap_cookie_t *cookie)
2293 if (cookie->connectionId > -1) {
2294 DropConnection(cookie->connectionId, cookie->i_flags);
2295 cookie->connectionId = -1;
2296 cookie->conn = NULL;
2300 if (cookie->conn_user != NULL) {
2302 if (cookie->conn_user->conn_mt != NULL)
2303 __s_api_conn_mt_return(cookie->conn_user);
2304 cookie->conn_user->referral = B_TRUE;
2308 for (ref_info = cookie->referral_pos->ref; ref_info != NULL;
2311 cookie->i_auth, &connectionId, &conp,
2312 &cookie->errorp, fail_if_new_pwd_reqd,
2313 cookie->nopasswd_acct_mgmt, cookie->conn_user);
2316 cookie->ref_info = ref_info;
2322 * If password control attached in *cookie->errorp,
2330 &cookie->errorp);
2331 cookie->errorp = NULL;
2336 cookie->err_rc = rc;
2339 cookie->conn = conp;
2340 cookie->connectionId = connectionId;
2345 paging_supported(ns_ldap_cookie_t *cookie)
2349 cookie->listType = 0;
2350 rc = __s_api_isCtrlSupported(cookie->conn,
2353 cookie->listType = VLVCTRLFLAG;
2356 rc = __s_api_isCtrlSupported(cookie->conn,
2359 cookie->listType = SIMPLEPAGECTRLFLAG;
2447 setup_vlv_params(ns_ldap_cookie_t *cookie)
2458 _freeControlList(&cookie->p_serverctrls);
2460 if (cookie->sortTypeTry == SSS_UNKNOWN)
2461 cookie->sortTypeTry = get_srvsidesort_type(cookie->service);
2463 if (cookie->sortTypeTry == SSS_UNKNOWN) {
2464 if (cookie->conn->serverType == NS_LDAP_SERVERTYPE_ODSEE)
2465 cookie->sortTypeTry = SSS_CN_UID_ATTRS;
2467 cookie->sortTypeTry = SSS_SINGLE_ATTR;
2470 if (cookie->sortTypeTry == SSS_SINGLE_ATTR) {
2471 if ((cookie->i_flags & NS_LDAP_NOMAP) == 0 &&
2472 cookie->i_sortattr) {
2473 sortattr = __ns_ldap_mapAttribute(cookie->service,
2474 cookie->i_sortattr);
2476 } else if (cookie->i_sortattr) {
2477 sortattr = (char *)cookie->i_sortattr;
2489 (void) ldap_get_option(cookie->conn->ld,
2493 rc = ldap_create_sort_control(cookie->conn->ld,
2497 (void) ldap_get_option(cookie->conn->ld,
2502 vlist.ldvlist_index = cookie->index;
2510 rc = ldap_create_virtuallist_control(cookie->conn->ld,
2514 (void) ldap_get_option(cookie->conn->ld, LDAP_OPT_ERROR_NUMBER,
2529 cookie->p_serverctrls = ctrls;
2534 setup_simplepg_params(ns_ldap_cookie_t *cookie)
2540 _freeControlList(&cookie->p_serverctrls);
2542 rc = ldap_create_page_control(cookie->conn->ld, LISTPAGESIZE,
2543 cookie->ctrlCookie, (char)0, &pgctrl);
2545 (void) ldap_get_option(cookie->conn->ld, LDAP_OPT_ERROR_NUMBER,
2556 cookie->p_serverctrls = ctrls;
2561 proc_result_referrals(ns_ldap_cookie_t *cookie)
2570 if (cookie->referral_pos == NULL) {
2571 cookie->new_state = END_RESULT;
2572 rc = ldap_parse_result(cookie->conn->ld,
2573 cookie->resultMsg,
2578 (void) ldap_get_option(cookie->conn->ld,
2580 &cookie->err_rc);
2581 cookie->new_state = LDAP_ERROR;
2587 &cookie->referral_list,
2589 cookie->basedn,
2590 &cookie->scope,
2591 cookie->filter,
2592 cookie->conn->ld);
2594 cookie->new_state = ERROR;
2601 proc_search_references(ns_ldap_cookie_t *cookie)
2610 if (cookie->referral_pos == NULL) {
2612 cookie->conn->ld,
2613 cookie->resultMsg);
2615 (void) ldap_get_option(cookie->conn->ld,
2617 &cookie->err_rc);
2618 cookie->new_state = LDAP_ERROR;
2623 &cookie->referral_list,
2625 cookie->basedn,
2626 &cookie->scope,
2627 cookie->filter,
2628 cookie->conn->ld);
2630 cookie->new_state = ERROR;
2638 multi_result(ns_ldap_cookie_t *cookie)
2652 if (cookie->listType == VLVCTRLFLAG) {
2653 rc = ldap_parse_result(cookie->conn->ld, cookie->resultMsg,
2656 (void) ldap_get_option(cookie->conn->ld,
2658 &cookie->err_rc);
2661 cookie->err_rc,
2662 gettext(ldap_err2string(cookie->err_rc)));
2666 cookie->err_rc = NS_LDAP_INTERNAL;
2667 cookie->errorp = *errorp;
2670 if (errCode == LDAP_REFERRAL && cookie->followRef) {
2673 &cookie->referral_list,
2675 cookie->basedn,
2676 &cookie->scope,
2677 cookie->filter,
2678 cookie->conn->ld);
2696 cookie->conn->ld, retCtrls,
2704 cookie->index =
2706 if (cookie->index > list_size)
2709 if (cookie->entryCount < LISTPAGESIZE)
2712 cookie->index +=
2713 cookie->entryCount;
2721 } else if (cookie->listType == SIMPLEPAGECTRLFLAG) {
2722 rc = ldap_parse_result(cookie->conn->ld, cookie->resultMsg,
2725 (void) ldap_get_option(cookie->conn->ld,
2727 &cookie->err_rc);
2730 cookie->err_rc,
2731 gettext(ldap_err2string(cookie->err_rc)));
2735 cookie->err_rc = NS_LDAP_INTERNAL;
2736 cookie->errorp = *errorp;
2739 if (errCode == LDAP_REFERRAL && cookie->followRef) {
2742 &cookie->referral_list,
2744 cookie->basedn,
2745 &cookie->scope,
2746 cookie->filter,
2747 cookie->conn->ld);
2764 if (cookie->ctrlCookie)
2765 ber_bvfree(cookie->ctrlCookie);
2766 cookie->ctrlCookie = NULL;
2768 cookie->conn->ld, retCtrls,
2769 &count, &cookie->ctrlCookie);
2771 if ((cookie->ctrlCookie == NULL) ||
2772 (cookie->ctrlCookie->bv_val == NULL) ||
2773 (cookie->ctrlCookie->bv_len == 0))
2782 if (!finished && cookie->listType == VLVCTRLFLAG)
2784 if (!finished && cookie->listType == SIMPLEPAGECTRLFLAG)
2807 clear_results(ns_ldap_cookie_t *cookie)
2810 if (cookie->conn != NULL && cookie->conn->ld != NULL &&
2811 (cookie->connectionId != -1 ||
2812 (cookie->conn_user != NULL &&
2813 cookie->conn_user->conn_mt != NULL)) &&
2814 cookie->msgId != 0) {
2820 if (cookie->conn_user != NULL && cookie->conn_user->use_mt_conn)
2821 rc = __s_api_getLdapResult(cookie->conn->ld,
2822 cookie->msgId, LDAP_MSG_ALL,
2823 &cookie->search_timeout, &cookie->resultMsg);
2825 rc = ldap_result(cookie->conn->ld, cookie->msgId,
2826 LDAP_MSG_ALL, &cookie->search_timeout,
2827 &cookie->resultMsg);
2829 if (rc != -1 && rc != 0 && cookie->resultMsg != NULL) {
2830 (void) ldap_msgfree(cookie->resultMsg);
2831 cookie->resultMsg = NULL;
2839 (void) ldap_abandon_ext(cookie->conn->ld, cookie->msgId,
2841 /* Disassociate cookie with msgId */
2842 cookie->msgId = 0;
2870 search_state_machine(ns_ldap_cookie_t *cookie, ns_state_t state, int cycle)
2889 cookie->state = state;
2893 switch (cookie->state) {
2895 clear_results(cookie);
2896 cookie->new_state = EXIT;
2902 cookie->nopasswd_acct_mgmt = 1;
2903 cookie->new_state = INIT;
2907 if (cookie->attribute) {
2908 __s_api_free2dArray(cookie->attribute);
2909 cookie->attribute = NULL;
2911 if (cookie->referral_list) {
2912 __s_api_deleteReferral(cookie->referral_list);
2913 cookie->referral_list = NULL;
2917 cookie->sdpos = NULL;
2918 cookie->new_state = NEXT_SEARCH_DESCRIPTOR;
2919 if (cookie->attribute) {
2920 __s_api_free2dArray(cookie->attribute);
2921 cookie->attribute = NULL;
2923 if ((cookie->i_flags & NS_LDAP_NOMAP) == 0 &&
2924 cookie->i_attr) {
2925 cookie->attribute =
2927 cookie->service,
2928 cookie->i_attr);
2933 cookie->retries++;
2934 if (cookie->retries > NS_LIST_TRY_MAX - 1) {
2935 cookie->new_state = LDAP_ERROR;
2943 if (cookie->conn_user != NULL) {
2946 cmg = cookie->conn_user->conn_mgmt;
2947 retry = cookie->conn_user->retry;
2951 cookie->new_state = LDAP_ERROR;
2959 if (cookie->resultMsg != NULL) {
2960 (void) ldap_msgfree(cookie->resultMsg);
2961 cookie->resultMsg = NULL;
2963 (void) __ns_ldap_freeError(&cookie->errorp);
2964 (void) __ns_ldap_freeResult(&cookie->result);
2965 (void) __ns_ldap_freeEntry(cookie->extra_info);
2966 cookie->extra_info = NULL;
2967 cookie->sdpos = cookie->sdlist;
2968 cookie->err_from_result = 0;
2969 cookie->err_rc = 0;
2970 cookie->new_state = NEXT_SESSION;
2974 if (cookie->sdpos == NULL) {
2975 cookie->sdpos = cookie->sdlist;
2976 cookie->new_state = GET_SESSION;
2978 cookie->sdpos++;
2979 cookie->new_state = NEXT_SEARCH;
2981 if (*cookie->sdpos == NULL)
2982 cookie->new_state = EXIT;
2985 if (get_current_session(cookie) < 0)
2986 cookie->new_state = NEXT_SESSION;
2988 cookie->new_state = NEXT_SEARCH;
2991 if (get_next_session(cookie) < 0)
2992 cookie->new_state = RESTART_SESSION;
2994 cookie->new_state = NEXT_SEARCH;
2999 * cookie->err_rc must be set to the ldap error code,
3000 * on exit, cookie->new_state will be set to the next
3005 if (cookie->conn_user != NULL) {
3009 cookie->conn_user->retry = B_TRUE;
3010 if (cookie->conn_user->conn_mt != NULL) {
3012 __s_api_conn_mt_close(cookie->conn_user,
3013 cookie->err_rc, &errorp);
3016 &cookie->errorp);
3017 cookie->errorp = errorp;
3018 cookie->new_state = LDAP_ERROR;
3022 if (cookie->connectionId > -1) {
3030 if (cookie->err_rc != LDAP_SERVER_DOWN)
3032 cookie->conn->serverAddr);
3038 DropConnection(cookie->connectionId,
3040 cookie->connectionId = -1;
3041 cookie->conn = NULL;
3043 cookie->new_state = cookie->next_state;
3046 if (cookie->i_flags & NS_LDAP_HARD) {
3047 cookie->new_state = NEXT_SESSION;
3056 cookie->err_rc = NS_LDAP_INTERNAL;
3057 cookie->errorp = *errorp;
3058 cookie->new_state = EXIT;
3062 if (cookie->referral_pos) {
3063 if (setup_referral_search(cookie) < 0) {
3064 cookie->new_state = EXIT;
3067 } else if (setup_next_search(cookie) < 0) {
3068 cookie->new_state = EXIT;
3072 if (paging_supported(cookie)) {
3073 if (cookie->use_paging &&
3074 (cookie->scope != LDAP_SCOPE_BASE)) {
3075 cookie->index = 1;
3076 if (cookie->listType == VLVCTRLFLAG)
3077 cookie->new_state = NEXT_VLV;
3079 cookie->new_state = NEXT_PAGE;
3083 cookie->new_state = ONE_SEARCH;
3086 rc = setup_vlv_params(cookie);
3088 cookie->err_rc = rc;
3089 cookie->new_state = LDAP_ERROR;
3092 cookie->next_state = MULTI_RESULT;
3093 cookie->new_state = DO_SEARCH;
3096 rc = setup_simplepg_params(cookie);
3098 cookie->err_rc = rc;
3099 cookie->new_state = LDAP_ERROR;
3102 cookie->next_state = MULTI_RESULT;
3103 cookie->new_state = DO_SEARCH;
3106 cookie->next_state = NEXT_RESULT;
3107 cookie->new_state = DO_SEARCH;
3113 * cookie and go to the NEXT_RESULT state to
3118 if (cookie->range_info == NULL) {
3119 cookie->basedn = basedn_save;
3120 cookie->scope = scope_save;
3121 cookie->filter = filter_save;
3122 cookie->attribute = attrs_save;
3123 cookie->p_serverctrls = p_serverctrls_save;
3130 cookie->new_state = NEXT_RESULT;
3135 * Change/save the search related data in cookie to
3139 basedn_save = cookie->basedn;
3140 scope_save = cookie->scope;
3141 filter_save = cookie->filter;
3142 attrs_save = cookie->attribute;
3143 msgId_save = cookie->msgId;
3144 p_serverctrls_save = cookie->p_serverctrls;
3146 cookie->basedn = cookie->range_info->dn;
3147 cookie->scope = LDAP_SCOPE_BASE;
3148 cookie->filter = "(objectclass=*)";
3149 cookie->msgId = 0;
3150 cookie->p_serverctrls = NULL;
3152 cookie->attribute = cookie->range_info->attr_to_search;
3154 cookie->new_state = DO_SEARCH;
3155 cookie->next_state = NEXT_RESULT;
3159 if (!cookie->get_next_range)
3160 cookie->entryCount = 0;
3161 rc = ldap_search_ext(cookie->conn->ld,
3162 cookie->basedn,
3163 cookie->scope,
3164 cookie->filter,
3165 cookie->attribute,
3167 cookie->p_serverctrls,
3169 &cookie->search_timeout, 0,
3170 &cookie->msgId);
3172 cookie->new_state = cookie->next_state;
3176 cookie->err_rc = rc;
3182 cookie->new_state = DROP_SESSION;
3183 cookie->next_state = LDAP_ERROR;
3195 if (cookie->reinit_on_retriable_err) {
3196 cookie->new_state = DROP_SESSION;
3197 cookie->next_state = REINIT;
3199 } else if (cookie->result == NULL) {
3205 * saved in the cookie.
3207 if (cookie->new_state != DROP_SESSION) {
3212 cookie->new_state =
3220 cookie->next_state =
3223 cookie->err_rc = NS_LDAP_SUCCESS;
3228 if (cookie->new_state != DROP_SESSION)
3229 cookie->new_state = LDAP_ERROR;
3238 if (cookie->range_info != NULL) {
3239 cookie->new_state = NEXT_RANGE;
3243 cookie->new_state = PROCESS_RESULT;
3244 cookie->next_state = state_save;
3245 cookie->msgId = msgId_save;
3247 cookie->get_next_range = B_FALSE;
3253 * be saved in cookie->err_rc. The ldap result rc is
3260 switch (cookie->err_rc) {
3265 rc = ldap_get_lderrno(cookie->conn->ld,
3269 rc = ldap_result2error(cookie->conn->ld,
3270 cookie->resultMsg, 1);
3274 (void) ldap_msgfree(cookie->resultMsg);
3275 cookie->resultMsg = NULL;
3276 cookie->err_from_result = 1;
3277 cookie->err_rc = rc;
3283 if (cookie->reinit_on_retriable_err) {
3284 cookie->new_state = REINIT;
3286 } else if (cookie->result == NULL) {
3287 cookie->err_from_result = 0;
3288 cookie->err_rc =
3290 cookie->new_state =
3303 cookie->new_state = DROP_SESSION;
3304 if (cookie->reinit_on_retriable_err)
3305 cookie->next_state = REINIT;
3307 cookie->next_state = LDAP_ERROR;
3310 cookie->new_state = LDAP_ERROR;
3319 if (cookie->no_wait == B_TRUE)
3322 tv = cookie->search_timeout;
3324 if (cookie->conn_user != NULL &&
3325 cookie->conn_user->use_mt_conn)
3327 cookie->conn->ld, cookie->msgId,
3328 LDAP_MSG_ONE, &tv, &cookie->resultMsg);
3330 ldap_res_rc = ldap_result(cookie->conn->ld,
3331 cookie->msgId, LDAP_MSG_ONE, &tv,
3332 &cookie->resultMsg);
3335 if (cookie->get_next_range) {
3336 cookie->new_state = NEXT_RANGE_RESULT;
3338 cookie->new_state = END_RESULT;
3340 if (cookie->followRef)
3341 proc_result_referrals(cookie);
3344 (void) ldap_msgfree(cookie->resultMsg);
3345 cookie->resultMsg = NULL;
3350 if (cookie->followRef)
3351 proc_search_references(cookie);
3352 (void) ldap_msgfree(cookie->resultMsg);
3353 cookie->resultMsg = NULL;
3357 if (ldap_res_rc == 0 && cookie->no_wait) {
3358 (void) ldap_msgfree(cookie->resultMsg);
3359 cookie->resultMsg = NULL;
3360 return (cookie->new_state);
3362 cookie->err_rc = ldap_res_rc;
3363 cookie->new_state = RESULT_ERROR;
3368 if (cookie->nopasswd_acct_mgmt == 1) {
3369 rc = ldap_get_entry_controls(cookie->conn->ld,
3370 cookie->resultMsg,
3371 &(cookie->resultctrl));
3373 cookie->new_state = LDAP_ERROR;
3374 cookie->err_rc = rc;
3378 rc = __s_api_getEntry(cookie);
3379 (void) ldap_msgfree(cookie->resultMsg);
3380 cookie->resultMsg = NULL;
3382 cookie->new_state = LDAP_ERROR;
3398 if (cookie->get_next_range) {
3399 cookie->new_state = NEXT_RANGE;
3400 state_save = cookie->state;
3404 cookie->new_state = PROCESS_RESULT;
3405 cookie->next_state = NEXT_RESULT;
3408 if (cookie->no_wait == B_TRUE)
3411 tv = cookie->search_timeout;
3413 if (cookie->conn_user != NULL &&
3414 cookie->conn_user->use_mt_conn)
3416 cookie->conn->ld, cookie->msgId,
3417 LDAP_MSG_ONE, &tv, &cookie->resultMsg);
3419 ldap_res_rc = ldap_result(cookie->conn->ld,
3420 cookie->msgId, LDAP_MSG_ONE, &tv,
3421 &cookie->resultMsg);
3424 rc = ldap_result2error(cookie->conn->ld,
3425 cookie->resultMsg, 0);
3427 cookie->listType == VLVCTRLFLAG &&
3428 cookie->sortTypeTry == SSS_SINGLE_ATTR) {
3430 cookie->sortTypeTry = SSS_CN_UID_ATTRS;
3431 cookie->new_state = NEXT_VLV;
3432 (void) ldap_msgfree(cookie->resultMsg);
3433 cookie->resultMsg = NULL;
3437 cookie->err_rc = rc;
3438 cookie->new_state = LDAP_ERROR;
3439 (void) ldap_msgfree(cookie->resultMsg);
3440 cookie->resultMsg = NULL;
3443 cookie->new_state = multi_result(cookie);
3444 (void) ldap_msgfree(cookie->resultMsg);
3445 cookie->resultMsg = NULL;
3450 if (cookie->followRef)
3451 proc_search_references(cookie);
3452 (void) ldap_msgfree(cookie->resultMsg);
3453 cookie->resultMsg = NULL;
3457 if (ldap_res_rc == 0 && cookie->no_wait) {
3458 (void) ldap_msgfree(cookie->resultMsg);
3459 cookie->resultMsg = NULL;
3460 return (cookie->new_state);
3462 cookie->err_rc = ldap_res_rc;
3463 cookie->new_state = RESULT_ERROR;
3467 cookie->entryCount++;
3468 rc = __s_api_getEntry(cookie);
3469 (void) ldap_msgfree(cookie->resultMsg);
3470 cookie->resultMsg = NULL;
3472 cookie->new_state = LDAP_ERROR;
3479 if (cookie->listType == VLVCTRLFLAG)
3480 update_srvsidesort_type(cookie->service,
3481 cookie->sortTypeTry);
3491 if (cookie->range_info != NULL) {
3492 cookie->new_state = NEXT_RANGE;
3493 state_save = cookie->state;
3497 cookie->new_state = PROCESS_RESULT;
3498 cookie->next_state = MULTI_RESULT;
3502 if (cookie->use_usercb && cookie->callback) {
3504 for (nextEntry = cookie->result->entry;
3507 rc = (*cookie->callback)(nextEntry,
3508 cookie->userdata);
3513 cookie->err_rc = rc;
3518 cookie->err_rc = rc;
3522 (void) __ns_ldap_freeResult(&cookie->result);
3523 cookie->result = NULL;
3524 if (cookie->extra_info != NULL)
3525 __ns_ldap_freeEntry(cookie->extra_info);
3526 cookie->extra_info = NULL;
3529 cookie->new_state = EXIT;
3533 cookie->new_state = cookie->next_state;
3536 cookie->new_state = cookie->next_state;
3542 * cookie->new_state = EXIT;
3548 if (cookie->followRef && cookie->referral_list)
3549 cookie->new_state =
3552 cookie->new_state =
3557 if (cookie->referral_pos == NULL)
3558 cookie->referral_pos =
3559 cookie->referral_list;
3561 cookie->referral_pos =
3562 cookie->referral_pos->next;
3564 if (cookie->referral_pos != NULL)
3565 cookie->new_state =
3568 __s_api_deleteReferral(cookie->referral_list);
3569 cookie->referral_list = NULL;
3570 cookie->new_state =
3572 if (cookie->conn_user != NULL)
3573 cookie->conn_user->referral = B_FALSE;
3577 if (get_referral_session(cookie) < 0)
3578 cookie->new_state = EXIT;
3580 cookie->new_state = NEXT_SEARCH;
3584 if (cookie->range_info == NULL) {
3585 cookie->new_state = cookie->next_state;
3589 cookie->basedn = basedn_save;
3590 cookie->scope = scope_save;
3591 cookie->filter = filter_save;
3592 cookie->attribute = attrs_save;
3593 cookie->p_serverctrls = p_serverctrls_save;
3595 cookie->msgId = msgId_save;
3601 if (cookie->range_info != NULL)
3602 free_range_info(&cookie->range_info);
3604 cookie->new_state = cookie->next_state;
3607 if (cookie->range_info != NULL) {
3608 cookie->new_state = NEXT_RANGE_RESTORE;
3609 cookie->next_state = LDAP_ERROR;
3613 if (cookie->err_from_result) {
3614 if (cookie->err_rc == LDAP_SERVER_DOWN) {
3620 cookie->err_rc);
3626 "."), cookie->err_rc,
3628 cookie->err_rc));
3633 cookie->err_rc,
3634 ldap_err2string(cookie->err_rc));
3636 if (cookie->err_from_result && cookie->err_rc ==
3639 cookie->err_rc, err, NULL);
3641 MKERROR(LOG_WARNING, *errorp, cookie->err_rc,
3644 cookie->err_rc = NS_LDAP_INTERNAL;
3645 cookie->errorp = *errorp;
3651 cookie->state);
3655 cookie->err_rc = NS_LDAP_INTERNAL;
3656 cookie->errorp = *errorp;
3660 if (cookie->conn_user != NULL &&
3661 cookie->conn_user->bad_mt_conn == B_TRUE) {
3662 __s_api_conn_mt_close(cookie->conn_user, 0, NULL);
3663 cookie->err_rc = cookie->conn_user->ns_rc;
3664 cookie->errorp = cookie->conn_user->ns_error;
3665 cookie->conn_user->ns_error = NULL;
3670 return (cookie->new_state);
3672 cookie->state = cookie->new_state;
3680 cookie->err_rc = NS_LDAP_INTERNAL;
3681 cookie->errorp = *errorp;
3692 check_shadow(ns_ldap_cookie_t *cookie, const char *service)
3731 MKERROR(LOG_INFO, cookie->errorp, NS_LDAP_INTERNAL, err,
3735 cookie->i_flags |= NS_LDAP_READ_SHADOW;
3742 if (cookie->i_flags & NS_LDAP_KEEP_CONN)
3744 cookie->i_flags |= NS_LDAP_NEW_CONN;
3772 ns_ldap_cookie_t *cookie;
3794 /* Initialize State machine cookie */
3795 cookie = init_search_state_machine();
3796 if (cookie == NULL) {
3800 cookie->conn_user = conn_user;
3804 &cookie->followRef, errorp);
3806 delete_search_cookie(cookie);
3815 delete_search_cookie(cookie);
3826 delete_search_cookie(cookie);
3827 cookie = NULL;
3835 delete_search_cookie(cookie);
3836 cookie = NULL;
3843 rc = __s_api_getDNs(&dns, service, &cookie->errorp);
3849 *errorp = cookie->errorp;
3850 cookie->errorp = NULL;
3851 delete_search_cookie(cookie);
3852 cookie = NULL;
3862 rc = __s_api_getSearchScope(&scope, &cookie->errorp);
3866 cookie->sdlist = sdlist;
3872 cookie->use_paging = TRUE;
3874 cookie->use_paging = FALSE;
3877 cookie->userdata = userdata;
3879 cookie->init_filter_cb = init_filter_cb;
3880 cookie->use_filtercb = 1;
3883 cookie->callback = callback;
3884 cookie->use_usercb = 1;
3887 /* check_shadow() may add extra value to cookie->i_flags */
3888 cookie->i_flags = flags;
3890 cookie->service = strdup(service);
3891 if (cookie->service == NULL) {
3892 delete_search_cookie(cookie);
3893 cookie = NULL;
3903 rc = check_shadow(cookie, service);
3905 *errorp = cookie->errorp;
3906 cookie->errorp = NULL;
3907 delete_search_cookie(cookie);
3908 cookie = NULL;
3915 cookie->i_filter = strdup(filter);
3916 cookie->i_attr = attribute;
3917 cookie->i_extra_info_attr = extra_info_attr;
3918 cookie->i_auth = auth;
3919 cookie->i_sortattr = sortattr;
3922 cookie->batch = batch;
3923 cookie->reinit_on_retriable_err = B_TRUE;
3924 cookie->no_wait = B_TRUE;
3925 (void) search_state_machine(cookie, INIT, 0);
3926 cookie->no_wait = B_FALSE;
3927 rc = cookie->err_rc;
3934 * __ns_ldap_list_batch_end(). Add the cookie to our
3937 cookie->caller_result = rResult;
3938 cookie->caller_errorp = errorp;
3939 cookie->caller_rc = rcp;
3940 cookie->next_cookie_in_batch = batch->cookie_list;
3941 batch->cookie_list = cookie;
3947 * and delete the cookie.
3950 (void) search_state_machine(cookie, INIT, 0);
3954 rc = cookie->err_rc;
3956 if (cookie->extra_info != NULL) {
3957 __ns_ldap_freeEntry(cookie->extra_info);
3958 cookie->extra_info = NULL;
3966 *errorp = cookie->errorp;
3968 *rResult = cookie->result;
3970 *extra_info = cookie->extra_info;
3971 cookie->extra_info = NULL;
3972 from_result = cookie->err_from_result;
3974 cookie->errorp = NULL;
3975 cookie->result = NULL;
3976 delete_search_cookie(cookie);
3977 cookie = NULL;
4121 ns_ldap_cookie_t *cookie = NULL;
4142 /* Initialize State machine cookie */
4143 cookie = init_search_state_machine();
4144 if (cookie == NULL) {
4148 cookie->conn_user = conn_user;
4152 &cookie->followRef, errorp);
4171 cookie->sdlist = sdlist;
4183 cookie->use_paging = FALSE;
4186 cookie->userdata = userdata;
4188 cookie->init_filter_cb = init_filter_cb;
4189 cookie->use_filtercb = 1;
4192 cookie->callback = callback;
4193 cookie->use_usercb = 1;
4197 cookie->i_flags |= NS_LDAP_NOT_CVT_DN;
4198 cookie->i_filter = strdup("(objectClass=*)");
4199 if (cookie->i_filter == NULL) {
4203 cookie->i_attr = attribute;
4204 cookie->i_extra_info_attr = extra_info_attr;
4206 cookie->service = strdup(service);
4207 if (cookie->service == NULL) {
4212 cookie->i_auth = auth;
4214 (void) search_state_machine(cookie, INIT, 0);
4217 rc = cookie->err_rc;
4219 if (cookie->extra_info != NULL) {
4220 __ns_ldap_freeEntry(cookie->extra_info);
4228 *errorp = cookie->errorp;
4230 *rResult = cookie->result;
4232 *extra_info = cookie->extra_info;
4233 cookie->extra_info = NULL;
4234 from_result = cookie->err_from_result;
4236 cookie->errorp = NULL;
4237 cookie->result = NULL;
4238 delete_search_cookie(cookie);
4239 cookie = NULL;
4247 if (cookie != NULL)
4248 delete_search_cookie(cookie);
4346 * Free the conn_user if the cookie was not batched. If the cookie
4386 * active cookie from the batch and single steps through the
4387 * search_state_machine for the selected cookie. If lookup associated
4388 * with the cookie is complete (success or error) then the cookie is
4413 /* Get the next cookie from the batch */
4420 * Checks the status of the cookie's connection if it needs
4423 * then reinit the search_state_machine for this cookie
4429 * Note that each cookie in the batch will make this
4481 /* Remove the cookie from the batch */
4492 /* Delete cookie and decrement active cookie count */
4506 * another ldap_result() for the cookie in question.
4511 * cookie.
4519 * this cookie till we reach either the error, exit
4557 ns_ldap_cookie_t *cookie;
4567 /* Initialize State machine cookie */
4568 cookie = init_search_state_machine();
4569 if (cookie == NULL) {
4572 cookie->conn_user = conn_user;
4576 &cookie->followRef, errorp);
4578 delete_search_cookie(cookie);
4586 delete_search_cookie(cookie);
4587 cookie = NULL;
4594 delete_search_cookie(cookie);
4595 cookie = NULL;
4609 cookie->sdlist = sdlist;
4610 cookie->i_filter = strdup(dptr->filter);
4611 cookie->i_attr = nis_domain_attrs;
4612 cookie->i_auth = cred;
4613 cookie->i_flags = 0;
4616 rc = search_state_machine(cookie, INIT, 0);
4619 rc = cookie->err_rc;
4625 *errorp = cookie->errorp;
4627 if (cookie->result == NULL)
4630 value = __ns_ldap_getAttr(cookie->result->entry,
4637 if (cookie->result != NULL)
4638 (void) __ns_ldap_freeResult(&cookie->result);
4639 cookie->errorp = NULL;
4640 delete_search_cookie(cookie);
4641 cookie = NULL;
4687 ns_ldap_cookie_t *cookie = NULL;
4752 cookie = init_search_state_machine();
4753 if (cookie == NULL) {
4760 rc = __s_api_getSearchScope(&scope, &cookie->errorp);
4764 /* Initialize State machine cookie */
4765 if (cookie == NULL)
4766 cookie = init_search_state_machine();
4767 if (cookie == NULL) {
4776 cookie->conn_user = conn_user;
4778 cookie->sdlist = sdlist;
4782 &cookie->followRef, errorp);
4784 delete_search_cookie(cookie);
4792 cookie->use_paging = FALSE;
4794 cookie->use_paging = TRUE;
4797 cookie->userdata = userdata;
4799 cookie->init_filter_cb = init_filter_cb;
4800 cookie->use_filtercb = 1;
4802 cookie->use_usercb = 0;
4803 /* check_shadow() may add extra value to cookie->i_flags */
4804 cookie->i_flags = flags;
4806 cookie->service = strdup(service);
4807 if (cookie->service == NULL) {
4808 delete_search_cookie(cookie);
4817 rc = check_shadow(cookie, service);
4819 *errorp = cookie->errorp;
4820 cookie->errorp = NULL;
4821 delete_search_cookie(cookie);
4822 cookie = NULL;
4828 cookie->i_filter = strdup(filter);
4829 cookie->i_attr = attribute;
4830 cookie->i_extra_info_attr = extra_info_attr;
4831 cookie->i_sortattr = sortattr;
4832 cookie->i_auth = auth;
4836 state = search_state_machine(cookie, state, ONE_STEP);
4839 *result = cookie->result;
4840 cookie->result = NULL;
4842 *extra_info = cookie->extra_info;
4843 cookie->extra_info = NULL;
4845 *vcookie = (void *)cookie;
4848 state = search_state_machine(cookie, state, ONE_STEP);
4849 state = search_state_machine(cookie, CLEAR_RESULTS,
4853 rc = cookie->err_rc;
4858 *errorp = cookie->errorp;
4859 cookie->errorp = NULL;
4861 delete_search_cookie(cookie);
4864 rc = cookie->err_rc;
4866 *errorp = cookie->errorp;
4867 cookie->errorp = NULL;
4872 delete_search_cookie(cookie);
4943 ns_ldap_cookie_t *cookie;
4947 cookie = (ns_ldap_cookie_t *)vcookie;
4948 cookie->result = NULL;
4951 if (cookie->conn_user != NULL) {
4952 rc = __s_api_setup_getnext(cookie->conn_user,
4953 &cookie->err_rc, errorp);
4960 state = search_state_machine(cookie, state, ONE_STEP);
4963 *result = cookie->result;
4964 cookie->result = NULL;
4967 state = search_state_machine(cookie, state, ONE_STEP);
4968 state = search_state_machine(cookie, CLEAR_RESULTS,
4972 rc = cookie->err_rc;
4973 *errorp = cookie->errorp;
4974 cookie->errorp = NULL;
4987 ns_ldap_cookie_t *cookie;
4993 cookie = (ns_ldap_cookie_t *)(*vcookie);
4994 cookie->result = NULL;
4997 rc = search_state_machine(cookie, CLEAR_RESULTS, 0);
5000 rc = cookie->err_rc;
5002 *errorp = cookie->errorp;
5004 cookie->errorp = NULL;
5005 if (cookie->conn_user != NULL) {
5006 if (cookie->conn_user->conn_mt != NULL)
5007 __s_api_conn_mt_return(cookie->conn_user);
5008 __s_api_conn_user_free(cookie->conn_user);
5010 delete_search_cookie(cookie);
5011 cookie = NULL;
6196 validate_filter(ns_ldap_cookie_t *cookie)
6198 char *filter = cookie->filter;
6219 setup_acctmgmt_params(ns_ldap_cookie_t *cookie)
6246 cookie->p_serverctrls = requestctrls;
6652 ns_ldap_cookie_t *cookie;
6662 /* Initialize State machine cookie */
6663 cookie = init_search_state_machine();
6664 if (cookie == NULL)
6666 cookie->conn_user = conn_user;
6670 &cookie->followRef, &error);
6702 rc = __s_api_getDNs(&dns, service, &cookie->errorp);
6708 (void) __ns_ldap_freeError(&(cookie->errorp));
6709 cookie->errorp = NULL;
6728 rc = __s_api_getSearchScope(&scope, &cookie->errorp);
6732 cookie->sdlist = sdlist;
6734 cookie->service = strdup(service);
6735 if (cookie->service == NULL) {
6742 cookie->i_filter = strdup(ldapfilter);
6743 if (cookie->i_filter == NULL) {
6749 if ((rc = setup_acctmgmt_params(cookie)) != NS_LDAP_SUCCESS)
6753 rc = search_state_machine(cookie, GET_ACCT_MGMT_INFO, 0);
6756 rc = cookie->err_rc;
6758 (void) __ns_ldap_freeError(&(cookie->errorp));
6760 if (cookie->result == NULL)
6763 if ((rc = parse_acct_cont_resp_msg(cookie->resultctrl, acctResp))
6770 delete_search_cookie(cookie);
6780 * response control returned from the server is got from the cookie.