~ubuntu-branches/ubuntu/feisty/apache2/feisty

« back to all changes in this revision

Viewing changes to srclib/apr-util/include/apr_ldap_option.h

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Barth
  • Date: 2006-12-09 21:05:45 UTC
  • mfrom: (0.6.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20061209210545-h70s0xaqc2v8vqr2
Tags: 2.2.3-3.2
* Non-maintainer upload.
* 043_ajp_connection_reuse: Patch from upstream Bugzilla, fixing a critical
  issue with regard to connection reuse in mod_proxy_ajp.
  Closes: #396265

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
 
2
 * applicable.
 
3
 *
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * 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
/**
 
18
 * @file apr_ldap_option.h
 
19
 * @brief  APR-UTIL LDAP ldap_*_option() functions
 
20
 */
 
21
#ifndef APR_LDAP_OPTION_H
 
22
#define APR_LDAP_OPTION_H
 
23
 
 
24
/**
 
25
 * @defgroup APR_Util_LDAP LDAP
 
26
 * @ingroup APR_Util
 
27
 * @{
 
28
 */
 
29
 
 
30
#include "apr_ldap.h"
 
31
 
 
32
#if APR_HAS_LDAP
 
33
 
 
34
#ifdef __cplusplus
 
35
extern "C" {
 
36
#endif /* __cplusplus */
 
37
 
 
38
/*
 
39
 * The following defines handle the different TLS certificate
 
40
 * options available. If these options are missing, APR will try and
 
41
 * emulate support for this using the deprecated ldap_start_tls_s()
 
42
 * function.
 
43
 */
 
44
/**
 
45
 * Set SSL mode to one of APR_LDAP_NONE, APR_LDAP_SSL, APR_LDAP_STARTTLS
 
46
 * or APR_LDAP_STOPTLS.
 
47
 */
 
48
#define APR_LDAP_OPT_TLS 0x6fff
 
49
/**
 
50
 * Set zero or more CA certificates, client certificates or private
 
51
 * keys globally, or per connection (where supported).
 
52
 */
 
53
#define APR_LDAP_OPT_TLS_CERT 0x6ffe
 
54
/**
 
55
 * Set the LDAP library to no verify the server certificate.  This means
 
56
 * all servers are considered trusted.
 
57
 */
 
58
#define APR_LDAP_OPT_VERIFY_CERT 0x6ffd
 
59
 
 
60
/**
 
61
 * Structures for the apr_set_option() cases
 
62
 */
 
63
 
 
64
/**
 
65
 * APR_LDAP_OPT_TLS_CERT
 
66
 *
 
67
 * This structure includes possible options to set certificates on
 
68
 * system initialisation. Different SDKs have different certificate
 
69
 * requirements, and to achieve this multiple certificates must be
 
70
 * specified at once passed as an (apr_array_header_t *).
 
71
 *
 
72
 * Netscape:
 
73
 * Needs the CA cert database (cert7.db), the client cert database (key3.db)
 
74
 * and the security module file (secmod.db) set at the system initialisation
 
75
 * time. Three types are supported: APR_LDAP_CERT7_DB, APR_LDAP_KEY3_DB and
 
76
 * APR_LDAP_SECMOD.
 
77
 *
 
78
 * To specify a client cert connection, a certificate nickname needs to be
 
79
 * provided with a type of APR_LDAP_CERT.
 
80
 * int ldapssl_enable_clientauth( LDAP *ld, char *keynickname,
 
81
 * char *keypasswd, char *certnickname );
 
82
 * keynickname is currently not used, and should be set to ""
 
83
 *
 
84
 * Novell:
 
85
 * Needs CA certificates and client certificates set at system initialisation
 
86
 * time. Three types are supported: APR_LDAP_CA*, APR_LDAP_CERT* and
 
87
 * APR_LDAP_KEY*.
 
88
 *
 
89
 * Certificates cannot be specified per connection.
 
90
 *
 
91
 * The functions used are:
 
92
 * ldapssl_add_trusted_cert(serverTrustedRoot, serverTrustedRootEncoding);
 
93
 * Clients certs and keys are set at system initialisation time with
 
94
 * int ldapssl_set_client_cert (
 
95
 *  void   *cert,
 
96
 *  int     type
 
97
 *  void   *password); 
 
98
 * type can be LDAPSSL_CERT_FILETYPE_B64 or LDAPSSL_CERT_FILETYPE_DER
 
99
 *  ldapssl_set_client_private_key(clientPrivateKey,
 
100
 *                                 clientPrivateKeyEncoding,
 
101
 *                                 clientPrivateKeyPassword);
 
102
 *
 
103
 * OpenSSL:
 
104
 * Needs one or more CA certificates to be set at system initialisation time
 
105
 * with a type of APR_LDAP_CA*.
 
106
 *
 
107
 * May have one or more client certificates set per connection with a type of
 
108
 * APR_LDAP_CERT*, and keys with APR_LDAP_KEY*.
 
109
 */
 
110
/** CA certificate type unknown */
 
111
#define APR_LDAP_CA_TYPE_UNKNOWN    0
 
112
/** binary DER encoded CA certificate */
 
113
#define APR_LDAP_CA_TYPE_DER        1
 
114
/** PEM encoded CA certificate */
 
115
#define APR_LDAP_CA_TYPE_BASE64     2
 
116
/** Netscape/Mozilla cert7.db CA certificate database */
 
117
#define APR_LDAP_CA_TYPE_CERT7_DB   3
 
118
/** Netscape/Mozilla secmod file */
 
119
#define APR_LDAP_CA_TYPE_SECMOD     4
 
120
/** Client certificate type unknown */
 
121
#define APR_LDAP_CERT_TYPE_UNKNOWN  5
 
122
/** binary DER encoded client certificate */
 
123
#define APR_LDAP_CERT_TYPE_DER      6
 
124
/** PEM encoded client certificate */
 
125
#define APR_LDAP_CERT_TYPE_BASE64   7
 
126
/** Netscape/Mozilla key3.db client certificate database */
 
127
#define APR_LDAP_CERT_TYPE_KEY3_DB  8
 
128
/** Netscape/Mozilla client certificate nickname */
 
129
#define APR_LDAP_CERT_TYPE_NICKNAME 9
 
130
/** Private key type unknown */
 
131
#define APR_LDAP_KEY_TYPE_UNKNOWN   10
 
132
/** binary DER encoded private key */
 
133
#define APR_LDAP_KEY_TYPE_DER       11
 
134
/** PEM encoded private key */
 
135
#define APR_LDAP_KEY_TYPE_BASE64    12
 
136
/** PKCS#12 encoded client certificate */
 
137
#define APR_LDAP_CERT_TYPE_PFX      13
 
138
/** PKCS#12 encoded private key */
 
139
#define APR_LDAP_KEY_TYPE_PFX       14
 
140
 
 
141
/**
 
142
 * Certificate structure.
 
143
 *
 
144
 * This structure is used to store certificate details. An array of
 
145
 * these structures is passed to apr_ldap_set_option() to set CA
 
146
 * and client certificates.
 
147
 * @param type Type of certificate APR_LDAP_*_TYPE_*
 
148
 * @param path Path, file or nickname of the certificate
 
149
 * @param password Optional password, can be NULL
 
150
 */
 
151
typedef struct apr_ldap_opt_tls_cert_t apr_ldap_opt_tls_cert_t;
 
152
struct apr_ldap_opt_tls_cert_t {
 
153
    int type;
 
154
    const char *path;
 
155
    const char *password;
 
156
};
 
157
 
 
158
/**
 
159
 * APR_LDAP_OPT_TLS
 
160
 *
 
161
 * This sets the SSL level on the LDAP handle.
 
162
 *
 
163
 * Netscape/Mozilla:
 
164
 * Supports SSL, but not STARTTLS
 
165
 * SSL is enabled by calling ldapssl_install_routines().
 
166
 *
 
167
 * Novell:
 
168
 * Supports SSL and STARTTLS.
 
169
 * SSL is enabled by calling ldapssl_install_routines(). Note that calling
 
170
 * other ldap functions before ldapssl_install_routines() may cause this
 
171
 * function to fail.
 
172
 * STARTTLS is enabled by calling ldapssl_start_tls_s() after calling
 
173
 * ldapssl_install_routines() (check this).
 
174
 *
 
175
 * OpenLDAP:
 
176
 * Supports SSL and supports STARTTLS, but none of this is documented:
 
177
 * http://www.openldap.org/lists/openldap-software/200409/msg00618.html
 
178
 * Documentation for both SSL support and STARTTLS has been deleted from
 
179
 * the OpenLDAP documentation and website.
 
180
 */
 
181
 
 
182
/** No encryption */
 
183
#define APR_LDAP_NONE 0
 
184
/** SSL encryption (ldaps://) */
 
185
#define APR_LDAP_SSL 1
 
186
/** TLS encryption (STARTTLS) */
 
187
#define APR_LDAP_STARTTLS 2
 
188
/** end TLS encryption (STOPTLS) */
 
189
#define APR_LDAP_STOPTLS 3
 
190
 
 
191
/**
 
192
 * APR LDAP get option function
 
193
 *
 
194
 * This function gets option values from a given LDAP session if
 
195
 * one was specified. It maps to the native ldap_get_option() function.
 
196
 * @param pool The pool to use
 
197
 * @param ldap The LDAP handle
 
198
 * @param option The LDAP_OPT_* option to return
 
199
 * @param outvalue The value returned (if any)
 
200
 * @param result_err The apr_ldap_err_t structure contained detailed results
 
201
 *        of the operation.
 
202
 */
 
203
APU_DECLARE(int) apr_ldap_get_option(apr_pool_t *pool,
 
204
                                     LDAP *ldap,
 
205
                                     int option,
 
206
                                     void *outvalue,
 
207
                                     apr_ldap_err_t **result_err);
 
208
 
 
209
/**
 
210
 * APR LDAP set option function
 
211
 * 
 
212
 * This function sets option values to a given LDAP session if
 
213
 * one was specified. It maps to the native ldap_set_option() function.
 
214
 * 
 
215
 * Where an option is not supported by an LDAP toolkit, this function
 
216
 * will try and apply legacy functions to achieve the same effect,
 
217
 * depending on the platform.
 
218
 * @param pool The pool to use
 
219
 * @param ldap The LDAP handle
 
220
 * @param option The LDAP_OPT_* option to set
 
221
 * @param invalue The value to set
 
222
 * @param result_err The apr_ldap_err_t structure contained detailed results
 
223
 *        of the operation.
 
224
 */
 
225
APU_DECLARE(int) apr_ldap_set_option(apr_pool_t *pool,
 
226
                                     LDAP *ldap,
 
227
                                     int option,
 
228
                                     const void *invalue,
 
229
                                     apr_ldap_err_t **result_err);
 
230
 
 
231
#ifdef __cplusplus
 
232
}
 
233
#endif
 
234
 
 
235
#endif /* APR_HAS_LDAP */
 
236
 
 
237
/** @} */
 
238
 
 
239
#endif /* APR_LDAP_OPTION_H */
 
240