include/private/apr_ldap_internal.h (142 lines of code) (raw):

/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_LDAP_INTERNAL_H #define APR_LDAP_INTERNAL_H #include "apr_private.h" #include "apr_ldap.h" #include "apr_skiplist.h" #ifdef __cplusplus extern "C" { #endif #if APR_HAS_LDAP /* * Include the standard LDAP header files. */ #if APR_HAS_MICROSOFT_LDAPSDK #include <winldap.h> #else #include <lber.h> #include <ldap.h> #endif /* * Make sure the secure LDAP port is defined */ #ifndef LDAPS_PORT #define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ #endif /* * For ldap function calls that input a size limit on the number of returned elements * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0) * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK * or process is configured for. */ #ifdef LDAP_DEFAULT_LIMIT #define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT #else #ifdef LDAP_NO_LIMIT #define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT #endif #endif #ifndef APR_LDAP_SIZELIMIT #define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */ #endif /* * z/OS is missing some defines */ #ifndef LDAP_VERSION_MAX #define LDAP_VERSION_MAX LDAP_VERSION #endif #if APR_HAS_ZOS_LDAPSDK #define LDAP_VENDOR_NAME "IBM z/OS" #endif /* * LDAP v2.0 is history. */ #if LDAP_VERSION_MAX <= 2 #error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit. #endif /* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone * manually chooses another SDK on Windows */ #if APR_HAS_MICROSOFT_LDAPSDK #define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN \ || (s) == LDAP_UNAVAILABLE) #else #define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN) #endif /** * Macro to detect security related return values. */ #if defined(LDAP_INSUFFICIENT_ACCESS) #define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_ACCESS #elif defined(LDAP_INSUFFICIENT_RIGHTS) #define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS #elif defined(APR_HAS_MICROSOFT_LDAPSDK) /* The macros above fail to contemplate that LDAP_RETCODE values * may be represented by an enum. autoconf tests would be much * more robust. */ #define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS #else #error The security return codes must be added to support this LDAP toolkit. #endif #if defined(LDAP_SECURITY_ERROR) #define APU_LDAP_SECURITY_ERROR LDAP_SECURITY_ERROR #else #define APU_LDAP_SECURITY_ERROR(n) \ (LDAP_INAPPROPRIATE_AUTH == n) ? 1 \ : (LDAP_INVALID_CREDENTIALS == n) ? 1 \ : (APU_LDAP_INSUFFICIENT_ACCESS == n) ? 1 \ : 0 #endif #if APR_HAVE_MODULAR_DSO /* For LDAP internal builds, wrap our LDAP namespace */ struct apr__ldap_dso_fntable { int (*info)(apr_pool_t *pool, apu_err_t **err); apr_status_t (*initialise)(apr_pool_t *pool, apr_ldap_t **ldap, apu_err_t *err); apr_status_t (*option_get)(apr_pool_t *pool, apr_ldap_t *ldap, int option, apr_ldap_opt_t *outvalue, apu_err_t *err); apr_status_t (*option_set)(apr_pool_t *pool, apr_ldap_t *ldap, int option, const apr_ldap_opt_t *invalue, apu_err_t *err); apr_status_t (*connect)(apr_pool_t *pool, apr_ldap_t *ldap, apr_interval_time_t timeout, apu_err_t *err); apr_status_t (*prepare)(apr_pool_t *pool, apr_ldap_t *ldap, apr_ldap_prepare_cb prepare_cb, void *prepare_ctx); apr_status_t (*process)(apr_pool_t *pool, apr_ldap_t *ldap, apr_interval_time_t timeout, apu_err_t *err); apr_status_t (*result)(apr_pool_t *pool, apr_ldap_t *ldap, apr_interval_time_t timeout, apu_err_t *err); apr_status_t (*poll)(apr_pool_t *pool, apr_ldap_t *ldap, apr_pollcb_t *poll, apr_interval_time_t timeout, apu_err_t *err); apr_status_t (*bind)(apr_pool_t *pool, apr_ldap_t *ldap, const char *mech, apr_ldap_bind_interact_cb *interact_cb, void *interact_ctx, apr_interval_time_t timeout, apr_ldap_bind_cb bind_cb, void *bind_ctx, apu_err_t *err); apr_status_t (*compare)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn, const char *attr, const apr_buffer_t *bval, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apr_interval_time_t timeout, apr_ldap_compare_cb compare_cb, void *ctx, apu_err_t *err); apr_status_t (*search)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn, apr_ldap_search_scope_e scope, const char *filter, const char **attrs, apr_ldap_switch_e attrsonly, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apr_interval_time_t timeout, apr_ssize_t sizelimit, apr_ldap_search_result_cb search_result_cb, apr_ldap_search_entry_cb search_entry_cb, void *search_ctx, apu_err_t *err); apr_status_t (*add)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn, apr_array_header_t *adds, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apr_interval_time_t timeout, apr_ldap_add_cb add_cb, void *ctx, apu_err_t *err); apr_status_t (*modify)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn, apr_array_header_t *mods, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apr_interval_time_t timeout, apr_ldap_modify_cb modify_cb, void *ctx, apu_err_t *err); apr_status_t (*rename)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn, const char *newrdn, const char *newparent, apr_ldap_rename_e flags, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apr_interval_time_t timeout, apr_ldap_rename_cb rename_cb, void *ctx, apu_err_t *err); apr_status_t (*delete)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apr_interval_time_t timeout, apr_ldap_delete_cb delete_cb, void *ctx, apu_err_t *err); apr_status_t (*extended)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn, apr_buffer_t *data, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apr_interval_time_t timeout, apr_ldap_extended_cb ext_cb, void *ctx, apu_err_t *err); apr_status_t (*unbind)(apr_ldap_t *ldap, apr_array_header_t *serverctrls, apr_array_header_t *clientctrls, apu_err_t *err); }; #endif /* APR_HAVE_MODULAR_DSO */ #endif #ifdef __cplusplus } #endif #endif