# PaCkAgE DaTaStReAm apr-util 1 2724 # end of header 0707010003852b000081a400000000000000000000000152d36727000001110000011200010050ffffffffffffffff0000001100000000apr-util/pkginfo RSTATES=S s 1 2 3 ISTATES=S s 1 2 3 BASEDIR=/ CLASSES=none CATEGORY=utility ARCH=i386 DESC=Apache base portability library EMAIL=http://apr.apache.org/ VENDOR=The Apache Project PSTAMP=13th January 2014 VERSION=1.5.3 NAME=apr-util 1.5.3 i86pc 64bit Solaris 11 PKG=apr-util 0707010003852a000081a400000000000000000000000152d367270000128e0000011200010050ffffffffffffffff0000001000000000apr-util/pkgmap : 1 2724 1 d none /usr ? ? ? 1 d none /usr/local ? ? ? 1 d none /usr/local/bin 0755 root root 1 f none /usr/local/bin/apu-1-config 0755 root root 6517 43253 1389586092 1 d none /usr/local/include 0755 root root 1 d none /usr/local/include/apr-1 0755 root root 1 f none /usr/local/include/apr-1/apr_anylock.h 0644 root root 5050 35768 1389586092 1 f none /usr/local/include/apr-1/apr_base64.h 0644 root root 3844 58952 1389586092 1 f none /usr/local/include/apr-1/apr_buckets.h 0644 root root 63412 36021 1389586092 1 f none /usr/local/include/apr-1/apr_crypto.h 0644 root root 16911 41651 1389586092 1 f none /usr/local/include/apr-1/apr_date.h 0644 root root 3554 13649 1389586092 1 f none /usr/local/include/apr-1/apr_dbd.h 0644 root root 24093 4453 1389586092 1 f none /usr/local/include/apr-1/apr_dbm.h 0644 root root 8599 26734 1389586092 1 f none /usr/local/include/apr-1/apr_hooks.h 0644 root root 12660 44436 1389586092 1 f none /usr/local/include/apr-1/apr_ldap.h 0644 root root 5704 7247 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_init.h 0644 root root 5780 10710 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_option.h 0644 root root 8604 41864 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_rebind.h 0644 root root 3168 62596 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_url.h 0644 root root 3799 32681 1389586092 1 f none /usr/local/include/apr-1/apr_md4.h 0644 root root 4525 42434 1389586092 1 f none /usr/local/include/apr-1/apr_md5.h 0644 root root 6350 58818 1389586092 1 f none /usr/local/include/apr-1/apr_memcache.h 0644 root root 17224 4431 1389586092 1 f none /usr/local/include/apr-1/apr_optional.h 0644 root root 2780 34306 1389586092 1 f none /usr/local/include/apr-1/apr_optional_hooks.h 0644 root root 3872 64417 1389586092 1 f none /usr/local/include/apr-1/apr_queue.h 0644 root root 4080 16491 1389586092 1 f none /usr/local/include/apr-1/apr_reslist.h 0644 root root 7176 61586 1389586092 1 f none /usr/local/include/apr-1/apr_rmm.h 0644 root root 4778 15266 1389586092 1 f none /usr/local/include/apr-1/apr_sdbm.h 0644 root root 6113 34421 1389586092 1 f none /usr/local/include/apr-1/apr_sha1.h 0644 root root 3884 57845 1389586092 1 f none /usr/local/include/apr-1/apr_strmatch.h 0644 root root 2677 28267 1389586092 1 f none /usr/local/include/apr-1/apr_thread_pool.h 0644 root root 11104 60025 1389586092 1 f none /usr/local/include/apr-1/apr_uri.h 0644 root root 6589 55175 1389586092 1 f none /usr/local/include/apr-1/apr_uuid.h 0644 root root 2102 40269 1389586092 1 f none /usr/local/include/apr-1/apr_xlate.h 0644 root root 6408 789 1389586092 1 f none /usr/local/include/apr-1/apr_xml.h 0644 root root 12368 62229 1389586092 1 f none /usr/local/include/apr-1/apu.h 0644 root root 4318 16931 1389586092 1 f none /usr/local/include/apr-1/apu_errno.h 0644 root root 5444 25122 1389586092 1 f none /usr/local/include/apr-1/apu_version.h 0644 root root 4295 24558 1389586092 1 f none /usr/local/include/apr-1/apu_want.h 0644 root root 1483 49830 1389586092 1 d none /usr/local/lib 0755 root root 1 d none /usr/local/lib/apr-util-1 0755 root root 1 f none /usr/local/lib/apr-util-1/apr_dbd_sqlite3-1.so 0755 root root 30752 52294 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbd_sqlite3.a 0644 root root 25744 11085 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbd_sqlite3.la 0755 root root 1101 32098 1389586091 1 s none /usr/local/lib/apr-util-1/apr_dbd_sqlite3.so=apr_dbd_sqlite3-1.so 1 f none /usr/local/lib/apr-util-1/apr_dbm_db-1.so 0755 root root 14936 33491 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbm_db.a 0644 root root 13388 6108 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbm_db.la 0755 root root 987 21203 1389586091 1 s none /usr/local/lib/apr-util-1/apr_dbm_db.so=apr_dbm_db-1.so 1 f none /usr/local/lib/apr-util-1/apr_ldap-1.so 0755 root root 20232 11853 1389586091 1 f none /usr/local/lib/apr-util-1/apr_ldap.a 0644 root root 20964 56498 1389586091 1 f none /usr/local/lib/apr-util-1/apr_ldap.la 0755 root root 1127 34098 1389586091 1 s none /usr/local/lib/apr-util-1/apr_ldap.so=apr_ldap-1.so 1 f none /usr/local/lib/aprutil.exp 0644 root root 5549 30662 1389586092 1 f none /usr/local/lib/libaprutil-1.a 0644 root root 469944 30272 1389586092 1 f none /usr/local/lib/libaprutil-1.la 0755 root root 1110 32277 1389586092 1 s none /usr/local/lib/libaprutil-1.so=libaprutil-1.so.0.5.3 1 s none /usr/local/lib/libaprutil-1.so.0=libaprutil-1.so.0.5.3 1 f none /usr/local/lib/libaprutil-1.so.0.5.3 0755 root root 362480 44827 1389586092 1 d none /usr/local/lib/pkgconfig 0755 root root 1 f none /usr/local/lib/pkgconfig/apr-util-1.pc 0644 root root 403 35696 1389586092 1 i checkinstall 784 2295 1389586215 1 i pkginfo 273 21042 1389586215 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!! 0707010003852b000081a400000000000000000000000152d36727000001110000011200010050ffffffffffffffff0000000800000000pkginfo RSTATES=S s 1 2 3 ISTATES=S s 1 2 3 BASEDIR=/ CLASSES=none CATEGORY=utility ARCH=i386 DESC=Apache base portability library EMAIL=http://apr.apache.org/ VENDOR=The Apache Project PSTAMP=13th January 2014 VERSION=1.5.3 NAME=apr-util 1.5.3 i86pc 64bit Solaris 11 PKG=apr-util 0707010003852a000081a400000000000000000000000152d367270000128e0000011200010050ffffffffffffffff0000000700000000pkgmap : 1 2724 1 d none /usr ? ? ? 1 d none /usr/local ? ? ? 1 d none /usr/local/bin 0755 root root 1 f none /usr/local/bin/apu-1-config 0755 root root 6517 43253 1389586092 1 d none /usr/local/include 0755 root root 1 d none /usr/local/include/apr-1 0755 root root 1 f none /usr/local/include/apr-1/apr_anylock.h 0644 root root 5050 35768 1389586092 1 f none /usr/local/include/apr-1/apr_base64.h 0644 root root 3844 58952 1389586092 1 f none /usr/local/include/apr-1/apr_buckets.h 0644 root root 63412 36021 1389586092 1 f none /usr/local/include/apr-1/apr_crypto.h 0644 root root 16911 41651 1389586092 1 f none /usr/local/include/apr-1/apr_date.h 0644 root root 3554 13649 1389586092 1 f none /usr/local/include/apr-1/apr_dbd.h 0644 root root 24093 4453 1389586092 1 f none /usr/local/include/apr-1/apr_dbm.h 0644 root root 8599 26734 1389586092 1 f none /usr/local/include/apr-1/apr_hooks.h 0644 root root 12660 44436 1389586092 1 f none /usr/local/include/apr-1/apr_ldap.h 0644 root root 5704 7247 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_init.h 0644 root root 5780 10710 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_option.h 0644 root root 8604 41864 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_rebind.h 0644 root root 3168 62596 1389586092 1 f none /usr/local/include/apr-1/apr_ldap_url.h 0644 root root 3799 32681 1389586092 1 f none /usr/local/include/apr-1/apr_md4.h 0644 root root 4525 42434 1389586092 1 f none /usr/local/include/apr-1/apr_md5.h 0644 root root 6350 58818 1389586092 1 f none /usr/local/include/apr-1/apr_memcache.h 0644 root root 17224 4431 1389586092 1 f none /usr/local/include/apr-1/apr_optional.h 0644 root root 2780 34306 1389586092 1 f none /usr/local/include/apr-1/apr_optional_hooks.h 0644 root root 3872 64417 1389586092 1 f none /usr/local/include/apr-1/apr_queue.h 0644 root root 4080 16491 1389586092 1 f none /usr/local/include/apr-1/apr_reslist.h 0644 root root 7176 61586 1389586092 1 f none /usr/local/include/apr-1/apr_rmm.h 0644 root root 4778 15266 1389586092 1 f none /usr/local/include/apr-1/apr_sdbm.h 0644 root root 6113 34421 1389586092 1 f none /usr/local/include/apr-1/apr_sha1.h 0644 root root 3884 57845 1389586092 1 f none /usr/local/include/apr-1/apr_strmatch.h 0644 root root 2677 28267 1389586092 1 f none /usr/local/include/apr-1/apr_thread_pool.h 0644 root root 11104 60025 1389586092 1 f none /usr/local/include/apr-1/apr_uri.h 0644 root root 6589 55175 1389586092 1 f none /usr/local/include/apr-1/apr_uuid.h 0644 root root 2102 40269 1389586092 1 f none /usr/local/include/apr-1/apr_xlate.h 0644 root root 6408 789 1389586092 1 f none /usr/local/include/apr-1/apr_xml.h 0644 root root 12368 62229 1389586092 1 f none /usr/local/include/apr-1/apu.h 0644 root root 4318 16931 1389586092 1 f none /usr/local/include/apr-1/apu_errno.h 0644 root root 5444 25122 1389586092 1 f none /usr/local/include/apr-1/apu_version.h 0644 root root 4295 24558 1389586092 1 f none /usr/local/include/apr-1/apu_want.h 0644 root root 1483 49830 1389586092 1 d none /usr/local/lib 0755 root root 1 d none /usr/local/lib/apr-util-1 0755 root root 1 f none /usr/local/lib/apr-util-1/apr_dbd_sqlite3-1.so 0755 root root 30752 52294 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbd_sqlite3.a 0644 root root 25744 11085 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbd_sqlite3.la 0755 root root 1101 32098 1389586091 1 s none /usr/local/lib/apr-util-1/apr_dbd_sqlite3.so=apr_dbd_sqlite3-1.so 1 f none /usr/local/lib/apr-util-1/apr_dbm_db-1.so 0755 root root 14936 33491 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbm_db.a 0644 root root 13388 6108 1389586091 1 f none /usr/local/lib/apr-util-1/apr_dbm_db.la 0755 root root 987 21203 1389586091 1 s none /usr/local/lib/apr-util-1/apr_dbm_db.so=apr_dbm_db-1.so 1 f none /usr/local/lib/apr-util-1/apr_ldap-1.so 0755 root root 20232 11853 1389586091 1 f none /usr/local/lib/apr-util-1/apr_ldap.a 0644 root root 20964 56498 1389586091 1 f none /usr/local/lib/apr-util-1/apr_ldap.la 0755 root root 1127 34098 1389586091 1 s none /usr/local/lib/apr-util-1/apr_ldap.so=apr_ldap-1.so 1 f none /usr/local/lib/aprutil.exp 0644 root root 5549 30662 1389586092 1 f none /usr/local/lib/libaprutil-1.a 0644 root root 469944 30272 1389586092 1 f none /usr/local/lib/libaprutil-1.la 0755 root root 1110 32277 1389586092 1 s none /usr/local/lib/libaprutil-1.so=libaprutil-1.so.0.5.3 1 s none /usr/local/lib/libaprutil-1.so.0=libaprutil-1.so.0.5.3 1 f none /usr/local/lib/libaprutil-1.so.0.5.3 0755 root root 362480 44827 1389586092 1 d none /usr/local/lib/pkgconfig 0755 root root 1 f none /usr/local/lib/pkgconfig/apr-util-1.pc 0644 root root 403 35696 1389586092 1 i checkinstall 784 2295 1389586215 1 i pkginfo 273 21042 1389586215 07070100038565000041ed00000000000000000000000252d36727000000000000011200010050ffffffffffffffff0000000800000000install 07070100038566000081ed00000000000000000000000152d36727000003100000011200010050ffffffffffffffff0000001500000000install/checkinstall #!/bin/sh # expected_bits="64" expected_release="5.11" expected_platform="i386" # release=`uname -r` platform=`uname -p` bits=`isainfo -b` # if [ ${platform} != ${expected_platform} ]; then echo "\n\n\n\tThis package must be installed on a ${expected_platform} architecture\n" echo "\tAborting installation.\n\n\n" exit 1 fi if [ ${release} != ${expected_release} ]; then echo "\n\n\n\tThis package must be installed on a ${expected_release} machine\n" echo "\tAborting installation.\n\n\n" exit 1 fi if [ ${bits} != ${expected_bits} ]; then echo "\n\n\n\tThis package must be installed on a ${expected_bits} bit machine\n" echo "\tYour machine is running a ${bits} bit O.S. currently\n" echo "\tAborting installation.\n\n\n" exit 1 fi exit 0 0707010003852c000041ed00000000000000000000000352d36727000000000000011200010050ffffffffffffffff0000000500000000root 0707010003852d000041ed00000000000000000000000352d36727000000000000011200010050ffffffffffffffff0000000900000000root/usr 0707010003852e000041ed00000000000000000000000552d36727000000000000011200010050ffffffffffffffff0000000f00000000root/usr/local 07070100038531000041ed00000000000000000000000352d36727000000000000011200010050ffffffffffffffff0000001700000000root/usr/local/include 07070100038532000041ed00000000000000000000000252d36727000000000000011200010050ffffffffffffffff0000001d00000000root/usr/local/include/apr-1 07070100038541000081a400000000000000000000000152d366ac000018ce0000011200010050ffffffffffffffff0000002700000000root/usr/local/include/apr-1/apr_md5.h /* * 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. */ /* 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. */ #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 string 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); /** * Encode a password using the bcrypt algorithm * @param password The password to encode * @param count The cost of the encoding, possible values are 4 to 31 * @param salt Pointer to binary data to be used as salt for the encoding * @param salt_len The size of the salt data (must be >= 16) * @param out The string to store the encoded password in * @param out_len The size of the result buffer (must be >= 61) */ APU_DECLARE(apr_status_t) apr_bcrypt_encode(const char *pw, unsigned int count, const unsigned char *salt, apr_size_t salt_len, char *out, apr_size_t out_len); /** * Validate hashes created by APR-supported algorithms: md5, bcrypt, 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 */ 07070100038545000081a400000000000000000000000152d366ac00000ff00000011200010050ffffffffffffffff0000002900000000root/usr/local/include/apr-1/apr_queue.h /* 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. */ #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 sometimes 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 an 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 successful 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 successful pop */ APU_DECLARE(apr_status_t) apr_queue_pop(apr_queue_t *queue, void **data); /** * push/add an object to the queue, returning immediately 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 successful push */ APU_DECLARE(apr_status_t) apr_queue_trypush(apr_queue_t *queue, void *data); /** * pop/get an object to the queue, returning immediately 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 successful pop */ 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 the queue, sending an interrupt 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 */ 0707010003854a000081a400000000000000000000000152d366ac00000a750000011200010050ffffffffffffffff0000002c00000000root/usr/local/include/apr-1/apr_strmatch.h /* 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. */ #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 */ 07070100038551000081a400000000000000000000000152d366ac000015440000011200010050ffffffffffffffff0000002900000000root/usr/local/include/apr-1/apu_errno.h /* 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. */ #ifndef APU_ERRNO_H #define APU_ERRNO_H /** * @file apu_errno.h * @brief APR-Util Error Codes */ #include "apr.h" #include "apr_errno.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apu_errno Error Codes * @ingroup APR_Util * @{ */ /** * @defgroup APR_Util_Error APR_Util Error Values *
* APU ERROR VALUES * APR_ENOKEY The key provided was empty or NULL * APR_ENOIV The initialisation vector provided was NULL * APR_EKEYTYPE The key type was not recognised * APR_ENOSPACE The buffer supplied was not big enough * APR_ECRYPT An error occurred while encrypting or decrypting * APR_EPADDING Padding was not supported * APR_EKEYLENGTH The key length was incorrect * APR_ENOCIPHER The cipher provided was not recognised * APR_ENODIGEST The digest provided was not recognised * APR_ENOENGINE The engine provided was not recognised * APR_EINITENGINE The engine could not be initialised * APR_EREINIT Underlying crypto has already been initialised ** *
* APR STATUS VALUES * APR_INCHILD Program is currently executing in the child ** @{ */ /** @see APR_STATUS_IS_ENOKEY */ #define APR_ENOKEY (APR_UTIL_START_STATUS + 1) /** @see APR_STATUS_IS_ENOIV */ #define APR_ENOIV (APR_UTIL_START_STATUS + 2) /** @see APR_STATUS_IS_EKEYTYPE */ #define APR_EKEYTYPE (APR_UTIL_START_STATUS + 3) /** @see APR_STATUS_IS_ENOSPACE */ #define APR_ENOSPACE (APR_UTIL_START_STATUS + 4) /** @see APR_STATUS_IS_ECRYPT */ #define APR_ECRYPT (APR_UTIL_START_STATUS + 5) /** @see APR_STATUS_IS_EPADDING */ #define APR_EPADDING (APR_UTIL_START_STATUS + 6) /** @see APR_STATUS_IS_EKEYLENGTH */ #define APR_EKEYLENGTH (APR_UTIL_START_STATUS + 7) /** @see APR_STATUS_IS_ENOCIPHER */ #define APR_ENOCIPHER (APR_UTIL_START_STATUS + 8) /** @see APR_STATUS_IS_ENODIGEST */ #define APR_ENODIGEST (APR_UTIL_START_STATUS + 9) /** @see APR_STATUS_IS_ENOENGINE */ #define APR_ENOENGINE (APR_UTIL_START_STATUS + 10) /** @see APR_STATUS_IS_EINITENGINE */ #define APR_EINITENGINE (APR_UTIL_START_STATUS + 11) /** @see APR_STATUS_IS_EREINIT */ #define APR_EREINIT (APR_UTIL_START_STATUS + 12) /** @} */ /** * @defgroup APU_STATUS_IS Status Value Tests * @warning For any particular error condition, more than one of these tests * may match. This is because platform-specific error codes may not * always match the semantics of the POSIX codes these tests (and the * corresponding APR error codes) are named after. A notable example * are the APR_STATUS_IS_ENOENT and APR_STATUS_IS_ENOTDIR tests on * Win32 platforms. The programmer should always be aware of this and * adjust the order of the tests accordingly. * @{ */ /** @} */ /** * @addtogroup APR_Util_Error * @{ */ /** * The key was empty or not provided */ #define APR_STATUS_IS_ENOKEY(s) ((s) == APR_ENOKEY) /** * The initialisation vector was not provided */ #define APR_STATUS_IS_ENOIV(s) ((s) == APR_ENOIV) /** * The key type was not recognised */ #define APR_STATUS_IS_EKEYTYPE(s) ((s) == APR_EKEYTYPE) /** * The buffer provided was not big enough */ #define APR_STATUS_IS_ENOSPACE(s) ((s) == APR_ENOSPACE) /** * An error occurred while encrypting or decrypting */ #define APR_STATUS_IS_ECRYPT(s) ((s) == APR_ECRYPT) /** * An error occurred while padding */ #define APR_STATUS_IS_EPADDING(s) ((s) == APR_EPADDING) /** * An error occurred with the key length */ #define APR_STATUS_IS_EKEYLENGTH(s) ((s) == APR_EKEYLENGTH) /** * The cipher provided was not recognised */ #define APR_STATUS_IS_ENOCIPHER(s) ((s) == APR_ENOCIPHER) /** * The digest provided was not recognised */ #define APR_STATUS_IS_ENODIGEST(s) ((s) == APR_ENODIGEST) /** * The engine provided was not recognised */ #define APR_STATUS_IS_ENOENGINE(s) ((s) == APR_ENOENGINE) /** * The engine could not be initialised */ #define APR_STATUS_IS_EINITENGINE(s) ((s) == APR_EINITENGINE) /** * Crypto has already been initialised */ #define APR_STATUS_IS_EREINIT(s) ((s) == APR_EREINIT) /** @} */ /** * This structure allows the underlying API error codes to be returned * along with plain text error messages that explain to us mere mortals * what really happened. */ typedef struct apu_err_t { const char *reason; const char *msg; int rc; } apu_err_t; /** @} */ #ifdef __cplusplus } #endif #endif /* ! APU_ERRNO_H */ 0707010003853e000081a400000000000000000000000152d366ac00000c600000011200010050ffffffffffffffff0000002f00000000root/usr/local/include/apr-1/apr_ldap_rebind.h /* 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. */ /** * The APR LDAP rebind functions provide an implementation of * a rebind procedure that can be used to allow clients to chase referrals, * using the same credentials used to log in originally. * * Use of this implementation is optional. * * @file apr_ldap_rebind.h * @brief Apache LDAP library */ #ifndef APU_LDAP_REBIND_H #define APU_LDAP_REBIND_H /** * @addtogroup APR_Util_LDAP * @{ **/ #if defined(DOXYGEN) #include "apr_ldap.h" #endif /* * Handle the case when LDAP is enabled */ #if APR_HAS_LDAP /** * APR LDAP initialize rebind lock * * This function creates the lock for controlling access to the xref list.. * @param pool Pool to use when creating the xref_lock. */ APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_init(apr_pool_t *pool); /** * APR LDAP rebind_add function * * This function creates a cross reference entry for the specified ldap * connection. The rebind callback function will look up this ldap * connection so it can retrieve the bindDN and bindPW for use in any * binds while referrals are being chased. * * This function will add the callback to the LDAP handle passed in. * * A cleanup is registered within the pool provided to remove this * entry when the pool is removed. Alternatively apr_ldap_rebind_remove() * can be called to explicitly remove the entry at will. * * @param pool The pool to use * @param ld The LDAP connectionhandle * @param bindDN The bind DN to be used for any binds while chasing * referrals on this ldap connection. * @param bindPW The bind Password to be used for any binds while * chasing referrals on this ldap connection. */ APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_add(apr_pool_t *pool, LDAP *ld, const char *bindDN, const char *bindPW); /** * APR LDAP rebind_remove function * * This function removes the rebind cross reference entry for the * specified ldap connection. * * If not explicitly removed, this function will be called automatically * when the pool is cleaned up. * * @param ld The LDAP connectionhandle */ APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_remove(LDAP *ld); #endif /* APR_HAS_LDAP */ /** @} */ #endif /* APU_LDAP_REBIND_H */ 07070100038543000081a400000000000000000000000152d366ac00000adc0000011200010050ffffffffffffffff0000002c00000000root/usr/local/include/apr-1/apr_optional.h /* 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. */ #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 */ 07070100038540000081a400000000000000000000000152d366ac000011ad0000011200010050ffffffffffffffff0000002700000000root/usr/local/include/apr-1/apr_md4.h /* 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. */ /* 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 */ 0707010003853d000081a400000000000000000000000152d366ac0000219c0000011200010050ffffffffffffffff0000002f00000000root/usr/local/include/apr-1/apr_ldap_option.h /* 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_ldap_option.h * @brief APR-UTIL LDAP ldap_*_option() functions */ #ifndef APR_LDAP_OPTION_H #define APR_LDAP_OPTION_H /** * @addtogroup APR_Util_LDAP * @{ */ #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 /** * Set the LDAP library to indicate if referrals should be chased during * LDAP searches. */ #define APR_LDAP_OPT_REFERRALS 0x6ffc /** * Set the LDAP library to indicate a maximum number of referral hops to * chase before giving up on the search. */ #define APR_LDAP_OPT_REFHOPLIMIT 0x6ffb /** * 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 /** Openldap directory full of base64-encoded cert * authorities with hashes in corresponding .0 directory */ #define APR_LDAP_CA_TYPE_CACERTDIR_BASE64 15 /** * 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_LDAP(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_LDAP(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 */ 0707010003853c000081a400000000000000000000000152d366ac000016940000011200010050ffffffffffffffff0000002d00000000root/usr/local/include/apr-1/apr_ldap_init.h /* 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_ldap_init.h * @brief APR-UTIL LDAP ldap_init() functions */ #ifndef APR_LDAP_INIT_H #define APR_LDAP_INIT_H /** * @addtogroup APR_Util_LDAP * @{ */ #include "apr_ldap.h" #if APR_HAS_LDAP #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * Macro to detect security related return values. */ #if defined(LDAP_INSUFFICIENT_ACCESS) #define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_ACCESS #elif defined(LDAP_INSUFFICIENT_RIGHTS) #define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS #elif defined(APR_HAS_MICROSOFT_LDAPSDK) /* The macros above fail to contemplate that LDAP_RETCODE values * may be represented by an enum. autoconf tests would be much * more robust. */ #define APU_LDAP_INSUFFICIENT_ACCESS LDAP_INSUFFICIENT_RIGHTS #else #error The security return codes must be added to support this LDAP toolkit. #endif #if defined(LDAP_SECURITY_ERROR) #define APU_LDAP_SECURITY_ERROR LDAP_SECURITY_ERROR #else #define APU_LDAP_SECURITY_ERROR(n) \ (LDAP_INAPPROPRIATE_AUTH == n) ? 1 \ : (LDAP_INVALID_CREDENTIALS == n) ? 1 \ : (APU_LDAP_INSUFFICIENT_ACCESS == n) ? 1 \ : 0 #endif /** * 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_LDAP(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_LDAP(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_LDAP(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_LDAP(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 */ 0707010003854f000081a400000000000000000000000152d366ac000030500000011200010050ffffffffffffffff0000002700000000root/usr/local/include/apr-1/apr_xml.h /* 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_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 successful 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: *
* 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 ** @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 '\<', '\>', and '\&'. * @param p The pool to allocate out of * @param s The string to quote * @param quotes If quotes is true, then replace '"' with '\"'. * @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 */ 07070100038550000081a400000000000000000000000152d366ac000010de0000011200010050ffffffffffffffff0000002300000000root/usr/local/include/apr-1/apu.h /* 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 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. */ #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 APU_DECLARE_DATA extern 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 #define APU_HAVE_GDBM 0 #define APU_HAVE_NDBM 0 #define APU_HAVE_DB 1 #if APU_HAVE_DB #define APU_HAVE_DB_VERSION 4 #endif #define APU_HAVE_PGSQL 0 #define APU_HAVE_MYSQL 0 #define APU_HAVE_SQLITE3 1 #define APU_HAVE_SQLITE2 0 #define APU_HAVE_ORACLE 0 #define APU_HAVE_FREETDS 0 #define APU_HAVE_ODBC 0 #define APU_HAVE_CRYPTO 0 #define APU_HAVE_OPENSSL 0 #define APU_HAVE_NSS 0 #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 */ /** @} */ 0707010003854d000081a400000000000000000000000152d366ac000008360000011200010050ffffffffffffffff0000002800000000root/usr/local/include/apr-1/apr_uuid.h /* 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_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 */ 0707010003854e000081a400000000000000000000000152d366ac000019080000011200010050ffffffffffffffff0000002900000000root/usr/local/include/apr-1/apr_xlate.h /* 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. */ #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 */ 0707010003853b000081a400000000000000000000000152d366ac000016480000011200010050ffffffffffffffff0000002800000000root/usr/local/include/apr-1/apr_ldap.h /* 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 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 1 #define APR_HAS_MICROSOFT_LDAPSDK 0 #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
* while (e != APR_BRIGADE_SENTINEL(b)) { * ... * e = APR_BUCKET_NEXT(e); * } ** @param b The brigade * @return The magic pointer value */ #define APR_BRIGADE_SENTINEL(b) APR_RING_SENTINEL(&(b)->list, apr_bucket, link) /** * Determine if the bucket brigade is empty * @param b The brigade to check * @return true or false */ #define APR_BRIGADE_EMPTY(b) APR_RING_EMPTY(&(b)->list, apr_bucket, link) /** * Return the first bucket in a brigade * @param b The brigade to query * @return The first bucket in the brigade */ #define APR_BRIGADE_FIRST(b) APR_RING_FIRST(&(b)->list) /** * Return the last bucket in a brigade * @param b The brigade to query * @return The last bucket in the brigade */ #define APR_BRIGADE_LAST(b) APR_RING_LAST(&(b)->list) /** * Insert a single bucket at the front of a brigade * @param b The brigade to add to * @param e The bucket to insert */ #define APR_BRIGADE_INSERT_HEAD(b, e) do { \ apr_bucket *ap__b = (e); \ APR_RING_INSERT_HEAD(&(b)->list, ap__b, apr_bucket, link); \ APR_BRIGADE_CHECK_CONSISTENCY((b)); \ } while (0) /** * Insert a single bucket at the end of a brigade * @param b The brigade to add to * @param e The bucket to insert */ #define APR_BRIGADE_INSERT_TAIL(b, e) do { \ apr_bucket *ap__b = (e); \ APR_RING_INSERT_TAIL(&(b)->list, ap__b, apr_bucket, link); \ APR_BRIGADE_CHECK_CONSISTENCY((b)); \ } while (0) /** * Concatenate brigade b onto the end of brigade a, leaving brigade b empty * @param a The first brigade * @param b The second brigade */ #define APR_BRIGADE_CONCAT(a, b) do { \ APR_RING_CONCAT(&(a)->list, &(b)->list, apr_bucket, link); \ APR_BRIGADE_CHECK_CONSISTENCY((a)); \ } while (0) /** * Prepend brigade b onto the beginning of brigade a, leaving brigade b empty * @param a The first brigade * @param b The second brigade */ #define APR_BRIGADE_PREPEND(a, b) do { \ APR_RING_PREPEND(&(a)->list, &(b)->list, apr_bucket, link); \ APR_BRIGADE_CHECK_CONSISTENCY((a)); \ } while (0) /** * Insert a single bucket before a specified bucket * @param a The bucket to insert before * @param b The bucket to insert */ #define APR_BUCKET_INSERT_BEFORE(a, b) do { \ apr_bucket *ap__a = (a), *ap__b = (b); \ APR_RING_INSERT_BEFORE(ap__a, ap__b, link); \ APR_BUCKET_CHECK_CONSISTENCY(ap__a); \ } while (0) /** * Insert a single bucket after a specified bucket * @param a The bucket to insert after * @param b The bucket to insert */ #define APR_BUCKET_INSERT_AFTER(a, b) do { \ apr_bucket *ap__a = (a), *ap__b = (b); \ APR_RING_INSERT_AFTER(ap__a, ap__b, link); \ APR_BUCKET_CHECK_CONSISTENCY(ap__a); \ } while (0) /** * Get the next bucket in the list * @param e The current bucket * @return The next bucket */ #define APR_BUCKET_NEXT(e) APR_RING_NEXT((e), link) /** * Get the previous bucket in the list * @param e The current bucket * @return The previous bucket */ #define APR_BUCKET_PREV(e) APR_RING_PREV((e), link) /** * Remove a bucket from its bucket brigade * @param e The bucket to remove */ #define APR_BUCKET_REMOVE(e) APR_RING_REMOVE((e), link) /** * Initialize a new bucket's prev/next pointers * @param e The bucket to initialize */ #define APR_BUCKET_INIT(e) APR_RING_ELEM_INIT((e), link) /** * Determine if a bucket contains metadata. An empty bucket is * safe to arbitrarily remove if and only if this is false. * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_METADATA(e) ((e)->type->is_metadata) /** * Determine if a bucket is a FLUSH bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_FLUSH(e) ((e)->type == &apr_bucket_type_flush) /** * Determine if a bucket is an EOS bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_EOS(e) ((e)->type == &apr_bucket_type_eos) /** * Determine if a bucket is a FILE bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_FILE(e) ((e)->type == &apr_bucket_type_file) /** * Determine if a bucket is a PIPE bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_PIPE(e) ((e)->type == &apr_bucket_type_pipe) /** * Determine if a bucket is a SOCKET bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_SOCKET(e) ((e)->type == &apr_bucket_type_socket) /** * Determine if a bucket is a HEAP bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_HEAP(e) ((e)->type == &apr_bucket_type_heap) /** * Determine if a bucket is a TRANSIENT bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_TRANSIENT(e) ((e)->type == &apr_bucket_type_transient) /** * Determine if a bucket is a IMMORTAL bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_IMMORTAL(e) ((e)->type == &apr_bucket_type_immortal) #if APR_HAS_MMAP /** * Determine if a bucket is a MMAP bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_MMAP(e) ((e)->type == &apr_bucket_type_mmap) #endif /** * Determine if a bucket is a POOL bucket * @param e The bucket to inspect * @return true or false */ #define APR_BUCKET_IS_POOL(e) ((e)->type == &apr_bucket_type_pool) /* * General-purpose reference counting for the various bucket types. * * Any bucket type that keeps track of the resources it uses (i.e. * most of them except for IMMORTAL, TRANSIENT, and EOS) needs to * attach a reference count to the resource so that it can be freed * when the last bucket that uses it goes away. Resource-sharing may * occur because of bucket splits or buckets that refer to globally * cached data. */ /** @see apr_bucket_refcount */ typedef struct apr_bucket_refcount apr_bucket_refcount; /** * The structure used to manage the shared resource must start with an * apr_bucket_refcount which is updated by the general-purpose refcount * code. A pointer to the bucket-type-dependent private data structure * can be cast to a pointer to an apr_bucket_refcount and vice versa. */ struct apr_bucket_refcount { /** The number of references to this bucket */ int refcount; }; /* ***** Reference-counted bucket types ***** */ /** @see apr_bucket_heap */ typedef struct apr_bucket_heap apr_bucket_heap; /** * A bucket referring to data allocated off the heap. */ struct apr_bucket_heap { /** Number of buckets using this memory */ apr_bucket_refcount refcount; /** The start of the data actually allocated. This should never be * modified, it is only used to free the bucket. */ char *base; /** how much memory was allocated */ apr_size_t alloc_len; /** function to use to delete the data */ void (*free_func)(void *data); }; /** @see apr_bucket_pool */ typedef struct apr_bucket_pool apr_bucket_pool; /** * A bucket referring to data allocated from a pool */ struct apr_bucket_pool { /** The pool bucket must be able to be easily morphed to a heap * bucket if the pool gets cleaned up before all references are * destroyed. This apr_bucket_heap structure is populated automatically * when the pool gets cleaned up, and subsequent calls to pool_read() * will result in the apr_bucket in question being morphed into a * regular heap bucket. (To avoid having to do many extra refcount * manipulations and b->data manipulations, the apr_bucket_pool * struct actually *contains* the apr_bucket_heap struct that it * will become as its first element; the two share their * apr_bucket_refcount members.) */ apr_bucket_heap heap; /** The block of data actually allocated from the pool. * Segments of this block are referenced by adjusting * the start and length of the apr_bucket accordingly. * This will be NULL after the pool gets cleaned up. */ const char *base; /** The pool the data was allocated from. When the pool * is cleaned up, this gets set to NULL as an indicator * to pool_read() that the data is now on the heap and * so it should morph the bucket into a regular heap * bucket before continuing. */ apr_pool_t *pool; /** The freelist this structure was allocated from, which is * needed in the cleanup phase in order to allocate space on the heap */ apr_bucket_alloc_t *list; }; #if APR_HAS_MMAP /** @see apr_bucket_mmap */ typedef struct apr_bucket_mmap apr_bucket_mmap; /** * A bucket referring to an mmap()ed file */ struct apr_bucket_mmap { /** Number of buckets using this memory */ apr_bucket_refcount refcount; /** The mmap this sub_bucket refers to */ apr_mmap_t *mmap; }; #endif /** @see apr_bucket_file */ typedef struct apr_bucket_file apr_bucket_file; /** * A bucket referring to an file */ struct apr_bucket_file { /** Number of buckets using this memory */ apr_bucket_refcount refcount; /** The file this bucket refers to */ apr_file_t *fd; /** The pool into which any needed structures should * be created while reading from this file bucket */ apr_pool_t *readpool; #if APR_HAS_MMAP /** Whether this bucket should be memory-mapped if * a caller tries to read from it */ int can_mmap; #endif /* APR_HAS_MMAP */ }; /** @see apr_bucket_structs */ typedef union apr_bucket_structs apr_bucket_structs; /** * A union of all bucket structures so we know what * the max size is. */ union apr_bucket_structs { apr_bucket b; /**< Bucket */ apr_bucket_heap heap; /**< Heap */ apr_bucket_pool pool; /**< Pool */ #if APR_HAS_MMAP apr_bucket_mmap mmap; /**< MMap */ #endif apr_bucket_file file; /**< File */ }; /** * The amount that apr_bucket_alloc() should allocate in the common case. * Note: this is twice as big as apr_bucket_structs to allow breathing * room for third-party bucket types. */ #define APR_BUCKET_ALLOC_SIZE APR_ALIGN_DEFAULT(2*sizeof(apr_bucket_structs)) /* ***** Bucket Brigade Functions ***** */ /** * Create a new bucket brigade. The bucket brigade is originally empty. * @param p The pool to associate with the brigade. Data is not allocated out * of the pool, but a cleanup is registered. * @param list The bucket allocator to use * @return The empty bucket brigade */ APU_DECLARE(apr_bucket_brigade *) apr_brigade_create(apr_pool_t *p, apr_bucket_alloc_t *list); /** * destroy an entire bucket brigade. This includes destroying all of the * buckets within the bucket brigade's bucket list. * @param b The bucket brigade to destroy */ APU_DECLARE(apr_status_t) apr_brigade_destroy(apr_bucket_brigade *b); /** * empty out an entire bucket brigade. This includes destroying all of the * buckets within the bucket brigade's bucket list. This is similar to * apr_brigade_destroy(), except that it does not deregister the brigade's * pool cleanup function. * @param data The bucket brigade to clean up * @remark Generally, you should use apr_brigade_destroy(). This function * can be useful in situations where you have a single brigade that * you wish to reuse many times by destroying all of the buckets in * the brigade and putting new buckets into it later. */ APU_DECLARE(apr_status_t) apr_brigade_cleanup(void *data); /** * Move the buckets from the tail end of the existing brigade @a b into * the brigade @a a. If @a a is NULL a new brigade is created. Buckets * from @a e to the last bucket (inclusively) of brigade @a b are moved * from @a b to the returned brigade @a a. * * @param b The brigade to split * @param e The first bucket to move * @param a The brigade which should be used for the result or NULL if * a new brigade should be created. The brigade @a a will be * cleared if it is not empty. * @return The brigade supplied in @a a or a new one if @a a was NULL. * @warning Note that this function allocates a new brigade if @a a is * NULL so memory consumption should be carefully considered. */ APU_DECLARE(apr_bucket_brigade *) apr_brigade_split_ex(apr_bucket_brigade *b, apr_bucket *e, apr_bucket_brigade *a); /** * Create a new bucket brigade and move the buckets from the tail end * of an existing brigade into the new brigade. Buckets from * @a e to the last bucket (inclusively) of brigade @a b * are moved from @a b to the returned brigade. * @param b The brigade to split * @param e The first bucket to move * @return The new brigade * @warning Note that this function always allocates a new brigade * so memory consumption should be carefully considered. */ APU_DECLARE(apr_bucket_brigade *) apr_brigade_split(apr_bucket_brigade *b, apr_bucket *e); /** * Partition a bucket brigade at a given offset (in bytes from the start of * the brigade). This is useful whenever a filter wants to use known ranges * of bytes from the brigade; the ranges can even overlap. * @param b The brigade to partition * @param point The offset at which to partition the brigade * @param after_point Returns a pointer to the first bucket after the partition * @return APR_SUCCESS on success, APR_INCOMPLETE if the contents of the * brigade were shorter than @a point, or an error code. * @remark if APR_INCOMPLETE is returned, @a after_point will be set to * the brigade sentinel. */ APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b, apr_off_t point, apr_bucket **after_point); /** * Return the total length of the brigade. * @param bb The brigade to compute the length of * @param read_all Read unknown-length buckets to force a size * @param length Returns the length of the brigade (up to the end, or up * to a bucket read error), or -1 if the brigade has buckets * of indeterminate length and read_all is 0. */ APU_DECLARE(apr_status_t) apr_brigade_length(apr_bucket_brigade *bb, int read_all, apr_off_t *length); /** * Take a bucket brigade and store the data in a flat char* * @param bb The bucket brigade to create the char* from * @param c The char* to write into * @param len The maximum length of the char array. On return, it is the * actual length of the char array. */ APU_DECLARE(apr_status_t) apr_brigade_flatten(apr_bucket_brigade *bb, char *c, apr_size_t *len); /** * Creates a pool-allocated string representing a flat bucket brigade * @param bb The bucket brigade to create the char array from * @param c On return, the allocated char array * @param len On return, the length of the char array. * @param pool The pool to allocate the string from. */ APU_DECLARE(apr_status_t) apr_brigade_pflatten(apr_bucket_brigade *bb, char **c, apr_size_t *len, apr_pool_t *pool); /** * Split a brigade to represent one LF line. * @param bbOut The bucket brigade that will have the LF line appended to. * @param bbIn The input bucket brigade to search for a LF-line. * @param block The blocking mode to be used to split the line. * @param maxbytes The maximum bytes to read. If this many bytes are seen * without a LF, the brigade will contain a partial line. */ APU_DECLARE(apr_status_t) apr_brigade_split_line(apr_bucket_brigade *bbOut, apr_bucket_brigade *bbIn, apr_read_type_e block, apr_off_t maxbytes); /** * Create an iovec of the elements in a bucket_brigade... return number * of elements used. This is useful for writing to a file or to the * network efficiently. * @param b The bucket brigade to create the iovec from * @param vec The iovec to create * @param nvec The number of elements in the iovec. On return, it is the * number of iovec elements actually filled out. */ APU_DECLARE(apr_status_t) apr_brigade_to_iovec(apr_bucket_brigade *b, struct iovec *vec, int *nvec); /** * This function writes a list of strings into a bucket brigade. * @param b The bucket brigade to add to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param va A list of strings to add * @return APR_SUCCESS or error code. */ APU_DECLARE(apr_status_t) apr_brigade_vputstrs(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, va_list va); /** * This function writes a string into a bucket brigade. * * The apr_brigade_write function attempts to be efficient with the * handling of heap buckets. Regardless of the amount of data stored * inside a heap bucket, heap buckets are a fixed size to promote their * reuse. * * If an attempt is made to write a string to a brigade that already * ends with a heap bucket, this function will attempt to pack the * string into the remaining space in the previous heap bucket, before * allocating a new heap bucket. * * This function always returns APR_SUCCESS, unless a flush function is * passed, in which case the return value of the flush function will be * returned if used. * @param b The bucket brigade to add to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param str The string to add * @param nbyte The number of bytes to write * @return APR_SUCCESS or error code */ APU_DECLARE(apr_status_t) apr_brigade_write(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *str, apr_size_t nbyte); /** * This function writes multiple strings into a bucket brigade. * @param b The bucket brigade to add to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param vec The strings to add (address plus length for each) * @param nvec The number of entries in iovec * @return APR_SUCCESS or error code */ APU_DECLARE(apr_status_t) apr_brigade_writev(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const struct iovec *vec, apr_size_t nvec); /** * This function writes a string into a bucket brigade. * @param bb The bucket brigade to add to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param str The string to add * @return APR_SUCCESS or error code */ APU_DECLARE(apr_status_t) apr_brigade_puts(apr_bucket_brigade *bb, apr_brigade_flush flush, void *ctx, const char *str); /** * This function writes a character into a bucket brigade. * @param b The bucket brigade to add to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param c The character to add * @return APR_SUCCESS or error code */ APU_DECLARE(apr_status_t) apr_brigade_putc(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char c); /** * This function writes an unspecified number of strings into a bucket brigade. * @param b The bucket brigade to add to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param ... The strings to add * @return APR_SUCCESS or error code */ APU_DECLARE_NONSTD(apr_status_t) apr_brigade_putstrs(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, ...); /** * Evaluate a printf and put the resulting string at the end * of the bucket brigade. * @param b The brigade to write to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param fmt The format of the string to write * @param ... The arguments to fill out the format * @return APR_SUCCESS or error code */ APU_DECLARE_NONSTD(apr_status_t) apr_brigade_printf(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *fmt, ...) __attribute__((format(printf,4,5))); /** * Evaluate a printf and put the resulting string at the end * of the bucket brigade. * @param b The brigade to write to * @param flush The flush function to use if the brigade is full * @param ctx The structure to pass to the flush function * @param fmt The format of the string to write * @param va The arguments to fill out the format * @return APR_SUCCESS or error code */ APU_DECLARE(apr_status_t) apr_brigade_vprintf(apr_bucket_brigade *b, apr_brigade_flush flush, void *ctx, const char *fmt, va_list va); /** * Utility function to insert a file (or a segment of a file) onto the * end of the brigade. The file is split into multiple buckets if it * is larger than the maximum size which can be represented by a * single bucket. * @param bb the brigade to insert into * @param f the file to insert * @param start the offset of the start of the segment * @param len the length of the segment of the file to insert * @param p pool from which file buckets are allocated * @return the last bucket inserted */ APU_DECLARE(apr_bucket *) apr_brigade_insert_file(apr_bucket_brigade *bb, apr_file_t *f, apr_off_t start, apr_off_t len, apr_pool_t *p); /* ***** Bucket freelist functions ***** */ /** * Create a bucket allocator. * @param p This pool's underlying apr_allocator_t is used to allocate memory * for the bucket allocator. When the pool is destroyed, the bucket * allocator's cleanup routine will free all memory that has been * allocated from it. * @remark The reason the allocator gets its memory from the pool's * apr_allocator_t rather than from the pool itself is because * the bucket allocator will free large memory blocks back to the * allocator when it's done with them, thereby preventing memory * footprint growth that would occur if we allocated from the pool. * @warning The allocator must never be used by more than one thread at a time. */ APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create(apr_pool_t *p); /** * Create a bucket allocator. * @param allocator This apr_allocator_t is used to allocate both the bucket * allocator and all memory handed out by the bucket allocator. The * caller is responsible for destroying the bucket allocator and the * apr_allocator_t -- no automatic cleanups will happen. * @warning The allocator must never be used by more than one thread at a time. */ APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create_ex(apr_allocator_t *allocator); /** * Destroy a bucket allocator. * @param list The allocator to be destroyed */ APU_DECLARE_NONSTD(void) apr_bucket_alloc_destroy(apr_bucket_alloc_t *list); /** * Allocate memory for use by the buckets. * @param size The amount to allocate. * @param list The allocator from which to allocate the memory. */ APU_DECLARE_NONSTD(void *) apr_bucket_alloc(apr_size_t size, apr_bucket_alloc_t *list); /** * Free memory previously allocated with apr_bucket_alloc(). * @param block The block of memory to be freed. */ APU_DECLARE_NONSTD(void) apr_bucket_free(void *block); /* ***** Bucket Functions ***** */ /** * Free the resources used by a bucket. If multiple buckets refer to * the same resource it is freed when the last one goes away. * @see apr_bucket_delete() * @param e The bucket to destroy */ #define apr_bucket_destroy(e) do { \ (e)->type->destroy((e)->data); \ (e)->free(e); \ } while (0) /** * Delete a bucket by removing it from its brigade (if any) and then * destroying it. * @remark This mainly acts as an aid in avoiding code verbosity. It is * the preferred exact equivalent to: *
* APR_BUCKET_REMOVE(e); * apr_bucket_destroy(e); ** @param e The bucket to delete */ #define apr_bucket_delete(e) do { \ APR_BUCKET_REMOVE(e); \ apr_bucket_destroy(e); \ } while (0) /** * Read some data from the bucket. * * The apr_bucket_read function returns a convenient amount of data * from the bucket provided, writing the address and length of the * data to the pointers provided by the caller. The function tries * as hard as possible to avoid a memory copy. * * Buckets are expected to be a member of a brigade at the time they * are read. * * In typical application code, buckets are read in a loop, and after * each bucket is read and processed, it is moved or deleted from the * brigade and the next bucket read. * * The definition of "convenient" depends on the type of bucket that * is being read, and is decided by APR. In the case of memory based * buckets such as heap and immortal buckets, a pointer will be * returned to the location of the buffer containing the complete * contents of the bucket. * * Some buckets, such as the socket bucket, might have no concept * of length. If an attempt is made to read such a bucket, the * apr_bucket_read function will read a convenient amount of data * from the socket. The socket bucket is magically morphed into a * heap bucket containing the just-read data, and a new socket bucket * is inserted just after this heap bucket. * * To understand why apr_bucket_read might do this, consider the loop * described above to read and process buckets. The current bucket * is magically morphed into a heap bucket and returned to the caller. * The caller processes the data, and deletes the heap bucket, moving * onto the next bucket, the new socket bucket. This process repeats, * giving the illusion of a bucket brigade that contains potentially * infinite amounts of data. It is up to the caller to decide at what * point to stop reading buckets. * * Some buckets, such as the file bucket, might have a fixed size, * but be significantly larger than is practical to store in RAM in * one go. As with the socket bucket, if an attempt is made to read * from a file bucket, the file bucket is magically morphed into a * heap bucket containing a convenient amount of data read from the * current offset in the file. During the read, the offset will be * moved forward on the file, and a new file bucket will be inserted * directly after the current bucket representing the remainder of the * file. If the heap bucket was large enough to store the whole * remainder of the file, no more file buckets are inserted, and the * file bucket will disappear completely. * * The pattern for reading buckets described above does create the * illusion that the code is willing to swallow buckets that might be * too large for the system to handle in one go. This however is just * an illusion: APR will always ensure that large (file) or infinite * (socket) buckets are broken into convenient bite sized heap buckets * before data is returned to the caller. * * There is a potential gotcha to watch for: if buckets are read in a * loop, and aren't deleted after being processed, the potentially large * bucket will slowly be converted into RAM resident heap buckets. If * the file is larger than available RAM, an out of memory condition * could be caused if the application is not careful to manage this. * * @param e The bucket to read from * @param str The location to store a pointer to the data in * @param len The location to store the amount of data read * @param block Whether the read function blocks */ #define apr_bucket_read(e,str,len,block) (e)->type->read(e, str, len, block) /** * Setaside data so that stack data is not destroyed on returning from * the function * @param e The bucket to setaside * @param p The pool to setaside into */ #define apr_bucket_setaside(e,p) (e)->type->setaside(e,p) /** * Split one bucket in two at the point provided. * * Once split, the original bucket becomes the first of the two new buckets. * * (It is assumed that the bucket is a member of a brigade when this * function is called). * @param e The bucket to split * @param point The offset to split the bucket at */ #define apr_bucket_split(e,point) (e)->type->split(e, point) /** * Copy a bucket. * @param e The bucket to copy * @param c Returns a pointer to the new bucket */ #define apr_bucket_copy(e,c) (e)->type->copy(e, c) /* Bucket type handling */ /** * This function simply returns APR_SUCCESS to denote that the bucket does * not require anything to happen for its setaside() function. This is * appropriate for buckets that have "immortal" data -- the data will live * at least as long as the bucket. * @param data The bucket to setaside * @param pool The pool defining the desired lifetime of the bucket data * @return APR_SUCCESS */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_noop(apr_bucket *data, apr_pool_t *pool); /** * A place holder function that signifies that the setaside function was not * implemented for this bucket * @param data The bucket to setaside * @param pool The pool defining the desired lifetime of the bucket data * @return APR_ENOTIMPL */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_notimpl(apr_bucket *data, apr_pool_t *pool); /** * A place holder function that signifies that the split function was not * implemented for this bucket * @param data The bucket to split * @param point The location to split the bucket * @return APR_ENOTIMPL */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_split_notimpl(apr_bucket *data, apr_size_t point); /** * A place holder function that signifies that the copy function was not * implemented for this bucket * @param e The bucket to copy * @param c Returns a pointer to the new bucket * @return APR_ENOTIMPL */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_copy_notimpl(apr_bucket *e, apr_bucket **c); /** * A place holder function that signifies that this bucket does not need * to do anything special to be destroyed. That's only the case for buckets * that either have no data (metadata buckets) or buckets whose data pointer * points to something that's not a bucket-type-specific structure, as with * simple buckets where data points to a string and pipe buckets where data * points directly to the apr_file_t. * @param data The bucket data to destroy */ APU_DECLARE_NONSTD(void) apr_bucket_destroy_noop(void *data); /** * There is no apr_bucket_destroy_notimpl, because destruction is required * to be implemented (it could be a noop, but only if that makes sense for * the bucket type) */ /* There is no apr_bucket_read_notimpl, because it is a required function */ /* All of the bucket types implemented by the core */ /** * The flush bucket type. This signifies that all data should be flushed to * the next filter. The flush bucket should be sent with the other buckets. */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_flush; /** * The EOS bucket type. This signifies that there will be no more data, ever. * All filters MUST send all data to the next filter when they receive a * bucket of this type */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_eos; /** * The FILE bucket type. This bucket represents a file on disk */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_file; /** * The HEAP bucket type. This bucket represents a data allocated from the * heap. */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_heap; #if APR_HAS_MMAP /** * The MMAP bucket type. This bucket represents an MMAP'ed file */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_mmap; #endif /** * The POOL bucket type. This bucket represents a data that was allocated * from a pool. IF this bucket is still available when the pool is cleared, * the data is copied on to the heap. */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pool; /** * The PIPE bucket type. This bucket represents a pipe to another program. */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_pipe; /** * The IMMORTAL bucket type. This bucket represents a segment of data that * the creator is willing to take responsibility for. The core will do * nothing with the data in an immortal bucket */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_immortal; /** * The TRANSIENT bucket type. This bucket represents a data allocated off * the stack. When the setaside function is called, this data is copied on * to the heap */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_transient; /** * The SOCKET bucket type. This bucket represents a socket to another machine */ APU_DECLARE_DATA extern const apr_bucket_type_t apr_bucket_type_socket; /* ***** Simple buckets ***** */ /** * Split a simple bucket into two at the given point. Most non-reference * counting buckets that allow multiple references to the same block of * data (eg transient and immortal) will use this as their split function * without any additional type-specific handling. * @param b The bucket to be split * @param point The offset of the first byte in the new bucket * @return APR_EINVAL if the point is not within the bucket; * APR_ENOMEM if allocation failed; * or APR_SUCCESS */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_split(apr_bucket *b, apr_size_t point); /** * Copy a simple bucket. Most non-reference-counting buckets that allow * multiple references to the same block of data (eg transient and immortal) * will use this as their copy function without any additional type-specific * handling. * @param a The bucket to copy * @param b Returns a pointer to the new bucket * @return APR_ENOMEM if allocation failed; * or APR_SUCCESS */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_copy(apr_bucket *a, apr_bucket **b); /* ***** Shared, reference-counted buckets ***** */ /** * Initialize a bucket containing reference-counted data that may be * shared. The caller must allocate the bucket if necessary and * initialize its type-dependent fields, and allocate and initialize * its own private data structure. This function should only be called * by type-specific bucket creation functions. * @param b The bucket to initialize * @param data A pointer to the private data structure * with the reference count at the start * @param start The start of the data in the bucket * relative to the private base pointer * @param length The length of the data in the bucket * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_shared_make(apr_bucket *b, void *data, apr_off_t start, apr_size_t length); /** * Decrement the refcount of the data in the bucket. This function * should only be called by type-specific bucket destruction functions. * @param data The private data pointer from the bucket to be destroyed * @return TRUE or FALSE; TRUE if the reference count is now * zero, indicating that the shared resource itself can * be destroyed by the caller. */ APU_DECLARE(int) apr_bucket_shared_destroy(void *data); /** * Split a bucket into two at the given point, and adjust the refcount * to the underlying data. Most reference-counting bucket types will * be able to use this function as their split function without any * additional type-specific handling. * @param b The bucket to be split * @param point The offset of the first byte in the new bucket * @return APR_EINVAL if the point is not within the bucket; * APR_ENOMEM if allocation failed; * or APR_SUCCESS */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_split(apr_bucket *b, apr_size_t point); /** * Copy a refcounted bucket, incrementing the reference count. Most * reference-counting bucket types will be able to use this function * as their copy function without any additional type-specific handling. * @param a The bucket to copy * @param b Returns a pointer to the new bucket * @return APR_ENOMEM if allocation failed; or APR_SUCCESS */ APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_copy(apr_bucket *a, apr_bucket **b); /* ***** Functions to Create Buckets of varying types ***** */ /* * Each bucket type foo has two initialization functions: * apr_bucket_foo_make which sets up some already-allocated memory as a * bucket of type foo; and apr_bucket_foo_create which allocates memory * for the bucket, calls apr_bucket_make_foo, and initializes the * bucket's list pointers. The apr_bucket_foo_make functions are used * inside the bucket code to change the type of buckets in place; * other code should call apr_bucket_foo_create. All the initialization * functions change nothing if they fail. */ /** * Create an End of Stream bucket. This indicates that there is no more data * coming from down the filter stack. All filters should flush at this point. * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_eos_create(apr_bucket_alloc_t *list); /** * Make the bucket passed in an EOS bucket. This indicates that there is no * more data coming from down the filter stack. All filters should flush at * this point. * @param b The bucket to make into an EOS bucket * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_eos_make(apr_bucket *b); /** * Create a flush bucket. This indicates that filters should flush their * data. There is no guarantee that they will flush it, but this is the * best we can do. * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_flush_create(apr_bucket_alloc_t *list); /** * Make the bucket passed in a FLUSH bucket. This indicates that filters * should flush their data. There is no guarantee that they will flush it, * but this is the best we can do. * @param b The bucket to make into a FLUSH bucket * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_flush_make(apr_bucket *b); /** * Create a bucket referring to long-lived data. * @param buf The data to insert into the bucket * @param nbyte The size of the data to insert. * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_immortal_create(const char *buf, apr_size_t nbyte, apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to long-lived data * @param b The bucket to make into a IMMORTAL bucket * @param buf The data to insert into the bucket * @param nbyte The size of the data to insert. * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_immortal_make(apr_bucket *b, const char *buf, apr_size_t nbyte); /** * Create a bucket referring to data on the stack. * @param buf The data to insert into the bucket * @param nbyte The size of the data to insert. * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_transient_create(const char *buf, apr_size_t nbyte, apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to stack data * @param b The bucket to make into a TRANSIENT bucket * @param buf The data to insert into the bucket * @param nbyte The size of the data to insert. * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_transient_make(apr_bucket *b, const char *buf, apr_size_t nbyte); /** * Create a bucket referring to memory on the heap. If the caller asks * for the data to be copied, this function always allocates 4K of * memory so that more data can be added to the bucket without * requiring another allocation. Therefore not all the data may be put * into the bucket. If copying is not requested then the bucket takes * over responsibility for free()ing the memory. * @param buf The buffer to insert into the bucket * @param nbyte The size of the buffer to insert. * @param free_func Function to use to free the data; NULL indicates that the * bucket should make a copy of the data * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_heap_create(const char *buf, apr_size_t nbyte, void (*free_func)(void *data), apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to heap data * @param b The bucket to make into a HEAP bucket * @param buf The buffer to insert into the bucket * @param nbyte The size of the buffer to insert. * @param free_func Function to use to free the data; NULL indicates that the * bucket should make a copy of the data * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_heap_make(apr_bucket *b, const char *buf, apr_size_t nbyte, void (*free_func)(void *data)); /** * Create a bucket referring to memory allocated from a pool. * * @param buf The buffer to insert into the bucket * @param length The number of bytes referred to by this bucket * @param pool The pool the memory was allocated from * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_pool_create(const char *buf, apr_size_t length, apr_pool_t *pool, apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to pool data * @param b The bucket to make into a pool bucket * @param buf The buffer to insert into the bucket * @param length The number of bytes referred to by this bucket * @param pool The pool the memory was allocated from * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_pool_make(apr_bucket *b, const char *buf, apr_size_t length, apr_pool_t *pool); #if APR_HAS_MMAP /** * Create a bucket referring to mmap()ed memory. * @param mm The mmap to insert into the bucket * @param start The offset of the first byte in the mmap * that this bucket refers to * @param length The number of bytes referred to by this bucket * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_mmap_create(apr_mmap_t *mm, apr_off_t start, apr_size_t length, apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to an MMAP'ed file * @param b The bucket to make into a MMAP bucket * @param mm The mmap to insert into the bucket * @param start The offset of the first byte in the mmap * that this bucket refers to * @param length The number of bytes referred to by this bucket * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_mmap_make(apr_bucket *b, apr_mmap_t *mm, apr_off_t start, apr_size_t length); #endif /** * Create a bucket referring to a socket. * @param thissock The socket to put in the bucket * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_socket_create(apr_socket_t *thissock, apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to a socket * @param b The bucket to make into a SOCKET bucket * @param thissock The socket to put in the bucket * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_socket_make(apr_bucket *b, apr_socket_t *thissock); /** * Create a bucket referring to a pipe. * @param thispipe The pipe to put in the bucket * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_pipe_create(apr_file_t *thispipe, apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to a pipe * @param b The bucket to make into a PIPE bucket * @param thispipe The pipe to put in the bucket * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_pipe_make(apr_bucket *b, apr_file_t *thispipe); /** * Create a bucket referring to a file. * @param fd The file to put in the bucket * @param offset The offset where the data of interest begins in the file * @param len The amount of data in the file we are interested in * @param p The pool into which any needed structures should be created * while reading from this file bucket * @param list The freelist from which this bucket should be allocated * @return The new bucket, or NULL if allocation failed * @remark If the file is truncated such that the segment of the file * referenced by the bucket no longer exists, an attempt to read * from the bucket will fail with APR_EOF. * @remark apr_brigade_insert_file() should generally be used to * insert files into brigades, since that function can correctly * handle large file issues. */ APU_DECLARE(apr_bucket *) apr_bucket_file_create(apr_file_t *fd, apr_off_t offset, apr_size_t len, apr_pool_t *p, apr_bucket_alloc_t *list); /** * Make the bucket passed in a bucket refer to a file * @param b The bucket to make into a FILE bucket * @param fd The file to put in the bucket * @param offset The offset where the data of interest begins in the file * @param len The amount of data in the file we are interested in * @param p The pool into which any needed structures should be created * while reading from this file bucket * @return The new bucket, or NULL if allocation failed */ APU_DECLARE(apr_bucket *) apr_bucket_file_make(apr_bucket *b, apr_file_t *fd, apr_off_t offset, apr_size_t len, apr_pool_t *p); /** * Enable or disable memory-mapping for a FILE bucket (default is enabled) * @param b The bucket * @param enabled Whether memory-mapping should be enabled * @return APR_SUCCESS normally, or an error code if the operation fails */ APU_DECLARE(apr_status_t) apr_bucket_file_enable_mmap(apr_bucket *b, int enabled); /** @} */ #ifdef __cplusplus } #endif #endif /* !APR_BUCKETS_H */ 07070100038552000081a400000000000000000000000152d366ac000010c70000011200010050ffffffffffffffff0000002b00000000root/usr/local/include/apr-1/apu_version.h /* 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. */ #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 */ #define APU_COPYRIGHT "Copyright (c) 2013 The Apache Software " \ "Foundation or its licensors, as applicable." /* 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 5 /** patch level * The Patch Level never includes API changes, simply bug fixes. * Reset to 0 when upgrading APR_MINOR_VERSION */ #define APU_PATCH_VERSION 3 /** * 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 */ #ifndef APU_IS_DEV_STRING #define APU_IS_DEV_STRING "-dev" #endif #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 */ 07070100038542000081a400000000000000000000000152d366ac000043480000011200010050ffffffffffffffff0000002c00000000root/usr/local/include/apr-1/apr_memcache.h /* 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. */ #ifndef APR_MEMCACHE_H #define APR_MEMCACHE_H /** * @file apr_memcache.h * @brief Client interface for memcached * @remark To use this interface you must have a separate memcached * server running. See the memcached website at http://www.danga.com/memcached/ * for more information. */ #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 */ /** * @defgroup APR_Util_MC Memcached Client Routines * @ingroup APR_Util * @{ */ /** Specifies the status of a memcached server */ typedef enum { APR_MC_SERVER_LIVE, /**< Server is alive and responding to requests */ APR_MC_SERVER_DEAD /**< Server is not responding to requests */ } apr_memcache_server_status_t; /** Opaque memcache client connection object */ typedef struct apr_memcache_conn_t apr_memcache_conn_t; /** Memcache Server Info Object */ typedef struct apr_memcache_server_t apr_memcache_server_t; struct apr_memcache_server_t { const char *host; /**< Hostname of this Server */ apr_port_t port; /**< Port of this Server */ apr_memcache_server_status_t status; /**< @see apr_memcache_server_status_t */ #if APR_HAS_THREADS || defined(DOXYGEN) apr_reslist_t *conns; /**< Resource list of actual client connections */ #else apr_memcache_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; }; /* 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_memcache_hash_func)(void *baton, const char *data, const apr_size_t data_len); typedef struct apr_memcache_t apr_memcache_t; /* Custom Server Select callback function prototype. * @param baton user selected baton * @param mc memcache instance, use mc->live_servers to select a node * @param hash hash of the selected key. */ typedef apr_memcache_server_t* (*apr_memcache_server_func)(void *baton, apr_memcache_t *mc, const apr_uint32_t hash); /** Container for a set of memcached servers */ struct apr_memcache_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_memcache_server_t **live_servers; /**< Array of Servers */ apr_pool_t *p; /** Pool to use for allocations */ void *hash_baton; apr_memcache_hash_func hash_func; void *server_baton; apr_memcache_server_func server_func; }; /** Returned Data from a multiple get */ typedef struct { apr_status_t status; const char* key; apr_size_t len; char *data; apr_uint16_t flags; } apr_memcache_value_t; /** * Creates a crc32 hash used to split keys between servers * @param mc The memcache 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 memcached clients. */ APU_DECLARE(apr_uint32_t) apr_memcache_hash(apr_memcache_t *mc, const char *data, const apr_size_t data_len); /** * Pure CRC32 Hash. Used by some clients. */ APU_DECLARE(apr_uint32_t) apr_memcache_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_memcache_hash_default(void *baton, const char *data, const apr_size_t data_len); /** * Picks a server based on a hash * @param mc The memcache client object to use * @param hash Hashed value of a Key * @return server that controls specified hash * @see apr_memcache_hash */ APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server_hash(apr_memcache_t *mc, const apr_uint32_t hash); /** * server selection compatible with the standard Perl Client. */ APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server_hash_default(void *baton, apr_memcache_t *mc, const apr_uint32_t hash); /** * Adds a server to a client object * @param mc The memcache 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_memcache_add_server(apr_memcache_t *mc, apr_memcache_server_t *server); /** * Finds a Server object based on a hostname/port pair * @param mc The memcache 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_memcache_server_t *) apr_memcache_find_server(apr_memcache_t *mc, const char *host, apr_port_t port); /** * Enables a Server for use again * @param mc The memcache client object to use * @param ms Server to Activate */ APU_DECLARE(apr_status_t) apr_memcache_enable_server(apr_memcache_t *mc, apr_memcache_server_t *ms); /** * Disable a Server * @param mc The memcache client object to use * @param ms Server to Disable */ APU_DECLARE(apr_status_t) apr_memcache_disable_server(apr_memcache_t *mc, apr_memcache_server_t *ms); /** * 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 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_memcache_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_memcache_server_t **ns); /** * Creates a new memcached client object * @param p Pool to use * @param max_servers maximum number of servers * @param flags Not currently used * @param mc location of the new memcache client object */ APU_DECLARE(apr_status_t) apr_memcache_create(apr_pool_t *p, apr_uint16_t max_servers, apr_uint32_t flags, apr_memcache_t **mc); /** * Gets a value from the server, allocating the value out of p * @param mc 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_memcache_getp(apr_memcache_t *mc, apr_pool_t *p, const char* key, char **baton, apr_size_t *len, apr_uint16_t *flags); /** * Add a key to a hash for a multiget query * if the hash (*value) is NULL it will be created * @param data_pool pool from where the hash and their items are created from * @param key null terminated string containing the key * @param values hash of keys and values that this key will be added to * @return */ APU_DECLARE(void) apr_memcache_add_multget_key(apr_pool_t *data_pool, const char* key, apr_hash_t **values); /** * Gets multiple values from the server, allocating the values out of p * @param mc 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_memcache_value_t keyed by strings, contains the * result of the multiget call. * @return */ APU_DECLARE(apr_status_t) apr_memcache_multgetp(apr_memcache_t *mc, apr_pool_t *temp_pool, apr_pool_t *data_pool, apr_hash_t *values); /** * Sets a value by key on the server * @param mc 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_memcache_set(apr_memcache_t *mc, const char *key, char *baton, const apr_size_t data_size, apr_uint32_t timeout, apr_uint16_t flags); /** * Adds value by key on the server * @param mc 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 for the data to live on the server * @param flags any flags set by the client for this key * @return APR_SUCCESS if the key was added, APR_EEXIST if the key * already exists on the server. */ APU_DECLARE(apr_status_t) apr_memcache_add(apr_memcache_t *mc, const char *key, char *baton, const apr_size_t data_size, apr_uint32_t timeout, apr_uint16_t flags); /** * Replaces value by key on the server * @param mc 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 for the data to live on the server * @param flags any flags set by the client for this key * @return APR_SUCCESS if the key was added, APR_EEXIST if the key * did not exist on the server. */ APU_DECLARE(apr_status_t) apr_memcache_replace(apr_memcache_t *mc, 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 mc 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_memcache_delete(apr_memcache_t *mc, const char *key, apr_uint32_t timeout); /** * Increments a value * @param mc client to use * @param key null terminated string containing the key * @param n number to increment by * @param nv new value after incrementing */ APU_DECLARE(apr_status_t) apr_memcache_incr(apr_memcache_t *mc, const char *key, apr_int32_t n, apr_uint32_t *nv); /** * Decrements a value * @param mc client to use * @param key null terminated string containing the key * @param n number to decrement by * @param new_value new value after decrementing */ APU_DECLARE(apr_status_t) apr_memcache_decr(apr_memcache_t *mc, const char *key, apr_int32_t n, apr_uint32_t *new_value); /** * Query a server's version * @param ms server to query * @param p Pool to allocate answer from * @param baton location to store server version string * @param len length of the server version string */ APU_DECLARE(apr_status_t) apr_memcache_version(apr_memcache_server_t *ms, apr_pool_t *p, char **baton); typedef struct { /** Version string of this server */ const char *version; /** Process id of this server process */ apr_uint32_t pid; /** Number of seconds this server has been running */ apr_uint32_t uptime; /** current UNIX time according to the server */ apr_time_t time; /** The size of a pointer on the current machine */ apr_uint32_t pointer_size; /** Accumulated user time for this process */ apr_time_t rusage_user; /** Accumulated system time for this process */ apr_time_t rusage_system; /** Current number of items stored by the server */ apr_uint32_t curr_items; /** Total number of items stored by this server */ apr_uint32_t total_items; /** Current number of bytes used by this server to store items */ apr_uint64_t bytes; /** Number of open connections */ apr_uint32_t curr_connections; /** Total number of connections opened since the server started running */ apr_uint32_t total_connections; /** Number of connection structures allocated by the server */ apr_uint32_t connection_structures; /** Cumulative number of retrieval requests */ apr_uint32_t cmd_get; /** Cumulative number of storage requests */ apr_uint32_t cmd_set; /** Number of keys that have been requested and found present */ apr_uint32_t get_hits; /** Number of items that have been requested and not found */ apr_uint32_t get_misses; /** Number of items removed from cache because they passed their expiration time */ apr_uint64_t evictions; /** Total number of bytes read by this server */ apr_uint64_t bytes_read; /** Total number of bytes sent by this server */ apr_uint64_t bytes_written; /** Number of bytes this server is allowed to use for storage. */ apr_uint32_t limit_maxbytes; /** Number of threads the server is running (if built with threading) */ apr_uint32_t threads; } apr_memcache_stats_t; /** * Query a server for statistics * @param ms server to query * @param p Pool to allocate answer from * @param stats location of the new statistics structure */ APU_DECLARE(apr_status_t) apr_memcache_stats(apr_memcache_server_t *ms, apr_pool_t *p, apr_memcache_stats_t **stats); /** @} */ #ifdef __cplusplus } #endif #endif /* APR_MEMCACHE_H */ 07070100038539000081a400000000000000000000000152d366ac000021970000011200010050ffffffffffffffff0000002700000000root/usr/local/include/apr-1/apr_dbm.h /* 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. */ #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) *
* db for Berkeley DB files * gdbm for GDBM files * ndbm for NDBM files * sdbm for SDBM files (always available) * default for the default DBM type ** @param name The dbm file name to open * @param mode The flag value *
* 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 ** @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. * @bug In apr-util 0.9 and 1.x, the type arg was case insensitive. This * was highly inefficient, and as of 2.x the dbm name must be provided in * the correct case (lower case for all bundled providers) */ 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 *
* 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 ** @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 @see apr_dbm_open_ex * @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 */ 07070100038544000081a400000000000000000000000152d366ac00000f200000011200010050ffffffffffffffff0000003200000000root/usr/local/include/apr-1/apr_optional_hooks.h /* 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_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 implement the APR_OPTIONAL_HOOK Macro * @internal * @see APR_OPTIONAL_HOOK * * @param szName 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 */ 07070100038533000081a400000000000000000000000152d366ac000013ba0000011200010050ffffffffffffffff0000002b00000000root/usr/local/include/apr-1/apr_anylock.h /* 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_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 */ 07070100038546000081a400000000000000000000000152d366ac00001c080000011200010050ffffffffffffffff0000002b00000000root/usr/local/include/apr-1/apr_reslist.h /* 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. */ #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" /** * @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 params 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 params flags * @param pool Pool */ typedef apr_status_t (*apr_reslist_destructor)(void *resource, void *params, apr_pool_t *pool); /* Cleanup order modes */ #define APR_RESLIST_CLEANUP_DEFAULT 0 /**< default pool cleanup */ #define APR_RESLIST_CLEANUP_FIRST 1 /**< use pool pre cleanup */ /** * 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 min Allowed minimum number of available resources. Zero * creates new resources only when needed. * @param smax Resources will be destroyed during reslist maintenance to * meet this maximum restriction as they expire (reach their ttl). * @param hmax Absolute maximum limit on the number of total resources. * @param ttl If non-zero, sets the maximum amount of time in microseconds an * unused resource is valid. Any resource which has exceeded this * time will be destroyed, either when encountered by * apr_reslist_acquire() or during reslist maintenance. * @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 resource list. Also the * same pool that is passed to the constructor and destructor * routines. * @remark If APR has been compiled without thread support, hmax will be * automatically set to 1 and values of min and smax will be forced to * 1 for any non-zero value. */ 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. * @param reslist The resource list. * @param resource An address where the pointer to the resource * will be stored. */ APU_DECLARE(apr_status_t) apr_reslist_acquire(apr_reslist_t *reslist, void **resource); /** * Return a resource back to the list of available resources. * @param reslist The resource list. * @param resource The resource to return to the list. */ 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 forever. */ APU_DECLARE(void) apr_reslist_timeout_set(apr_reslist_t *reslist, apr_interval_time_t timeout); /** * Return the number of outstanding resources. * @param reslist The resource list. */ APU_DECLARE(apr_uint32_t) apr_reslist_acquired_count(apr_reslist_t *reslist); /** * 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. * @param reslist The resource list. * @param resource The resource to invalidate. */ APU_DECLARE(apr_status_t) apr_reslist_invalidate(apr_reslist_t *reslist, void *resource); /** * Perform routine maintenance on the resource list. This call * may instantiate new resources or expire old resources. * @param reslist The resource list. */ APU_DECLARE(apr_status_t) apr_reslist_maintain(apr_reslist_t *reslist); /** * Set reslist cleanup order. * @param reslist The resource list. * @param mode Cleanup order mode *
* APR_RESLIST_CLEANUP_DEFAULT default pool cleanup order * APR_RESLIST_CLEANUP_FIRST use pool pre cleanup ** @remark If APR_RESLIST_CLEANUP_FIRST is used the destructors will * be called before child pools of the pool used to create the reslist * are destroyed. This allows to explicitly destroy the child pools * inside reslist destructors. */ APU_DECLARE(void) apr_reslist_cleanup_order_set(apr_reslist_t *reslist, apr_uint32_t mode); #ifdef __cplusplus } #endif /** @} */ #endif /* ! APR_RESLIST_H */ 07070100038534000081a400000000000000000000000152d366ac00000f040000011200010050ffffffffffffffff0000002a00000000root/usr/local/include/apr-1/apr_base64.h /* 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. * The apr_vsnprintf/apr_snprintf functions are based on, and used with the * permission of, the SIO stdio-replacement strx_* functions by Panos * Tsirigotis
* '\@' - uppercase letter * '\$' - lowercase letter * '\&' - hex digit * '#' - digit * '~' - digit or space * '*' - swallow remaining characters ** @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: *
* 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 ** @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. *
* 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] ** * @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 */ 07070100038536000081a400000000000000000000000152d366ac0000420f0000011200010050ffffffffffffffff0000002a00000000root/usr/local/include/apr-1/apr_crypto.h /* 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. */ #ifndef APR_CRYPTO_H #define APR_CRYPTO_H #include "apu.h" #include "apr_pools.h" #include "apr_tables.h" #include "apr_hash.h" #include "apu_errno.h" #ifdef __cplusplus extern "C" { #endif /** * @file apr_crypto.h * @brief APR-UTIL Crypto library */ /** * @defgroup APR_Util_Crypto Crypto routines * @ingroup APR_Util * @{ */ #if APU_HAVE_CRYPTO #ifndef APU_CRYPTO_RECOMMENDED_DRIVER #if APU_HAVE_OPENSSL #define APU_CRYPTO_RECOMMENDED_DRIVER "openssl" #else #if APU_HAVE_NSS #define APU_CRYPTO_RECOMMENDED_DRIVER "nss" #else #if APU_HAVE_MSCNG #define APU_CRYPTO_RECOMMENDED_DRIVER "mscng" #else #if APU_HAVE_MSCAPI #define APU_CRYPTO_RECOMMENDED_DRIVER "mscapi" #else #endif #endif #endif #endif #endif /** * Symmetric Key types understood by the library. * * NOTE: It is expected that this list will grow over time. * * Interoperability Matrix: * * The matrix is based on the testcrypto.c unit test, which attempts to * test whether a simple encrypt/decrypt will succeed, as well as testing * whether an encrypted string by one library can be decrypted by the * others. * * Some libraries will successfully encrypt and decrypt their own data, * but won't decrypt data from another library. It is hoped that over * time these anomalies will be found and fixed, but until then it is * recommended that ciphers are chosen that interoperate across platform. * * An X below means the test passes, it does not necessarily mean that * encryption performed is correct or secure. Applications should stick * to ciphers that pass the interoperablity tests on the right hand side * of the table. * * Aligned data is data whose length is a multiple of the block size for * 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 * * 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. */ typedef enum { APR_KEY_NONE, APR_KEY_3DES_192, /** 192 bit (3-Key) 3DES */ APR_KEY_AES_128, /** 128 bit AES */ APR_KEY_AES_192, /** 192 bit AES */ APR_KEY_AES_256 /** 256 bit AES */ } apr_crypto_block_key_type_e; typedef enum { APR_MODE_NONE, /** An error condition */ APR_MODE_ECB, /** Electronic Code Book */ APR_MODE_CBC /** Cipher Block Chaining */ } apr_crypto_block_key_mode_e; /* These are opaque structs. Instantiation is up to each backend */ typedef struct apr_crypto_driver_t apr_crypto_driver_t; typedef struct apr_crypto_t apr_crypto_t; 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; /** * @brief Perform once-only initialisation. Call once only. * * @param pool - pool to register any shutdown cleanups, etc * @return APR_NOTIMPL in case of no crypto support. */ 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. * * @param pool - pool to register the cleanup * @param buffer - buffer to zero out * @param size - size of the buffer to zero out */ APU_DECLARE(apr_status_t) apr_crypto_clear(apr_pool_t *pool, void *buffer, apr_size_t size); /** * @brief Get the driver struct for a name * * @param driver - pointer to driver struct. * @param name - driver name * @param params - array of initialisation parameters * @param result - result and error message on failure * @param pool - (process) pool to register cleanup * @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 * @remarks NSS: the params can have "dir", "key3", "cert7" and "secmod" * keys, each followed by an equal sign and a value. Such key/value pairs can * be delimited by space or tab. If the value contains a space, surround the * whole key value pair in quotes: "dir=My Directory". * @remarks OpenSSL: currently no params are supported. */ APU_DECLARE(apr_status_t) apr_crypto_get_driver( const apr_crypto_driver_t **driver, const char *name, const char *params, const apu_err_t **result, apr_pool_t *pool); /** * @brief Return the name of the driver. * * @param driver - The driver in use. * @return The name of the driver. */ APU_DECLARE(const char *) apr_crypto_driver_name( const apr_crypto_driver_t *driver); /** * @brief Get the result of the last operation on a context. If the result * is NULL, the operation was successful. * @param result - the result structure * @param f - context pointer * @return APR_SUCCESS for success */ APU_DECLARE(apr_status_t) apr_crypto_error(const apu_err_t **result, const apr_crypto_t *f); /** * @brief Create a context for supporting encryption. Keys, certificates, * algorithms and other parameters will be set per context. More than * one context can be created at one time. A cleanup will be automatically * registered with the given pool to guarantee a graceful shutdown. * @param f - context pointer will be written here * @param driver - driver to use * @param params - array of key parameters * @param pool - process pool * @return APR_ENOENGINE when the engine specified does not exist. APR_EINITENGINE * if the engine cannot be initialised. * @remarks NSS: currently no params are supported. * @remarks OpenSSL: the params can have "engine" as a key, followed by an equal * sign and a value. */ APU_DECLARE(apr_status_t) apr_crypto_make(apr_crypto_t **f, const apr_crypto_driver_t *driver, const char *params, apr_pool_t *pool); /** * @brief Get a hash table of key types, keyed by the name of the type against * an integer pointer constant. * * @param types - hashtable of key types keyed to constants. * @param f - encryption context * @return APR_SUCCESS for success */ APU_DECLARE(apr_status_t) apr_crypto_get_block_key_types(apr_hash_t **types, const apr_crypto_t *f); /** * @brief Get a hash table of key modes, keyed by the name of the mode against * an integer pointer constant. * * @param modes - hashtable of key modes keyed to constants. * @param f - encryption context * @return APR_SUCCESS for success */ 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 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 * backend crypto platform used. 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 ivSize The size of the initialisation vector will be returned, based * on whether an IV is relevant for this type of crypto. * @param pass The passphrase to use. * @param passLen The passphrase length in bytes * @param salt The salt to use. * @param saltLen The salt length in bytes * @param type 3DES_192, AES_128, AES_192, AES_256. * @param mode Electronic Code Book / Cipher Block Chaining. * @param doPad Pad if necessary. * @param iterations Number of iterations to use in algorithm * @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_passphrase(apr_crypto_key_t **key, apr_size_t *ivSize, const char *pass, apr_size_t passLen, const unsigned char * salt, apr_size_t saltLen, const apr_crypto_block_key_type_e type, const apr_crypto_block_key_mode_e mode, const int doPad, const int iterations, const apr_crypto_t *f, apr_pool_t *p); /** * @brief Initialise a context for encrypting arbitrary data using the given key. * @note If *ctx is NULL, a apr_crypto_block_t will be created from a pool. If * *ctx is not NULL, *ctx must point at a previously created structure. * @param ctx The block context returned, see note. * @param iv Optional initialisation vector. If the buffer pointed to is NULL, * an IV will be created at random, in space allocated from the pool. * If the buffer pointed to is not NULL, the IV in the buffer will be * used. * @param key The key structure to use. * @param blockSize The block size of the cipher. * @param p The pool to use. * @return Returns APR_ENOIV if an initialisation vector is required but not specified. * Returns APR_EINIT if the backend failed to initialise the context. Returns * APR_ENOTIMPL if not implemented. */ APU_DECLARE(apr_status_t) apr_crypto_block_encrypt_init( apr_crypto_block_t **ctx, const unsigned char **iv, const apr_crypto_key_t *key, apr_size_t *blockSize, apr_pool_t *p); /** * @brief Encrypt data provided by in, write it to out. * @note The number of bytes written will be written to outlen. If * out is NULL, outlen will contain the maximum size of the * buffer needed to hold the data, including any data * generated by apr_crypto_block_encrypt_finish below. If *out points * to NULL, a buffer sufficiently large will be created from * the pool provided. If *out points to a not-NULL value, this * value will be used as a buffer instead. * @param out Address of a buffer to which data will be written, * see note. * @param outlen Length of the output will be written here. * @param in Address of the buffer to read. * @param inlen Length of the buffer to read. * @param ctx The block context to use. * @return APR_ECRYPT if an error occurred. Returns APR_ENOTIMPL if * not implemented. */ APU_DECLARE(apr_status_t) apr_crypto_block_encrypt(unsigned char **out, apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, apr_crypto_block_t *ctx); /** * @brief Encrypt final data block, write it to out. * @note If necessary the final block will be written out after being * padded. Typically the final block will be written to the * same buffer used by apr_crypto_block_encrypt, offset by the * number of bytes returned as actually written by the * apr_crypto_block_encrypt() call. After this call, the context * is cleaned and can be reused by apr_crypto_block_encrypt_init(). * @param out Address of a buffer to which data will be written. This * buffer must already exist, and is usually the same * buffer used by apr_evp_crypt(). See note. * @param outlen Length of the output will be written here. * @param ctx The block context to use. * @return APR_ECRYPT if an error occurred. * @return APR_EPADDING if padding was enabled and the block was incorrectly * formatted. * @return APR_ENOTIMPL if not implemented. */ APU_DECLARE(apr_status_t) apr_crypto_block_encrypt_finish(unsigned char *out, apr_size_t *outlen, apr_crypto_block_t *ctx); /** * @brief Initialise a context for decrypting arbitrary data using the given key. * @note If *ctx is NULL, a apr_crypto_block_t will be created from a pool. If * *ctx is not NULL, *ctx must point at a previously created structure. * @param ctx The block context returned, see note. * @param blockSize The block size of the cipher. * @param iv Optional initialisation vector. * @param key The key structure to use. * @param p The pool to use. * @return Returns APR_ENOIV if an initialisation vector is required but not specified. * Returns APR_EINIT if the backend failed to initialise the context. Returns * APR_ENOTIMPL if not implemented. */ APU_DECLARE(apr_status_t) apr_crypto_block_decrypt_init( apr_crypto_block_t **ctx, apr_size_t *blockSize, const unsigned char *iv, const apr_crypto_key_t *key, apr_pool_t *p); /** * @brief Decrypt data provided by in, write it to out. * @note The number of bytes written will be written to outlen. If * out is NULL, outlen will contain the maximum size of the * buffer needed to hold the data, including any data * generated by apr_crypto_block_decrypt_finish below. If *out points * to NULL, a buffer sufficiently large will be created from * the pool provided. If *out points to a not-NULL value, this * value will be used as a buffer instead. * @param out Address of a buffer to which data will be written, * see note. * @param outlen Length of the output will be written here. * @param in Address of the buffer to read. * @param inlen Length of the buffer to read. * @param ctx The block context to use. * @return APR_ECRYPT if an error occurred. Returns APR_ENOTIMPL if * not implemented. */ APU_DECLARE(apr_status_t) apr_crypto_block_decrypt(unsigned char **out, apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, apr_crypto_block_t *ctx); /** * @brief Decrypt final data block, write it to out. * @note If necessary the final block will be written out after being * padded. Typically the final block will be written to the * same buffer used by apr_crypto_block_decrypt, offset by the * number of bytes returned as actually written by the * apr_crypto_block_decrypt() call. After this call, the context * is cleaned and can be reused by apr_crypto_block_decrypt_init(). * @param out Address of a buffer to which data will be written. This * buffer must already exist, and is usually the same * buffer used by apr_evp_crypt(). See note. * @param outlen Length of the output will be written here. * @param ctx The block context to use. * @return APR_ECRYPT if an error occurred. * @return APR_EPADDING if padding was enabled and the block was incorrectly * formatted. * @return APR_ENOTIMPL if not implemented. */ APU_DECLARE(apr_status_t) apr_crypto_block_decrypt_finish(unsigned char *out, apr_size_t *outlen, apr_crypto_block_t *ctx); /** * @brief Clean encryption / decryption context. * @note After cleanup, a context is free to be reused if necessary. * @param ctx The block context to use. * @return Returns APR_ENOTIMPL if not supported. */ APU_DECLARE(apr_status_t) apr_crypto_block_cleanup(apr_crypto_block_t *ctx); /** * @brief Clean encryption / decryption context. * @note After cleanup, a context is free to be reused if necessary. * @param f The context to use. * @return Returns APR_ENOTIMPL if not supported. */ APU_DECLARE(apr_status_t) apr_crypto_cleanup(apr_crypto_t *f); /** * @brief Shutdown the crypto library. * @note After shutdown, it is expected that the init function can be called again. * @param driver - driver to use * @return Returns APR_ENOTIMPL if not supported. */ APU_DECLARE(apr_status_t) apr_crypto_shutdown( const apr_crypto_driver_t *driver); #endif /* APU_HAVE_CRYPTO */ /** @} */ #ifdef __cplusplus } #endif #endif 0707010003854c000081a400000000000000000000000152d366ac000019bd0000011200010050ffffffffffffffff0000002700000000root/usr/local/include/apr-1/apr_uri.h /* 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_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 NULL 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: *
* 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" ** @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 */ 07070100038547000081a400000000000000000000000152d366ac000012aa0000011200010050ffffffffffffffff0000002700000000root/usr/local/include/apr-1/apr_rmm.h /* 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. */ #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 */ 07070100038548000081a400000000000000000000000152d366ac000017e10000011200010050ffffffffffffffff0000002800000000root/usr/local/include/apr-1/apr_sdbm.h /* 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. */ /* * 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 */ /* apr_ssize_t for release 2.0??? */ 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) *
* 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 ** @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 *
* APR_FLOCK_SHARED * APR_FLOCK_EXCLUSIVE ** @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 *
* APR_SDBM_INSERT return an error if the record exists * APR_SDBM_REPLACE overwrite any existing record for key **/ 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 */ 07070100038553000081a400000000000000000000000152d366ac000005cb0000011200010050ffffffffffffffff0000002800000000root/usr/local/include/apr-1/apu_want.h /* 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. */ #include "apu.h" /* configuration data */ /** * @file apu_want.h * @brief APR Standard Headers Support * *
* Features: * * APU_WANT_DB:*/ /* --------------------------------------------------------------------- */ #ifdef APU_WANT_DB #if APU_HAVE_DB #include* * 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) *