summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/apr_buckets.h27
-rw-r--r--include/apr_crypto.h116
-rw-r--r--include/apr_dbd.h3
-rw-r--r--include/apr_ldap.hwc197
-rw-r--r--include/apr_redis.h459
-rw-r--r--include/apr_siphash.h148
-rw-r--r--include/apr_xml.h2
-rw-r--r--include/apu.h.in2
-rw-r--r--include/apu.hnw2
-rw-r--r--include/apu.hw2
-rw-r--r--include/apu.hwc145
-rw-r--r--include/apu_version.h8
-rw-r--r--include/private/apr_crypto_internal.h23
-rw-r--r--include/private/apu_config.h.in17
14 files changed, 1120 insertions, 31 deletions
diff --git a/include/apr_buckets.h b/include/apr_buckets.h
index 025292b98658d..ce64b78da1162 100644
--- a/include/apr_buckets.h
+++ b/include/apr_buckets.h
@@ -622,6 +622,8 @@ struct apr_bucket_file {
* a caller tries to read from it */
int can_mmap;
#endif /* APR_HAS_MMAP */
+ /** File read block size */
+ apr_size_t read_size;
};
/** @see apr_bucket_structs */
@@ -962,6 +964,18 @@ APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create_ex(apr_allocato
APU_DECLARE_NONSTD(void) apr_bucket_alloc_destroy(apr_bucket_alloc_t *list);
/**
+ * Get the aligned size corresponding to the requested size, but minus the
+ * allocator(s) overhead such that the allocation would remain in the
+ * same boundary.
+ * @param list The allocator from which to the memory would be allocated.
+ * @param size The requested size.
+ * @return The corresponding aligned/floored size.
+ */
+APU_DECLARE_NONSTD(apr_size_t) apr_bucket_alloc_aligned_floor(apr_bucket_alloc_t *list,
+ apr_size_t size)
+ __attribute__((nonnull(1)));
+
+/**
* Allocate memory for use by the buckets.
* @param size The amount to allocate.
* @param list The allocator from which to allocate the memory.
@@ -1563,6 +1577,19 @@ APU_DECLARE(apr_bucket *) apr_bucket_file_make(apr_bucket *b, apr_file_t *fd,
APU_DECLARE(apr_status_t) apr_bucket_file_enable_mmap(apr_bucket *b,
int enabled);
+/**
+ * Set the size of the read buffer allocated by a FILE bucket (default
+ * is @a APR_BUCKET_BUFF_SIZE)
+ * memory-mapping is disabled only)
+ * @param b The bucket
+ * @param size Size of the allocated buffers
+ * @return APR_SUCCESS normally, or an error code if the operation fails
+ * @remark Relevant/used only when memory-mapping is disabled (@see
+ * apr_bucket_file_enable_mmap)
+ */
+APU_DECLARE(apr_status_t) apr_bucket_file_set_buf_size(apr_bucket *e,
+ apr_size_t size);
+
/** @} */
#ifdef __cplusplus
}
diff --git a/include/apr_crypto.h b/include/apr_crypto.h
index ed0982dbdd913..b90f3fec5ec7c 100644
--- a/include/apr_crypto.h
+++ b/include/apr_crypto.h
@@ -40,6 +40,9 @@ extern "C" {
#if APU_HAVE_CRYPTO
#ifndef APU_CRYPTO_RECOMMENDED_DRIVER
+#if APU_HAVE_COMMONCRYPTO
+#define APU_CRYPTO_RECOMMENDED_DRIVER "commoncrypto"
+#else
#if APU_HAVE_OPENSSL
#define APU_CRYPTO_RECOMMENDED_DRIVER "openssl"
#else
@@ -57,6 +60,7 @@ extern "C" {
#endif
#endif
#endif
+#endif
/**
* Symmetric Key types understood by the library.
@@ -84,16 +88,16 @@ extern "C" {
* the chosen cipher. Padded data is data that is not aligned by block
* size and must be padded by the crypto library.
*
- * OpenSSL NSS Interop
- * Align Pad Align Pad Align Pad
- * 3DES_192/CBC X X X X X X
- * 3DES_192/ECB X X
- * AES_256/CBC X X X X X X
- * AES_256/ECB X X X X
- * AES_192/CBC X X X X
- * AES_192/ECB X X X
- * AES_128/CBC X X X X
- * AES_128/ECB X X X
+ * OpenSSL CommonCrypto NSS Interop
+ * Align Pad Align Pad Align Pad Align Pad
+ * 3DES_192/CBC X X X X X X X X
+ * 3DES_192/ECB X X X X
+ * AES_256/CBC X X X X X X X X
+ * AES_256/ECB X X X X X X
+ * AES_192/CBC X X X X X X
+ * AES_192/ECB X X X X X
+ * AES_128/CBC X X X X X X
+ * AES_128/ECB X X X X X
*
* Conclusion: for padded data, use 3DES_192/CBC or AES_256/CBC. For
* aligned data, use 3DES_192/CBC, AES_256/CBC or AES_256/ECB.
@@ -123,6 +127,48 @@ typedef struct apr_crypto_config_t apr_crypto_config_t;
typedef struct apr_crypto_key_t apr_crypto_key_t;
typedef struct apr_crypto_block_t apr_crypto_block_t;
+typedef struct apr_crypto_block_key_type_t {
+ apr_crypto_block_key_type_e type;
+ int keysize;
+ int blocksize;
+ int ivsize;
+} apr_crypto_block_key_type_t;
+
+typedef struct apr_crypto_block_key_mode_t {
+ apr_crypto_block_key_mode_e mode;
+} apr_crypto_block_key_mode_t;
+
+typedef struct apr_crypto_passphrase_t {
+ const char *pass;
+ apr_size_t passLen;
+ const unsigned char * salt;
+ apr_size_t saltLen;
+ int iterations;
+} apr_crypto_passphrase_t;
+
+typedef struct apr_crypto_secret_t {
+ const unsigned char *secret;
+ apr_size_t secretLen;
+} apr_crypto_secret_t;
+
+typedef enum {
+ /** Key is derived from a passphrase */
+ APR_CRYPTO_KTYPE_PASSPHRASE = 1,
+ /** Key is derived from a raw key */
+ APR_CRYPTO_KTYPE_SECRET = 2,
+} apr_crypto_key_type;
+
+typedef struct apr_crypto_key_rec_t {
+ apr_crypto_key_type ktype;
+ apr_crypto_block_key_type_e type;
+ apr_crypto_block_key_mode_e mode;
+ int pad;
+ union {
+ apr_crypto_passphrase_t passphrase;
+ apr_crypto_secret_t secret;
+ } k;
+} apr_crypto_key_rec_t;
+
/**
* @brief Perform once-only initialisation. Call once only.
*
@@ -132,8 +178,7 @@ typedef struct apr_crypto_block_t apr_crypto_block_t;
APU_DECLARE(apr_status_t) apr_crypto_init(apr_pool_t *pool);
/**
- * @brief Register a cleanup to zero out the buffer provided
- * when the pool is cleaned up.
+ * @brief Zero out the buffer provided when the pool is cleaned up.
*
* @param pool - pool to register the cleanup
* @param buffer - buffer to zero out
@@ -143,6 +188,27 @@ APU_DECLARE(apr_status_t) apr_crypto_clear(apr_pool_t *pool, void *buffer,
apr_size_t size);
/**
+ * @brief Always zero out the buffer provided, without being optimized out by
+ * the compiler.
+ *
+ * @param buffer - buffer to zero out
+ * @param size - size of the buffer to zero out
+ */
+APU_DECLARE(apr_status_t) apr_crypto_memzero(void *buffer, apr_size_t size);
+
+/**
+ * @brief Timing attacks safe buffers comparison, where the executing time does
+ * not depend on the bytes compared but solely on the number of bytes.
+ *
+ * @param buf1 - first buffer to compare
+ * @param buf2 - second buffer to compare
+ * @param size - size of the buffers to compare
+ * @return 1 if the buffers are equals, 0 otherwise.
+ */
+APU_DECLARE(int) apr_crypto_equals(const void *buf1, const void *buf2,
+ apr_size_t size);
+
+/**
* @brief Get the driver struct for a name
*
* @param driver - pointer to driver struct.
@@ -205,7 +271,8 @@ APU_DECLARE(apr_status_t) apr_crypto_make(apr_crypto_t **f,
/**
* @brief Get a hash table of key types, keyed by the name of the type against
- * an integer pointer constant.
+ * a pointer to apr_crypto_block_key_type_t, which in turn begins with an
+ * integer.
*
* @param types - hashtable of key types keyed to constants.
* @param f - encryption context
@@ -216,7 +283,8 @@ APU_DECLARE(apr_status_t) apr_crypto_get_block_key_types(apr_hash_t **types,
/**
* @brief Get a hash table of key modes, keyed by the name of the mode against
- * an integer pointer constant.
+ * a pointer to apr_crypto_block_key_mode_t, which in turn begins with an
+ * integer.
*
* @param modes - hashtable of key modes keyed to constants.
* @param f - encryption context
@@ -226,6 +294,25 @@ APU_DECLARE(apr_status_t) apr_crypto_get_block_key_modes(apr_hash_t **modes,
const apr_crypto_t *f);
/**
+ * @brief Create a key from the provided secret or passphrase. The key is cleaned
+ * up when the context is cleaned, and may be reused with multiple encryption
+ * or decryption operations.
+ * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If
+ * *key is not NULL, *key must point at a previously created structure.
+ * @param key The key returned, see note.
+ * @param rec The key record, from which the key will be derived.
+ * @param f The context to use.
+ * @param p The pool to use.
+ * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend
+ * error occurred while generating the key. APR_ENOCIPHER if the type or mode
+ * is not supported by the particular backend. APR_EKEYTYPE if the key type is
+ * not known. APR_EPADDING if padding was requested but is not supported.
+ * APR_ENOTIMPL if not implemented.
+ */
+APU_DECLARE(apr_status_t) apr_crypto_key(apr_crypto_key_t **key,
+ const apr_crypto_key_rec_t *rec, const apr_crypto_t *f, apr_pool_t *p);
+
+/**
* @brief Create a key from the given passphrase. By default, the PBKDF2
* algorithm is used to generate the key from the passphrase. It is expected
* that the same pass phrase will generate the same key, regardless of the
@@ -252,6 +339,7 @@ APU_DECLARE(apr_status_t) apr_crypto_get_block_key_modes(apr_hash_t **modes,
* is not supported by the particular backend. APR_EKEYTYPE if the key type is
* not known. APR_EPADDING if padding was requested but is not supported.
* APR_ENOTIMPL if not implemented.
+ * @deprecated Replaced by apr_crypto_key().
*/
APU_DECLARE(apr_status_t) apr_crypto_passphrase(apr_crypto_key_t **key,
apr_size_t *ivSize, const char *pass, apr_size_t passLen,
diff --git a/include/apr_dbd.h b/include/apr_dbd.h
index 3a334b73e2b32..9912612b9aff5 100644
--- a/include/apr_dbd.h
+++ b/include/apr_dbd.h
@@ -136,9 +136,6 @@ APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name,
* "group" determines which group from configuration file to use (see
* MYSQL_READ_DEFAULT_GROUP option of mysql_options() in MySQL manual).
* Reconnect is set to 1 by default (i.e. true).
- * @remarks FreeTDS: the params can have "username", "password", "appname",
- * "dbname", "host", "charset", "lang" and "server" keys, each followed by an
- * equal sign and a value.
*/
APU_DECLARE(apr_status_t) apr_dbd_open_ex(const apr_dbd_driver_t *driver,
apr_pool_t *pool, const char *params,
diff --git a/include/apr_ldap.hwc b/include/apr_ldap.hwc
new file mode 100644
index 0000000000000..7922515edaa8d
--- /dev/null
+++ b/include/apr_ldap.hwc
@@ -0,0 +1,197 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * 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 @apr_has_ldap_10@
+
+/* 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_TIVOLI_LDAPSDK 0
+#define APR_HAS_ZOS_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.
+ */
+#if APR_HAS_TIVOLI_LDAPSDK
+#define APR_HAS_LDAP_SSL 0
+#else
+#define APR_HAS_LDAP_SSL 1
+#endif
+#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.
+ */
+
+#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
+
+
+/*
+ * For ldap function calls that input a size limit on the number of returned elements
+ * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0)
+ * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK
+ * or process is configured for.
+ */
+#ifdef LDAP_DEFAULT_LIMIT
+#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT
+#else
+#ifdef LDAP_NO_LIMIT
+#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
+#endif
+#endif
+
+#ifndef APR_LDAP_SIZELIMIT
+#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */
+#endif
+
+/*
+ * z/OS is missing some defines
+ */
+#ifndef LDAP_VERSION_MAX
+#define LDAP_VERSION_MAX LDAP_VERSION
+#endif
+#if APR_HAS_ZOS_LDAPSDK
+#define LDAP_VENDOR_NAME "IBM z/OS"
+#endif
+
+/* 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
+
+/* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection
+ * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone
+ * manually chooses another SDK on Windows
+ */
+#if APR_HAS_MICROSOFT_LDAPSDK
+#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN \
+ || (s) == LDAP_UNAVAILABLE)
+#else
+#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN)
+#endif
+
+/* These symbols are not actually exported in a DSO build, but mapped into
+ * a private exported function array for apr_ldap_stub to bind dynamically.
+ * Rename them appropriately to protect the global namespace.
+ */
+#ifdef APU_DSO_LDAP_BUILD
+
+#define apr_ldap_info apr__ldap_info
+#define apr_ldap_init apr__ldap_init
+#define apr_ldap_ssl_init apr__ldap_ssl_init
+#define apr_ldap_ssl_deinit apr__ldap_ssl_deinit
+#define apr_ldap_get_option apr__ldap_get_option
+#define apr_ldap_set_option apr__ldap_set_option
+#define apr_ldap_rebind_init apr__ldap_rebind_init
+#define apr_ldap_rebind_add apr__ldap_rebind_add
+#define apr_ldap_rebind_remove apr__ldap_rebind_remove
+
+#define APU_DECLARE_LDAP(type) type
+#else
+#define APU_DECLARE_LDAP(type) APU_DECLARE(type)
+#endif
+
+#include "apr_ldap_url.h"
+#include "apr_ldap_init.h"
+#include "apr_ldap_option.h"
+#include "apr_ldap_rebind.h"
+
+/** @} */
+#endif /* APR_HAS_LDAP */
+#endif /* APU_LDAP_H */
diff --git a/include/apr_redis.h b/include/apr_redis.h
new file mode 100644
index 0000000000000..66a828b0a9011
--- /dev/null
+++ b/include/apr_redis.h
@@ -0,0 +1,459 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file apr_redis.h
+ * @brief Client interface for redis
+ * @remark To use this interface you must have a separate redis
+ * for more information.
+ */
+
+#ifndef APR_REDIS_H
+#define APR_REDIS_H
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_time.h"
+#include "apr_strings.h"
+#include "apr_network_io.h"
+#include "apr_ring.h"
+#include "apr_buckets.h"
+#include "apr_reslist.h"
+#include "apr_hash.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifndef RC_DEFAULT_SERVER_PORT
+#define RC_DEFAULT_SERVER_PORT 6379
+#endif
+
+#ifndef RC_DEFAULT_SERVER_MIN
+#define RC_DEFAULT_SERVER_MIN 0
+#endif
+
+#ifndef RC_DEFAULT_SERVER_SMAX
+#define RC_DEFAULT_SERVER_SMAX 1
+#endif
+
+#ifndef RC_DEFAULT_SERVER_TTL
+#define RC_DEFAULT_SERVER_TTL 600
+#endif
+
+/**
+ * @defgroup APR_Util_RC Redis Client Routines
+ * @ingroup APR_Util
+ * @{
+ */
+
+/** Specifies the status of a redis server */
+typedef enum
+{
+ APR_RC_SERVER_LIVE, /**< Server is alive and responding to requests */
+ APR_RC_SERVER_DEAD /**< Server is not responding to requests */
+} apr_redis_server_status_t;
+
+/** Opaque redis client connection object */
+typedef struct apr_redis_conn_t apr_redis_conn_t;
+
+/** Redis Server Info Object */
+typedef struct apr_redis_server_t apr_redis_server_t;
+struct apr_redis_server_t
+{
+ const char *host; /**< Hostname of this Server */
+ apr_port_t port; /**< Port of this Server */
+ apr_redis_server_status_t status; /**< @see apr_redis_server_status_t */
+#if APR_HAS_THREADS || defined(DOXYGEN)
+ apr_reslist_t *conns; /**< Resource list of actual client connections */
+#else
+ apr_redis_conn_t *conn;
+#endif
+ apr_pool_t *p; /** Pool to use for private allocations */
+#if APR_HAS_THREADS
+ apr_thread_mutex_t *lock;
+#endif
+ apr_time_t btime;
+ apr_uint32_t rwto;
+ struct
+ {
+ int major;
+ int minor;
+ int patch;
+ char *number;
+ } version;
+};
+
+typedef struct apr_redis_t apr_redis_t;
+
+/* Custom hash callback function prototype, user for server selection.
+* @param baton user selected baton
+* @param data data to hash
+* @param data_len length of data
+*/
+typedef apr_uint32_t (*apr_redis_hash_func)(void *baton,
+ const char *data,
+ const apr_size_t data_len);
+/* Custom Server Select callback function prototype.
+* @param baton user selected baton
+* @param rc redis instance, use rc->live_servers to select a node
+* @param hash hash of the selected key.
+*/
+typedef apr_redis_server_t* (*apr_redis_server_func)(void *baton,
+ apr_redis_t *rc,
+ const apr_uint32_t hash);
+
+/** Container for a set of redis servers */
+struct apr_redis_t
+{
+ apr_uint32_t flags; /**< Flags, Not currently used */
+ apr_uint16_t nalloc; /**< Number of Servers Allocated */
+ apr_uint16_t ntotal; /**< Number of Servers Added */
+ apr_redis_server_t **live_servers; /**< Array of Servers */
+ apr_pool_t *p; /** Pool to use for allocations */
+ void *hash_baton;
+ apr_redis_hash_func hash_func;
+ void *server_baton;
+ apr_redis_server_func server_func;
+};
+
+/**
+ * Creates a crc32 hash used to split keys between servers
+ * @param rc The redis client object to use
+ * @param data Data to be hashed
+ * @param data_len Length of the data to use
+ * @return crc32 hash of data
+ * @remark The crc32 hash is not compatible with old redisd clients.
+ */
+APU_DECLARE(apr_uint32_t) apr_redis_hash(apr_redis_t *rc,
+ const char *data,
+ const apr_size_t data_len);
+
+/**
+ * Pure CRC32 Hash. Used by some clients.
+ */
+APU_DECLARE(apr_uint32_t) apr_redis_hash_crc32(void *baton,
+ const char *data,
+ const apr_size_t data_len);
+
+/**
+ * hash compatible with the standard Perl Client.
+ */
+APU_DECLARE(apr_uint32_t) apr_redis_hash_default(void *baton,
+ const char *data,
+ const apr_size_t data_len);
+
+/**
+ * Picks a server based on a hash
+ * @param rc The redis client object to use
+ * @param hash Hashed value of a Key
+ * @return server that controls specified hash
+ * @see apr_redis_hash
+ */
+APU_DECLARE(apr_redis_server_t *) apr_redis_find_server_hash(apr_redis_t *rc,
+ const apr_uint32_t hash);
+
+/**
+ * server selection compatible with the standard Perl Client.
+ */
+APU_DECLARE(apr_redis_server_t *) apr_redis_find_server_hash_default(void *baton,
+ apr_redis_t *rc,
+ const apr_uint32_t hash);
+
+/**
+ * Adds a server to a client object
+ * @param rc The redis client object to use
+ * @param server Server to add
+ * @remark Adding servers is not thread safe, and should be done once at startup.
+ * @warning Changing servers after startup may cause keys to go to
+ * different servers.
+ */
+APU_DECLARE(apr_status_t) apr_redis_add_server(apr_redis_t *rc,
+ apr_redis_server_t *server);
+
+
+/**
+ * Finds a Server object based on a hostname/port pair
+ * @param rc The redis client object to use
+ * @param host Hostname of the server
+ * @param port Port of the server
+ * @return Server with matching Hostname and Port, or NULL if none was found.
+ */
+APU_DECLARE(apr_redis_server_t *) apr_redis_find_server(apr_redis_t *rc,
+ const char *host,
+ apr_port_t port);
+
+/**
+ * Enables a Server for use again
+ * @param rc The redis client object to use
+ * @param rs Server to Activate
+ */
+APU_DECLARE(apr_status_t) apr_redis_enable_server(apr_redis_t *rc,
+ apr_redis_server_t *rs);
+
+
+/**
+ * Disable a Server
+ * @param rc The redis client object to use
+ * @param rs Server to Disable
+ */
+APU_DECLARE(apr_status_t) apr_redis_disable_server(apr_redis_t *rc,
+ apr_redis_server_t *rs);
+
+/**
+ * Creates a new Server Object
+ * @param p Pool to use
+ * @param host hostname of the server
+ * @param port port of the server
+ * @param min minimum number of client sockets to open
+ * @param smax soft maximum number of client connections to open
+ * @param max hard maximum number of client connections
+ * @param ttl time to live in microseconds of a client connection
+ * @param rwto r/w timeout value in seconds of a client connection
+ * @param ns location of the new server object
+ * @see apr_reslist_create
+ * @remark min, smax, and max are only used when APR_HAS_THREADS
+ */
+APU_DECLARE(apr_status_t) apr_redis_server_create(apr_pool_t *p,
+ const char *host,
+ apr_port_t port,
+ apr_uint32_t min,
+ apr_uint32_t smax,
+ apr_uint32_t max,
+ apr_uint32_t ttl,
+ apr_uint32_t rwto,
+ apr_redis_server_t **ns);
+/**
+ * Creates a new redisd client object
+ * @param p Pool to use
+ * @param max_servers maximum number of servers
+ * @param flags Not currently used
+ * @param rc location of the new redis client object
+ */
+APU_DECLARE(apr_status_t) apr_redis_create(apr_pool_t *p,
+ apr_uint16_t max_servers,
+ apr_uint32_t flags,
+ apr_redis_t **rc);
+
+/**
+ * Gets a value from the server, allocating the value out of p
+ * @param rc client to use
+ * @param p Pool to use
+ * @param key null terminated string containing the key
+ * @param baton location of the allocated value
+ * @param len length of data at baton
+ * @param flags any flags set by the client for this key
+ * @return
+ */
+APU_DECLARE(apr_status_t) apr_redis_getp(apr_redis_t *rc,
+ apr_pool_t *p,
+ const char* key,
+ char **baton,
+ apr_size_t *len,
+ apr_uint16_t *flags);
+
+/**
+ * Sets a value by key on the server
+ * @param rc client to use
+ * @param key null terminated string containing the key
+ * @param baton data to store on the server
+ * @param data_size length of data at baton
+ * @param flags any flags set by the client for this key
+ */
+APU_DECLARE(apr_status_t) apr_redis_set(apr_redis_t *rc,
+ const char *key,
+ char *baton,
+ const apr_size_t data_size,
+ apr_uint16_t flags);
+
+/**
+ * Sets a value by key on the server
+ * @param rc client to use
+ * @param key null terminated string containing the key
+ * @param baton data to store on the server
+ * @param data_size length of data at baton
+ * @param timeout time in seconds for the data to live on the server
+ * @param flags any flags set by the client for this key
+ */
+APU_DECLARE(apr_status_t) apr_redis_setex(apr_redis_t *rc,
+ const char *key,
+ char *baton,
+ const apr_size_t data_size,
+ apr_uint32_t timeout,
+ apr_uint16_t flags);
+
+/**
+ * Deletes a key from a server
+ * @param rc client to use
+ * @param key null terminated string containing the key
+ * @param timeout time for the delete to stop other clients from adding
+ */
+APU_DECLARE(apr_status_t) apr_redis_delete(apr_redis_t *rc,
+ const char *key,
+ apr_uint32_t timeout);
+
+/**
+ * Query a server's version
+ * @param rs server to query
+ * @param p Pool to allocate answer from
+ * @param baton location to store server version string
+ */
+APU_DECLARE(apr_status_t) apr_redis_version(apr_redis_server_t *rs,
+ apr_pool_t *p,
+ char **baton);
+
+/**
+ * Query a server's INFO
+ * @param rs server to query
+ * @param p Pool to allocate answer from
+ * @param baton location to store server INFO response string
+ */
+APU_DECLARE(apr_status_t) apr_redis_info(apr_redis_server_t *rs,
+ apr_pool_t *p,
+ char **baton);
+
+/**
+ * Increments a value
+ * @param rc client to use
+ * @param key null terminated string containing the key
+ * @param inc number to increment by
+ * @param new_value new value after incrementing
+ */
+APU_DECLARE(apr_status_t) apr_redis_incr(apr_redis_t *rc,
+ const char *key,
+ apr_int32_t inc,
+ apr_uint32_t *new_value);
+/**
+ * Decrements a value
+ * @param rc client to use
+ * @param key null terminated string containing the key
+ * @param inc number to decrement by
+ * @param new_value new value after decrementing
+ */
+APU_DECLARE(apr_status_t) apr_redis_decr(apr_redis_t *rc,
+ const char *key,
+ apr_int32_t inc,
+ apr_uint32_t *new_value);
+
+
+/**
+ * Pings the server
+ * @param rs Server to ping
+ */
+APU_DECLARE(apr_status_t) apr_redis_ping(apr_redis_server_t *rs);
+
+/**
+ * Gets multiple values from the server, allocating the values out of p
+ * @param rc client to use
+ * @param temp_pool Pool used for temporary allocations. May be cleared inside this
+ * call.
+ * @param data_pool Pool used to allocate data for the returned values.
+ * @param values hash of apr_redis_value_t keyed by strings, contains the
+ * result of the multiget call.
+ * @return
+ */
+APU_DECLARE(apr_status_t) apr_redis_multgetp(apr_redis_t *rc,
+ apr_pool_t *temp_pool,
+ apr_pool_t *data_pool,
+ apr_hash_t *values);
+
+typedef enum
+{
+ APR_RS_SERVER_MASTER, /**< Server is a master */
+ APR_RS_SERVER_SLAVE, /**< Server is a slave */
+ APR_RS_SERVER_UNKNOWN /**< Server role is unknown */
+} apr_redis_server_role_t;
+
+typedef struct
+{
+/* # Server */
+ /** Major version number of this server */
+ apr_uint32_t major;
+ /** Minor version number of this server */
+ apr_uint32_t minor;
+ /** Patch version number of this server */
+ apr_uint32_t patch;
+ /** Process id of this server process */
+ apr_uint32_t process_id;
+ /** Number of seconds this server has been running */
+ apr_uint32_t uptime_in_seconds;
+ /** Bitsize of the arch on the current machine */
+ apr_uint32_t arch_bits;
+
+/* # Clients */
+ /** Number of connected clients */
+ apr_uint32_t connected_clients;
+ /** Number of blocked clients */
+ apr_uint32_t blocked_clients;
+
+/* # Memory */
+ /** Max memory of this server */
+ apr_uint64_t maxmemory;
+ /** Amount of used memory */
+ apr_uint64_t used_memory;
+ /** Total memory available on this server */
+ apr_uint64_t total_system_memory;
+
+/* # Stats */
+ /** Total connections received */
+ apr_uint64_t total_connections_received;
+ /** Total commands processed */
+ apr_uint64_t total_commands_processed;
+ /** Total commands rejected */
+ apr_uint64_t rejected_connections;
+ /** Total net input bytes */
+ apr_uint64_t total_net_input_bytes;
+ /** Total net output bytes */
+ apr_uint64_t total_net_output_bytes;
+ /** Keyspace hits */
+ apr_uint64_t keyspace_hits;
+ /** Keyspace misses */
+ apr_uint64_t keyspace_misses;
+
+/* # Replication */
+ /** Role */
+ apr_redis_server_role_t role;
+ /** Number of connected slave */
+ apr_uint32_t connected_slaves;
+
+/* # CPU */
+ /** Accumulated CPU user time for this process */
+ apr_uint32_t used_cpu_sys;
+ /** Accumulated CPU system time for this process */
+ apr_uint32_t used_cpu_user;
+
+/* # Cluster */
+ /** Is cluster enabled */
+ apr_uint32_t cluster_enabled;
+} apr_redis_stats_t;
+
+/**
+ * Query a server for statistics
+ * @param rs server to query
+ * @param p Pool to allocate answer from
+ * @param stats location of the new statistics structure
+ */
+APU_DECLARE(apr_status_t) apr_redis_stats(apr_redis_server_t *rs,
+ apr_pool_t *p,
+ apr_redis_stats_t **stats);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_REDIS_H */
diff --git a/include/apr_siphash.h b/include/apr_siphash.h
new file mode 100644
index 0000000000000..42aa8874b0be5
--- /dev/null
+++ b/include/apr_siphash.h
@@ -0,0 +1,148 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ SipHash reference C implementation
+ Copyright (c) 2012-2014 Jean-Philippe Aumasson
+ <jeanphilippe.aumasson@gmail.com>
+ Copyright (c) 2012-2014 Daniel J. Bernstein <djb@cr.yp.to>
+ To the extent possible under law, the author(s) have dedicated all copyright
+ and related and neighboring rights to this software to the public domain
+ worldwide. This software is distributed without any warranty.
+ You should have received a copy of the CC0 Public Domain Dedication along
+ with this software. If not, see
+ <http://creativecommons.org/publicdomain/zero/1.0/>.
+ */
+
+#ifndef APR_SIPHASH_H
+#define APR_SIPHASH_H
+
+#include "apr.h"
+#include "apu.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file apr_siphash.h
+ * @brief APR-UTIL siphash library
+ * "SipHash-c-d is a family of pseudorandom functions (a.k.a. keyed
+ * hash functions) optimized for speed on short messages", designed by
+ * Jean-Philippe Aumasson and Daniel J. Bernstein. It generates a 64bit
+ * hash (or MAC) from the message and a 128bit key.
+ * See http://cr.yp.to/siphash/siphash-20120620.pdf for the details,
+ * c is the number of compression rounds, d the number of finalization
+ * rounds; we also define fast implementations for c = 2 with d = 4 (aka
+ * siphash-2-4), and c = 4 with d = 8 (aka siphash-4-8), as recommended
+ * parameters per the authors.
+ */
+
+/** size of the siphash digest */
+#define APR_SIPHASH_DSIZE 8
+
+/** size of the siphash key */
+#define APR_SIPHASH_KSIZE 16
+
+
+/**
+ * @brief Computes SipHash-c-d, producing a 64bit (APR_SIPHASH_DSIZE) hash
+ * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key.
+ * @param src The message
+ * @param len The length of the message
+ * @param key The secret key
+ * @param c The number of compression rounds
+ * @param d The number of finalization rounds
+ * @return The hash value as a 64bit unsigned integer
+ */
+APU_DECLARE(apr_uint64_t) apr_siphash(const void *src, apr_size_t len,
+ const unsigned char key[APR_SIPHASH_KSIZE],
+ unsigned int c, unsigned int d);
+
+/**
+ * @brief Computes SipHash-c-d, producing a 64bit (APR_SIPHASH_DSIZE) hash
+ * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key, into a possibly
+ * unaligned buffer (using the little endian representation as defined by the
+ * authors for interoperabilty) usable as a MAC.
+ * @param out The output buffer (or MAC)
+ * @param src The message
+ * @param len The length of the message
+ * @param key The secret key
+ * @param c The number of compression rounds
+ * @param d The number of finalization rounds
+ * @return The hash value as a 64bit unsigned integer
+ */
+APU_DECLARE(void) apr_siphash_auth(unsigned char out[APR_SIPHASH_DSIZE],
+ const void *src, apr_size_t len,
+ const unsigned char key[APR_SIPHASH_KSIZE],
+ unsigned int c, unsigned int d);
+
+/**
+ * @brief Computes SipHash-2-4, producing a 64bit (APR_SIPHASH_DSIZE) hash
+ * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key.
+ * @param src The message to hash
+ * @param len The length of the message
+ * @param key The secret key
+ * @return The hash value as a 64bit unsigned integer
+ */
+APU_DECLARE(apr_uint64_t) apr_siphash24(const void *src, apr_size_t len,
+ const unsigned char key[APR_SIPHASH_KSIZE]);
+
+/**
+ * @brief Computes SipHash-2-4, producing a 64bit (APR_SIPHASH_DSIZE) hash
+ * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key, into a possibly
+ * unaligned buffer (using the little endian representation as defined by the
+ * authors for interoperabilty) usable as a MAC.
+ * @param out The output buffer (or MAC)
+ * @param src The message
+ * @param len The length of the message
+ * @param key The secret key
+ * @return The hash value as a 64bit unsigned integer
+ */
+APU_DECLARE(void) apr_siphash24_auth(unsigned char out[APR_SIPHASH_DSIZE],
+ const void *src, apr_size_t len,
+ const unsigned char key[APR_SIPHASH_KSIZE]);
+
+/**
+ * @brief Computes SipHash-4-8, producing a 64bit (APR_SIPHASH_DSIZE) hash
+ * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key.
+ * @param src The message
+ * @param len The length of the message
+ * @param key The secret key
+ * @return The hash value as a 64bit unsigned integer
+ */
+APU_DECLARE(apr_uint64_t) apr_siphash48(const void *src, apr_size_t len,
+ const unsigned char key[APR_SIPHASH_KSIZE]);
+
+/**
+ * @brief Computes SipHash-4-8, producing a 64bit (APR_SIPHASH_DSIZE) hash
+ * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key, into a possibly
+ * unaligned buffer (using the little endian representation as defined by the
+ * authors for interoperabilty) usable as a MAC.
+ * @param out The output buffer (or MAC)
+ * @param src The message
+ * @param len The length of the message
+ * @param key The secret key
+ * @return The hash value as a 64bit unsigned integer
+ */
+APU_DECLARE(void) apr_siphash48_auth(unsigned char out[APR_SIPHASH_DSIZE],
+ const void *src, apr_size_t len,
+ const unsigned char key[APR_SIPHASH_KSIZE]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* APR_SIPHASH_H */
diff --git a/include/apr_xml.h b/include/apr_xml.h
index ac7f003b42dfe..87a696cca7396 100644
--- a/include/apr_xml.h
+++ b/include/apr_xml.h
@@ -276,6 +276,7 @@ APU_DECLARE(char *) apr_xml_parser_geterror(apr_xml_parser *parser,
* 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
+ * APR_XML_X2T_PARSED original prefixes
* </PRE>
* @param namespaces The namespace of the current XML element
* @param ns_map Namespace mapping
@@ -292,6 +293,7 @@ APU_DECLARE(void) apr_xml_to_text(apr_pool_t *p, const apr_xml_elem *elem,
#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 */
+#define APR_XML_X2T_PARSED 4 /**< original prefixes */
/**
* empty XML element
diff --git a/include/apu.h.in b/include/apu.h.in
index 82380cc21bd50..184682d31c152 100644
--- a/include/apu.h.in
+++ b/include/apu.h.in
@@ -113,12 +113,12 @@
#define APU_HAVE_SQLITE3 @apu_have_sqlite3@
#define APU_HAVE_SQLITE2 @apu_have_sqlite2@
#define APU_HAVE_ORACLE @apu_have_oracle@
-#define APU_HAVE_FREETDS @apu_have_freetds@
#define APU_HAVE_ODBC @apu_have_odbc@
#define APU_HAVE_CRYPTO @apu_have_crypto@
#define APU_HAVE_OPENSSL @apu_have_openssl@
#define APU_HAVE_NSS @apu_have_nss@
+#define APU_HAVE_COMMONCRYPTO @apu_have_commoncrypto@
#define APU_HAVE_APR_ICONV @have_apr_iconv@
#define APU_HAVE_ICONV @have_iconv@
diff --git a/include/apu.hnw b/include/apu.hnw
index 31c0dfb41553d..0bc3a2cb9b044 100644
--- a/include/apu.hnw
+++ b/include/apu.hnw
@@ -104,7 +104,6 @@
#define APU_HAVE_SQLITE3 0
#define APU_HAVE_SQLITE2 0
#define APU_HAVE_ORACLE 0
-#define APU_HAVE_FREETDS 0
#define APU_HAVE_ODBC 0
#endif
@@ -113,6 +112,7 @@
#ifndef APU_DSO_MODULE_BUILD
#define APU_HAVE_OPENSSL 0
#define APU_HAVE_NSS 0
+#define APU_HAVE_COMMONCRYPTO 0
#endif
#define APU_HAVE_APR_ICONV 0
diff --git a/include/apu.hw b/include/apu.hw
index a6cde01a3a845..21fbedff1aa16 100644
--- a/include/apu.hw
+++ b/include/apu.hw
@@ -127,7 +127,6 @@
#define APU_HAVE_SQLITE3 0
#define APU_HAVE_SQLITE2 0
#define APU_HAVE_ORACLE 0
-#define APU_HAVE_FREETDS 0
#define APU_HAVE_ODBC 1
#endif
@@ -136,6 +135,7 @@
#ifndef APU_DSO_MODULE_BUILD
#define APU_HAVE_OPENSSL 0
#define APU_HAVE_NSS 0
+#define APU_HAVE_COMMONCRYPTO 0
#endif
#define APU_HAVE_APR_ICONV 1
diff --git a/include/apu.hwc b/include/apu.hwc
new file mode 100644
index 0000000000000..2c3fa00a59ba8
--- /dev/null
+++ b/include/apu.hwc
@@ -0,0 +1,145 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * apu.h is duplicated from apu.hwc at build time -- 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.
+ */
+
+/* Make sure we have our platform identifier macro defined we ask for later.
+ */
+#if defined(_WIN32) && !defined(WIN32)
+#define WIN32 1
+#endif
+
+#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().
+ *
+ * @fn 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.
+ *
+ * @fn 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.
+ *
+ * @fn APU_DECLARE_DATA type apr_variable;
+ * @note 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
+
+#if !defined(WIN32) || defined(APU_MODULE_DECLARE_STATIC)
+/**
+ * Declare a dso module's exported module structure as APU_MODULE_DECLARE_DATA.
+ *
+ * Unless APU_MODULE_DECLARE_STATIC is defined at compile time, symbols
+ * declared with APU_MODULE_DECLARE_DATA are always exported.
+ * @code
+ * module APU_MODULE_DECLARE_DATA mod_tag
+ * @endcode
+ */
+#define APU_MODULE_DECLARE_DATA
+#else
+#define APU_MODULE_DECLARE_DATA __declspec(dllexport)
+#endif
+
+/*
+ * we always have SDBM (it's in our codebase)
+ */
+#define APU_HAVE_SDBM 1
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_GDBM 0
+#define APU_HAVE_NDBM 0
+#define APU_HAVE_DB 0
+
+#if APU_HAVE_DB
+#define APU_HAVE_DB_VERSION 0
+#endif
+#endif
+
+/*
+ * we always enable dynamic driver loads within apr_dbd
+ * Win32 always has odbc (it's always installed)
+ */
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_PGSQL 0
+#define APU_HAVE_MYSQL 0
+#define APU_HAVE_SQLITE3 0
+#define APU_HAVE_SQLITE2 0
+#define APU_HAVE_ORACLE 0
+#define APU_HAVE_ODBC 1
+#endif
+
+#define APU_HAVE_CRYPTO @apu_have_crypto_10@
+
+#ifndef APU_DSO_MODULE_BUILD
+#define APU_HAVE_OPENSSL 0
+#define APU_HAVE_NSS 0
+#endif
+
+#define APU_HAVE_APR_ICONV @apu_have_apr_iconv_10@
+#define APU_HAVE_ICONV 0
+#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
+
+#endif /* APU_H */
+/** @} */
diff --git a/include/apu_version.h b/include/apu_version.h
index 8d976291ff6d3..e4fb2e64e9ec3 100644
--- a/include/apu_version.h
+++ b/include/apu_version.h
@@ -38,7 +38,7 @@
*/
-#define APU_COPYRIGHT "Copyright (c) 2000-2014 The Apache Software " \
+#define APU_COPYRIGHT "Copyright (c) 2000-2016 The Apache Software " \
"Foundation or its licensors, as applicable."
/* The numeric compile-time version constants. These constants are the
@@ -56,20 +56,20 @@
* Minor API changes that do not cause binary compatibility problems.
* Reset to 0 when upgrading APU_MAJOR_VERSION
*/
-#define APU_MINOR_VERSION 5
+#define APU_MINOR_VERSION 6
/** patch level
* The Patch Level never includes API changes, simply bug fixes.
* Reset to 0 when upgrading APR_MINOR_VERSION
*/
-#define APU_PATCH_VERSION 4
+#define APU_PATCH_VERSION 1
/**
* 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 */
+/* #undef APU_IS_DEV_VERSION */
#if defined(APU_IS_DEV_VERSION) || defined(DOXYGEN)
diff --git a/include/private/apr_crypto_internal.h b/include/private/apr_crypto_internal.h
index 5da92e5588792..1ea838bfb7d1b 100644
--- a/include/private/apr_crypto_internal.h
+++ b/include/private/apr_crypto_internal.h
@@ -59,7 +59,7 @@ struct apr_crypto_driver_t {
/**
* @brief Get a hash table of key types, keyed by the name of the type against
- * an integer pointer constant.
+ * a pointer to apr_crypto_block_key_type_t.
*
* @param types - hashtable of key types keyed to constants.
* @param f - encryption context
@@ -70,7 +70,7 @@ struct apr_crypto_driver_t {
/**
* @brief Get a hash table of key modes, keyed by the name of the mode against
- * an integer pointer constant.
+ * a pointer to apr_crypto_block_key_mode_t.
*
* @param modes - hashtable of key modes keyed to constants.
* @param f - encryption context
@@ -267,6 +267,25 @@ struct apr_crypto_driver_t {
*/
apr_status_t (*error)(const apu_err_t **result, const apr_crypto_t *f);
+ /**
+ * @brief Create a key from the provided secret or passphrase. The key is cleaned
+ * up when the context is cleaned, and may be reused with multiple encryption
+ * or decryption operations.
+ * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If
+ * *key is not NULL, *key must point at a previously created structure.
+ * @param key The key returned, see note.
+ * @param rec The key record, from which the key will be derived.
+ * @param f The context to use.
+ * @param p The pool to use.
+ * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend
+ * error occurred while generating the key. APR_ENOCIPHER if the type or mode
+ * is not supported by the particular backend. APR_EKEYTYPE if the key type is
+ * not known. APR_EPADDING if padding was requested but is not supported.
+ * APR_ENOTIMPL if not implemented.
+ */
+ apr_status_t (*key)(apr_crypto_key_t **key, const apr_crypto_key_rec_t *rec,
+ const apr_crypto_t *f, apr_pool_t *p);
+
};
#endif
diff --git a/include/private/apu_config.h.in b/include/private/apu_config.h.in
index 4d39f8a094753..0e008d04941f3 100644
--- a/include/private/apu_config.h.in
+++ b/include/private/apu_config.h.in
@@ -24,6 +24,10 @@
/* Define if CODESET is defined in langinfo.h */
#undef HAVE_CODESET
+/* Define to 1 if you have the <CommonCrypto/CommonKeyDerivation.h> header
+ file. */
+#undef HAVE_COMMONCRYPTO_COMMONKEYDERIVATION_H
+
/* Define to 1 if you have the `crypt_r' function. */
#undef HAVE_CRYPT_R
@@ -34,8 +38,8 @@
/* Define if expat.h is available */
#undef HAVE_EXPAT_H
-/* Define to 1 if you have the <freetds/sybdb.h> header file. */
-#undef HAVE_FREETDS_SYBDB_H
+/* Define if explicit_bzero function is supported */
+#undef HAVE_EXPLICIT_BZERO
/* Define to 1 if you have the <iconv.h> header file. */
#undef HAVE_ICONV_H
@@ -61,6 +65,9 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Define if memset_s function is supported */
+#undef HAVE_MEMSET_S
+
/* Define to 1 if you have the <mysql.h> header file. */
#undef HAVE_MYSQL_H
@@ -130,9 +137,6 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
-/* Define to 1 if you have the <sybdb.h> header file. */
-#undef HAVE_SYBDB_H
-
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
@@ -142,6 +146,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define if compiler handles weak symbols */
+#undef HAVE_WEAK_SYMBOLS
+
/* Define if xmlparse/xmlparse.h is available */
#undef HAVE_XMLPARSE_XMLPARSE_H