APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_add(apr_pool_t *pool, LDAP *ld, const char *bindDN, const char *bindPW) { apr_status_t retcode = APR_SUCCESS; apr_ldap_rebind_entry_t *new_xref; #ifdef NETWARE get_apd #endif new_xref = (apr_ldap_rebind_entry_t *)apr_pcalloc(pool, sizeof(apr_ldap_rebind_entry_t)); if (new_xref) { new_xref->pool = pool; new_xref->index = ld; if (bindDN) { new_xref->bindDN = apr_pstrdup(pool, bindDN); } if (bindPW) { new_xref->bindPW = apr_pstrdup(pool, bindPW); } #if APR_HAS_THREADS retcode = apr_thread_mutex_lock(apr_ldap_xref_lock); if (retcode != APR_SUCCESS) { return retcode; } #endif new_xref->next = xref_head; xref_head = new_xref; #if APR_HAS_THREADS retcode = apr_thread_mutex_unlock(apr_ldap_xref_lock); if (retcode != APR_SUCCESS) { return retcode; } #endif } else { return(APR_ENOMEM); } retcode = apr_ldap_rebind_set_callback(ld); if (APR_SUCCESS != retcode) { apr_ldap_rebind_remove(ld); return retcode; } apr_pool_cleanup_register(pool, ld, apr_ldap_rebind_remove_helper, apr_pool_cleanup_null); return(APR_SUCCESS); }
static int lua_apr_ldap_rebind_remove(lua_State*L) { lua_apr_ldap_object *object; apr_status_t status = APR_SUCCESS; object = check_ldap_connection(L, 1); if (ldap_rebind_inited) status = apr_ldap_rebind_remove(object->ldap); /* TODO The original code by zhiguo zhao had "object->ldap = NULL" here. */ return push_status(L, status); }
static apr_status_t apr_ldap_rebind_remove_helper(void *data) { LDAP *ld = (LDAP *)data; apr_ldap_rebind_remove(ld); return APR_SUCCESS; }