Apache Portable Runtime
Loading...
Searching...
No Matches
apr_ldap_internal.h
1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements. See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef APR_LDAP_INTERNAL_H
18#define APR_LDAP_INTERNAL_H
19
20#include "apr_private.h"
21#include "apr_ldap.h"
22#include "apr_skiplist.h"
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28#if APR_HAS_LDAP
29
30/*
31 * Include the standard LDAP header files.
32 */
33
34#if APR_HAS_MICROSOFT_LDAPSDK
35#include <winldap.h>
36#include <WinBer.h>
37#else
38#include <lber.h>
39#include <ldap.h>
40#endif
41
42
43/*
44 * Make sure the secure LDAP port is defined
45 */
46#ifndef LDAPS_PORT
47#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */
48#endif
49
50/*
51 * For ldap function calls that input a size limit on the number of returned elements
52 * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0)
53 * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK
54 * or process is configured for.
55 */
56#ifdef LDAP_DEFAULT_LIMIT
57#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT
58#else
59#ifdef LDAP_NO_LIMIT
60#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
61#endif
62#endif
63
64#ifndef APR_LDAP_SIZELIMIT
65#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */
66#endif
67
68/*
69 * z/OS is missing some defines
70 */
71#ifndef LDAP_VERSION_MAX
72#define LDAP_VERSION_MAX LDAP_VERSION
73#endif
74#if APR_HAS_ZOS_LDAPSDK
75#define LDAP_VENDOR_NAME "IBM z/OS"
76#endif
77
78/*
79 * LDAP v2.0 is history.
80 */
81#if LDAP_VERSION_MAX <= 2
82#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.
83#endif
84
85
86
87/* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection
88 * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone
89 * manually chooses another SDK on Windows
90 */
91#if APR_HAS_MICROSOFT_LDAPSDK
92#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN \
93 || (s) == LDAP_UNAVAILABLE)
94#else
95#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN)
96#endif
97
98
99
100/**
101 * Macro to detect security related return values.
102 */
103#if defined(LDAP_INSUFFICIENT_ACCESS)
104#define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_ACCESS
105#elif defined(LDAP_INSUFFICIENT_RIGHTS)
106#define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS
107#elif defined(APR_HAS_MICROSOFT_LDAPSDK)
108/* The macros above fail to contemplate that LDAP_RETCODE values
109 * may be represented by an enum. autoconf tests would be much
110 * more robust.
111 */
112#define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS
113#else
114#error The security return codes must be added to support this LDAP toolkit.
115#endif
116
117#if defined(LDAP_SECURITY_ERROR)
118#define APU_LDAP_SECURITY_ERROR LDAP_SECURITY_ERROR
119#else
120#define APU_LDAP_SECURITY_ERROR(n) \
121 (LDAP_INAPPROPRIATE_AUTH == n) ? 1 \
122 : (LDAP_INVALID_CREDENTIALS == n) ? 1 \
123 : (APU_LDAP_INSUFFICIENT_ACCESS == n) ? 1 \
124 : 0
125#endif
126
127
128#if APR_HAVE_MODULAR_DSO
129
130/* For LDAP internal builds, wrap our LDAP namespace */
131
132struct apr__ldap_dso_fntable {
133 int (*info)(apr_pool_t *pool, apu_err_t **err);
134 apr_status_t (*initialise)(apr_pool_t *pool, apr_ldap_t **ldap,
135 apu_err_t *err);
136 apr_status_t (*option_get)(apr_pool_t *pool, apr_ldap_t *ldap, int option,
137 apr_ldap_opt_t *outvalue, apu_err_t *err);
138 apr_status_t (*option_set)(apr_pool_t *pool, apr_ldap_t *ldap, int option,
139 const apr_ldap_opt_t *invalue, apu_err_t *err);
140 apr_status_t (*connect)(apr_pool_t *pool, apr_ldap_t *ldap,
141 apr_interval_time_t timeout, apu_err_t *err);
142 apr_status_t (*prepare)(apr_pool_t *pool, apr_ldap_t *ldap,
143 apr_ldap_prepare_cb prepare_cb,
144 void *prepare_ctx);
145 apr_status_t (*process)(apr_pool_t *pool, apr_ldap_t *ldap,
146 apr_interval_time_t timeout, apu_err_t *err);
147 apr_status_t (*result)(apr_pool_t *pool, apr_ldap_t *ldap,
148 apr_interval_time_t timeout, apu_err_t *err);
149 apr_status_t (*poll)(apr_pool_t *pool, apr_ldap_t *ldap, apr_pollcb_t *poll,
150 apr_interval_time_t timeout, apu_err_t *err);
151 apr_status_t (*bind)(apr_pool_t *pool, apr_ldap_t *ldap,
152 const char *mech, apr_ldap_bind_interact_cb *interact_cb,
153 void *interact_ctx, apr_interval_time_t timeout,
154 apr_ldap_bind_cb bind_cb, void *bind_ctx,
155 apu_err_t *err);
156 apr_status_t (*compare)(apr_pool_t *pool, apr_ldap_t *ldap,
157 const char *dn, const char *attr,
158 const apr_buffer_t *bval,
159 apr_array_header_t *serverctrls,
160 apr_array_header_t *clientctrls,
161 apr_interval_time_t timeout,
162 apr_ldap_compare_cb compare_cb, void *ctx, apu_err_t *err);
163 apr_status_t (*search)(apr_pool_t *pool, apr_ldap_t *ldap, const char *dn,
164 apr_ldap_search_scope_e scope, const char *filter,
165 const char **attrs, apr_ldap_switch_e attrsonly,
166 apr_array_header_t *serverctrls,
167 apr_array_header_t *clientctrls,
168 apr_interval_time_t timeout, apr_ssize_t sizelimit,
169 apr_ldap_search_result_cb search_result_cb,
170 apr_ldap_search_entry_cb search_entry_cb,
171 void *search_ctx, apu_err_t *err);
172 apr_status_t (*add)(apr_pool_t *pool, apr_ldap_t *ldap,
173 const char *dn, apr_array_header_t *adds,
174 apr_array_header_t *serverctrls,
175 apr_array_header_t *clientctrls,
176 apr_interval_time_t timeout,
177 apr_ldap_add_cb add_cb, void *ctx, apu_err_t *err);
178 apr_status_t (*modify)(apr_pool_t *pool, apr_ldap_t *ldap,
179 const char *dn, apr_array_header_t *mods,
180 apr_array_header_t *serverctrls,
181 apr_array_header_t *clientctrls,
182 apr_interval_time_t timeout,
183 apr_ldap_modify_cb modify_cb, void *ctx, apu_err_t *err);
184 apr_status_t (*rename)(apr_pool_t *pool, apr_ldap_t *ldap,
185 const char *dn, const char *newrdn, const char *newparent,
186 apr_ldap_rename_e flags,
187 apr_array_header_t *serverctrls,
188 apr_array_header_t *clientctrls,
189 apr_interval_time_t timeout,
190 apr_ldap_rename_cb rename_cb, void *ctx, apu_err_t *err);
191 apr_status_t (*delete)(apr_pool_t *pool, apr_ldap_t *ldap,
192 const char *dn,
193 apr_array_header_t *serverctrls,
194 apr_array_header_t *clientctrls,
195 apr_interval_time_t timeout,
196 apr_ldap_delete_cb delete_cb, void *ctx, apu_err_t *err);
197 apr_status_t (*extended)(apr_pool_t *pool, apr_ldap_t *ldap,
198 const char *dn, apr_buffer_t *data,
199 apr_array_header_t *serverctrls,
200 apr_array_header_t *clientctrls,
201 apr_interval_time_t timeout,
202 apr_ldap_extended_cb ext_cb, void *ctx, apu_err_t *err);
203 apr_status_t (*unbind)(apr_ldap_t *ldap, apr_array_header_t *serverctrls,
204 apr_array_header_t *clientctrls, apu_err_t *err);
205};
206
207#endif /* APR_HAVE_MODULAR_DSO */
208
209
210#endif
211
212#ifdef __cplusplus
213}
214#endif
215
216#endif
217
APR-UTIL LDAP routines.
APR skip list implementation.
apr_ldap_rename_e
Definition apr_ldap.h:1960
apr_status_t(* apr_ldap_add_cb)(apr_ldap_t *ldap, apr_status_t status, const char *matcheddn, apr_ldap_control_t **serverctrls, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1776
apr_status_t(* apr_ldap_search_entry_cb)(apr_ldap_t *ldap, const char *dn, apr_size_t eidx, apr_ldap_search_entry_t *entry, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1654
apr_ldap_search_scope_e
Definition apr_ldap.h:1575
apr_status_t() apr_ldap_bind_interact_cb(apr_ldap_t *ld, unsigned int flags, apr_ldap_bind_interact_t *interact, void *ctx)
Definition apr_ldap.h:1187
apr_status_t(* apr_ldap_delete_cb)(apr_ldap_t *ldap, apr_status_t status, const char *matcheddn, apr_ldap_control_t **serverctrls, void *ctx, apu_err_t *err)
Definition apr_ldap.h:2074
apr_status_t(* apr_ldap_extended_cb)(apr_ldap_t *ldap, apr_status_t status, const char *roid, apr_buffer_t *rdata, void *ctx, apu_err_t *err)
Definition apr_ldap.h:2155
apr_status_t(* apr_ldap_compare_cb)(apr_ldap_t *ldap, apr_status_t status, const char *matcheddn, apr_ldap_control_t **serverctrls, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1503
apr_status_t(* apr_ldap_search_result_cb)(apr_ldap_t *ldap, apr_status_t status, apr_size_t count, const char *matcheddn, apr_hash_t *serverctrls, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1610
struct apr_ldap_t apr_ldap_t
Definition apr_ldap.h:309
apr_status_t(* apr_ldap_bind_cb)(apr_ldap_t *ldap, apr_status_t status, const char *matcheddn, apr_ldap_control_t **serverctrls, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1384
apr_status_t(* apr_ldap_prepare_cb)(apr_ldap_t *ldap, apr_status_t status, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1246
apr_ldap_switch_e
Definition apr_ldap.h:479
apr_status_t(* apr_ldap_modify_cb)(apr_ldap_t *ldap, apr_status_t status, const char *matcheddn, apr_ldap_control_t **serverctrls, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1892
apr_status_t(* apr_ldap_rename_cb)(apr_ldap_t *ldap, apr_status_t status, const char *matcheddn, apr_ldap_control_t **serverctrls, void *ctx, apu_err_t *err)
Definition apr_ldap.h:1988
int apr_status_t
Definition apr_errno.h:44
struct apr_pollcb_t apr_pollcb_t
Definition apr_poll.h:318
struct apr_pool_t apr_pool_t
Definition apr_pools.h:60
apr_int64_t apr_interval_time_t
Definition apr_time.h:55
Definition apr_tables.h:62
Definition apr_buffer.h:69
Definition apu_errno.h:418
Definition apr_ldap.h:761