add apr-util 1.2.8 to in tree libs

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3734 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Michael Jerris committed 2006-12-19 20:04:21 +00:00
1 parent 0488a5109a
commit 3b35430557
197 files changed
+130292

No files matched your search

+128
View File
@@ -0,0 +1,128 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/**
* @file apr_anylock.h
* @brief APR-Util transparent any lock flavor wrapper
*/
#ifndef APR_ANYLOCK_H
#define APR_ANYLOCK_H
#include "apr_proc_mutex.h"
#include "apr_thread_mutex.h"
#include "apr_thread_rwlock.h"
/** Structure that may contain any APR lock type */
typedef struct apr_anylock_t {
/** Indicates what type of lock is in lock */
enum tm_lock {
apr_anylock_none, /**< None */
apr_anylock_procmutex, /**< Process-based */
apr_anylock_threadmutex, /**< Thread-based */
apr_anylock_readlock, /**< Read lock */
apr_anylock_writelock /**< Write lock */
} type;
/** Union of all possible APR locks */
union apr_anylock_u_t {
apr_proc_mutex_t *pm; /**< Process mutex */
#if APR_HAS_THREADS
apr_thread_mutex_t *tm; /**< Thread mutex */
apr_thread_rwlock_t *rw; /**< Read-write lock */
#endif
} lock;
} apr_anylock_t;
#if APR_HAS_THREADS
/** Lock an apr_anylock_t structure */
#define APR_ANYLOCK_LOCK(lck) \
(((lck)->type == apr_anylock_none) \
? APR_SUCCESS \
: (((lck)->type == apr_anylock_threadmutex) \
? apr_thread_mutex_lock((lck)->lock.tm) \
: (((lck)->type == apr_anylock_procmutex) \
? apr_proc_mutex_lock((lck)->lock.pm) \
: (((lck)->type == apr_anylock_readlock) \
? apr_thread_rwlock_rdlock((lck)->lock.rw) \
: (((lck)->type == apr_anylock_writelock) \
? apr_thread_rwlock_wrlock((lck)->lock.rw) \
: APR_EINVAL)))))
#else /* APR_HAS_THREADS */
#define APR_ANYLOCK_LOCK(lck) \
(((lck)->type == apr_anylock_none) \
? APR_SUCCESS \
: (((lck)->type == apr_anylock_procmutex) \
? apr_proc_mutex_lock((lck)->lock.pm) \
: APR_EINVAL))
#endif /* APR_HAS_THREADS */
#if APR_HAS_THREADS
/** Try to lock an apr_anylock_t structure */
#define APR_ANYLOCK_TRYLOCK(lck) \
(((lck)->type == apr_anylock_none) \
? APR_SUCCESS \
: (((lck)->type == apr_anylock_threadmutex) \
? apr_thread_mutex_trylock((lck)->lock.tm) \
: (((lck)->type == apr_anylock_procmutex) \
? apr_proc_mutex_trylock((lck)->lock.pm) \
: (((lck)->type == apr_anylock_readlock) \
? apr_thread_rwlock_tryrdlock((lck)->lock.rw) \
: (((lck)->type == apr_anylock_writelock) \
? apr_thread_rwlock_trywrlock((lck)->lock.rw) \
: APR_EINVAL)))))
#else /* APR_HAS_THREADS */
#define APR_ANYLOCK_TRYLOCK(lck) \
(((lck)->type == apr_anylock_none) \
? APR_SUCCESS \
: (((lck)->type == apr_anylock_procmutex) \
? apr_proc_mutex_trylock((lck)->lock.pm) \
: APR_EINVAL))
#endif /* APR_HAS_THREADS */
#if APR_HAS_THREADS
/** Unlock an apr_anylock_t structure */
#define APR_ANYLOCK_UNLOCK(lck) \
(((lck)->type == apr_anylock_none) \
? APR_SUCCESS \
: (((lck)->type == apr_anylock_threadmutex) \
? apr_thread_mutex_unlock((lck)->lock.tm) \
: (((lck)->type == apr_anylock_procmutex) \
? apr_proc_mutex_unlock((lck)->lock.pm) \
: ((((lck)->type == apr_anylock_readlock) || \
((lck)->type == apr_anylock_writelock)) \
? apr_thread_rwlock_unlock((lck)->lock.rw) \
: APR_EINVAL))))
#else /* APR_HAS_THREADS */
#define APR_ANYLOCK_UNLOCK(lck) \
(((lck)->type == apr_anylock_none) \
? APR_SUCCESS \
: (((lck)->type == apr_anylock_procmutex) \
? apr_proc_mutex_unlock((lck)->lock.pm) \
: APR_EINVAL))
#endif /* APR_HAS_THREADS */
#endif /* !APR_ANYLOCK_H */
+111
View File
@@ -0,0 +1,111 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
* The apr_vsnprintf/apr_snprintf functions are based on, and used with the
* permission of, the SIO stdio-replacement strx_* functions by Panos
* Tsirigotis <panos@alumni.cs.colorado.edu> for xinetd.
*/
/**
* @file apr_base64.h
* @brief APR-UTIL Base64 Encoding
*/
#ifndef APR_BASE64_H
#define APR_BASE64_H
#include "apu.h"
#include "apr_general.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup APR_Util_Base64 Base64 Encoding
* @ingroup APR_Util
* @{
*/
/* Simple BASE64 encode/decode functions.
*
* As we might encode binary strings, hence we require the length of
* the incoming plain source. And return the length of what we decoded.
*
* The decoding function takes any non valid char (i.e. whitespace, \0
* or anything non A-Z,0-9 etc as terminal.
*
* plain strings/binary sequences are not assumed '\0' terminated. Encoded
* strings are neither. But probably should.
*
*/
/**
* Given the length of an un-encrypted string, get the length of the
* encrypted string.
* @param len the length of an unencrypted string.
* @return the length of the string after it is encrypted
*/
APU_DECLARE(int) apr_base64_encode_len(int len);
/**
* Encode a text string using base64encoding.
* @param coded_dst The destination string for the encoded string.
* @param plain_src The original string in plain text
* @param len_plain_src The length of the plain text string
* @return the length of the encoded string
*/
APU_DECLARE(int) apr_base64_encode(char * coded_dst, const char *plain_src,
int len_plain_src);
/**
* Encode an EBCDIC string using base64encoding.
* @param coded_dst The destination string for the encoded string.
* @param plain_src The original string in plain text
* @param len_plain_src The length of the plain text string
* @return the length of the encoded string
*/
APU_DECLARE(int) apr_base64_encode_binary(char * coded_dst,
const unsigned char *plain_src,
int len_plain_src);
/**
* Determine the length of a plain text string given the encoded version
* @param coded_src The encoded string
* @return the length of the plain text string
*/
APU_DECLARE(int) apr_base64_decode_len(const char * coded_src);
/**
* Decode a string to plain text
* @param plain_dst The destination string for the plain text
* @param coded_src The encoded string
* @return the length of the plain text string
*/
APU_DECLARE(int) apr_base64_decode(char * plain_dst, const char *coded_src);
/**
* Decode an EBCDIC string to plain text
* @param plain_dst The destination string for the plain text
* @param coded_src The encoded string
* @return the length of the plain text string
*/
APU_DECLARE(int) apr_base64_decode_binary(unsigned char * plain_dst,
const char *coded_src);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* !APR_BASE64_H */
File diff suppressed because it is too large. Load diff
+106
View File
@@ -0,0 +1,106 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_DATE_H
#define APR_DATE_H
/**
* @file apr_date.h
* @brief APR-UTIL date routines
*/
/**
* @defgroup APR_Util_Date Date routines
* @ingroup APR_Util
* @{
*/
/*
* apr_date.h: prototypes for date parsing utility routines
*/
#include "apu.h"
#include "apr_time.h"
#ifdef __cplusplus
extern "C" {
#endif
/** A bad date. */
#define APR_DATE_BAD ((apr_time_t)0)
/**
* Compare a string to a mask
* @param data The string to compare
* @param mask Mask characters (arbitrary maximum is 256 characters):
* <PRE>
* '\@' - uppercase letter
* '\$' - lowercase letter
* '\&' - hex digit
* '#' - digit
* '~' - digit or space
* '*' - swallow remaining characters
* </PRE>
* @remark The mask tests for an exact match for any other character
* @return 1 if the string matches, 0 otherwise
*/
APU_DECLARE(int) apr_date_checkmask(const char *data, const char *mask);
/**
* Parses an HTTP date in one of three standard forms:
* <PRE>
* Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
* Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
* Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
* </PRE>
* @param date The date in one of the three formats above
* @return the apr_time_t number of microseconds since 1 Jan 1970 GMT, or
* 0 if this would be out of range or if the date is invalid.
*/
APU_DECLARE(apr_time_t) apr_date_parse_http(const char *date);
/**
* Parses a string resembling an RFC 822 date. This is meant to be
* leinent in its parsing of dates. Hence, this will parse a wider
* range of dates than apr_date_parse_http.
*
* The prominent mailer (or poster, if mailer is unknown) that has
* been seen in the wild is included for the unknown formats.
* <PRE>
* Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
* Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
* Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
* Sun, 6 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
* Sun, 06 Nov 94 08:49:37 GMT ; RFC 822
* Sun, 6 Nov 94 08:49:37 GMT ; RFC 822
* Sun, 06 Nov 94 08:49 GMT ; Unknown [drtr\@ast.cam.ac.uk]
* Sun, 6 Nov 94 08:49 GMT ; Unknown [drtr\@ast.cam.ac.uk]
* Sun, 06 Nov 94 8:49:37 GMT ; Unknown [Elm 70.85]
* Sun, 6 Nov 94 8:49:37 GMT ; Unknown [Elm 70.85]
* </PRE>
*
* @param date The date in one of the formats above
* @return the apr_time_t number of microseconds since 1 Jan 1970 GMT, or
* 0 if this would be out of range or if the date is invalid.
*/
APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* !APR_DATE_H */
+357
View File
@@ -0,0 +1,357 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/* Overview of what this is and does:
* http://www.apache.org/~niq/dbd.html
*/
#ifndef APR_DBD_H
#define APR_DBD_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @file apr_dbd.h
* @brief APR-UTIL DBD library
*/
/**
* @defgroup APR_Util_DBD DBD routines
* @ingroup APR_Util
* @{
*/
/* These are opaque structs. Instantiation is up to each backend */
typedef struct apr_dbd_driver_t apr_dbd_driver_t;
typedef struct apr_dbd_t apr_dbd_t;
typedef struct apr_dbd_transaction_t apr_dbd_transaction_t;
typedef struct apr_dbd_results_t apr_dbd_results_t;
typedef struct apr_dbd_row_t apr_dbd_row_t;
typedef struct apr_dbd_prepared_t apr_dbd_prepared_t;
/** apr_dbd_init: perform once-only initialisation. Call once only.
*
* @param pool - pool to register any shutdown cleanups, etc
*/
APU_DECLARE(apr_status_t) apr_dbd_init(apr_pool_t *pool);
/** apr_dbd_get_driver: get the driver struct for a name
*
* @param pool - (process) pool to register cleanup
* @param name - driver name
* @param driver - pointer to driver struct.
* @return APR_SUCCESS for success
* @return APR_ENOTIMPL for no driver (when DSO not enabled)
* @return APR_EDSOOPEN if DSO driver file can't be opened
* @return APR_ESYMNOTFOUND if the driver file doesn't contain a driver
*/
APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name,
const apr_dbd_driver_t **driver);
/** apr_dbd_open: open a connection to a backend
*
* @param pool - working pool
* @param params - arguments to driver (implementation-dependent)
* @param handle - pointer to handle to return
* @param driver - driver struct.
* @return APR_SUCCESS for success
* @return APR_EGENERAL if driver exists but connection failed
* @remarks PostgreSQL: the params is passed directly to the PQconnectdb()
* function (check PostgreSQL documentation for more details on the syntax).
* @remarks SQLite2: the params is split on a colon, with the first part used
* as the filename and second part converted to an integer and used as file
* mode.
* @remarks SQLite3: the params is passed directly to the sqlite3_open()
* function as a filename to be opened (check SQLite3 documentation for more
* details).
* @remarks MySQL: the params can have "host", "port", "user", "pass",
* "dbname", "sock", "flags" and "fldsz" keys, each followed by an equal sign
* and a value. Such key/value pairs can be delimited by space, CR, LF, tab,
* semicolon, vertical bar or comma. For now, "flags" can only recognise
* CLIENT_FOUND_ROWS (check MySQL manual for details). The value associated
* with "fldsz" determines maximum amount of memory (in bytes) for each of
* the fields in the result set of prepared statements. By default, this
* value is 1 MB.
*/
APU_DECLARE(apr_status_t) apr_dbd_open(const apr_dbd_driver_t *driver,
apr_pool_t *pool, const char *params,
apr_dbd_t **handle);
/** apr_dbd_close: close a connection to a backend
*
* @param handle - handle to close
* @param driver - driver struct.
* @return APR_SUCCESS for success or error status
*/
APU_DECLARE(apr_status_t) apr_dbd_close(const apr_dbd_driver_t *driver,
apr_dbd_t *handle);
/* apr-function-shaped versions of things */
/** apr_dbd_name: get the name of the driver
*
* @param driver - the driver
* @return - name
*/
APU_DECLARE(const char*) apr_dbd_name(const apr_dbd_driver_t *driver);
/** apr_dbd_native_handle: get native database handle of the underlying db
*
* @param driver - the driver
* @param handle - apr_dbd handle
* @return - native handle
*/
APU_DECLARE(void*) apr_dbd_native_handle(const apr_dbd_driver_t *driver,
apr_dbd_t *handle);
/** check_conn: check status of a database connection
*
* @param driver - the driver
* @param pool - working pool
* @param handle - the connection to check
* @return APR_SUCCESS or error
*/
APU_DECLARE(int) apr_dbd_check_conn(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle);
/** apr_dbd_set_dbname: select database name. May be a no-op if not supported.
*
* @param driver - the driver
* @param pool - working pool
* @param handle - the connection
* @param name - the database to select
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_set_dbname(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle, const char *name);
/** apr_dbd_transaction_start: start a transaction. May be a no-op.
*
* @param driver - the driver
* @param pool - a pool to use for error messages (if any).
* @param handle - the db connection
* @param trans - ptr to a transaction. May be null on entry
* @return 0 for success or error code
* @remarks If any of the query/select calls during a transaction return
* non-zero status code, the transaction will inherit this code and any
* further query/select calls will fail immediately.
*/
APU_DECLARE(int) apr_dbd_transaction_start(const apr_dbd_driver_t *driver,
apr_pool_t *pool,
apr_dbd_t *handle,
apr_dbd_transaction_t **trans);
/** apr_dbd_transaction_end: end a transaction
* (commit on success, rollback on error).
* May be a no-op.
*
* @param driver - the driver
* @param handle - the db connection
* @param trans - the transaction.
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_transaction_end(const apr_dbd_driver_t *driver,
apr_pool_t *pool,
apr_dbd_transaction_t *trans);
/** apr_dbd_query: execute an SQL query that doesn't return a result set
*
* @param driver - the driver
* @param handle - the connection
* @param nrows - number of rows affected.
* @param statement - the SQL statement to execute
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_query(const apr_dbd_driver_t *driver, apr_dbd_t *handle,
int *nrows, const char *statement);
/** apr_dbd_select: execute an SQL query that returns a result set
*
* @param driver - the driver
* @param pool - pool to allocate the result set
* @param handle - the connection
* @param res - pointer to result set pointer. May point to NULL on entry
* @param statement - the SQL statement to execute
* @param random - 1 to support random access to results (seek any row);
* 0 to support only looping through results in order
* (async access - faster)
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_select(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle, apr_dbd_results_t **res,
const char *statement, int random);
/** apr_dbd_num_cols: get the number of columns in a results set
*
* @param driver - the driver
* @param res - result set.
* @return number of columns
*/
APU_DECLARE(int) apr_dbd_num_cols(const apr_dbd_driver_t *driver,
apr_dbd_results_t *res);
/** apr_dbd_num_tuples: get the number of rows in a results set
* of a synchronous select
*
* @param driver - the driver
* @param res - result set.
* @return number of rows, or -1 if the results are asynchronous
*/
APU_DECLARE(int) apr_dbd_num_tuples(const apr_dbd_driver_t *driver,
apr_dbd_results_t *res);
/** apr_dbd_get_row: get a row from a result set
*
* @param driver - the driver
* @param pool - pool to allocate the row
* @param res - result set pointer
* @param row - pointer to row pointer. May point to NULL on entry
* @param rownum - row number, or -1 for "next row". Ignored if random
* access is not supported.
* @return 0 for success, -1 for rownum out of range or data finished
*/
APU_DECLARE(int) apr_dbd_get_row(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_results_t *res, apr_dbd_row_t **row,
int rownum);
/** apr_dbd_get_entry: get an entry from a row
*
* @param driver - the driver
* @param row - row pointer
* @param col - entry number
* @return value from the row, or NULL if col is out of bounds.
*/
APU_DECLARE(const char*) apr_dbd_get_entry(const apr_dbd_driver_t *driver,
apr_dbd_row_t *row, int col);
/** apr_dbd_error: get current error message (if any)
*
* @param driver - the driver
* @param handle - the connection
* @param errnum - error code from operation that returned an error
* @return the database current error message, or message for errnum
* (implementation-dependent whether errnum is ignored)
*/
APU_DECLARE(const char*) apr_dbd_error(const apr_dbd_driver_t *driver,
apr_dbd_t *handle, int errnum);
/** apr_dbd_escape: escape a string so it is safe for use in query/select
*
* @param driver - the driver
* @param pool - pool to alloc the result from
* @param string - the string to escape
* @param handle - the connection
* @return the escaped, safe string
*/
APU_DECLARE(const char*) apr_dbd_escape(const apr_dbd_driver_t *driver,
apr_pool_t *pool, const char *string,
apr_dbd_t *handle);
/** apr_dbd_prepare: prepare a statement
*
* @param driver - the driver
* @param pool - pool to alloc the result from
* @param handle - the connection
* @param query - the SQL query
* @param label - A label for the prepared statement.
* use NULL for temporary prepared statements
* (eg within a Request in httpd)
* @param statement - statement to prepare. May point to null on entry.
* @return 0 for success or error code
* @remarks To specify parameters of the prepared query, use %s in place of
* database specific parameter syntax (e.g. for PostgreSQL, this would be $1,
* $2, for SQLite3 this would be ? etc.). For instance: "SELECT name FROM
* customers WHERE name=%s" would be a query that this function understands.
* Some drivers may support different data types using printf-like format:
* for example %d (e.g. PostgreSQL) or %f for numeric data.
*/
APU_DECLARE(int) apr_dbd_prepare(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle, const char *query,
const char *label,
apr_dbd_prepared_t **statement);
/** apr_dbd_pquery: query using a prepared statement + args
*
* @param driver - the driver
* @param pool - working pool
* @param handle - the connection
* @param nrows - number of rows affected.
* @param statement - the prepared statement to execute
* @param nargs - number of args to prepared statement
* @param args - args to prepared statement
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_pquery(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle, int *nrows,
apr_dbd_prepared_t *statement, int nargs,
const char **args);
/** apr_dbd_pselect: select using a prepared statement + args
*
* @param driver - the driver
* @param pool - working pool
* @param handle - the connection
* @param res - pointer to query results. May point to NULL on entry
* @param statement - the prepared statement to execute
* @param random - Whether to support random-access to results
* @param nargs - number of args to prepared statement
* @param args - args to prepared statement
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_pselect(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle, apr_dbd_results_t **res,
apr_dbd_prepared_t *statement, int random,
int nargs, const char **args);
/** apr_dbd_pvquery: query using a prepared statement + args
*
* @param driver - the driver
* @param pool - working pool
* @param handle - the connection
* @param nrows - number of rows affected.
* @param statement - the prepared statement to execute
* @param ... - varargs list
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_pvquery(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle, int *nrows,
apr_dbd_prepared_t *statement, ...);
/** apr_dbd_pvselect: select using a prepared statement + args
*
* @param driver - the driver
* @param pool - working pool
* @param handle - the connection
* @param res - pointer to query results. May point to NULL on entry
* @param statement - the prepared statement to execute
* @param random - Whether to support random-access to results
* @param ... - varargs list
* @return 0 for success or error code
*/
APU_DECLARE(int) apr_dbd_pvselect(const apr_dbd_driver_t *driver, apr_pool_t *pool,
apr_dbd_t *handle, apr_dbd_results_t **res,
apr_dbd_prepared_t *statement, int random,
...);
/** @} */
#ifdef __cplusplus
}
#endif
#endif
+224
View File
@@ -0,0 +1,224 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_DBM_H
#define APR_DBM_H
#include "apu.h"
#include "apr.h"
#include "apr_errno.h"
#include "apr_pools.h"
#include "apr_file_info.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @file apr_dbm.h
* @brief APR-UTIL DBM library
*/
/**
* @defgroup APR_Util_DBM DBM routines
* @ingroup APR_Util
* @{
*/
/**
* Structure for referencing a dbm
*/
typedef struct apr_dbm_t apr_dbm_t;
/**
* Structure for referencing the datum record within a dbm
*/
typedef struct
{
/** pointer to the 'data' to retrieve/store in the DBM */
char *dptr;
/** size of the 'data' to retrieve/store in the DBM */
apr_size_t dsize;
} apr_datum_t;
/* modes to open the DB */
#define APR_DBM_READONLY 1 /**< open for read-only access */
#define APR_DBM_READWRITE 2 /**< open for read-write access */
#define APR_DBM_RWCREATE 3 /**< open for r/w, create if needed */
#define APR_DBM_RWTRUNC 4 /**< open for r/w, truncating an existing
DB if present */
/**
* Open a dbm file by file name and type of DBM
* @param dbm The newly opened database
* @param type The type of the DBM (not all may be available at run time)
* <pre>
* GDBM for GDBM files
* SDBM for SDBM files
* DB for berkeley DB files
* NDBM for NDBM files
* default for the default DBM type
* </pre>
* @param name The dbm file name to open
* @param mode The flag value
* <PRE>
* APR_DBM_READONLY open for read-only access
* APR_DBM_READWRITE open for read-write access
* APR_DBM_RWCREATE open for r/w, create if needed
* APR_DBM_RWTRUNC open for r/w, truncate if already there
* </PRE>
* @param perm Permissions to apply to if created
* @param cntxt The pool to use when creating the dbm
* @remark The dbm name may not be a true file name, as many dbm packages
* append suffixes for seperate data and index files.
*/
APU_DECLARE(apr_status_t) apr_dbm_open_ex(apr_dbm_t **dbm, const char* type,
const char *name,
apr_int32_t mode, apr_fileperms_t perm,
apr_pool_t *cntxt);
/**
* Open a dbm file by file name
* @param dbm The newly opened database
* @param name The dbm file name to open
* @param mode The flag value
* <PRE>
* APR_DBM_READONLY open for read-only access
* APR_DBM_READWRITE open for read-write access
* APR_DBM_RWCREATE open for r/w, create if needed
* APR_DBM_RWTRUNC open for r/w, truncate if already there
* </PRE>
* @param perm Permissions to apply to if created
* @param cntxt The pool to use when creating the dbm
* @remark The dbm name may not be a true file name, as many dbm packages
* append suffixes for seperate data and index files.
*/
APU_DECLARE(apr_status_t) apr_dbm_open(apr_dbm_t **dbm, const char *name,
apr_int32_t mode, apr_fileperms_t perm,
apr_pool_t *cntxt);
/**
* Close a dbm file previously opened by apr_dbm_open
* @param dbm The database to close
*/
APU_DECLARE(void) apr_dbm_close(apr_dbm_t *dbm);
/**
* Fetch a dbm record value by key
* @param dbm The database
* @param key The key datum to find this record
* @param pvalue The value datum retrieved for this record
*/
APU_DECLARE(apr_status_t) apr_dbm_fetch(apr_dbm_t *dbm, apr_datum_t key,
apr_datum_t *pvalue);
/**
* Store a dbm record value by key
* @param dbm The database
* @param key The key datum to store this record by
* @param value The value datum to store in this record
*/
APU_DECLARE(apr_status_t) apr_dbm_store(apr_dbm_t *dbm, apr_datum_t key,
apr_datum_t value);
/**
* Delete a dbm record value by key
* @param dbm The database
* @param key The key datum of the record to delete
* @remark It is not an error to delete a non-existent record.
*/
APU_DECLARE(apr_status_t) apr_dbm_delete(apr_dbm_t *dbm, apr_datum_t key);
/**
* Search for a key within the dbm
* @param dbm The database
* @param key The datum describing a key to test
*/
APU_DECLARE(int) apr_dbm_exists(apr_dbm_t *dbm, apr_datum_t key);
/**
* Retrieve the first record key from a dbm
* @param dbm The database
* @param pkey The key datum of the first record
*/
APU_DECLARE(apr_status_t) apr_dbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey);
/**
* Retrieve the next record key from a dbm
* @param dbm The database
* @param pkey The key datum of the next record
*/
APU_DECLARE(apr_status_t) apr_dbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey);
/**
* Proactively toss any memory associated with the apr_datum_t.
* @param dbm The database
* @param data The datum to free.
*/
APU_DECLARE(void) apr_dbm_freedatum(apr_dbm_t *dbm, apr_datum_t data);
/**
* Report more information when an apr_dbm function fails.
* @param dbm The database
* @param errcode A DBM-specific value for the error (for logging). If this
* isn't needed, it may be NULL.
* @param errbuf Location to store the error text
* @param errbufsize The size of the provided buffer
* @return The errbuf parameter, for convenience.
*/
APU_DECLARE(char *) apr_dbm_geterror(apr_dbm_t *dbm, int *errcode,
char *errbuf, apr_size_t errbufsize);
/**
* If the specified file/path were passed to apr_dbm_open(), return the
* actual file/path names which would be (created and) used. At most, two
* files may be used; used2 may be NULL if only one file is used.
* @param pool The pool for allocating used1 and used2.
* @param type The type of DBM you require info on
* @param pathname The path name to generate used-names from.
* @param used1 The first pathname used by the apr_dbm implementation.
* @param used2 The second pathname used by apr_dbm. If only one file is
* used by the specific implementation, this will be set to NULL.
* @return An error if the specified type is invalid.
* @remark The dbm file(s) don't need to exist. This function only manipulates
* the pathnames.
*/
APU_DECLARE(apr_status_t) apr_dbm_get_usednames_ex(apr_pool_t *pool,
const char *type,
const char *pathname,
const char **used1,
const char **used2);
/**
* If the specified file/path were passed to apr_dbm_open(), return the
* actual file/path names which would be (created and) used. At most, two
* files may be used; used2 may be NULL if only one file is used.
* @param pool The pool for allocating used1 and used2.
* @param pathname The path name to generate used-names from.
* @param used1 The first pathname used by the apr_dbm implementation.
* @param used2 The second pathname used by apr_dbm. If only one file is
* used by the specific implementation, this will be set to NULL.
* @remark The dbm file(s) don't need to exist. This function only manipulates
* the pathnames.
*/
APU_DECLARE(void) apr_dbm_get_usednames(apr_pool_t *pool,
const char *pathname,
const char **used1,
const char **used2);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* !APR_DBM_H */
+256
View File
@@ -0,0 +1,256 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_HOOKS_H
#define APR_HOOKS_H
#include "apu.h"
/* For apr_array_header_t */
#include "apr_tables.h"
/**
* @file apr_hooks.h
* @brief Apache hook functions
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup APR_Util_Hook Hook Functions
* @ingroup APR_Util
* @{
*/
/** macro to return the prototype of the hook function */
#define APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \
link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void)
/** macro to declare the hook correctly */
#define APR_DECLARE_EXTERNAL_HOOK(ns,link,ret,name,args) \
typedef ret ns##_HOOK_##name##_t args; \
link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf, \
const char * const *aszPre, \
const char * const *aszSucc, int nOrder); \
link##_DECLARE(ret) ns##_run_##name args; \
APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name); \
typedef struct ns##_LINK_##name##_t \
{ \
ns##_HOOK_##name##_t *pFunc; \
const char *szName; \
const char * const *aszPredecessors; \
const char * const *aszSuccessors; \
int nOrder; \
} ns##_LINK_##name##_t;
/** macro to declare the hook structure */
#define APR_HOOK_STRUCT(members) \
static struct { members } _hooks;
/** macro to link the hook structure */
#define APR_HOOK_LINK(name) \
apr_array_header_t *link_##name;
/** macro to implement the hook */
#define APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \
const char * const *aszSucc,int nOrder) \
{ \
ns##_LINK_##name##_t *pHook; \
if(!_hooks.link_##name) \
{ \
_hooks.link_##name=apr_array_make(apr_hook_global_pool,1,sizeof(ns##_LINK_##name##_t)); \
apr_hook_sort_register(#name,&_hooks.link_##name); \
} \
pHook=apr_array_push(_hooks.link_##name); \
pHook->pFunc=pf; \
pHook->aszPredecessors=aszPre; \
pHook->aszSuccessors=aszSucc; \
pHook->nOrder=nOrder; \
pHook->szName=apr_hook_debug_current; \
if(apr_hook_debug_enabled) \
apr_hook_debug_show(#name,aszPre,aszSucc); \
} \
APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \
{ \
return _hooks.link_##name; \
}
/**
* Implement a hook that has no return code, and therefore runs all of the
* registered functions
* @param ns The namespace prefix of the hook functions
* @param link The linkage declaration prefix of the hook
* @param name The name of the hook
* @param args_decl The declaration of the arguments for the hook
* @param args_use The names for the arguments for the hook
* @note The link prefix FOO corresponds to FOO_DECLARE() macros, which
* provide export linkage from the module that IMPLEMENTs the hook, and
* import linkage from external modules that link to the hook's module.
*/
#define APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns,link,name,args_decl,args_use) \
APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
link##_DECLARE(void) ns##_run_##name args_decl \
{ \
ns##_LINK_##name##_t *pHook; \
int n; \
\
if(!_hooks.link_##name) \
return; \
\
pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
pHook[n].pFunc args_use; \
}
/* FIXME: note that this returns ok when nothing is run. I suspect it should
really return decline, but that breaks Apache currently - Ben
*/
/**
* Implement a hook that runs until one of the functions returns something
* other than OK or DECLINE
* @param ns The namespace prefix of the hook functions
* @param link The linkage declaration prefix of the hook
* @param ret Type to return
* @param name The name of the hook
* @param args_decl The declaration of the arguments for the hook
* @param args_use The names for the arguments for the hook
* @param ok Success value
* @param decline Decline value
* @note The link prefix FOO corresponds to FOO_DECLARE() macros, which
* provide export linkage from the module that IMPLEMENTs the hook, and
* import linkage from external modules that link to the hook's module.
*/
#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ns,link,ret,name,args_decl,args_use,ok,decline) \
APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
link##_DECLARE(ret) ns##_run_##name args_decl \
{ \
ns##_LINK_##name##_t *pHook; \
int n; \
ret rv; \
\
if(!_hooks.link_##name) \
return ok; \
\
pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
{ \
rv=pHook[n].pFunc args_use; \
\
if(rv != ok && rv != decline) \
return rv; \
} \
return ok; \
}
/**
* Implement a hook that runs until the first function returns something
* other than the value of decline
* @param ns The namespace prefix of the hook functions
* @param link The linkage declaration prefix of the hook
* @param name The name of the hook
* @param ret Type to return
* @param args_decl The declaration of the arguments for the hook
* @param args_use The names for the arguments for the hook
* @param decline Decline value
* @note The link prefix FOO corresponds to FOO_DECLARE() macros, which
* provide export linkage from the module that IMPLEMENTs the hook, and
* import linkage from external modules that link to the hook's module.
*/
#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns,link,ret,name,args_decl,args_use,decline) \
APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \
link##_DECLARE(ret) ns##_run_##name args_decl \
{ \
ns##_LINK_##name##_t *pHook; \
int n; \
ret rv; \
\
if(!_hooks.link_##name) \
return decline; \
\
pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \
for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \
{ \
rv=pHook[n].pFunc args_use; \
\
if(rv != decline) \
return rv; \
} \
return decline; \
}
/* Hook orderings */
/** run this hook first, before ANYTHING */
#define APR_HOOK_REALLY_FIRST (-10)
/** run this hook first */
#define APR_HOOK_FIRST 0
/** run this hook somewhere */
#define APR_HOOK_MIDDLE 10
/** run this hook after every other hook which is defined*/
#define APR_HOOK_LAST 20
/** run this hook last, after EVERYTHING */
#define APR_HOOK_REALLY_LAST 30
/**
* The global pool used to allocate any memory needed by the hooks.
*/
APU_DECLARE_DATA extern apr_pool_t *apr_hook_global_pool;
/**
* A global variable to determine if debugging information about the
* hooks functions should be printed
*/
APU_DECLARE_DATA extern int apr_hook_debug_enabled;
/**
* The name of the module that is currently registering a function
*/
APU_DECLARE_DATA extern const char *apr_hook_debug_current;
/**
* Register a hook function to be sorted
* @param szHookName The name of the Hook the function is registered for
* @param aHooks The array which stores all of the functions for this hook
*/
APU_DECLARE(void) apr_hook_sort_register(const char *szHookName,
apr_array_header_t **aHooks);
/**
* Sort all of the registerd functions for a given hook
*/
APU_DECLARE(void) apr_hook_sort_all(void);
/**
* Print all of the information about the current hook. This is used for
* debugging purposes.
* @param szName The name of the hook
* @param aszPre All of the functions in the predecessor array
* @param aszSucc All of the functions in the successor array
*/
APU_DECLARE(void) apr_hook_debug_show(const char *szName,
const char * const *aszPre,
const char * const *aszSucc);
/**
* Remove all currently registered functions.
*/
APU_DECLARE(void) apr_hook_deregister_all(void);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* APR_HOOKS_H */
+131
View File
@@ -0,0 +1,131 @@
/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* apr_ldap.h is generated from apr_ldap.h.in by configure -- do not edit apr_ldap.h
*/
/**
* @file apr_ldap.h
* @brief APR-UTIL LDAP
*/
#ifndef APU_LDAP_H
#define APU_LDAP_H
/**
* @defgroup APR_Util_LDAP LDAP
* @ingroup APR_Util
* @{
*/
/* this will be defined if LDAP support was compiled into apr-util */
#define APR_HAS_LDAP @apu_has_ldap@
/* identify the LDAP toolkit used */
#define APR_HAS_NETSCAPE_LDAPSDK @apu_has_ldap_netscape@
#define APR_HAS_SOLARIS_LDAPSDK @apu_has_ldap_solaris@
#define APR_HAS_NOVELL_LDAPSDK @apu_has_ldap_novell@
#define APR_HAS_MOZILLA_LDAPSDK @apu_has_ldap_mozilla@
#define APR_HAS_OPENLDAP_LDAPSDK @apu_has_ldap_openldap@
#define APR_HAS_MICROSOFT_LDAPSDK @apu_has_ldap_microsoft@
#define APR_HAS_OTHER_LDAPSDK @apu_has_ldap_other@
/*
* Handle the case when LDAP is enabled
*/
#if APR_HAS_LDAP
/*
* The following #defines are DEPRECATED and should not be used for
* anything. They remain to maintain binary compatibility.
* The original code defined the OPENLDAP SDK as present regardless
* of what really was there, which was way bogus. In addition, the
* apr_ldap_url_parse*() functions have been rewritten specifically for
* APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero.
*/
#define APR_HAS_LDAP_SSL 1
#define APR_HAS_LDAP_URL_PARSE 0
#if APR_HAS_OPENLDAP_LDAPSDK && !defined(LDAP_DEPRECATED)
/* Ensure that the "deprecated" interfaces are still exposed
* with OpenLDAP >= 2.3; these were exposed by default in earlier
* releases. */
#define LDAP_DEPRECATED 1
#endif
/*
* Include the standard LDAP header files.
*/
@lber_h@
@ldap_h@
@ldap_ssl_h@
/*
* Detected standard functions
*/
#define APR_HAS_LDAPSSL_CLIENT_INIT @apu_has_ldapssl_client_init@
#define APR_HAS_LDAPSSL_CLIENT_DEINIT @apu_has_ldapssl_client_deinit@
#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT @apu_has_ldapssl_add_trusted_cert@
#define APR_HAS_LDAP_START_TLS_S @apu_has_ldap_start_tls_s@
#define APR_HAS_LDAP_SSLINIT @apu_has_ldap_sslinit@
#define APR_HAS_LDAPSSL_INIT @apu_has_ldapssl_init@
#define APR_HAS_LDAPSSL_INSTALL_ROUTINES @apu_has_ldapssl_install_routines@
/*
* Make sure the secure LDAP port is defined
*/
#ifndef LDAPS_PORT
#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */
#endif
/* Note: Macros defining const casting has been removed in APR v1.0,
* pending real support for LDAP v2.0 toolkits.
*
* In the mean time, please use an LDAP v3.0 toolkit.
*/
#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
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* This structure allows the C LDAP API error codes to be returned
* along with plain text error messages that explain to us mere mortals
* what really happened.
*/
typedef struct apr_ldap_err_t {
const char *reason;
const char *msg;
int rc;
} apr_ldap_err_t;
#ifdef __cplusplus
}
#endif
#include "apr_ldap_url.h"
#include "apr_ldap_init.h"
#include "apr_ldap_option.h"
/** @} */
#endif /* APR_HAS_LDAP */
#endif /* APU_LDAP_H */
+133
View File
@@ -0,0 +1,133 @@
/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* apr_ldap.h is generated from apr_ldap.h.in by configure -- do not edit apr_ldap.h
*/
/**
* @file apr_ldap.h
* @brief APR-UTIL LDAP
*/
#ifndef APU_LDAP_H
#define APU_LDAP_H
/**
* @defgroup APR_Util_LDAP LDAP
* @ingroup APR_Util
* @{
*/
/* this will be defined if LDAP support was compiled into apr-util */
#define APR_HAS_LDAP 1
/* identify the LDAP toolkit used */
#define APR_HAS_NETSCAPE_LDAPSDK 0
#define APR_HAS_SOLARIS_LDAPSDK 0
#define APR_HAS_NOVELL_LDAPSDK 1
#define APR_HAS_MOZILLA_LDAPSDK 0
#define APR_HAS_OPENLDAP_LDAPSDK 0
#define APR_HAS_MICROSOFT_LDAPSDK 0
#define APR_HAS_OTHER_LDAPSDK 0
/*
* Handle the case when LDAP is enabled
*/
#if APR_HAS_LDAP
/*
* The following #defines are DEPRECATED and should not be used for
* anything. They remain to maintain binary compatibility.
* The original code defined the OPENLDAP SDK as present regardless
* of what really was there, which was way bogus. In addition, the
* apr_ldap_url_parse*() functions have been rewritten specifically for
* APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero.
*/
#define APR_HAS_LDAP_SSL 1
#define APR_HAS_LDAP_URL_PARSE 0
/*
* Include the standard LDAP header files.
*/
#ifdef GENEXPORTS
#define LDAP_VERSION_MAX 3
#else
#include <lber.h>
#include <ldap.h>
#if APR_HAS_LDAP_SSL
#include <ldap_ssl.h>
#endif
#endif
/*
* Detected standard functions
*/
#define APR_HAS_LDAPSSL_CLIENT_INIT 1
#define APR_HAS_LDAPSSL_CLIENT_DEINIT 1
#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT 1
#define APR_HAS_LDAP_START_TLS_S 0
#define APR_HAS_LDAP_SSLINIT 0
#define APR_HAS_LDAPSSL_INIT 1
#define APR_HAS_LDAPSSL_INSTALL_ROUTINES 0
/*
* Make sure the secure LDAP port is defined
*/
#ifndef LDAPS_PORT
#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */
#endif
/* Note: Macros defining const casting has been removed in APR v1.0,
* pending real support for LDAP v2.0 toolkits.
*
* In the mean time, please use an LDAP v3.0 toolkit.
*/
#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
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* This structure allows the C LDAP API error codes to be returned
* along with plain text error messages that explain to us mere mortals
* what really happened.
*/
typedef struct apr_ldap_err_t {
const char *reason;
const char *msg;
int rc;
} apr_ldap_err_t;
#ifdef __cplusplus
}
#endif
#include "apr_ldap_url.h"
#include "apr_ldap_init.h"
#include "apr_ldap_option.h"
/** @} */
#endif /* APR_HAS_LDAP */
#endif /* APU_LDAP_H */
+124
View File
@@ -0,0 +1,124 @@
/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* apr_ldap.h is generated from apr_ldap.h.in by configure -- do not edit apr_ldap.h
*/
/**
* @file apr_ldap.h
* @brief APR-UTIL LDAP
*/
#ifndef APU_LDAP_H
#define APU_LDAP_H
/**
* @defgroup APR_Util_LDAP LDAP
* @ingroup APR_Util
* @{
*/
/* this will be defined if LDAP support was compiled into apr-util */
#define APR_HAS_LDAP 1
/* identify the LDAP toolkit used */
#define APR_HAS_NETSCAPE_LDAPSDK 0
#define APR_HAS_SOLARIS_LDAPSDK 0
#define APR_HAS_NOVELL_LDAPSDK 0
#define APR_HAS_MOZILLA_LDAPSDK 0
#define APR_HAS_OPENLDAP_LDAPSDK 0
#define APR_HAS_MICROSOFT_LDAPSDK 1
#define APR_HAS_OTHER_LDAPSDK 0
/*
* Handle the case when LDAP is enabled
*/
#if APR_HAS_LDAP
/*
* The following #defines are DEPRECATED and should not be used for
* anything. They remain to maintain binary compatibility.
* The original code defined the OPENLDAP SDK as present regardless
* of what really was there, which was way bogus. In addition, the
* apr_ldap_url_parse*() functions have been rewritten specifically for
* APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero.
*/
#define APR_HAS_LDAP_SSL 1
#define APR_HAS_LDAP_URL_PARSE 0
/*
* Include the standard LDAP header files.
*/
#include <winldap.h>
/*
* Detected standard functions
*/
#define APR_HAS_LDAPSSL_CLIENT_INIT 0
#define APR_HAS_LDAPSSL_CLIENT_DEINIT 0
#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT 0
#define APR_HAS_LDAP_START_TLS_S 0
#define APR_HAS_LDAP_SSLINIT 1
#define APR_HAS_LDAPSSL_INIT 0
#define APR_HAS_LDAPSSL_INSTALL_ROUTINES 0
/*
* Make sure the secure LDAP port is defined
*/
#ifndef LDAPS_PORT
#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */
#endif
/* Note: Macros defining const casting has been removed in APR v1.0,
* pending real support for LDAP v2.0 toolkits.
*
* In the mean time, please use an LDAP v3.0 toolkit.
*/
#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
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* This structure allows the C LDAP API error codes to be returned
* along with plain text error messages that explain to us mere mortals
* what really happened.
*/
typedef struct apr_ldap_err_t {
const char *reason;
const char *msg;
int rc;
} apr_ldap_err_t;
#ifdef __cplusplus
}
#endif
#include "apr_ldap_url.h"
#include "apr_ldap_init.h"
#include "apr_ldap_option.h"
/** @} */
#endif /* APR_HAS_LDAP */
#endif /* APU_LDAP_H */
+137
View File
@@ -0,0 +1,137 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/**
* @file apr_ldap_init.h
* @brief APR-UTIL LDAP ldap_init() functions
*/
#ifndef APR_LDAP_INIT_H
#define APR_LDAP_INIT_H
/**
* @defgroup APR_Util_LDAP LDAP
* @ingroup APR_Util
* @{
*/
#include "apr_ldap.h"
#if APR_HAS_LDAP
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* APR LDAP SSL Initialise function
*
* This function initialises SSL on the underlying LDAP toolkit
* if this is necessary.
*
* If a CA certificate is provided, this is set, however the setting
* of certificates via this method has been deprecated and will be removed in
* APR v2.0.
*
* The apr_ldap_set_option() function with the APR_LDAP_OPT_TLS_CERT option
* should be used instead to set certificates.
*
* If SSL support is not available on this platform, or a problem
* was encountered while trying to set the certificate, the function
* will return APR_EGENERAL. Further LDAP specific error information
* can be found in result_err.
* @param pool The pool to use
* @param cert_auth_file The name of the certificate to use, can be NULL
* @param cert_file_type The type of certificate specified. See the
* apr_ldap_set_option() APR_LDAP_OPT_TLS_CERT option for details.
* @param result_err The returned result
*/
APU_DECLARE(int) apr_ldap_ssl_init(apr_pool_t *pool,
const char *cert_auth_file,
int cert_file_type,
apr_ldap_err_t **result_err);
/**
* APR LDAP SSL De-Initialise function
*
* This function tears down any SSL certificate setup previously
* set using apr_ldap_ssl_init(). It should be called to clean
* up if a graceful restart of a service is attempted.
* @todo currently we do not check whether apr_ldap_ssl_init()
* has been called first - we probably should.
*/
APU_DECLARE(int) apr_ldap_ssl_deinit(void);
/**
* APR LDAP initialise function
*
* This function is responsible for initialising an LDAP
* connection in a toolkit independant way. It does the
* job of ldap_init() from the C api.
*
* It handles both the SSL and non-SSL case, and attempts
* to hide the complexity setup from the user. This function
* assumes that any certificate setup necessary has already
* been done.
*
* If SSL or STARTTLS needs to be enabled, and the underlying
* toolkit supports it, the following values are accepted for
* secure:
*
* APR_LDAP_NONE: No encryption
* APR_LDAP_SSL: SSL encryption (ldaps://)
* APR_LDAP_STARTTLS: Force STARTTLS on ldap://
* @remark The Novell toolkit is only able to set the SSL mode via this
* function. To work around this limitation, set the SSL mode here if no
* per connection client certificates are present, otherwise set secure
* APR_LDAP_NONE here, then set the per connection client certificates,
* followed by setting the SSL mode via apr_ldap_set_option(). As Novell
* does not support per connection client certificates, this problem is
* worked around while still being compatible with other LDAP toolkits.
* @param pool The pool to use
* @param ldap The LDAP handle
* @param hostname The name of the host to connect to. This can be either a
* DNS name, or an IP address.
* @param portno The port to connect to
* @param secure The security mode to set
* @param result_err The returned result
*/
APU_DECLARE(int) apr_ldap_init(apr_pool_t *pool,
LDAP **ldap,
const char *hostname,
int portno,
int secure,
apr_ldap_err_t **result_err);
/**
* APR LDAP info function
*
* This function returns a string describing the LDAP toolkit
* currently in use. The string is placed inside result_err->reason.
* @param pool The pool to use
* @param result_err The returned result
*/
APU_DECLARE(int) apr_ldap_info(apr_pool_t *pool,
apr_ldap_err_t **result_err);
#ifdef __cplusplus
}
#endif
#endif /* APR_HAS_LDAP */
/** @} */
#endif /* APR_LDAP_URL_H */
+240
View File
@@ -0,0 +1,240 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/**
* @file apr_ldap_option.h
* @brief APR-UTIL LDAP ldap_*_option() functions
*/
#ifndef APR_LDAP_OPTION_H
#define APR_LDAP_OPTION_H
/**
* @defgroup APR_Util_LDAP LDAP
* @ingroup APR_Util
* @{
*/
#include "apr_ldap.h"
#if APR_HAS_LDAP
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/*
* The following defines handle the different TLS certificate
* options available. If these options are missing, APR will try and
* emulate support for this using the deprecated ldap_start_tls_s()
* function.
*/
/**
* Set SSL mode to one of APR_LDAP_NONE, APR_LDAP_SSL, APR_LDAP_STARTTLS
* or APR_LDAP_STOPTLS.
*/
#define APR_LDAP_OPT_TLS 0x6fff
/**
* Set zero or more CA certificates, client certificates or private
* keys globally, or per connection (where supported).
*/
#define APR_LDAP_OPT_TLS_CERT 0x6ffe
/**
* Set the LDAP library to no verify the server certificate. This means
* all servers are considered trusted.
*/
#define APR_LDAP_OPT_VERIFY_CERT 0x6ffd
/**
* Structures for the apr_set_option() cases
*/
/**
* APR_LDAP_OPT_TLS_CERT
*
* This structure includes possible options to set certificates on
* system initialisation. Different SDKs have different certificate
* requirements, and to achieve this multiple certificates must be
* specified at once passed as an (apr_array_header_t *).
*
* Netscape:
* Needs the CA cert database (cert7.db), the client cert database (key3.db)
* and the security module file (secmod.db) set at the system initialisation
* time. Three types are supported: APR_LDAP_CERT7_DB, APR_LDAP_KEY3_DB and
* APR_LDAP_SECMOD.
*
* To specify a client cert connection, a certificate nickname needs to be
* provided with a type of APR_LDAP_CERT.
* int ldapssl_enable_clientauth( LDAP *ld, char *keynickname,
* char *keypasswd, char *certnickname );
* keynickname is currently not used, and should be set to ""
*
* Novell:
* Needs CA certificates and client certificates set at system initialisation
* time. Three types are supported: APR_LDAP_CA*, APR_LDAP_CERT* and
* APR_LDAP_KEY*.
*
* Certificates cannot be specified per connection.
*
* The functions used are:
* ldapssl_add_trusted_cert(serverTrustedRoot, serverTrustedRootEncoding);
* Clients certs and keys are set at system initialisation time with
* int ldapssl_set_client_cert (
* void *cert,
* int type
* void *password);
* type can be LDAPSSL_CERT_FILETYPE_B64 or LDAPSSL_CERT_FILETYPE_DER
* ldapssl_set_client_private_key(clientPrivateKey,
* clientPrivateKeyEncoding,
* clientPrivateKeyPassword);
*
* OpenSSL:
* Needs one or more CA certificates to be set at system initialisation time
* with a type of APR_LDAP_CA*.
*
* May have one or more client certificates set per connection with a type of
* APR_LDAP_CERT*, and keys with APR_LDAP_KEY*.
*/
/** CA certificate type unknown */
#define APR_LDAP_CA_TYPE_UNKNOWN 0
/** binary DER encoded CA certificate */
#define APR_LDAP_CA_TYPE_DER 1
/** PEM encoded CA certificate */
#define APR_LDAP_CA_TYPE_BASE64 2
/** Netscape/Mozilla cert7.db CA certificate database */
#define APR_LDAP_CA_TYPE_CERT7_DB 3
/** Netscape/Mozilla secmod file */
#define APR_LDAP_CA_TYPE_SECMOD 4
/** Client certificate type unknown */
#define APR_LDAP_CERT_TYPE_UNKNOWN 5
/** binary DER encoded client certificate */
#define APR_LDAP_CERT_TYPE_DER 6
/** PEM encoded client certificate */
#define APR_LDAP_CERT_TYPE_BASE64 7
/** Netscape/Mozilla key3.db client certificate database */
#define APR_LDAP_CERT_TYPE_KEY3_DB 8
/** Netscape/Mozilla client certificate nickname */
#define APR_LDAP_CERT_TYPE_NICKNAME 9
/** Private key type unknown */
#define APR_LDAP_KEY_TYPE_UNKNOWN 10
/** binary DER encoded private key */
#define APR_LDAP_KEY_TYPE_DER 11
/** PEM encoded private key */
#define APR_LDAP_KEY_TYPE_BASE64 12
/** PKCS#12 encoded client certificate */
#define APR_LDAP_CERT_TYPE_PFX 13
/** PKCS#12 encoded private key */
#define APR_LDAP_KEY_TYPE_PFX 14
/**
* Certificate structure.
*
* This structure is used to store certificate details. An array of
* these structures is passed to apr_ldap_set_option() to set CA
* and client certificates.
* @param type Type of certificate APR_LDAP_*_TYPE_*
* @param path Path, file or nickname of the certificate
* @param password Optional password, can be NULL
*/
typedef struct apr_ldap_opt_tls_cert_t apr_ldap_opt_tls_cert_t;
struct apr_ldap_opt_tls_cert_t {
int type;
const char *path;
const char *password;
};
/**
* APR_LDAP_OPT_TLS
*
* This sets the SSL level on the LDAP handle.
*
* Netscape/Mozilla:
* Supports SSL, but not STARTTLS
* SSL is enabled by calling ldapssl_install_routines().
*
* Novell:
* Supports SSL and STARTTLS.
* SSL is enabled by calling ldapssl_install_routines(). Note that calling
* other ldap functions before ldapssl_install_routines() may cause this
* function to fail.
* STARTTLS is enabled by calling ldapssl_start_tls_s() after calling
* ldapssl_install_routines() (check this).
*
* OpenLDAP:
* Supports SSL and supports STARTTLS, but none of this is documented:
* http://www.openldap.org/lists/openldap-software/200409/msg00618.html
* Documentation for both SSL support and STARTTLS has been deleted from
* the OpenLDAP documentation and website.
*/
/** No encryption */
#define APR_LDAP_NONE 0
/** SSL encryption (ldaps://) */
#define APR_LDAP_SSL 1
/** TLS encryption (STARTTLS) */
#define APR_LDAP_STARTTLS 2
/** end TLS encryption (STOPTLS) */
#define APR_LDAP_STOPTLS 3
/**
* APR LDAP get option function
*
* This function gets option values from a given LDAP session if
* one was specified. It maps to the native ldap_get_option() function.
* @param pool The pool to use
* @param ldap The LDAP handle
* @param option The LDAP_OPT_* option to return
* @param outvalue The value returned (if any)
* @param result_err The apr_ldap_err_t structure contained detailed results
* of the operation.
*/
APU_DECLARE(int) apr_ldap_get_option(apr_pool_t *pool,
LDAP *ldap,
int option,
void *outvalue,
apr_ldap_err_t **result_err);
/**
* APR LDAP set option function
*
* This function sets option values to a given LDAP session if
* one was specified. It maps to the native ldap_set_option() function.
*
* Where an option is not supported by an LDAP toolkit, this function
* will try and apply legacy functions to achieve the same effect,
* depending on the platform.
* @param pool The pool to use
* @param ldap The LDAP handle
* @param option The LDAP_OPT_* option to set
* @param invalue The value to set
* @param result_err The apr_ldap_err_t structure contained detailed results
* of the operation.
*/
APU_DECLARE(int) apr_ldap_set_option(apr_pool_t *pool,
LDAP *ldap,
int option,
const void *invalue,
apr_ldap_err_t **result_err);
#ifdef __cplusplus
}
#endif
#endif /* APR_HAS_LDAP */
/** @} */
#endif /* APR_LDAP_OPTION_H */
+117
View File
@@ -0,0 +1,117 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/**
* @file apr_ldap_url.h
* @brief APR-UTIL LDAP ldap_init() functions
*/
#ifndef APR_LDAP_URL_H
#define APR_LDAP_URL_H
/**
* @defgroup APR_Util_LDAP LDAP
* @ingroup APR_Util
* @{
*/
#if APR_HAS_LDAP
#include "apu.h"
#include "apr_pools.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Structure to access an exploded LDAP URL */
typedef struct apr_ldap_url_desc_t {
struct apr_ldap_url_desc_t *lud_next;
char *lud_scheme;
char *lud_host;
int lud_port;
char *lud_dn;
char **lud_attrs;
int lud_scope;
char *lud_filter;
char **lud_exts;
int lud_crit_exts;
} apr_ldap_url_desc_t;
#ifndef APR_LDAP_URL_SUCCESS
#define APR_LDAP_URL_SUCCESS 0x00 /* Success */
#define APR_LDAP_URL_ERR_MEM 0x01 /* can't allocate memory space */
#define APR_LDAP_URL_ERR_PARAM 0x02 /* parameter is bad */
#define APR_LDAP_URL_ERR_BADSCHEME 0x03 /* URL doesn't begin with "ldap[si]://" */
#define APR_LDAP_URL_ERR_BADENCLOSURE 0x04 /* URL is missing trailing ">" */
#define APR_LDAP_URL_ERR_BADURL 0x05 /* URL is bad */
#define APR_LDAP_URL_ERR_BADHOST 0x06 /* host port is bad */
#define APR_LDAP_URL_ERR_BADATTRS 0x07 /* bad (or missing) attributes */
#define APR_LDAP_URL_ERR_BADSCOPE 0x08 /* scope string is invalid (or missing) */
#define APR_LDAP_URL_ERR_BADFILTER 0x09 /* bad or missing filter */
#define APR_LDAP_URL_ERR_BADEXTS 0x0a /* bad or missing extensions */
#endif
/**
* Is this URL an ldap url? ldap://
* @param url The url to test
*/
APU_DECLARE(int) apr_ldap_is_ldap_url(const char *url);
/**
* Is this URL an SSL ldap url? ldaps://
* @param url The url to test
*/
APU_DECLARE(int) apr_ldap_is_ldaps_url(const char *url);
/**
* Is this URL an ldap socket url? ldapi://
* @param url The url to test
*/
APU_DECLARE(int) apr_ldap_is_ldapi_url(const char *url);
/**
* Parse an LDAP URL.
* @param pool The pool to use
* @param url_in The URL to parse
* @param ludpp The structure to return the exploded URL
* @param result_err The result structure of the operation
*/
APU_DECLARE(int) apr_ldap_url_parse_ext(apr_pool_t *pool,
const char *url_in,
apr_ldap_url_desc_t **ludpp,
apr_ldap_err_t **result_err);
/**
* Parse an LDAP URL.
* @param pool The pool to use
* @param url_in The URL to parse
* @param ludpp The structure to return the exploded URL
* @param result_err The result structure of the operation
*/
APU_DECLARE(int) apr_ldap_url_parse(apr_pool_t *pool,
const char *url_in,
apr_ldap_url_desc_t **ludpp,
apr_ldap_err_t **result_err);
#ifdef __cplusplus
}
#endif
#endif /* APR_HAS_LDAP */
/** @} */
#endif /* APR_LDAP_URL_H */
+135
View File
@@ -0,0 +1,135 @@
/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/* This is derived from material copyright RSA Data Security, Inc.
* Their notice is reproduced below in its entirety.
*
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
* rights reserved.
*
* License to copy and use this software is granted provided that it
* is identified as the "RSA Data Security, Inc. MD4 Message-Digest
* Algorithm" in all material mentioning or referencing this software
* or this function.
*
* License is also granted to make and use derivative works provided
* that such works are identified as "derived from the RSA Data
* Security, Inc. MD4 Message-Digest Algorithm" in all material
* mentioning or referencing the derived work.
*
* RSA Data Security, Inc. makes no representations concerning either
* the merchantability of this software or the suitability of this
* software for any particular purpose. It is provided "as is"
* without express or implied warranty of any kind.
*
* These notices must be retained in any copies of any part of this
* documentation and/or software.
*/
#ifndef APR_MD4_H
#define APR_MD4_H
#include "apu.h"
#include "apr_xlate.h"
/**
* @file apr_md4.h
* @brief APR-UTIL MD4 Library
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup APR_Util_MD4 MD4 Library
* @ingroup APR_Util
* @{
*/
/** The digestsize for MD4 */
#define APR_MD4_DIGESTSIZE 16
/** @see apr_md4_ctx_t */
typedef struct apr_md4_ctx_t apr_md4_ctx_t;
/** MD4 context. */
struct apr_md4_ctx_t {
/** state (ABCD) */
apr_uint32_t state[4];
/** number of bits, modulo 2^64 (lsb first) */
apr_uint32_t count[2];
/** input buffer */
unsigned char buffer[64];
#if APR_HAS_XLATE
/** translation handle */
apr_xlate_t *xlate;
#endif
};
/**
* MD4 Initialize. Begins an MD4 operation, writing a new context.
* @param context The MD4 context to initialize.
*/
APU_DECLARE(apr_status_t) apr_md4_init(apr_md4_ctx_t *context);
#if APR_HAS_XLATE
/**
* MDr4 translation setup. Provides the APR translation handle to be used
* for translating the content before calculating the digest.
* @param context The MD4 content to set the translation for.
* @param xlate The translation handle to use for this MD4 context
*/
APU_DECLARE(apr_status_t) apr_md4_set_xlate(apr_md4_ctx_t *context,
apr_xlate_t *xlate);
#else
#define apr_md4_set_xlate(context, xlate) APR_ENOTIMPL
#endif
/**
* MD4 block update operation. Continue an MD4 message-digest operation,
* processing another message block, and updating the context.
* @param context The MD4 content to update.
* @param input next message block to update
* @param inputLen The length of the next message block
*/
APU_DECLARE(apr_status_t) apr_md4_update(apr_md4_ctx_t *context,
const unsigned char *input,
apr_size_t inputLen);
/**
* MD4 finalization. Ends an MD4 message-digest operation, writing the
* message digest and zeroing the context
* @param digest The final MD4 digest
* @param context The MD4 content we are finalizing.
*/
APU_DECLARE(apr_status_t) apr_md4_final(
unsigned char digest[APR_MD4_DIGESTSIZE],
apr_md4_ctx_t *context);
/**
* MD4 digest computation
* @param digest The MD4 digest
* @param input message block to use
* @param inputLen The length of the message block
*/
APU_DECLARE(apr_status_t) apr_md4(unsigned char digest[APR_MD4_DIGESTSIZE],
const unsigned char *input,
apr_size_t inputLen);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* !APR_MD4_H */
+162
View File
@@ -0,0 +1,162 @@
/*
* This is work is derived from material Copyright RSA Data Security, Inc.
*
* The RSA copyright statement and Licence for that original material is
* included below. This is followed by the Apache copyright statement and
* licence for the modifications made to that material.
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_MD5_H
#define APR_MD5_H
#include "apu.h"
#include "apr_xlate.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @file apr_md5.h
* @brief APR MD5 Routines
*/
/**
* @defgroup APR_MD5 MD5 Routines
* @ingroup APR
* @{
*/
/** The MD5 digest size */
#define APR_MD5_DIGESTSIZE 16
/** @see apr_md5_ctx_t */
typedef struct apr_md5_ctx_t apr_md5_ctx_t;
/** MD5 context. */
struct apr_md5_ctx_t {
/** state (ABCD) */
apr_uint32_t state[4];
/** number of bits, modulo 2^64 (lsb first) */
apr_uint32_t count[2];
/** input buffer */
unsigned char buffer[64];
/** translation handle
* ignored if xlate is unsupported
*/
apr_xlate_t *xlate;
};
/**
* MD5 Initialize. Begins an MD5 operation, writing a new context.
* @param context The MD5 context to initialize.
*/
APU_DECLARE(apr_status_t) apr_md5_init(apr_md5_ctx_t *context);
/**
* MD5 translation setup. Provides the APR translation handle to be used
* for translating the content before calculating the digest.
* @param context The MD5 content to set the translation for.
* @param xlate The translation handle to use for this MD5 context
*/
APU_DECLARE(apr_status_t) apr_md5_set_xlate(apr_md5_ctx_t *context,
apr_xlate_t *xlate);
/**
* MD5 block update operation. Continue an MD5 message-digest operation,
* processing another message block, and updating the context.
* @param context The MD5 content to update.
* @param input next message block to update
* @param inputLen The length of the next message block
*/
APU_DECLARE(apr_status_t) apr_md5_update(apr_md5_ctx_t *context,
const void *input,
apr_size_t inputLen);
/**
* MD5 finalization. Ends an MD5 message-digest operation, writing the
* message digest and zeroing the context
* @param digest The final MD5 digest
* @param context The MD5 content we are finalizing.
*/
APU_DECLARE(apr_status_t) apr_md5_final(unsigned char digest[APR_MD5_DIGESTSIZE],
apr_md5_ctx_t *context);
/**
* MD5 in one step
* @param digest The final MD5 digest
* @param input The message block to use
* @param inputLen The length of the message block
*/
APU_DECLARE(apr_status_t) apr_md5(unsigned char digest[APR_MD5_DIGESTSIZE],
const void *input,
apr_size_t inputLen);
/**
* Encode a password using an MD5 algorithm
* @param password The password to encode
* @param salt The salt to use for the encoding
* @param result The string to store the encoded password in
* @param nbytes The size of the result buffer
*/
APU_DECLARE(apr_status_t) apr_md5_encode(const char *password, const char *salt,
char *result, apr_size_t nbytes);
/**
* Validate hashes created by APR-supported algorithms: md5 and sha1.
* hashes created by crypt are supported only on platforms that provide
* crypt(3), so don't rely on that function unless you know that your
* application will be run only on platforms that support it. On platforms
* that don't support crypt(3), this falls back to a clear text string
* comparison.
* @param passwd The password to validate
* @param hash The password to validate against
*/
APU_DECLARE(apr_status_t) apr_password_validate(const char *passwd,
const char *hash);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* !APR_MD5_H */
+92
View File
@@ -0,0 +1,92 @@
/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_OPTIONAL_H
#define APR_OPTIONAL_H
#include "apu.h"
/**
* @file apr_optional.h
* @brief APR-UTIL registration of functions exported by modules
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup APR_Util_Opt Optional Functions
* @ingroup APR_Util
*
* Typesafe registration and retrieval of functions that may not be present
* (i.e. functions exported by optional modules)
* @{
*/
/**
* The type of an optional function.
* @param name The name of the function
*/
#define APR_OPTIONAL_FN_TYPE(name) apr_OFN_##name##_t
/**
* Declare an optional function.
* @param ret The return type of the function
* @param name The name of the function
* @param args The function arguments (including brackets)
*/
#define APR_DECLARE_OPTIONAL_FN(ret,name,args) \
typedef ret (APR_OPTIONAL_FN_TYPE(name)) args
/**
* XXX: This doesn't belong here, then!
* Private function! DO NOT USE!
* @internal
*/
typedef void (apr_opt_fn_t)(void);
/** @internal */
APU_DECLARE_NONSTD(void) apr_dynamic_fn_register(const char *szName,
apr_opt_fn_t *pfn);
/**
* Register an optional function. This can be later retrieved, type-safely, by
* name. Like all global functions, the name must be unique. Note that,
* confusingly but correctly, the function itself can be static!
* @param name The name of the function
*/
#define APR_REGISTER_OPTIONAL_FN(name) do { \
APR_OPTIONAL_FN_TYPE(name) *apu__opt = name; \
apr_dynamic_fn_register(#name,(apr_opt_fn_t *)apu__opt); \
} while (0)
/** @internal
* Private function! DO NOT USE!
*/
APU_DECLARE(apr_opt_fn_t *) apr_dynamic_fn_retrieve(const char *szName);
/**
* Retrieve an optional function. Returns NULL if the function is not present.
* @param name The name of the function
*/
#define APR_RETRIEVE_OPTIONAL_FN(name) \
(APR_OPTIONAL_FN_TYPE(name) *)apr_dynamic_fn_retrieve(#name)
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* APR_OPTIONAL_H */
+117
View File
@@ -0,0 +1,117 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/**
* @file apr_optional_hooks.h
* @brief Apache optional hook functions
*/
#ifndef APR_OPTIONAL_HOOK_H
#define APR_OPTIONAL_HOOK_H
#include "apr_tables.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup APR_Util_OPT_HOOK Optional Hook Functions
* @ingroup APR_Util_Hook
* @{
*/
/**
* Function to implemnt the APR_OPTIONAL_HOOK Macro
* @internal
* @see APR_OPTIONAL_HOOK
*
* @param name The name of the hook
* @param pfn A pointer to a function that will be called
* @param aszPre a NULL-terminated array of strings that name modules whose hooks should precede this one
* @param aszSucc a NULL-terminated array of strings that name modules whose hooks should succeed this one
* @param nOrder an integer determining order before honouring aszPre and aszSucc (for example HOOK_MIDDLE)
*/
APU_DECLARE(void) apr_optional_hook_add(const char *szName,void (*pfn)(void),
const char * const *aszPre,
const char * const *aszSucc,
int nOrder);
/**
* Hook to an optional hook.
*
* @param ns The namespace prefix of the hook functions
* @param name The name of the hook
* @param pfn A pointer to a function that will be called
* @param aszPre a NULL-terminated array of strings that name modules whose hooks should precede this one
* @param aszSucc a NULL-terminated array of strings that name modules whose hooks should succeed this one
* @param nOrder an integer determining order before honouring aszPre and aszSucc (for example HOOK_MIDDLE)
*/
#define APR_OPTIONAL_HOOK(ns,name,pfn,aszPre,aszSucc,nOrder) do { \
ns##_HOOK_##name##_t *apu__hook = pfn; \
apr_optional_hook_add(#name,(void (*)(void))apu__hook,aszPre, aszSucc, nOrder); \
} while (0)
/**
* @internal
* @param szName - the name of the function
* @return the hook structure for a given hook
*/
APU_DECLARE(apr_array_header_t *) apr_optional_hook_get(const char *szName);
/**
* Implement an optional hook that runs until one of the functions
* returns something other than OK or DECLINE.
*
* @param ns The namespace prefix of the hook functions
* @param link The linkage declaration prefix of the hook
* @param ret The type of the return value of the hook
* @param ret The type of the return value of the hook
* @param name The name of the hook
* @param args_decl The declaration of the arguments for the hook
* @param args_use The names for the arguments for the hook
* @param ok Success value
* @param decline Decline value
*/
#define APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ns,link,ret,name,args_decl,args_use,ok,decline) \
link##_DECLARE(ret) ns##_run_##name args_decl \
{ \
ns##_LINK_##name##_t *pHook; \
int n; \
ret rv; \
apr_array_header_t *pHookArray=apr_optional_hook_get(#name); \
\
if(!pHookArray) \
return ok; \
\
pHook=(ns##_LINK_##name##_t *)pHookArray->elts; \
for(n=0 ; n < pHookArray->nelts ; ++n) \
{ \
rv=(pHook[n].pFunc)args_use; \
\
if(rv != ok && rv != decline) \
return rv; \
} \
return ok; \
}
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* APR_OPTIONAL_HOOK_H */
+138
View File
@@ -0,0 +1,138 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_QUEUE_H
#define APR_QUEUE_H
/**
* @file apr_queue.h
* @brief Thread Safe FIFO bounded queue
* @note Since most implementations of the queue are backed by a condition
* variable implementation, it isn't available on systems without threads.
* Although condition variables are some times available without threads.
*/
#include "apu.h"
#include "apr_errno.h"
#include "apr_pools.h"
#if APR_HAS_THREADS
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* @defgroup APR_Util_FIFO Thread Safe FIFO bounded queue
* @ingroup APR_Util
* @{
*/
/**
* opaque structure
*/
typedef struct apr_queue_t apr_queue_t;
/**
* create a FIFO queue
* @param queue The new queue
* @param queue_capacity maximum size of the queue
* @param a pool to allocate queue from
*/
APU_DECLARE(apr_status_t) apr_queue_create(apr_queue_t **queue,
unsigned int queue_capacity,
apr_pool_t *a);
/**
* push/add a object to the queue, blocking if the queue is already full
*
* @param queue the queue
* @param data the data
* @returns APR_EINTR the blocking was interrupted (try again)
* @returns APR_EOF the queue has been terminated
* @returns APR_SUCCESS on a successfull push
*/
APU_DECLARE(apr_status_t) apr_queue_push(apr_queue_t *queue, void *data);
/**
* pop/get an object from the queue, blocking if the queue is already empty
*
* @param queue the queue
* @param data the data
* @returns APR_EINTR the blocking was interrupted (try again)
* @returns APR_EOF if the queue has been terminated
* @returns APR_SUCCESS on a successfull pop
*/
APU_DECLARE(apr_status_t) apr_queue_pop(apr_queue_t *queue, void **data);
/**
* push/add a object to the queue, returning immediatly if the queue is full
*
* @param queue the queue
* @param data the data
* @returns APR_EINTR the blocking operation was interrupted (try again)
* @returns APR_EAGAIN the queue is full
* @returns APR_EOF the queue has been terminated
* @returns APR_SUCCESS on a successfull push
*/
APU_DECLARE(apr_status_t) apr_queue_trypush(apr_queue_t *queue, void *data);
/**
* pop/get an object to the queue, returning immediatly if the queue is empty
*
* @param queue the queue
* @param data the data
* @returns APR_EINTR the blocking operation was interrupted (try again)
* @returns APR_EAGAIN the queue is empty
* @returns APR_EOF the queue has been terminated
* @returns APR_SUCCESS on a successfull push
*/
APU_DECLARE(apr_status_t) apr_queue_trypop(apr_queue_t *queue, void **data);
/**
* returns the size of the queue.
*
* @warning this is not threadsafe, and is intended for reporting/monitoring
* of the queue.
* @param queue the queue
* @returns the size of the queue
*/
APU_DECLARE(unsigned int) apr_queue_size(apr_queue_t *queue);
/**
* interrupt all the threads blocking on this queue.
*
* @param queue the queue
*/
APU_DECLARE(apr_status_t) apr_queue_interrupt_all(apr_queue_t *queue);
/**
* terminate all queue, sendinging a interupt to all the
* blocking threads
*
* @param queue the queue
*/
APU_DECLARE(apr_status_t) apr_queue_term(apr_queue_t *queue);
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* APR_HAS_THREADS */
#endif /* APRQUEUE_H */
+144
View File
@@ -0,0 +1,144 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_RESLIST_H
#define APR_RESLIST_H
/**
* @file apr_reslist.h
* @brief APR-UTIL Resource List Routines
*/
#include "apr.h"
#include "apu.h"
#include "apr_pools.h"
#include "apr_errno.h"
#include "apr_time.h"
#if APR_HAS_THREADS
/**
* @defgroup APR_Util_RL Resource List Routines
* @ingroup APR_Util
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Opaque resource list object */
typedef struct apr_reslist_t apr_reslist_t;
/* Generic constructor called by resource list when it needs to create a
* resource.
* @param resource opaque resource
* @param param flags
* @param pool Pool
*/
typedef apr_status_t (*apr_reslist_constructor)(void **resource, void *params,
apr_pool_t *pool);
/* Generic destructor called by resource list when it needs to destroy a
* resource.
* @param resource opaque resource
* @param param flags
* @param pool Pool
*/
typedef apr_status_t (*apr_reslist_destructor)(void *resource, void *params,
apr_pool_t *pool);
/**
* Create a new resource list with the following parameters:
* @param reslist An address where the pointer to the new resource
* list will be stored.
* @param pool The pool to use for local storage and management
* @param min Allowed minimum number of available resources. Zero
* creates new resources only when needed.
* @param smax Resources will be destroyed to meet this maximum
* restriction as they expire.
* @param hmax Absolute maximum limit on the number of total resources.
* @param ttl If non-zero, sets the maximum amount of time a resource
* may be available while exceeding the soft limit.
* @param con Constructor routine that is called to create a new resource.
* @param de Destructor routine that is called to destroy an expired resource.
* @param params Passed to constructor and deconstructor
* @param pool The pool from which to create this resoure list. Also the
* same pool that is passed to the constructor and destructor
* routines.
*/
APU_DECLARE(apr_status_t) apr_reslist_create(apr_reslist_t **reslist,
int min, int smax, int hmax,
apr_interval_time_t ttl,
apr_reslist_constructor con,
apr_reslist_destructor de,
void *params,
apr_pool_t *pool);
/**
* Destroy the given resource list and all resources controlled by
* this list.
* FIXME: Should this block until all resources become available,
* or maybe just destroy all the free ones, or maybe destroy
* them even though they might be in use by something else?
* Currently it will abort if there are resources that haven't
* been released, so there is an assumption that all resources
* have been released to the list before calling this function.
* @param reslist The reslist to destroy
*/
APU_DECLARE(apr_status_t) apr_reslist_destroy(apr_reslist_t *reslist);
/**
* Retrieve a resource from the list, creating a new one if necessary.
* If we have met our maximum number of resources, we will block
* until one becomes available.
*/
APU_DECLARE(apr_status_t) apr_reslist_acquire(apr_reslist_t *reslist,
void **resource);
/**
* Return a resource back to the list of available resources.
*/
APU_DECLARE(apr_status_t) apr_reslist_release(apr_reslist_t *reslist,
void *resource);
/**
* Set the timeout the acquire will wait for a free resource
* when the maximum number of resources is exceeded.
* @param reslist The resource list.
* @param timeout Timeout to wait. The zero waits forewer.
*/
APU_DECLARE(void) apr_reslist_timeout_set(apr_reslist_t *reslist,
apr_interval_time_t timeout);
/**
* Invalidate a resource in the pool - e.g. a database connection
* that returns a "lost connection" error and can't be restored.
* Use this instead of apr_reslist_release if the resource is bad.
*/
APU_DECLARE(apr_status_t) apr_reslist_invalidate(apr_reslist_t *reslist,
void *resource);
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* APR_HAS_THREADS */
#endif /* ! APR_RESLIST_H */
+137
View File
@@ -0,0 +1,137 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_RMM_H
#define APR_RMM_H
/**
* @file apr_rmm.h
* @brief APR-UTIL Relocatable Memory Management Routines
*/
/**
* @defgroup APR_Util_RMM Relocatable Memory Management Routines
* @ingroup APR_Util
* @{
*/
#include "apr.h"
#include "apr_pools.h"
#include "apr_errno.h"
#include "apu.h"
#include "apr_anylock.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** Structure to access Relocatable, Managed Memory */
typedef struct apr_rmm_t apr_rmm_t;
/** Fundamental allocation unit, within a specific apr_rmm_t */
typedef apr_size_t apr_rmm_off_t;
/**
* Initialize a relocatable memory block to be managed by the apr_rmm API.
* @param rmm The relocatable memory block
* @param lock An apr_anylock_t of the appropriate type of lock, or NULL
* if no locking is required.
* @param membuf The block of relocatable memory to be managed
* @param memsize The size of relocatable memory block to be managed
* @param cont The pool to use for local storage and management
* @remark Both @param membuf and @param memsize must be aligned
* (for instance using APR_ALIGN_DEFAULT).
*/
APU_DECLARE(apr_status_t) apr_rmm_init(apr_rmm_t **rmm, apr_anylock_t *lock,
void *membuf, apr_size_t memsize,
apr_pool_t *cont);
/**
* Destroy a managed memory block.
* @param rmm The relocatable memory block to destroy
*/
APU_DECLARE(apr_status_t) apr_rmm_destroy(apr_rmm_t *rmm);
/**
* Attach to a relocatable memory block already managed by the apr_rmm API.
* @param rmm The relocatable memory block
* @param lock An apr_anylock_t of the appropriate type of lock
* @param membuf The block of relocatable memory already under management
* @param cont The pool to use for local storage and management
*/
APU_DECLARE(apr_status_t) apr_rmm_attach(apr_rmm_t **rmm, apr_anylock_t *lock,
void *membuf, apr_pool_t *cont);
/**
* Detach from the managed block of memory.
* @param rmm The relocatable memory block to detach from
*/
APU_DECLARE(apr_status_t) apr_rmm_detach(apr_rmm_t *rmm);
/**
* Allocate memory from the block of relocatable memory.
* @param rmm The relocatable memory block
* @param reqsize How much memory to allocate
*/
APU_DECLARE(apr_rmm_off_t) apr_rmm_malloc(apr_rmm_t *rmm, apr_size_t reqsize);
/**
* Realloc memory from the block of relocatable memory.
* @param rmm The relocatable memory block
* @param entity The memory allocation to realloc
* @param reqsize The new size
*/
APU_DECLARE(apr_rmm_off_t) apr_rmm_realloc(apr_rmm_t *rmm, void *entity, apr_size_t reqsize);
/**
* Allocate memory from the block of relocatable memory and initialize it to zero.
* @param rmm The relocatable memory block
* @param reqsize How much memory to allocate
*/
APU_DECLARE(apr_rmm_off_t) apr_rmm_calloc(apr_rmm_t *rmm, apr_size_t reqsize);
/**
* Free allocation returned by apr_rmm_malloc or apr_rmm_calloc.
* @param rmm The relocatable memory block
* @param entity The memory allocation to free
*/
APU_DECLARE(apr_status_t) apr_rmm_free(apr_rmm_t *rmm, apr_rmm_off_t entity);
/**
* Retrieve the physical address of a relocatable allocation of memory
* @param rmm The relocatable memory block
* @param entity The memory allocation to free
* @return address The address, aligned with APR_ALIGN_DEFAULT.
*/
APU_DECLARE(void *) apr_rmm_addr_get(apr_rmm_t *rmm, apr_rmm_off_t entity);
/**
* Compute the offset of a relocatable allocation of memory
* @param rmm The relocatable memory block
* @param entity The physical address to convert to an offset
*/
APU_DECLARE(apr_rmm_off_t) apr_rmm_offset_get(apr_rmm_t *rmm, void *entity);
/**
* Compute the required overallocation of memory needed to fit n allocs
* @param n The number of alloc/calloc regions desired
*/
APU_DECLARE(apr_size_t) apr_rmm_overhead_get(int n);
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* ! APR_RMM_H */
+175
View File
@@ -0,0 +1,175 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* sdbm - ndbm work-alike hashed database library
* based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).
* author: oz@nexus.yorku.ca
* status: ex-public domain
*/
#ifndef APR_SDBM_H
#define APR_SDBM_H
#include "apu.h"
#include "apr_errno.h"
#include "apr_file_io.h" /* for apr_fileperms_t */
/**
* @file apr_sdbm.h
* @brief apr-util SDBM library
*/
/**
* @defgroup APR_Util_DBM_SDBM SDBM library
* @ingroup APR_Util_DBM
* @{
*/
/**
* Structure for referencing an sdbm
*/
typedef struct apr_sdbm_t apr_sdbm_t;
/**
* Structure for referencing the datum record within an sdbm
*/
typedef struct {
/** pointer to the data stored/retrieved */
char *dptr;
/** size of data */
int dsize;
} apr_sdbm_datum_t;
/* The extensions used for the database files */
/** SDBM Directory file extension */
#define APR_SDBM_DIRFEXT ".dir"
/** SDBM page file extension */
#define APR_SDBM_PAGFEXT ".pag"
/* flags to sdbm_store */
#define APR_SDBM_INSERT 0 /**< Insert */
#define APR_SDBM_REPLACE 1 /**< Replace */
#define APR_SDBM_INSERTDUP 2 /**< Insert with duplicates */
/**
* Open an sdbm database by file name
* @param db The newly opened database
* @param name The sdbm file to open
* @param mode The flag values (APR_READ and APR_BINARY flags are implicit)
* <PRE>
* APR_WRITE open for read-write access
* APR_CREATE create the sdbm if it does not exist
* APR_TRUNCATE empty the contents of the sdbm
* APR_EXCL fail for APR_CREATE if the file exists
* APR_DELONCLOSE delete the sdbm when closed
* APR_SHARELOCK support locking across process/machines
* </PRE>
* @param perms Permissions to apply to if created
* @param p The pool to use when creating the sdbm
* @remark The sdbm name is not a true file name, as sdbm appends suffixes
* for seperate data and index files.
*/
APU_DECLARE(apr_status_t) apr_sdbm_open(apr_sdbm_t **db, const char *name,
apr_int32_t mode,
apr_fileperms_t perms, apr_pool_t *p);
/**
* Close an sdbm file previously opened by apr_sdbm_open
* @param db The database to close
*/
APU_DECLARE(apr_status_t) apr_sdbm_close(apr_sdbm_t *db);
/**
* Lock an sdbm database for concurency of multiple operations
* @param db The database to lock
* @param type The lock type
* <PRE>
* APR_FLOCK_SHARED
* APR_FLOCK_EXCLUSIVE
* </PRE>
* @remark Calls to apr_sdbm_lock may be nested. All apr_sdbm functions
* perform implicit locking. Since an APR_FLOCK_SHARED lock cannot be
* portably promoted to an APR_FLOCK_EXCLUSIVE lock, apr_sdbm_store and
* apr_sdbm_delete calls will fail if an APR_FLOCK_SHARED lock is held.
* The apr_sdbm_lock call requires the database to be opened with the
* APR_SHARELOCK mode value.
*/
APU_DECLARE(apr_status_t) apr_sdbm_lock(apr_sdbm_t *db, int type);
/**
* Release an sdbm lock previously aquired by apr_sdbm_lock
* @param db The database to unlock
*/
APU_DECLARE(apr_status_t) apr_sdbm_unlock(apr_sdbm_t *db);
/**
* Fetch an sdbm record value by key
* @param db The database
* @param value The value datum retrieved for this record
* @param key The key datum to find this record
*/
APU_DECLARE(apr_status_t) apr_sdbm_fetch(apr_sdbm_t *db,
apr_sdbm_datum_t *value,
apr_sdbm_datum_t key);
/**
* Store an sdbm record value by key
* @param db The database
* @param key The key datum to store this record by
* @param value The value datum to store in this record
* @param opt The method used to store the record
* <PRE>
* APR_SDBM_INSERT return an error if the record exists
* APR_SDBM_REPLACE overwrite any existing record for key
* </PRE>
*/
APU_DECLARE(apr_status_t) apr_sdbm_store(apr_sdbm_t *db, apr_sdbm_datum_t key,
apr_sdbm_datum_t value, int opt);
/**
* Delete an sdbm record value by key
* @param db The database
* @param key The key datum of the record to delete
* @remark It is not an error to delete a non-existent record.
*/
APU_DECLARE(apr_status_t) apr_sdbm_delete(apr_sdbm_t *db,
const apr_sdbm_datum_t key);
/**
* Retrieve the first record key from a dbm
* @param db The database
* @param key The key datum of the first record
* @remark The keys returned are not ordered. To traverse the list of keys
* for an sdbm opened with APR_SHARELOCK, the caller must use apr_sdbm_lock
* prior to retrieving the first record, and hold the lock until after the
* last call to apr_sdbm_nextkey.
*/
APU_DECLARE(apr_status_t) apr_sdbm_firstkey(apr_sdbm_t *db, apr_sdbm_datum_t *key);
/**
* Retrieve the next record key from an sdbm
* @param db The database
* @param key The key datum of the next record
*/
APU_DECLARE(apr_status_t) apr_sdbm_nextkey(apr_sdbm_t *db, apr_sdbm_datum_t *key);
/**
* Returns true if the sdbm database opened for read-only access
* @param db The database to test
*/
APU_DECLARE(int) apr_sdbm_rdonly(apr_sdbm_t *db);
/** @} */
#endif /* APR_SDBM_H */
+121
View File
@@ -0,0 +1,121 @@
/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/* NIST Secure Hash Algorithm
* heavily modified by Uwe Hollerbach uh@alumni.caltech edu
* from Peter C. Gutmann's implementation as found in
* Applied Cryptography by Bruce Schneier
* This code is hereby placed in the public domain
*/
#ifndef APR_SHA1_H
#define APR_SHA1_H
#include "apu.h"
#include "apr_general.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @file apr_sha1.h
* @brief APR-UTIL SHA1 library
*/
/** size of the SHA1 DIGEST */
#define APR_SHA1_DIGESTSIZE 20
/**
* Define the Magic String prefix that identifies a password as being
* hashed using our algorithm.
*/
#define APR_SHA1PW_ID "{SHA}"
/** length of the SHA Password */
#define APR_SHA1PW_IDLEN 5
/** @see apr_sha1_ctx_t */
typedef struct apr_sha1_ctx_t apr_sha1_ctx_t;
/**
* SHA1 context structure
*/
struct apr_sha1_ctx_t {
/** message digest */
apr_uint32_t digest[5];
/** 64-bit bit counts */
apr_uint32_t count_lo, count_hi;
/** SHA data buffer */
apr_uint32_t data[16];
/** unprocessed amount in data */
int local;
};
/**
* Provide a means to SHA1 crypt/encode a plaintext password in a way which
* makes password file compatible with those commonly use in netscape web
* and ldap installations.
* @param clear The plaintext password
* @param len The length of the plaintext password
* @param out The encrypted/encoded password
* @note SHA1 support is useful for migration purposes, but is less
* secure than Apache's password format, since Apache's (MD5)
* password format uses a random eight character salt to generate
* one of many possible hashes for the same password. Netscape
* uses plain SHA1 without a salt, so the same password
* will always generate the same hash, making it easier
* to break since the search space is smaller.
*/
APU_DECLARE(void) apr_sha1_base64(const char *clear, int len, char *out);
/**
* Initialize the SHA digest
* @param context The SHA context to initialize
*/
APU_DECLARE(void) apr_sha1_init(apr_sha1_ctx_t *context);
/**
* Update the SHA digest
* @param context The SHA1 context to update
* @param input The buffer to add to the SHA digest
* @param inputLen The length of the input buffer
*/
APU_DECLARE(void) apr_sha1_update(apr_sha1_ctx_t *context, const char *input,
unsigned int inputLen);
/**
* Update the SHA digest with binary data
* @param context The SHA1 context to update
* @param input The buffer to add to the SHA digest
* @param inputLen The length of the input buffer
*/
APU_DECLARE(void) apr_sha1_update_binary(apr_sha1_ctx_t *context,
const unsigned char *input,
unsigned int inputLen);
/**
* Finish computing the SHA digest
* @param digest the output buffer in which to store the digest
* @param context The context to finalize
*/
APU_DECLARE(void) apr_sha1_final(unsigned char digest[APR_SHA1_DIGESTSIZE],
apr_sha1_ctx_t *context);
#ifdef __cplusplus
}
#endif
#endif /* APR_SHA1_H */
+81
View File
@@ -0,0 +1,81 @@
/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_STRMATCH_H
#define APR_STRMATCH_H
/**
* @file apr_strmatch.h
* @brief APR-UTIL string matching routines
*/
#include "apu.h"
#include "apr_pools.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup APR_Util_StrMatch String matching routines
* @ingroup APR_Util
* @{
*/
/** @see apr_strmatch_pattern */
typedef struct apr_strmatch_pattern apr_strmatch_pattern;
/**
* Precompiled search pattern
*/
struct apr_strmatch_pattern {
/** Function called to compare */
const char *(*compare)(const apr_strmatch_pattern *this_pattern,
const char *s, apr_size_t slen);
const char *pattern; /**< Current pattern */
apr_size_t length; /**< Current length */
void *context; /**< hook to add precomputed metadata */
};
#if defined(DOXYGEN)
/**
* Search for a precompiled pattern within a string
* @param pattern The pattern
* @param s The string in which to search for the pattern
* @param slen The length of s (excluding null terminator)
* @return A pointer to the first instance of the pattern in s, or
* NULL if not found
*/
APU_DECLARE(const char *) apr_strmatch(const apr_strmatch_pattern *pattern,
const char *s, apr_size_t slen);
#else
#define apr_strmatch(pattern, s, slen) (*((pattern)->compare))((pattern), (s), (slen))
#endif
/**
* Precompile a pattern for matching using the Boyer-Moore-Horspool algorithm
* @param p The pool from which to allocate the pattern
* @param s The pattern string
* @param case_sensitive Whether the matching should be case-sensitive
* @return a pointer to the compiled pattern, or NULL if compilation fails
*/
APU_DECLARE(const apr_strmatch_pattern *) apr_strmatch_precompile(apr_pool_t *p, const char *s, int case_sensitive);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* !APR_STRMATCH_H */
+178
View File
@@ -0,0 +1,178 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* apr_uri.h: External Interface of apr_uri.c
*/
/**
* @file apr_uri.h
* @brief APR-UTIL URI Routines
*/
#ifndef APR_URI_H
#define APR_URI_H
#include "apu.h"
#include "apr_network_io.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup APR_Util_URI URI
* @ingroup APR_Util
* @{
*/
#define APR_URI_FTP_DEFAULT_PORT 21 /**< default FTP port */
#define APR_URI_SSH_DEFAULT_PORT 22 /**< default SSH port */
#define APR_URI_TELNET_DEFAULT_PORT 23 /**< default telnet port */
#define APR_URI_GOPHER_DEFAULT_PORT 70 /**< default Gopher port */
#define APR_URI_HTTP_DEFAULT_PORT 80 /**< default HTTP port */
#define APR_URI_POP_DEFAULT_PORT 110 /**< default POP port */
#define APR_URI_NNTP_DEFAULT_PORT 119 /**< default NNTP port */
#define APR_URI_IMAP_DEFAULT_PORT 143 /**< default IMAP port */
#define APR_URI_PROSPERO_DEFAULT_PORT 191 /**< default Prospero port */
#define APR_URI_WAIS_DEFAULT_PORT 210 /**< default WAIS port */
#define APR_URI_LDAP_DEFAULT_PORT 389 /**< default LDAP port */
#define APR_URI_HTTPS_DEFAULT_PORT 443 /**< default HTTPS port */
#define APR_URI_RTSP_DEFAULT_PORT 554 /**< default RTSP port */
#define APR_URI_SNEWS_DEFAULT_PORT 563 /**< default SNEWS port */
#define APR_URI_ACAP_DEFAULT_PORT 674 /**< default ACAP port */
#define APR_URI_NFS_DEFAULT_PORT 2049 /**< default NFS port */
#define APR_URI_TIP_DEFAULT_PORT 3372 /**< default TIP port */
#define APR_URI_SIP_DEFAULT_PORT 5060 /**< default SIP port */
/** Flags passed to unparse_uri_components(): */
/** suppress "scheme://user\@site:port" */
#define APR_URI_UNP_OMITSITEPART (1U<<0)
/** Just omit user */
#define APR_URI_UNP_OMITUSER (1U<<1)
/** Just omit password */
#define APR_URI_UNP_OMITPASSWORD (1U<<2)
/** omit "user:password\@" part */
#define APR_URI_UNP_OMITUSERINFO (APR_URI_UNP_OMITUSER | \
APR_URI_UNP_OMITPASSWORD)
/** Show plain text password (default: show XXXXXXXX) */
#define APR_URI_UNP_REVEALPASSWORD (1U<<3)
/** Show "scheme://user\@site:port" only */
#define APR_URI_UNP_OMITPATHINFO (1U<<4)
/** Omit the "?queryarg" from the path */
#define APR_URI_UNP_OMITQUERY (1U<<5)
/** @see apr_uri_t */
typedef struct apr_uri_t apr_uri_t;
/**
* A structure to encompass all of the fields in a uri
*/
struct apr_uri_t {
/** scheme ("http"/"ftp"/...) */
char *scheme;
/** combined [user[:password]\@]host[:port] */
char *hostinfo;
/** user name, as in http://user:passwd\@host:port/ */
char *user;
/** password, as in http://user:passwd\@host:port/ */
char *password;
/** hostname from URI (or from Host: header) */
char *hostname;
/** port string (integer representation is in "port") */
char *port_str;
/** the request path (or "/" if only scheme://host was given) */
char *path;
/** Everything after a '?' in the path, if present */
char *query;
/** Trailing "#fragment" string, if present */
char *fragment;
/** structure returned from gethostbyname() */
struct hostent *hostent;
/** The port number, numeric, valid only if port_str != NULL */
apr_port_t port;
/** has the structure been initialized */
unsigned is_initialized:1;
/** has the DNS been looked up yet */
unsigned dns_looked_up:1;
/** has the dns been resolved yet */
unsigned dns_resolved:1;
};
/* apr_uri.c */
/**
* Return the default port for a given scheme. The schemes recognized are
* http, ftp, https, gopher, wais, nntp, snews, and prospero
* @param scheme_str The string that contains the current scheme
* @return The default port for this scheme
*/
APU_DECLARE(apr_port_t) apr_uri_port_of_scheme(const char *scheme_str);
/**
* Unparse a apr_uri_t structure to an URI string. Optionally
* suppress the password for security reasons.
* @param p The pool to allocate out of
* @param uptr All of the parts of the uri
* @param flags How to unparse the uri. One of:
* <PRE>
* APR_URI_UNP_OMITSITEPART Suppress "scheme://user\@site:port"
* APR_URI_UNP_OMITUSER Just omit user
* APR_URI_UNP_OMITPASSWORD Just omit password
* APR_URI_UNP_OMITUSERINFO Omit "user:password\@" part
* APR_URI_UNP_REVEALPASSWORD Show plain text password (default: show XXXXXXXX)
* APR_URI_UNP_OMITPATHINFO Show "scheme://user\@site:port" only
* APR_URI_UNP_OMITQUERY Omit "?queryarg" or "#fragment"
* </PRE>
* @return The uri as a string
*/
APU_DECLARE(char *) apr_uri_unparse(apr_pool_t *p,
const apr_uri_t *uptr,
unsigned flags);
/**
* Parse a given URI, fill in all supplied fields of a apr_uri_t
* structure. This eliminates the necessity of extracting host, port,
* path, query info repeatedly in the modules.
* @param p The pool to allocate out of
* @param uri The uri to parse
* @param uptr The apr_uri_t to fill out
* @return APR_SUCCESS for success or error code
*/
APU_DECLARE(apr_status_t) apr_uri_parse(apr_pool_t *p, const char *uri,
apr_uri_t *uptr);
/**
* Special case for CONNECT parsing: it comes with the hostinfo part only
* @param p The pool to allocate out of
* @param hostinfo The hostinfo string to parse
* @param uptr The apr_uri_t to fill out
* @return APR_SUCCESS for success or error code
*/
APU_DECLARE(apr_status_t) apr_uri_parse_hostinfo(apr_pool_t *p,
const char *hostinfo,
apr_uri_t *uptr);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* APR_URI_H */
+76
View File
@@ -0,0 +1,76 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/**
* @file apr_uuid.h
* @brief APR UUID library
*/
#ifndef APR_UUID_H
#define APR_UUID_H
#include "apu.h"
#include "apr_errno.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* @defgroup APR_UUID UUID Handling
* @ingroup APR
* @{
*/
/**
* we represent a UUID as a block of 16 bytes.
*/
typedef struct {
unsigned char data[16]; /**< the actual UUID */
} apr_uuid_t;
/** UUIDs are formatted as: 00112233-4455-6677-8899-AABBCCDDEEFF */
#define APR_UUID_FORMATTED_LENGTH 36
/**
* Generate and return a (new) UUID
* @param uuid The resulting UUID
*/
APU_DECLARE(void) apr_uuid_get(apr_uuid_t *uuid);
/**
* Format a UUID into a string, following the standard format
* @param buffer The buffer to place the formatted UUID string into. It must
* be at least APR_UUID_FORMATTED_LENGTH + 1 bytes long to hold
* the formatted UUID and a null terminator
* @param uuid The UUID to format
*/
APU_DECLARE(void) apr_uuid_format(char *buffer, const apr_uuid_t *uuid);
/**
* Parse a standard-format string into a UUID
* @param uuid The resulting UUID
* @param uuid_str The formatted UUID
*/
APU_DECLARE(apr_status_t) apr_uuid_parse(apr_uuid_t *uuid, const char *uuid_str);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* APR_UUID_H */
+163
View File
@@ -0,0 +1,163 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_XLATE_H
#define APR_XLATE_H
#include "apu.h"
#include "apr_pools.h"
#include "apr_errno.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* @file apr_xlate.h
* @brief APR I18N translation library
*/
/**
* @defgroup APR_XLATE I18N translation library
* @ingroup APR
* @{
*/
/** Opaque translation buffer */
typedef struct apr_xlate_t apr_xlate_t;
/**
* Set up for converting text from one charset to another.
* @param convset The handle to be filled in by this function
* @param topage The name of the target charset
* @param frompage The name of the source charset
* @param pool The pool to use
* @remark
* Specify APR_DEFAULT_CHARSET for one of the charset
* names to indicate the charset of the source code at
* compile time. This is useful if there are literal
* strings in the source code which must be translated
* according to the charset of the source code.
* APR_DEFAULT_CHARSET is not useful if the source code
* of the caller was not encoded in the same charset as
* APR at compile time.
*
* @remark
* Specify APR_LOCALE_CHARSET for one of the charset
* names to indicate the charset of the current locale.
*
* @remark
* Return APR_EINVAL if unable to procure a convset, or APR_ENOTIMPL
* if charset transcoding is not available in this instance of
* apr-util at all (i.e., APR_HAS_XLATE is undefined).
*/
APU_DECLARE(apr_status_t) apr_xlate_open(apr_xlate_t **convset,
const char *topage,
const char *frompage,
apr_pool_t *pool);
/**
* This is to indicate the charset of the sourcecode at compile time
* names to indicate the charset of the source code at
* compile time. This is useful if there are literal
* strings in the source code which must be translated
* according to the charset of the source code.
*/
#define APR_DEFAULT_CHARSET (const char *)0
/**
* To indicate charset names of the current locale
*/
#define APR_LOCALE_CHARSET (const char *)1
/**
* Find out whether or not the specified conversion is single-byte-only.
* @param convset The handle allocated by apr_xlate_open, specifying the
* parameters of conversion
* @param onoff Output: whether or not the conversion is single-byte-only
* @remark
* Return APR_ENOTIMPL if charset transcoding is not available
* in this instance of apr-util (i.e., APR_HAS_XLATE is undefined).
*/
APU_DECLARE(apr_status_t) apr_xlate_sb_get(apr_xlate_t *convset, int *onoff);
/**
* Convert a buffer of text from one codepage to another.
* @param convset The handle allocated by apr_xlate_open, specifying
* the parameters of conversion
* @param inbuf The address of the source buffer
* @param inbytes_left Input: the amount of input data to be translated
* Output: the amount of input data not yet translated
* @param outbuf The address of the destination buffer
* @param outbytes_left Input: the size of the output buffer
* Output: the amount of the output buffer not yet used
* @remark
* Returns APR_ENOTIMPL if charset transcoding is not available
* in this instance of apr-util (i.e., APR_HAS_XLATE is undefined).
* Returns APR_INCOMPLETE if the input buffer ends in an incomplete
* multi-byte character.
*
* To correctly terminate the output buffer for some multi-byte
* character set encodings, a final call must be made to this function
* after the complete input string has been converted, passing
* the inbuf and inbytes_left parameters as NULL. (Note that this
* mode only works from version 1.1.0 onwards)
*/
APU_DECLARE(apr_status_t) apr_xlate_conv_buffer(apr_xlate_t *convset,
const char *inbuf,
apr_size_t *inbytes_left,
char *outbuf,
apr_size_t *outbytes_left);
/* @see apr_file_io.h the comment in apr_file_io.h about this hack */
#ifdef APR_NOT_DONE_YET
/**
* The purpose of apr_xlate_conv_char is to translate one character
* at a time. This needs to be written carefully so that it works
* with double-byte character sets.
* @param convset The handle allocated by apr_xlate_open, specifying the
* parameters of conversion
* @param inchar The character to convert
* @param outchar The converted character
*/
APU_DECLARE(apr_status_t) apr_xlate_conv_char(apr_xlate_t *convset,
char inchar, char outchar);
#endif
/**
* Convert a single-byte character from one charset to another.
* @param convset The handle allocated by apr_xlate_open, specifying the
* parameters of conversion
* @param inchar The single-byte character to convert.
* @warning This only works when converting between single-byte character sets.
* -1 will be returned if the conversion can't be performed.
*/
APU_DECLARE(apr_int32_t) apr_xlate_conv_byte(apr_xlate_t *convset,
unsigned char inchar);
/**
* Close a codepage translation handle.
* @param convset The codepage translation handle to close
* @remark
* Return APR_ENOTIMPL if charset transcoding is not available
* in this instance of apr-util (i.e., APR_HAS_XLATE is undefined).
*/
APU_DECLARE(apr_status_t) apr_xlate_close(apr_xlate_t *convset);
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* ! APR_XLATE_H */
+356
View File
@@ -0,0 +1,356 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/**
* @file apr_xml.h
* @brief APR-UTIL XML Library
*/
#ifndef APR_XML_H
#define APR_XML_H
/**
* @defgroup APR_Util_XML XML
* @ingroup APR_Util
* @{
*/
#include "apr_pools.h"
#include "apr_tables.h"
#include "apr_file_io.h"
#include "apu.h"
#if APR_CHARSET_EBCDIC
#include "apr_xlate.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
* @package Apache XML library
*/
/* -------------------------------------------------------------------- */
/* ### these will need to move at some point to a more logical spot */
/** @see apr_text */
typedef struct apr_text apr_text;
/** Structure to keep a linked list of pieces of text */
struct apr_text {
/** The current piece of text */
const char *text;
/** a pointer to the next piece of text */
struct apr_text *next;
};
/** @see apr_text_header */
typedef struct apr_text_header apr_text_header;
/** A list of pieces of text */
struct apr_text_header {
/** The first piece of text in the list */
apr_text *first;
/** The last piece of text in the list */
apr_text *last;
};
/**
* Append a piece of text to the end of a list
* @param p The pool to allocate out of
* @param hdr The text header to append to
* @param text The new text to append
*/
APU_DECLARE(void) apr_text_append(apr_pool_t *p, apr_text_header *hdr,
const char *text);
/* --------------------------------------------------------------------
**
** XML PARSING
*/
/*
** Qualified namespace values
**
** APR_XML_NS_DAV_ID
** We always insert the "DAV:" namespace URI at the head of the
** namespace array. This means that it will always be at ID==0,
** making it much easier to test for.
**
** APR_XML_NS_NONE
** This special ID is used for two situations:
**
** 1) The namespace prefix begins with "xml" (and we do not know
** what it means). Namespace prefixes with "xml" (any case) as
** their first three characters are reserved by the XML Namespaces
** specification for future use. mod_dav will pass these through
** unchanged. When this identifier is used, the prefix is LEFT in
** the element/attribute name. Downstream processing should not
** prepend another prefix.
**
** 2) The element/attribute does not have a namespace.
**
** a) No prefix was used, and a default namespace has not been
** defined.
** b) No prefix was used, and the default namespace was specified
** to mean "no namespace". This is done with a namespace
** declaration of: xmlns=""
** (this declaration is typically used to override a previous
** specification for the default namespace)
**
** In these cases, we need to record that the elem/attr has no
** namespace so that we will not attempt to prepend a prefix.
** All namespaces that are used will have a prefix assigned to
** them -- mod_dav will never set or use the default namespace
** when generating XML. This means that "no prefix" will always
** mean "no namespace".
**
** In both cases, the XML generation will avoid prepending a prefix.
** For the first case, this means the original prefix/name will be
** inserted into the output stream. For the latter case, it means
** the name will have no prefix, and since we never define a default
** namespace, this means it will have no namespace.
**
** Note: currently, mod_dav understands the "xmlns" prefix and the
** "xml:lang" attribute. These are handled specially (they aren't
** left within the XML tree), so the APR_XML_NS_NONE value won't ever
** really apply to these values.
*/
#define APR_XML_NS_DAV_ID 0 /**< namespace ID for "DAV:" */
#define APR_XML_NS_NONE -10 /**< no namespace for this elem/attr */
#define APR_XML_NS_ERROR_BASE -100 /**< used only during processing */
/** Is this namespace an error? */
#define APR_XML_NS_IS_ERROR(e) ((e) <= APR_XML_NS_ERROR_BASE)
/** @see apr_xml_attr */
typedef struct apr_xml_attr apr_xml_attr;
/** @see apr_xml_elem */
typedef struct apr_xml_elem apr_xml_elem;
/** @see apr_xml_doc */
typedef struct apr_xml_doc apr_xml_doc;
/** apr_xml_attr: holds a parsed XML attribute */
struct apr_xml_attr {
/** attribute name */
const char *name;
/** index into namespace array */
int ns;
/** attribute value */
const char *value;
/** next attribute */
struct apr_xml_attr *next;
};
/** apr_xml_elem: holds a parsed XML element */
struct apr_xml_elem {
/** element name */
const char *name;
/** index into namespace array */
int ns;
/** xml:lang for attrs/contents */
const char *lang;
/** cdata right after start tag */
apr_text_header first_cdata;
/** cdata after MY end tag */
apr_text_header following_cdata;
/** parent element */
struct apr_xml_elem *parent;
/** next (sibling) element */
struct apr_xml_elem *next;
/** first child element */
struct apr_xml_elem *first_child;
/** first attribute */
struct apr_xml_attr *attr;
/* used only during parsing */
/** last child element */
struct apr_xml_elem *last_child;
/** namespaces scoped by this elem */
struct apr_xml_ns_scope *ns_scope;
/* used by modules during request processing */
/** Place for modules to store private data */
void *priv;
};
/** Is this XML element empty? */
#define APR_XML_ELEM_IS_EMPTY(e) ((e)->first_child == NULL && \
(e)->first_cdata.first == NULL)
/** apr_xml_doc: holds a parsed XML document */
struct apr_xml_doc {
/** root element */
apr_xml_elem *root;
/** array of namespaces used */
apr_array_header_t *namespaces;
};
/** Opaque XML parser structure */
typedef struct apr_xml_parser apr_xml_parser;
/**
* Create an XML parser
* @param pool The pool for allocating the parser and the parse results.
* @return The new parser.
*/
APU_DECLARE(apr_xml_parser *) apr_xml_parser_create(apr_pool_t *pool);
/**
* Parse a File, producing a xml_doc
* @param p The pool for allocating the parse results.
* @param parser A pointer to *parser (needed so calling function can get
* errors), will be set to NULL on successfull completion.
* @param ppdoc A pointer to *apr_xml_doc (which has the parsed results in it)
* @param xmlfd A file to read from.
* @param buffer_length Buffer length which would be suitable
* @return Any errors found during parsing.
*/
APU_DECLARE(apr_status_t) apr_xml_parse_file(apr_pool_t *p,
apr_xml_parser **parser,
apr_xml_doc **ppdoc,
apr_file_t *xmlfd,
apr_size_t buffer_length);
/**
* Feed input into the parser
* @param parser The XML parser for parsing this data.
* @param data The data to parse.
* @param len The length of the data.
* @return Any errors found during parsing.
* @remark Use apr_xml_parser_geterror() to get more error information.
*/
APU_DECLARE(apr_status_t) apr_xml_parser_feed(apr_xml_parser *parser,
const char *data,
apr_size_t len);
/**
* Terminate the parsing and return the result
* @param parser The XML parser for parsing this data.
* @param pdoc The resulting parse information. May be NULL to simply
* terminate the parsing without fetching the info.
* @return Any errors found during the final stage of parsing.
* @remark Use apr_xml_parser_geterror() to get more error information.
*/
APU_DECLARE(apr_status_t) apr_xml_parser_done(apr_xml_parser *parser,
apr_xml_doc **pdoc);
/**
* Fetch additional error information from the parser.
* @param parser The XML parser to query for errors.
* @param errbuf A buffer for storing error text.
* @param errbufsize The length of the error text buffer.
* @return The error buffer
*/
APU_DECLARE(char *) apr_xml_parser_geterror(apr_xml_parser *parser,
char *errbuf,
apr_size_t errbufsize);
/**
* Converts an XML element tree to flat text
* @param p The pool to allocate out of
* @param elem The XML element to convert
* @param style How to covert the XML. One of:
* <PRE>
* APR_XML_X2T_FULL start tag, contents, end tag
* APR_XML_X2T_INNER contents only
* APR_XML_X2T_LANG_INNER xml:lang + inner contents
* APR_XML_X2T_FULL_NS_LANG FULL + ns defns + xml:lang
* </PRE>
* @param namespaces The namespace of the current XML element
* @param ns_map Namespace mapping
* @param pbuf Buffer to put the converted text into
* @param psize Size of the converted text
*/
APU_DECLARE(void) apr_xml_to_text(apr_pool_t *p, const apr_xml_elem *elem,
int style, apr_array_header_t *namespaces,
int *ns_map, const char **pbuf,
apr_size_t *psize);
/* style argument values: */
#define APR_XML_X2T_FULL 0 /**< start tag, contents, end tag */
#define APR_XML_X2T_INNER 1 /**< contents only */
#define APR_XML_X2T_LANG_INNER 2 /**< xml:lang + inner contents */
#define APR_XML_X2T_FULL_NS_LANG 3 /**< FULL + ns defns + xml:lang */
/**
* empty XML element
* @param p The pool to allocate out of
* @param elem The XML element to empty
* @return the string that was stored in the XML element
*/
APU_DECLARE(const char *) apr_xml_empty_elem(apr_pool_t *p,
const apr_xml_elem *elem);
/**
* quote an XML string
* Replace '<', '>', and '&' with '&lt;', '&gt;', and '&amp;'.
* @param p The pool to allocate out of
* @param s The string to quote
* @param quotes If quotes is true, then replace '"' with '&quot;'.
* @return The quoted string
* @note If the string does not contain special characters, it is not
* duplicated into the pool and the original string is returned.
*/
APU_DECLARE(const char *) apr_xml_quote_string(apr_pool_t *p, const char *s,
int quotes);
/**
* Quote an XML element
* @param p The pool to allocate out of
* @param elem The element to quote
*/
APU_DECLARE(void) apr_xml_quote_elem(apr_pool_t *p, apr_xml_elem *elem);
/* manage an array of unique URIs: apr_xml_insert_uri() and APR_XML_URI_ITEM() */
/**
* return the URI's (existing) index, or insert it and return a new index
* @param uri_array array to insert into
* @param uri The uri to insert
* @return int The uri's index
*/
APU_DECLARE(int) apr_xml_insert_uri(apr_array_header_t *uri_array,
const char *uri);
/** Get the URI item for this XML element */
#define APR_XML_GET_URI_ITEM(ary, i) (((const char * const *)(ary)->elts)[i])
#if APR_CHARSET_EBCDIC
/**
* Convert parsed tree in EBCDIC
* @param p The pool to allocate out of
* @param pdoc The apr_xml_doc to convert.
* @param xlate The translation handle to use.
* @return Any errors found during conversion.
*/
APU_DECLARE(apr_status_t) apr_xml_parser_convert_doc(apr_pool_t *p,
apr_xml_doc *pdoc,
apr_xlate_t *convset);
#endif
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* APR_XML_H */
+91
View File
@@ -0,0 +1,91 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* apu.h is generated from apu.h.in by configure -- do not edit apu.h
*/
/* @file apu.h
* @brief APR-Utility main file
*/
/**
* @defgroup APR_Util APR Utility Functions
* @{
*/
#ifndef APU_H
#define APU_H
/**
* APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
* so that all public symbols are exported.
*
* APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
* to provide static linkage when the dynamic library may be unavailable.
*
* APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
* including the APR-UTIL public headers, to import and link the symbols from
* the dynamic APR-UTIL library and assure appropriate indirection and calling
* conventions at compile time.
*/
/**
* The public APR-UTIL functions are declared with APU_DECLARE(), so they may
* use the most appropriate calling convention. Public APR functions with
* variable arguments must use APU_DECLARE_NONSTD().
*
* @deffunc APU_DECLARE(rettype) apr_func(args);
*/
#define APU_DECLARE(type) type
/**
* The public APR-UTIL functions using variable arguments are declared with
* APU_DECLARE_NONSTD(), as they must use the C language calling convention.
*
* @deffunc APU_DECLARE_NONSTD(rettype) apr_func(args, ...);
*/
#define APU_DECLARE_NONSTD(type) type
/**
* The public APR-UTIL variables are declared with APU_DECLARE_DATA.
* This assures the appropriate indirection is invoked at compile time.
*
* @deffunc APU_DECLARE_DATA type apr_variable;
* @tip APU_DECLARE_DATA extern type apr_variable; syntax is required for
* declarations within headers to properly import the variable.
*/
#define APU_DECLARE_DATA
/*
* we always have SDBM (it's in our codebase)
*/
#define APU_HAVE_SDBM @apu_have_sdbm@
#define APU_HAVE_GDBM @apu_have_gdbm@
#define APU_HAVE_NDBM @apu_have_ndbm@
#define APU_HAVE_DB @apu_have_db@
#if APU_HAVE_DB
#define APU_HAVE_DB_VERSION @apu_db_version@
#endif /* APU_HAVE_DB */
#define APU_HAVE_PGSQL @apu_have_pgsql@
#define APU_HAVE_MYSQL @apu_have_mysql@
#define APU_HAVE_SQLITE3 @apu_have_sqlite3@
#define APU_HAVE_SQLITE2 @apu_have_sqlite2@
#define APU_HAVE_APR_ICONV @have_apr_iconv@
#define APU_HAVE_ICONV @have_iconv@
#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
#endif /* APU_H */
/** @} */
+84
View File
@@ -0,0 +1,84 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* Note: This is a NetWare specific version of apu.h. It is renamed to
* apu.h at the start of a NetWare build.
*/
/* @file apu.h
* @brief APR-Utility main file
*/
/**
* @defgroup APR_Util APR Utility Functions
* @{
*/
#ifndef APU_H
#define APU_H
/**
* APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
* so that all public symbols are exported.
*
* APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
* to provide static linkage when the dynamic library may be unavailable.
*
* APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
* including the APR-UTIL public headers, to import and link the symbols from
* the dynamic APR-UTIL library and assure appropriate indirection and calling
* conventions at compile time.
*/
/**
* The public APR-UTIL functions are declared with APU_DECLARE(), so they may
* use the most appropriate calling convention. Public APR functions with
* variable arguments must use APU_DECLARE_NONSTD().
*
* @deffunc APU_DECLARE(rettype) apr_func(args);
*/
#define APU_DECLARE(type) type
/**
* The public APR-UTIL functions using variable arguments are declared with
* APU_DECLARE_NONSTD(), as they must use the C language calling convention.
*
* @deffunc APU_DECLARE_NONSTD(rettype) apr_func(args, ...);
*/
#define APU_DECLARE_NONSTD(type) type
/**
* The public APR-UTIL variables are declared with APU_DECLARE_DATA.
* This assures the appropriate indirection is invoked at compile time.
*
* @deffunc APU_DECLARE_DATA type apr_variable;
* @tip APU_DECLARE_DATA extern type apr_variable; syntax is required for
* declarations within headers to properly import the variable.
*/
#define APU_DECLARE_DATA
/*
* we always have SDBM (it's in our codebase)
*/
#define APU_HAVE_SDBM 1
#define APU_HAVE_GDBM 0
#define APU_HAVE_DB 0
#define HAVE_ICONV_H 1
#define APU_HAVE_APR_ICONV 0
#define APU_HAVE_ICONV 1
#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
#endif /* APU_H */
/** @} */
+113
View File
@@ -0,0 +1,113 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* Note: This is a Windows specific version of apu.h. It is renamed to
* apu.h at the start of a Windows build.
*/
/* @file apu.h
* @brief APR-Utility main file
*/
#ifdef WIN32
#ifndef APU_H
#define APU_H
/**
* @defgroup APR_Util APR Utility Functions
* @{
*/
/**
* APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
* so that all public symbols are exported.
*
* APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
* to provide static linkage when the dynamic library may be unavailable.
*
* APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
* including the APR-UTIL public headers, to import and link the symbols from
* the dynamic APR-UTIL library and assure appropriate indirection and calling
* conventions at compile time.
*/
#if defined(DOXYGEN) || !defined(WIN32)
/**
* The public APR-UTIL functions are declared with APU_DECLARE(), so they may
* use the most appropriate calling convention. Public APR functions with
* variable arguments must use APU_DECLARE_NONSTD().
*
* @deffunc APU_DECLARE(rettype) apr_func(args);
*/
#define APU_DECLARE(type) type
/**
* The public APR-UTIL functions using variable arguments are declared with
* APU_DECLARE_NONSTD(), as they must use the C language calling convention.
*
* @deffunc APU_DECLARE_NONSTD(rettype) apr_func(args, ...);
*/
#define APU_DECLARE_NONSTD(type) type
/**
* The public APR-UTIL variables are declared with APU_DECLARE_DATA.
* This assures the appropriate indirection is invoked at compile time.
*
* @deffunc APU_DECLARE_DATA type apr_variable;
* @tip extern APU_DECLARE_DATA type apr_variable; syntax is required for
* declarations within headers to properly import the variable.
*/
#define APU_DECLARE_DATA
#elif defined(APU_DECLARE_STATIC)
#define APU_DECLARE(type) type __stdcall
#define APU_DECLARE_NONSTD(type) type __cdecl
#define APU_DECLARE_DATA
#elif defined(APU_DECLARE_EXPORT)
#define APU_DECLARE(type) __declspec(dllexport) type __stdcall
#define APU_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl
#define APU_DECLARE_DATA __declspec(dllexport)
#else
#define APU_DECLARE(type) __declspec(dllimport) type __stdcall
#define APU_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl
#define APU_DECLARE_DATA __declspec(dllimport)
#endif
/** @} */
/*
* we always have SDBM (it's in our codebase)
*/
#define APU_HAVE_SDBM 1
#define APU_HAVE_GDBM 0
/* Allow external override */
#if !defined(APU_HAVE_DB)
#define APU_HAVE_DB 0
#endif
#define APU_HAVE_APR_ICONV 1
#define APU_HAVE_ICONV 0
#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
#if !defined(APU_HAVE_PGSQL)
#define APU_HAVE_PGSQL 0
#endif
#if !defined(APU_HAVE_SQLITE2)
#define APU_HAVE_SQLITE2 0
#endif
#if !defined(APU_HAVE_SQLITE3)
#define APU_HAVE_SQLITE3 0
#endif
#endif /* APU_H */
#endif /* WIN32 */
+134
View File
@@ -0,0 +1,134 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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 APU_VERSION_H
#define APU_VERSION_H
/**
* @file apu_version.h
* @brief APR-util Versioning Interface
*
* APR-util's Version
*
* There are several different mechanisms for accessing the version. There
* is a string form, and a set of numbers; in addition, there are constants
* which can be compiled into your application, and you can query the library
* being used for its actual version.
*
* Note that it is possible for an application to detect that it has been
* compiled against a different version of APU by use of the compile-time
* constants and the use of the run-time query function.
*
* APU version numbering follows the guidelines specified in:
*
* http://apr.apache.org/versioning.html
*/
/* The numeric compile-time version constants. These constants are the
* authoritative version numbers for APU.
*/
/** major version
* Major API changes that could cause compatibility problems for older
* programs such as structure size changes. No binary compatibility is
* possible across a change in the major version.
*/
#define APU_MAJOR_VERSION 1
/** minor version
* Minor API changes that do not cause binary compatibility problems.
* Reset to 0 when upgrading APU_MAJOR_VERSION
*/
#define APU_MINOR_VERSION 2
/** patch level
* The Patch Level never includes API changes, simply bug fixes.
* Reset to 0 when upgrading APR_MINOR_VERSION
*/
#define APU_PATCH_VERSION 8
/**
* The symbol APU_IS_DEV_VERSION is only defined for internal,
* "development" copies of APU. It is undefined for released versions
* of APU.
*/
/* #define APU_IS_DEV_VERSION */
#if defined(APU_IS_DEV_VERSION) || defined(DOXYGEN)
/** Internal: string form of the "is dev" flag */
#define APU_IS_DEV_STRING "-dev"
#else
#define APU_IS_DEV_STRING ""
#endif
#ifndef APU_STRINGIFY
/** Properly quote a value as a string in the C preprocessor */
#define APU_STRINGIFY(n) APU_STRINGIFY_HELPER(n)
/** Helper macro for APU_STRINGIFY */
#define APU_STRINGIFY_HELPER(n) #n
#endif
/** The formatted string of APU's version */
#define APU_VERSION_STRING \
APU_STRINGIFY(APU_MAJOR_VERSION) "." \
APU_STRINGIFY(APU_MINOR_VERSION) "." \
APU_STRINGIFY(APU_PATCH_VERSION) \
APU_IS_DEV_STRING
/** An alternative formatted string of APR's version */
/* macro for Win32 .rc files using numeric csv representation */
#define APU_VERSION_STRING_CSV APU_MAJOR_VERSION ##, \
##APU_MINOR_VERSION ##, \
##APU_PATCH_VERSION
#ifndef APU_VERSION_ONLY
/* The C language API to access the version at run time,
* as opposed to compile time. APU_VERSION_ONLY may be defined
* externally when preprocessing apr_version.h to obtain strictly
* the C Preprocessor macro declarations.
*/
#include "apr_version.h"
#include "apu.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Return APR-util's version information information in a numeric form.
*
* @param pvsn Pointer to a version structure for returning the version
* information.
*/
APU_DECLARE(void) apu_version(apr_version_t *pvsn);
/** Return APU's version information as a string. */
APU_DECLARE(const char *) apu_version_string(void);
#ifdef __cplusplus
}
#endif
#endif /* ndef APU_VERSION_ONLY */
#endif /* ndef APU_VERSION_H */
+51
View File
@@ -0,0 +1,51 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
#include "apu.h" /* configuration data */
/**
* @file apu_want.h
* @brief APR Standard Headers Support
*
* <PRE>
* Features:
*
* APU_WANT_DB: <@apu_db_header@>
*
* Typical usage:
*
* #define APU_WANT_DB
* #include "apu_want.h"
*
* The appropriate headers will be included.
*
* Note: it is safe to use this in a header (it won't interfere with other
* headers' or source files' use of apu_want.h)
* </PRE>
*/
/* --------------------------------------------------------------------- */
#ifdef APU_WANT_DB
#if APU_HAVE_DB
#include <@apu_db_header@>
#endif
#undef APU_WANT_DB
#endif
/* --------------------------------------------------------------------- */
+52
View File
@@ -0,0 +1,52 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
#include "apu.h" /* configuration data */
/**
* @file apu_want.h
* @brief APR Standard Headers Support
*
* <PRE>
* Features:
*
* APU_WANT_DB: <@apu_db_header>
*
* Typical usage:
*
* #define APU_WANT_DB
* #include "apu_want.h"
*
* The appropriate headers will be included.
*
* Note: it is safe to use this in a header (it won't interfere with other
* headers' or source files' use of apu_want.h)
* </PRE>
*/
/* --------------------------------------------------------------------- */
#ifdef APU_WANT_DB
#if APU_HAVE_DB
/* win32 note.. you will need to change this for db1 */
#include <db.h>
#endif
#undef APU_WANT_DB
#endif
/* --------------------------------------------------------------------- */
+52
View File
@@ -0,0 +1,52 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
#include "apu.h" /* configuration data */
/**
* @file apu_want.h
* @brief APR Standard Headers Support
*
* <PRE>
* Features:
*
* APU_WANT_DB: <@apu_db_header>
*
* Typical usage:
*
* #define APU_WANT_DB
* #include "apu_want.h"
*
* The appropriate headers will be included.
*
* Note: it is safe to use this in a header (it won't interfere with other
* headers' or source files' use of apu_want.h)
* </PRE>
*/
/* --------------------------------------------------------------------- */
#ifdef APU_WANT_DB
#if APU_HAVE_DB
/* win32 note.. you will need to change this for db1 */
#include <db.h>
#endif
#undef APU_WANT_DB
#endif
/* --------------------------------------------------------------------- */
@@ -0,0 +1,257 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/* Overview of what this is and does:
* http://www.apache.org/~niq/dbd.html
*/
#ifndef APR_DBD_INTERNAL_H
#define APR_DBD_INTERNAL_H
#include <stdarg.h>
#include "apr_dbd.h"
#ifdef __cplusplus
extern "C" {
#endif
struct apr_dbd_driver_t {
/** name */
const char *name;
/** init: allow driver to perform once-only initialisation.
* Called once only. May be NULL
*/
void (*init)(apr_pool_t *pool);
/** native_handle: return the native database handle of the underlying db
*
* @param handle - apr_dbd handle
* @return - native handle
*/
void *(*native_handle)(apr_dbd_t *handle);
/** open: obtain a database connection from the server rec.
* Must be explicitly closed when you're finished with it.
* WARNING: only use this when you need a connection with
* a lifetime other than a request
*
* @param pool - a pool to use for error messages (if any).
* @param s - server rec managing the underlying connection/pool.
* @return database handle, or NULL on error.
*/
apr_dbd_t *(*open)(apr_pool_t *pool, const char *params);
/** check_conn: check status of a database connection
*
* @param pool - a pool to use for error messages (if any).
* @param handle - the connection to check
* @return APR_SUCCESS or error
*/
apr_status_t (*check_conn)(apr_pool_t *pool, apr_dbd_t *handle);
/** close: close/release a connection obtained from open()
*
* @param handle - the connection to release
* @return APR_SUCCESS or error
*/
apr_status_t (*close)(apr_dbd_t *handle);
/** set_dbname: select database name. May be a no-op if not supported.
*
* @param pool - working pool
* @param handle - the connection
* @param name - the database to select
* @return 0 for success or error code
*/
int (*set_dbname)(apr_pool_t* pool, apr_dbd_t *handle, const char *name);
/** transaction: start a transaction. May be a no-op.
*
* @param pool - a pool to use for error messages (if any).
* @param handle - the connection
* @param transaction - ptr to a transaction. May be null on entry
* @return 0 for success or error code
*/
int (*start_transaction)(apr_pool_t *pool, apr_dbd_t *handle,
apr_dbd_transaction_t **trans);
/** end_transaction: end a transaction
* (commit on success, rollback on error).
* May be a no-op.
*
* @param transaction - the transaction.
* @return 0 for success or error code
*/
int (*end_transaction)(apr_dbd_transaction_t *trans);
/** query: execute an SQL query that doesn't return a result set
*
* @param handle - the connection
* @param nrows - number of rows affected.
* @param statement - the SQL statement to execute
* @return 0 for success or error code
*/
int (*query)(apr_dbd_t *handle, int *nrows, const char *statement);
/** select: execute an SQL query that returns a result set
*
* @param pool - pool to allocate the result set
* @param handle - the connection
* @param res - pointer to result set pointer. May point to NULL on entry
* @param statement - the SQL statement to execute
* @param random - 1 to support random access to results (seek any row);
* 0 to support only looping through results in order
* (async access - faster)
* @return 0 for success or error code
*/
int (*select)(apr_pool_t *pool, apr_dbd_t *handle, apr_dbd_results_t **res,
const char *statement, int random);
/** num_cols: get the number of columns in a results set
*
* @param res - result set.
* @return number of columns
*/
int (*num_cols)(apr_dbd_results_t *res);
/** num_tuples: get the number of rows in a results set
* of a synchronous select
*
* @param res - result set.
* @return number of rows, or -1 if the results are asynchronous
*/
int (*num_tuples)(apr_dbd_results_t *res);
/** get_row: get a row from a result set
*
* @param pool - pool to allocate the row
* @param res - result set pointer
* @param row - pointer to row pointer. May point to NULL on entry
* @param rownum - row number, or -1 for "next row". Ignored if random
* access is not supported.
* @return 0 for success, -1 for rownum out of range or data finished
*/
int (*get_row)(apr_pool_t *pool, apr_dbd_results_t *res,
apr_dbd_row_t **row, int rownum);
/** get_entry: get an entry from a row
*
* @param row - row pointer
* @param col - entry number
* @param val - entry to fill
* @return 0 for success, -1 for no data, +1 for general error
*/
const char* (*get_entry)(const apr_dbd_row_t *row, int col);
/** error: get current error message (if any)
*
* @param handle - the connection
* @param errnum - error code from operation that returned an error
* @return the database current error message, or message for errnum
* (implementation-dependent whether errnum is ignored)
*/
const char *(*error)(apr_dbd_t *handle, int errnum);
/** escape: escape a string so it is safe for use in query/select
*
* @param pool - pool to alloc the result from
* @param string - the string to escape
* @param handle - the connection
* @return the escaped, safe string
*/
const char *(*escape)(apr_pool_t *pool, const char *string,
apr_dbd_t *handle);
/** prepare: prepare a statement
*
* @param pool - pool to alloc the result from
* @param handle - the connection
* @param query - the SQL query
* @param label - A label for the prepared statement.
* use NULL for temporary prepared statements
* (eg within a Request in httpd)
* @param statement - statement to prepare. May point to null on entry.
* @return 0 for success or error code
*/
int (*prepare)(apr_pool_t *pool, apr_dbd_t *handle, const char *query,
const char *label, apr_dbd_prepared_t **statement);
/** pvquery: query using a prepared statement + args
*
* @param pool - working pool
* @param handle - the connection
* @param nrows - number of rows affected.
* @param statement - the prepared statement to execute
* @param args - args to prepared statement
* @return 0 for success or error code
*/
int (*pvquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows,
apr_dbd_prepared_t *statement, va_list args);
/** pvselect: select using a prepared statement + args
*
* @param pool - working pool
* @param handle - the connection
* @param res - pointer to query results. May point to NULL on entry
* @param statement - the prepared statement to execute
* @param random - Whether to support random-access to results
* @param args - args to prepared statement
* @return 0 for success or error code
*/
int (*pvselect)(apr_pool_t *pool, apr_dbd_t *handle,
apr_dbd_results_t **res,
apr_dbd_prepared_t *statement, int random, va_list args);
/** pquery: query using a prepared statement + args
*
* @param pool - working pool
* @param handle - the connection
* @param nrows - number of rows affected.
* @param statement - the prepared statement to execute
* @param nargs - number of args to prepared statement
* @param args - args to prepared statement
* @return 0 for success or error code
*/
int (*pquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows,
apr_dbd_prepared_t *statement, int nargs,
const char **args);
/** pselect: select using a prepared statement + args
*
* @param pool - working pool
* @param handle - the connection
* @param res - pointer to query results. May point to NULL on entry
* @param statement - the prepared statement to execute
* @param random - Whether to support random-access to results
* @param nargs - number of args to prepared statement
* @param args - args to prepared statement
* @return 0 for success or error code
*/
int (*pselect)(apr_pool_t *pool, apr_dbd_t *handle,
apr_dbd_results_t **res, apr_dbd_prepared_t *statement,
int random, int nargs, const char **args);
};
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,125 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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_DBM_PRIVATE_H
#define APR_DBM_PRIVATE_H
#include "apr.h"
#include "apr_errno.h"
#include "apr_pools.h"
#include "apr_dbm.h"
#include "apr_file_io.h"
#include "apu.h"
/* ### for now, include the DBM selection; this will go away once we start
### building and linking all of the DBMs at once. */
#include "apu_select_dbm.h"
#ifdef __cplusplus
extern "C" {
#endif
/** @internal */
/**
* Most DBM libraries take a POSIX mode for creating files. Don't trust
* the mode_t type, some platforms may not support it, int is safe.
*/
APU_DECLARE(int) apr_posix_perms2mode(apr_fileperms_t perm);
/**
* Structure to describe the operations of the DBM
*/
typedef struct {
/** The name of the DBM Type */
const char *name;
/** Open the DBM */
apr_status_t (*open)(apr_dbm_t **pdb, const char *pathname,
apr_int32_t mode, apr_fileperms_t perm,
apr_pool_t *pool);
/** Close the DBM */
void (*close)(apr_dbm_t *dbm);
/** Fetch a dbm record value by key */
apr_status_t (*fetch)(apr_dbm_t *dbm, apr_datum_t key,
apr_datum_t * pvalue);
/** Store a dbm record value by key */
apr_status_t (*store)(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t value);
/** Delete a dbm record value by key */
apr_status_t (*del)(apr_dbm_t *dbm, apr_datum_t key);
/** Search for a key within the dbm */
int (*exists)(apr_dbm_t *dbm, apr_datum_t key);
/** Retrieve the first record key from a dbm */
apr_status_t (*firstkey)(apr_dbm_t *dbm, apr_datum_t * pkey);
/** Retrieve the next record key from a dbm */
apr_status_t (*nextkey)(apr_dbm_t *dbm, apr_datum_t * pkey);
/** Proactively toss any memory associated with the apr_datum_t. */
void (*freedatum)(apr_dbm_t *dbm, apr_datum_t data);
/** Get the names that the DBM will use for a given pathname. */
void (*getusednames)(apr_pool_t *pool,
const char *pathname,
const char **used1,
const char **used2);
} apr_dbm_type_t;
/**
* The actual DBM
*/
struct apr_dbm_t
{
/** Associated pool */
apr_pool_t *pool;
/** pointer to DB Implementation Specific data */
void *file;
/** Current integer error code */
int errcode;
/** Current string error code */
const char *errmsg;
/** the type of DBM */
const apr_dbm_type_t *type;
};
/* Declare all of the builtin DBM providers */
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_sdbm;
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_gdbm;
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_ndbm;
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db1;
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db2;
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db3;
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db4;
APU_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db;
#ifdef __cplusplus
}
#endif
#endif /* APR_DBM_PRIVATE_H */
@@ -0,0 +1,109 @@
/* include/private/apu_config.h.in. Generated from configure.in by autoheader. */
/* define if Expat 1.0 or 1.1 was found */
#undef APR_HAVE_OLD_EXPAT
/* Define if the system crypt() function is threadsafe */
#undef APU_CRYPT_THREADSAFE
/* Define if the inbuf parm to iconv() is const char ** */
#undef APU_ICONV_INBUF_CONST
/* Define if crypt_r has uses CRYPTD */
#undef CRYPT_R_CRYPTD
/* Define if crypt_r uses struct crypt_data */
#undef CRYPT_R_STRUCT_CRYPT_DATA
/* Define if CODESET is defined in langinfo.h */
#undef HAVE_CODESET
/* Define to 1 if you have the `crypt_r' function. */
#undef HAVE_CRYPT_R
/* Define to 1 if you have the file `AC_File'. */
#undef HAVE_DBD_APR_DBD_MYSQL_C
/* Define to 1 if you have the <iconv.h> header file. */
#undef HAVE_ICONV_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the <langinfo.h> header file. */
#undef HAVE_LANGINFO_H
/* Define to 1 if you have the <lber.h> header file. */
#undef HAVE_LBER_H
/* Defined if ldap.h is present */
#undef HAVE_LDAP_H
/* Define to 1 if you have the <ldap_ssl.h> header file. */
#undef HAVE_LDAP_SSL_H
/* Define to 1 if you have the `lber' library (-llber). */
#undef HAVE_LIBLBER
/* Define to 1 if you have the <libpq-fe.h> header file. */
#undef HAVE_LIBPQ_FE_H
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the <mysql.h> header file. */
#undef HAVE_MYSQL_H
/* Define to 1 if you have the <mysql/mysql.h> header file. */
#undef HAVE_MYSQL_MYSQL_H
/* Define to 1 if you have the `nl_langinfo' function. */
#undef HAVE_NL_LANGINFO
/* Define to 1 if you have the <postgresql/libpq-fe.h> header file. */
#undef HAVE_POSTGRESQL_LIBPQ_FE_H
/* Define to 1 if you have the <sqlite3.h> header file. */
#undef HAVE_SQLITE3_H
/* Define to 1 if you have the <sqlite.h> header file. */
#undef HAVE_SQLITE_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -0,0 +1,39 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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.
*/
/*
* Note: This is a Windows specific version of apu_config.hw. It is copied
* as apu_config.h at the start of a Windows build.
*/
#ifdef WIN32
#ifndef APU_CONFIG_H
#define APU_CONFIG_H
/*
* Windows does not have GDBM, and we always use the bundled (new) Expat
*/
/* Define if you have the gdbm library (-lgdbm). */
/* #undef HAVE_LIBGDBM */
/* define if Expat 1.0 or 1.1 was found */
/* #undef APR_HAVE_OLD_EXPAT */
#endif /* APU_CONFIG_H */
#endif /* WIN32 */
@@ -0,0 +1,28 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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 APU_SELECT_DBM_H
#define APU_SELECT_DBM_H
/*
** The following macros control what features APRUTIL will use
*/
#define APU_USE_SDBM @apu_use_sdbm@
#define APU_USE_NDBM @apu_use_ndbm@
#define APU_USE_GDBM @apu_use_gdbm@
#define APU_USE_DB @apu_use_db@
#endif /* !APU_SELECT_DBM_H */
@@ -0,0 +1,32 @@
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
* applicable.
*
* Licensed 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 APU_SELECT_DBM_H
#define APU_SELECT_DBM_H
/*
** The following macros control what features APRUTIL will use
*/
#define APU_USE_SDBM 1
#define APU_USE_GDBM 0
#define APU_USE_NDBM 0
#define APU_USE_DB 0
#if APU_USE_DB
#include <db.h>
#endif
#endif /* !APU_SELECT_DBM_H */