1251876Speter/* Licensed to the Apache Software Foundation (ASF) under one or more
2251876Speter * contributor license agreements.  See the NOTICE file distributed with
3251876Speter * this work for additional information regarding copyright ownership.
4251876Speter * The ASF licenses this file to You under the Apache License, Version 2.0
5251876Speter * (the "License"); you may not use this file except in compliance with
6251876Speter * the License.  You may obtain a copy of the License at
7251876Speter *
8251876Speter *     http://www.apache.org/licenses/LICENSE-2.0
9251876Speter *
10251876Speter * Unless required by applicable law or agreed to in writing, software
11251876Speter * distributed under the License is distributed on an "AS IS" BASIS,
12251876Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13251876Speter * See the License for the specific language governing permissions and
14251876Speter * limitations under the License.
15251876Speter */
16251876Speter
17251876Speter/*
18251876Speter * apr_ldap.h is generated from apr_ldap.h.in by configure -- do not edit apr_ldap.h
19251876Speter */
20251876Speter/**
21251876Speter * @file apr_ldap.h
22251876Speter * @brief  APR-UTIL LDAP 
23251876Speter */
24251876Speter#ifndef APU_LDAP_H
25251876Speter#define APU_LDAP_H
26251876Speter
27251876Speter/**
28251876Speter * @defgroup APR_Util_LDAP LDAP
29251876Speter * @ingroup APR_Util
30251876Speter * @{
31251876Speter */
32251876Speter
33251876Speter/* this will be defined if LDAP support was compiled into apr-util */
34251876Speter#define APR_HAS_LDAP		  @apu_has_ldap@
35251876Speter
36251876Speter/* identify the LDAP toolkit used */
37251876Speter#define APR_HAS_NETSCAPE_LDAPSDK  @apu_has_ldap_netscape@
38251876Speter#define APR_HAS_SOLARIS_LDAPSDK   @apu_has_ldap_solaris@
39251876Speter#define APR_HAS_NOVELL_LDAPSDK    @apu_has_ldap_novell@
40251876Speter#define APR_HAS_MOZILLA_LDAPSDK   @apu_has_ldap_mozilla@
41251876Speter#define APR_HAS_OPENLDAP_LDAPSDK  @apu_has_ldap_openldap@
42251876Speter#define APR_HAS_MICROSOFT_LDAPSDK @apu_has_ldap_microsoft@
43251876Speter#define APR_HAS_TIVOLI_LDAPSDK    @apu_has_ldap_tivoli@
44251876Speter#define APR_HAS_ZOS_LDAPSDK       @apu_has_ldap_zos@
45251876Speter#define APR_HAS_OTHER_LDAPSDK     @apu_has_ldap_other@
46251876Speter
47251876Speter
48251876Speter/*
49251876Speter * Handle the case when LDAP is enabled
50251876Speter */
51251876Speter#if APR_HAS_LDAP
52251876Speter
53251876Speter/*
54251876Speter * The following #defines are DEPRECATED and should not be used for
55251876Speter * anything. They remain to maintain binary compatibility.
56251876Speter * The original code defined the OPENLDAP SDK as present regardless
57251876Speter * of what really was there, which was way bogus. In addition, the
58251876Speter * apr_ldap_url_parse*() functions have been rewritten specifically for
59251876Speter * APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero.
60251876Speter */
61251876Speter#if APR_HAS_TIVOLI_LDAPSDK
62251876Speter#define APR_HAS_LDAP_SSL 0
63251876Speter#else
64251876Speter#define APR_HAS_LDAP_SSL 1
65251876Speter#endif
66251876Speter#define APR_HAS_LDAP_URL_PARSE      0
67251876Speter
68251876Speter#if APR_HAS_OPENLDAP_LDAPSDK && !defined(LDAP_DEPRECATED) 
69251876Speter/* Ensure that the "deprecated" interfaces are still exposed
70251876Speter * with OpenLDAP >= 2.3; these were exposed by default in earlier
71251876Speter * releases. */
72251876Speter#define LDAP_DEPRECATED 1
73251876Speter#endif
74251876Speter
75251876Speter/*
76251876Speter * Include the standard LDAP header files.
77251876Speter */
78251876Speter
79251876Speter@lber_h@
80251876Speter@ldap_h@
81251876Speter@ldap_ssl_h@
82251876Speter
83251876Speter
84251876Speter/*
85251876Speter * Detected standard functions
86251876Speter */
87251876Speter#define APR_HAS_LDAPSSL_CLIENT_INIT @apu_has_ldapssl_client_init@
88251876Speter#define APR_HAS_LDAPSSL_CLIENT_DEINIT @apu_has_ldapssl_client_deinit@
89251876Speter#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT @apu_has_ldapssl_add_trusted_cert@
90251876Speter#define APR_HAS_LDAP_START_TLS_S @apu_has_ldap_start_tls_s@
91251876Speter#define APR_HAS_LDAP_SSLINIT @apu_has_ldap_sslinit@
92251876Speter#define APR_HAS_LDAPSSL_INIT @apu_has_ldapssl_init@
93251876Speter#define APR_HAS_LDAPSSL_INSTALL_ROUTINES @apu_has_ldapssl_install_routines@
94251876Speter
95251876Speter/*
96251876Speter * Make sure the secure LDAP port is defined
97251876Speter */
98251876Speter#ifndef LDAPS_PORT
99251876Speter#define LDAPS_PORT 636  /* ldaps:/// default LDAP over TLS port */
100251876Speter#endif
101251876Speter
102251876Speter/*
103251876Speter * For ldap function calls that input a size limit on the number of returned elements
104251876Speter * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0)
105251876Speter * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK
106251876Speter * or process is configured for.
107251876Speter */
108251876Speter#ifdef LDAP_DEFAULT_LIMIT
109251876Speter#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT
110251876Speter#else
111251876Speter#ifdef LDAP_NO_LIMIT
112251876Speter#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
113251876Speter#endif
114251876Speter#endif
115251876Speter
116251876Speter#ifndef APR_LDAP_SIZELIMIT
117251876Speter#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */
118251876Speter#endif
119251876Speter
120251876Speter/*
121251876Speter * z/OS is missing some defines
122251876Speter */
123251876Speter#ifndef LDAP_VERSION_MAX
124251876Speter#define LDAP_VERSION_MAX  LDAP_VERSION
125251876Speter#endif
126251876Speter#if APR_HAS_ZOS_LDAPSDK
127251876Speter#define LDAP_VENDOR_NAME "IBM z/OS"
128251876Speter#endif
129251876Speter
130251876Speter/* Note: Macros defining const casting has been removed in APR v1.0,
131251876Speter * pending real support for LDAP v2.0 toolkits.
132251876Speter *
133251876Speter * In the mean time, please use an LDAP v3.0 toolkit.
134251876Speter */
135251876Speter#if LDAP_VERSION_MAX <= 2
136251876Speter#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.
137251876Speter#endif 
138251876Speter
139251876Speter#ifdef __cplusplus
140251876Speterextern "C" {
141251876Speter#endif /* __cplusplus */
142251876Speter
143251876Speter/**
144251876Speter * This structure allows the C LDAP API error codes to be returned
145251876Speter * along with plain text error messages that explain to us mere mortals
146251876Speter * what really happened.
147251876Speter */
148251876Spetertypedef struct apr_ldap_err_t {
149251876Speter    const char *reason;
150251876Speter    const char *msg;
151251876Speter    int rc;
152251876Speter} apr_ldap_err_t;
153251876Speter
154251876Speter#ifdef __cplusplus
155251876Speter}
156251876Speter#endif
157251876Speter
158251876Speter/* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection
159251876Speter * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone 
160251876Speter * manually chooses another SDK on Windows 
161251876Speter */
162251876Speter#if APR_HAS_MICROSOFT_LDAPSDK
163251876Speter#define APR_LDAP_IS_SERVER_DOWN(s)    ((s) == LDAP_SERVER_DOWN \
164251876Speter                                    || (s) == LDAP_UNAVAILABLE)
165251876Speter#else
166251876Speter#define APR_LDAP_IS_SERVER_DOWN(s)    ((s) == LDAP_SERVER_DOWN)
167251876Speter#endif
168251876Speter
169251876Speter/* These symbols are not actually exported in a DSO build, but mapped into
170251876Speter * a private exported function array for apr_ldap_stub to bind dynamically.
171251876Speter * Rename them appropriately to protect the global namespace.
172251876Speter */
173251876Speter#ifdef APU_DSO_LDAP_BUILD
174251876Speter
175251876Speter#define apr_ldap_info apr__ldap_info
176251876Speter#define apr_ldap_init apr__ldap_init
177251876Speter#define apr_ldap_ssl_init apr__ldap_ssl_init
178251876Speter#define apr_ldap_ssl_deinit apr__ldap_ssl_deinit
179251876Speter#define apr_ldap_get_option apr__ldap_get_option
180251876Speter#define apr_ldap_set_option apr__ldap_set_option
181251876Speter#define apr_ldap_rebind_init apr__ldap_rebind_init
182251876Speter#define apr_ldap_rebind_add apr__ldap_rebind_add
183251876Speter#define apr_ldap_rebind_remove apr__ldap_rebind_remove
184251876Speter
185251876Speter#define APU_DECLARE_LDAP(type) type
186251876Speter#else
187251876Speter#define APU_DECLARE_LDAP(type) APU_DECLARE(type)
188251876Speter#endif
189251876Speter
190251876Speter#include "apr_ldap_url.h"
191251876Speter#include "apr_ldap_init.h"
192251876Speter#include "apr_ldap_option.h"
193251876Speter#include "apr_ldap_rebind.h"
194251876Speter
195251876Speter#endif /* APR_HAS_LDAP */
196251876Speter/** @} */
197251876Speter#endif /* APU_LDAP_H */
198