Index: Makefile.inc1 =================================================================== --- Makefile.inc1 +++ Makefile.inc1 @@ -2739,7 +2739,6 @@ MK_PROFILE=no \ MK_RETPOLINE=no \ MK_SENDMAIL=no \ - MK_SVNLITE=no \ MK_TESTS=no \ MK_WERROR=no \ MK_ZFS=no Index: ObsoleteFiles.inc =================================================================== --- ObsoleteFiles.inc +++ ObsoleteFiles.inc @@ -40,6 +40,31 @@ # xargs -n1 | sort | uniq -d; # done +# 2021XXXX: Remove svn and svnlite +OLD_FILES+=usr/bin/svn +OLD_FILES+=usr/bin/svnadmin +OLD_FILES+=usr/bin/svnbench +OLD_FILES+=usr/bin/svndumpfilter +OLD_FILES+=usr/bin/svnfsfs +OLD_FILES+=usr/bin/svnlite +OLD_FILES+=usr/bin/svnliteadmin +OLD_FILES+=usr/bin/svnlitebench +OLD_FILES+=usr/bin/svnlitedumpfilter +OLD_FILES+=usr/bin/svnlitefsfs +OLD_FILES+=usr/bin/svnlitelook +OLD_FILES+=usr/bin/svnlitemucc +OLD_FILES+=usr/bin/svnliterdump +OLD_FILES+=usr/bin/svnliteserve +OLD_FILES+=usr/bin/svnlitesync +OLD_FILES+=usr/bin/svnliteversion +OLD_FILES+=usr/bin/svnlook +OLD_FILES+=usr/bin/svnmucc +OLD_FILES+=usr/bin/svnrdump +OLD_FILES+=usr/bin/svnserve +OLD_FILES+=usr/bin/svnsync +OLD_FILES+=usr/bin/svnversion +OLD_FILES+=usr/share/man/man1/svnlite.1.gz + # 20210426: remove unused libexec/rc.d/addswap OLD_FILES+=etc/rc.d/addswap Index: contrib/apr-util/CHANGES =================================================================== --- contrib/apr-util/CHANGES +++ /dev/null @@ -1,83 +0,0 @@ - -*- coding: utf-8 -*- -Changes with APR-util 1.6.1 - - *) Win32: Add function exports from new apr_crypto API's missing in 1.6.0. - - *) Win32: Introduce XML_PARSER build-time variable to select the expat - library name to be linked to libaprutil-1.dll. See Makefile.win - - *) Win32: Removed lingering xml/xml.dsp project forked from the expat - Project in the 1.9x era. Use expat's maintained build schema instead, - prior to building apr-util. - - *) apr_crypto: Fix compatibility with LibreSSL. PR 61596. - [Bernard Spil , Yann Ylavic] - - *) sdbm: better database/page validation to fail cleanly when corrupted. - [Yann Ylavic] - -Changes with APR-util 1.6.0 - - *) The expat dependency of apr-util is no longer built with apr-util. - Install expat (including development headers and libraries) first - before building apr-util. [https://libexpat.github.io/] - - *) Mark apr_dbd_freetds as unsupported, and remove it from all builds - [Nick Kew] - - *) Update MySQL build to stop using libmysqlclient_r. - [Petr Sumbera ] - - *) apr_buckets: Add apr_bucket_file_set_buf_size() which allows to configure - the size of the buffer used to read files. [Yann Ylavic] - - *) apr_crypto: avoid excessive iteration in bcrypt hash. - [Hanno Böck ] - - *) apr_siphash: Implement keyed hash function SipHash. [Yann Ylavic] - - *) apr_crypto: Add apr_crypto_key() function which supports keys - generated from a passphrase or a raw secret provided by the caller. - Deprecate apr_crypto_passphrase(). [Graham Leggett] - - *) apr_crypto_nss: Ensure the SECItem returned by PK11_ParamFromIV - is properly freed. [Graham Leggett] - - *) apr_crypto: Don't cache the driver if initialisation fails. This - stops the second and subsequent attempt to use the API from failing - claiming the library is not initialised. [Graham Leggett] - - *) apr_crypto: Add a native CommonCrypto implementation for iOS and OSX - where OpenSSL has been deprecated. [Graham Leggett] - - *) apr_xml_to_text: Add style APR_XML_X2T_PARSED to maintain a - consistent namespace prefix. [Jari Urpalainen - ] - -Changes with APR-util 1.5.x and later: - - *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.5.x/CHANGES?view=markup - -Changes with APR-util 1.4.x and later: - - *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.4.x/CHANGES?view=markup - -Changes for APR-util 1.3.x and later: - - *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.3.x/CHANGES?view=markup - -Changes for APR-util 1.2.x and later: - - *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.2.x/CHANGES?view=markup - -Changes for APR-util 1.1.x and later: - - *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.1.x/CHANGES?view=markup - -Changes for APR-util 1.0.x and later: - - *) http://svn.apache.org/viewvc/apr/apr-util/branches/1.0.x/CHANGES?view=markup - -Changes for APR-util 0.9.x and later/earlier: - - *) http://svn.apache.org/viewvc/apr/apr-util/branches/0.9.x/CHANGES?view=markup Index: contrib/apr-util/CMakeLists.txt =================================================================== --- contrib/apr-util/CMakeLists.txt +++ /dev/null @@ -1,355 +0,0 @@ -# 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. -# -# Read README.cmake before using this. - -PROJECT(APR-Util C) - -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -FIND_PACKAGE(OpenSSL) - -FIND_PACKAGE(expat) - -OPTION(APU_HAVE_CRYPTO "Crypto support" OFF) -OPTION(APU_HAVE_ODBC "Build ODBC DBD driver" ON) -OPTION(APR_HAS_LDAP "LDAP support" ON) -OPTION(INSTALL_PDB "Install .pdb files (if generated)" ON) -OPTION(APR_BUILD_TESTAPR "Build the test suite" OFF) -OPTION(TEST_STATIC_LIBS "Test programs use APR static libraries instead of shared libraries?" OFF) -SET(APR_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE STRING "Directory with APR include files") -SET(APR_LIBRARIES "${CMAKE_INSTALL_PREFIX}/lib/libapr-1.lib" CACHE STRING "APR library to link with") - -IF(NOT EXISTS "${APR_INCLUDE_DIR}/apr.h") - MESSAGE(FATAL_ERROR "APR include directory ${APR_INCLUDE_DIR} is not correct.") -ENDIF() -FOREACH(onelib ${APR_LIBRARIES}) - IF(NOT EXISTS ${onelib}) - MESSAGE(FATAL_ERROR "APR library ${onelib} was not found.") - ENDIF() -ENDFOREACH() - -IF(APU_HAVE_CRYPTO) -IF(NOT OPENSSL_FOUND) - MESSAGE(FATAL_ERROR "OpenSSL is the only supported crypto implementation, and it wasn't found!") -ENDIF() -ENDIF() - -# create 1-or-0 representation of feature tests for apu.h - -SET(apu_have_crypto_10 0) -SET(apu_have_apr_iconv_10 0) # not yet implemented -SET(apr_has_ldap_10 0) - -IF(APU_HAVE_CRYPTO) - SET(apu_have_crypto_10 1) -ENDIF() - -IF(APR_HAS_LDAP) - SET(apr_has_ldap_10 1) -ENDIF() - -IF(NOT EXPAT_FOUND) - MESSAGE(FATAL_ERROR "Expat is required, and it wasn't found!") -ENDIF() - -SET(XMLLIB_INCLUDE_DIR ${EXPAT_INCLUDE_DIRS}) -SET(XMLLIB_LIBRARIES ${EXPAT_LIBRARIES}) - -SET(LDAP_LIBRARIES) -IF(APR_HAS_LDAP) - SET(LDAP_LIBRARIES wldap32) -ENDIF() - -CONFIGURE_FILE(include/apu.hwc - ${PROJECT_BINARY_DIR}/apu.h) -CONFIGURE_FILE(include/apr_ldap.hwc - ${PROJECT_BINARY_DIR}/apr_ldap.h) -# "COPYONLY" just because anything else isn't implemented ;) -CONFIGURE_FILE(include/private/apu_config.hw - ${PROJECT_BINARY_DIR}/apu_config.h - COPYONLY) -CONFIGURE_FILE(include/private/apu_select_dbm.hw - ${PROJECT_BINARY_DIR}/apu_select_dbm.h - COPYONLY) -CONFIGURE_FILE(include/apu_want.hw - ${PROJECT_BINARY_DIR}/apu_want.h - COPYONLY) - -# Generated .h files are stored in PROJECT_BINARY_DIR, not the -# source tree. -# -# BROKEN: not searching PROJECT_BINARY_DIR first, so you have to -# manually delete apu.h in PROJECT_SOURCE_DIR/include if -# you've generated apu.h before using a different build - -SET(APR_INCLUDE_DIRECTORIES - ${PROJECT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/include/private - ${APR_INCLUDE_DIR} -) - -INCLUDE_DIRECTORIES(${APR_INCLUDE_DIRECTORIES} ${XMLLIB_INCLUDE_DIR}) - -SET(APR_PUBLIC_HEADERS_STATIC - include/apr_anylock.h - include/apr_base64.h - include/apr_buckets.h - include/apr_crypto.h - include/apr_date.h - include/apr_dbd.h - include/apr_dbm.h - include/apr_hooks.h - include/apr_ldap_init.h - include/apr_ldap_option.h - include/apr_ldap_rebind.h - include/apr_ldap_url.h - include/apr_md4.h - include/apr_md5.h - include/apr_memcache.h - include/apr_optional.h - include/apr_optional_hooks.h - include/apr_queue.h - include/apr_redis.h - include/apr_reslist.h - include/apr_rmm.h - include/apr_sdbm.h - include/apr_sha1.h - include/apr_siphash.h - include/apr_strmatch.h - include/apr_thread_pool.h - include/apr_uri.h - include/apr_uuid.h - include/apr_xlate.h - include/apr_xml.h - include/apu_errno.h - include/apu_version.h -) - -# apu_config.h and apu_select_dbm.h are private -SET(APR_PUBLIC_HEADERS_GENERATED - ${PROJECT_BINARY_DIR}/apu.h - ${PROJECT_BINARY_DIR}/apr_ldap.h - ${PROJECT_BINARY_DIR}/apu_want.h -) - -SET(APR_SOURCES - buckets/apr_brigade.c - buckets/apr_buckets.c - buckets/apr_buckets_alloc.c - buckets/apr_buckets_eos.c - buckets/apr_buckets_file.c - buckets/apr_buckets_flush.c - buckets/apr_buckets_heap.c - buckets/apr_buckets_mmap.c - buckets/apr_buckets_pipe.c - buckets/apr_buckets_pool.c - buckets/apr_buckets_refcount.c - buckets/apr_buckets_simple.c - buckets/apr_buckets_socket.c - crypto/apr_crypto.c - crypto/apr_md4.c - crypto/apr_md5.c - crypto/apr_passwd.c - crypto/apr_sha1.c - crypto/apr_siphash.c - crypto/crypt_blowfish.c - crypto/getuuid.c - crypto/uuid.c - dbd/apr_dbd.c - dbm/apr_dbm.c - dbm/apr_dbm_sdbm.c - dbm/sdbm/sdbm.c - dbm/sdbm/sdbm_hash.c - dbm/sdbm/sdbm_lock.c - dbm/sdbm/sdbm_pair.c - encoding/apr_base64.c - hooks/apr_hooks.c - memcache/apr_memcache.c - misc/apr_date.c - misc/apr_queue.c - misc/apr_reslist.c - misc/apr_rmm.c - misc/apr_thread_pool.c - misc/apu_dso.c - misc/apu_version.c - redis/apr_redis.c - strmatch/apr_strmatch.c - uri/apr_uri.c - xlate/xlate.c - xml/apr_xml.c -) - -IF(APR_HAS_LDAP) - SET(APR_SOURCES ${APR_SOURCES} ldap/apr_ldap_stub.c ldap/apr_ldap_url.c) -ENDIF() - -SET(APR_TEST_SOURCES - test/abts.c - test/testbuckets.c - test/testcrypto.c - test/testdate.c - test/testdbd.c - test/testdbm.c - test/testldap.c - test/testmd4.c - test/testmd5.c - test/testmemcache.c - test/testpass.c - test/testqueue.c - test/testredis.c - test/testreslist.c - test/testrmm.c - test/testsiphash.c - test/teststrmatch.c - test/testuri.c - test/testutil.c - test/testuuid.c - test/testxlate.c - test/testxml.c -) - -SET(install_targets) -SET(install_bin_pdb) -SET(dbd_drivers) - -# Note: The WINNT definition on some targets is used only by libaprutil.rc. - -# libaprutil-1 is shared, aprutil-1 is static -ADD_LIBRARY(libaprutil-1 SHARED ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED} libaprutil.rc) -SET(install_targets ${install_targets} libaprutil-1) -SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/libaprutil-1.pdb) -TARGET_LINK_LIBRARIES(libaprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES}) -SET_TARGET_PROPERTIES(libaprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_EXPORT;APR_DECLARE_EXPORT;XML_STATIC;WINNT") - -ADD_LIBRARY(aprutil-1 STATIC ${APR_SOURCES} ${APR_PUBLIC_HEADERS_GENERATED}) -SET(install_targets ${install_targets} aprutil-1) -TARGET_LINK_LIBRARIES(aprutil-1 ${APR_LIBRARIES} ${XMLLIB_LIBRARIES}) -SET_TARGET_PROPERTIES(aprutil-1 PROPERTIES COMPILE_DEFINITIONS "APU_DECLARE_STATIC;APR_DECLARE_STATIC;APU_DSO_MODULE_BUILD;XML_STATIC") - -IF(APU_HAVE_CRYPTO) - IF(NOT OPENSSL_FOUND) - MESSAGE(FATAL_ERROR "Only OpenSSL-based crypto is currently implemented in the cmake build") - ENDIF() - ADD_LIBRARY(apr_crypto_openssl-1 SHARED crypto/apr_crypto_openssl.c libaprutil.rc) - SET(install_targets ${install_targets} apr_crypto_openssl-1) - SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_crypto_openssl-1.pdb) - SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES INCLUDE_DIRECTORIES "${APR_INCLUDE_DIRECTORIES};${OPENSSL_INCLUDE_DIR}") - SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES COMPILE_DEFINITIONS "WINNT") - SET_TARGET_PROPERTIES(apr_crypto_openssl-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_crypto_openssl") - TARGET_LINK_LIBRARIES(apr_crypto_openssl-1 libaprutil-1 ${APR_LIBRARIES} ${OPENSSL_LIBRARIES}) -ENDIF() - -IF(APU_HAVE_ODBC) - ADD_LIBRARY(apr_dbd_odbc-1 SHARED dbd/apr_dbd_odbc.c libaprutil.rc) - SET(install_targets ${install_targets} apr_dbd_odbc-1) - SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_dbd_odbc-1.pdb) - SET(dbd_drivers ${dbd_drivers} odbc) - TARGET_LINK_LIBRARIES(apr_dbd_odbc-1 libaprutil-1 ${APR_LIBRARIES} odbc32 odbccp32) - SET_PROPERTY(TARGET apr_dbd_odbc-1 APPEND PROPERTY LINK_FLAGS /export:apr_dbd_odbc_driver) - SET_TARGET_PROPERTIES(apr_dbd_odbc-1 PROPERTIES COMPILE_DEFINITIONS "APU_HAVE_ODBC;HAVE_SQL_H;APU_DECLARE_EXPORT;APR_DECLARE_EXPORT;APU_DSO_MODULE_BUILD;WINNT") - SET_TARGET_PROPERTIES(apr_dbd_odbc-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_dbd_odbc") -ENDIF() - -IF(APR_HAS_LDAP) - ADD_LIBRARY(apr_ldap-1 SHARED ldap/apr_ldap_init.c ldap/apr_ldap_option.c - ldap/apr_ldap_rebind.c libaprutil.rc) - SET(install_targets ${install_targets} apr_ldap-1) - SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/apr_ldap-1.pdb) - TARGET_LINK_LIBRARIES(apr_ldap-1 libaprutil-1 ${APR_LIBRARIES} ${LDAP_LIBRARIES}) - SET_TARGET_PROPERTIES(apr_ldap-1 PROPERTIES COMPILE_DEFINITIONS "WINNT") - SET_TARGET_PROPERTIES(apr_ldap-1 PROPERTIES COMPILE_FLAGS "-DAPR_DECLARE_EXPORT=1 -DAPU_DECLARE_EXPORT=1 -DDLL_NAME=apr_ldap") - SET(apr_ldap_libraries apr_ldap-1) -ELSE() - SET(apr_ldap_libraries) -ENDIF() - -IF(APR_BUILD_TESTAPR) - ENABLE_TESTING() - # Create a "check" target that displays test program output to the console. - ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND} --verbose) - - # copy data files to build directory so that we can run programs from there - EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory - ${PROJECT_BINARY_DIR}/data) - EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${PROJECT_SOURCE_DIR}/test/data/billion-laughs.xml - ${PROJECT_BINARY_DIR}/data/billion-laughs.xml) - - IF(TEST_STATIC_LIBS) - SET(whichapr aprutil-1) - SET(apiflag "-DAPR_DECLARE_STATIC -DAPU_DECLARE_STATIC") - ELSE() - SET(whichapr libaprutil-1) - SET(apiflag) - ENDIF() - - ADD_EXECUTABLE(testall ${APR_TEST_SOURCES}) - TARGET_LINK_LIBRARIES(testall ${whichapr} ${apr_ldap_libraries} ${XMLLIB_LIBRARIES} ${LDAP_LIBRARIES}) - IF(apiflag) - SET_TARGET_PROPERTIES(testall PROPERTIES COMPILE_FLAGS ${apiflag}) - ENDIF() - ADD_TEST(NAME testall COMMAND testall) - - ADD_EXECUTABLE(dbd test/dbd.c) - TARGET_LINK_LIBRARIES(dbd ${whichapr}) - IF(apiflag) - SET_TARGET_PROPERTIES(dbd PROPERTIES COMPILE_FLAGS ${apiflag}) - ENDIF() - - # dbd is run multiple times with different parameters. - FOREACH(somedbd ${dbd_drivers}) - ADD_TEST(NAME dbd-${somedbd} COMMAND dbd ${somedbd}) - ENDFOREACH() - -ENDIF (APR_BUILD_TESTAPR) - -# Installation - -INSTALL(TARGETS ${install_targets} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - ) - -IF(INSTALL_PDB) - INSTALL(FILES ${install_bin_pdb} - DESTINATION bin - CONFIGURATIONS RelWithDebInfo Debug) -ENDIF() - -INSTALL(FILES ${APR_PUBLIC_HEADERS_STATIC} ${APR_PUBLIC_HEADERS_GENERATED} DESTINATION include) - -STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype) -MESSAGE(STATUS "") -MESSAGE(STATUS "") -MESSAGE(STATUS "APR-Util configuration summary:") -MESSAGE(STATUS "") -MESSAGE(STATUS " Build type ...................... : ${CMAKE_BUILD_TYPE}") -MESSAGE(STATUS " Install .pdb (if available)...... : ${INSTALL_PDB}") -MESSAGE(STATUS " Install prefix .................. : ${CMAKE_INSTALL_PREFIX}") -MESSAGE(STATUS " C compiler ...................... : ${CMAKE_C_COMPILER}") -MESSAGE(STATUS " APR include directory ........... : ${APR_INCLUDE_DIR}") -MESSAGE(STATUS " APR libraries ................... : ${APR_LIBRARIES}") -MESSAGE(STATUS " DBD ODBC driver ................. : ${APU_HAVE_ODBC}") -MESSAGE(STATUS " APU_HAVE_CRYPTO ................. : ${APU_HAVE_CRYPTO}") -MESSAGE(STATUS " APR_HAS_LDAP .................... : ${APR_HAS_LDAP}") -MESSAGE(STATUS " Build test suite ................ : ${APR_BUILD_TESTAPR}") -IF(TEST_STATIC_LIBS) -MESSAGE(STATUS " (testing static libraries)") -ELSE() -MESSAGE(STATUS " (testing dynamic libraries)") -ENDIF() Index: contrib/apr-util/LICENSE =================================================================== --- contrib/apr-util/LICENSE +++ /dev/null @@ -1,459 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - -APACHE PORTABLE RUNTIME SUBCOMPONENTS: - -The Apache Portable Runtime includes a number of subcomponents with -separate copyright notices and license terms. Your use of the source -code for the these subcomponents is subject to the terms and -conditions of the following licenses. - -For the include\apr_md5.h component: -/* - * 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. - */ - -For the passwd\apr_md5.c component: - -/* - * 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. - */ - -/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm - */ - -/* 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. - */ -/* - * The apr_md5_encode() routine uses much code obtained from the FreeBSD 3.0 - * MD5 crypt() function, which is licenced as follows: - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - */ - -For the crypto\apr_md4.c component: - - * 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. - */ - -For the crypto\crypt_blowfish.c(.h) component: - - * Written by Solar Designer in 1998-2011. - * No copyright is claimed, and the software is hereby placed in the public - * domain. In case this attempt to disclaim copyright and place the software - * in the public domain is deemed null and void, then the software is - * Copyright (c) 1998-2011 Solar Designer and it is hereby released to the - * general public under the following terms: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted. - * - * There's ABSOLUTELY NO WARRANTY, express or implied. - - See crypto/crypt_blowfish.c for more information. - -For the include\apr_md4.h component: - - * - * 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. - */ - -For the test\testmd4.c component: - - * - * This is derived from material copyright RSA Data Security, Inc. - * Their notice is reproduced below in its entirety. - * - * Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All - * rights reserved. - * - * 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. - */ - -For the xml\expat\conftools\install-sh component: - -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# - -For the expat xml parser component: - -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - and Clark Cooper - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==================================================================== - -For the ldap/apr_ldap_url.c component: - -/* Portions Copyright 1998-2002 The OpenLDAP Foundation - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted only as authorized by the OpenLDAP - * Public License. A copy of this license is available at - * http://www.OpenLDAP.org/license.html or in file LICENSE in the - * top-level directory of the distribution. - * - * OpenLDAP is a registered trademark of the OpenLDAP Foundation. - * - * Individual files and/or contributed packages may be copyright by - * other parties and subject to additional restrictions. - * - * This work is derived from the University of Michigan LDAP v3.3 - * distribution. Information concerning this software is available - * at: http://www.umich.edu/~dirsvcs/ldap/ - * - * This work also contains materials derived from public sources. - * - * Additional information about OpenLDAP can be obtained at: - * http://www.openldap.org/ - */ - -/* - * Portions Copyright (c) 1992-1996 Regents of the University of Michigan. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that this notice is preserved and that due credit is given - * to the University of Michigan at Ann Arbor. The name of the University - * may not be used to endorse or promote products derived from this - * software without specific prior written permission. This software - * is provided ``as is'' without express or implied warranty. - */ - Index: contrib/apr-util/Makefile.in =================================================================== --- contrib/apr-util/Makefile.in +++ /dev/null @@ -1,123 +0,0 @@ -# -# Top-level Makefile for APRUTIL -# -CPP = @CPP@ - -# gets substituted into some targets -APRUTIL_MAJOR_VERSION=@APRUTIL_MAJOR_VERSION@ -APRUTIL_DOTTED_VERSION=@APRUTIL_DOTTED_VERSION@ - -srcdir = @srcdir@ -VPATH = @srcdir@ - -INCLUDES = @APRUTIL_PRIV_INCLUDES@ @APR_INCLUDES@ @APRUTIL_INCLUDES@ -APRUTIL_LDFLAGS = @APRUTIL_LDFLAGS@ -APRUTIL_LIBS = @APRUTIL_LIBS@ - -TARGET_LIB = lib@APRUTIL_LIBNAME@.la -INSTALL_SUBDIRS = @APR_ICONV_DIR@ -EXTRA_SOURCE_DIRS = @APR_ICONV_DIR@ -APRUTIL_PCFILE = apr-util-$(APRUTIL_MAJOR_VERSION).pc -APU_CONFIG = apu-$(APRUTIL_MAJOR_VERSION)-config -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ - -APU_MODULES = @APU_MODULES@ -LINK_MODULE = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(APRUTIL_LDFLAGS) -release $(APRUTIL_MAJOR_VERSION) -module -rpath $(APU_DSO_LIBDIR) -APU_DSO_LIBDIR = @APU_DSO_LIBDIR@ - -LT_VERSION = @APU_LTVERSION@ - -EXTRA_OBJECTS = @EXTRA_OBJECTS@ - -LDADD_dbd_pgsql = @LDADD_dbd_pgsql@ -LDADD_dbd_oracle = @LDADD_dbd_oracle@ -LDADD_dbd_sqlite2 = @LDADD_dbd_sqlite2@ -LDADD_dbd_sqlite3 = @LDADD_dbd_sqlite3@ -LDADD_dbd_mysql = @LDADD_dbd_mysql@ -LDADD_dbd_odbc = @LDADD_dbd_odbc@ -LDADD_dbm_db = @LDADD_dbm_db@ -LDADD_dbm_gdbm = @LDADD_dbm_gdbm@ -LDADD_dbm_ndbm = @LDADD_dbm_ndbm@ -LDADD_ldap = @LDADD_ldap@ -LDADD_crypto_openssl = @LDADD_crypto_openssl@ -LDADD_crypto_nss = @LDADD_crypto_nss@ -LDADD_crypto_commoncrypto = @LDADD_crypto_commoncrypto@ - -TARGETS = $(TARGET_LIB) aprutil.exp apu-config.out $(APU_MODULES) - -# bring in rules.mk for standard functionality -@INCLUDE_RULES@ -@INCLUDE_OUTPUTS@ - -CLEAN_SUBDIRS = test @APR_ICONV_DIR@ - -CLEAN_TARGETS = exports.c export_vars.c aprutil.exp .make.dirs apu-config.out -DISTCLEAN_TARGETS = config.cache config.log config.status libtool \ - include/private/apu_config.h include/private/apu_private.h \ - include/private/apu_select_dbm.h include/apr_ldap.h include/apu.h \ - export_vars.sh $(APU_CONFIG) build/rules.mk include/apu_want.h \ - apr-util.pc build/pkg/pkginfo -EXTRACLEAN_TARGETS = configure aclocal.m4 include/private/apu_config.h.in \ - exports.c build-outputs.mk \ - build/apr_common.m4 build/find_apr.m4 build/install.sh \ - build/config.guess build/config.sub - -prefix=@prefix@ -exec_prefix=@exec_prefix@ -bindir=@bindir@ -libdir=@libdir@ -includedir=@includedir@ -top_srcdir=@abs_srcdir@ -top_blddir=@abs_builddir@ - -# Create apu-config script suitable for the install tree -apu-config.out: $(APU_CONFIG) - sed 's,^\(location=\).*$$,\1installed,' < $(APU_CONFIG) > $@ - -install: $(TARGETS) install-modules - $(APR_MKDIR) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir)/pkgconfig \ - $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) - for f in $(top_srcdir)/include/*.h $(top_blddir)/include/*.h; do \ - $(INSTALL_DATA) $${f} $(DESTDIR)$(includedir); \ - done - $(INSTALL_DATA) apr-util.pc $(DESTDIR)$(libdir)/pkgconfig/$(APRUTIL_PCFILE) - list='$(INSTALL_SUBDIRS)'; for i in $$list; do \ - ( cd $$i ; $(MAKE) DESTDIR=$(DESTDIR) install ); \ - done - $(LIBTOOL) --mode=install $(INSTALL) -m 755 $(TARGET_LIB) $(DESTDIR)$(libdir) - $(INSTALL_DATA) aprutil.exp $(DESTDIR)$(libdir) - $(INSTALL) -m 755 apu-config.out $(DESTDIR)$(bindir)/$(APU_CONFIG) - -$(TARGET_LIB): $(OBJECTS) $(EXTRA_OBJECTS) - $(LINK) @lib_target@ $(EXTRA_OBJECTS) $(ALL_LIBS) $(APRUTIL_LDFLAGS) $(APRUTIL_LIBS) - -install-modules: install-modules-@APU_HAVE_MODULES@ - -install-modules-no: - -install-modules-yes: $(APU_MODULES) - $(APR_MKDIR) $(DESTDIR)$(APU_DSO_LIBDIR) - @for m in $(APU_MODULES); do $(LIBTOOL) $(LT_LTFLAGS) $(LTFLAGS) --mode=install $(INSTALL) -m 755 $$m $(DESTDIR)$(APU_DSO_LIBDIR); done - -exports.c: $(HEADERS) - $(APR_MKEXPORT) $(HEADERS) > $@ - -export_vars.c: $(HEADERS) - $(APR_MKVAREXPORT) $(HEADERS) > $@ - -aprutil.exp: exports.c export_vars.c - @echo "#! lib@APRUTIL_LIBNAME@.so" > $@ - @echo "* This file was AUTOGENERATED at build time." >> $@ - @echo "* Please do not edit by hand." >> $@ - $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) exports.c | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$$/\1/' >> $@ - $(CPP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) export_vars.c | sed -e 's/^\#[^!]*//' | sed -e '/^$$/d' >> $@ - -dox: - doxygen $(top_srcdir)/docs/doxygen.conf - -test: check -check: $(TARGET_LIB) - cd test && $(MAKE) all check - -.PHONY: install-modules install-modules-yes install-modules-no dox test check Index: contrib/apr-util/Makefile.win =================================================================== --- contrib/apr-util/Makefile.win +++ /dev/null @@ -1,384 +0,0 @@ -# Makefile.win for Win32 APR + APR-iconv + APR-util -# -# Targets are: -# -# buildall - compile everything -# checkall - run APR + APR-util regression tests -# install - compile everything -# clean - mop up everything -# -# You can override the build mechanism, choose only one; -# -# USEMAK=1 - compile from exported make files -# USEDSW=1 - compile from .dsw / .dsp VC6 projects -# USESLN=1 - compile from converted .sln / .vcproj VC7+ files -# -# Define ARCH to your desired preference (your PATH must point -# to the correct compiler tools!) Choose only one; -# -# ARCH="Win32 Release" -# ARCH="Win32 Debug" -# ARCH="Win32 Release9x" -# ARCH="Win32 Debug9x" -# ARCH="x64 Release" -# ARCH="x64 Debug" -# -# Provide the APR_PATH, API_PATH and APU_PATH entirely relative -# to one another! At this time, building the libraries themselves -# is only expected to work if the defaults (../apr, ../apr-iconv -# and ../apr-util) are used, or if they are built with USEMAK=1. -# -# APR_PATH=..\apr-1.3.0 -# API_PATH=..\apr-iconv-1.3.0 -# APU_PATH=..\apr-util-1.3.0 -# -# Provide a DBD_LIST argument after configuring LIB and INCLUDE with -# the SDK paths of the corresponding client support libraries. -# ODBC is always built on Windows, so it does not get included in DBD_LIST -# Note that at this time, none of these are supported on win32, per say. -# -# DBD_LIST="sqlite3 pgsql oracle mysql freetds" -# -# Provide a DBM_LIST argument after configuring LIB and INCLUDE with -# the SDK paths of the corresponding database support libraries. Right -# now only db has been configured, gdbm and ndbm require additional study. -# Note that at this time, none of these are supported on win32, per say. -# -# DBM_LIST="db gdbm" -# -# Provide a CRYPTO_LIST argument after configuring LIB and INCLUDE with -# the SDK paths of the corresponding cryptographic support libraries. -# -# CRYPTO_LIST="nss openssl" -# -# Provide the XML_PARSER argument after configuring LIB and INCLUDE with -# the expat path of the corresponding xml parser, e.g. libexpatMT to choose -# static, or libexpat (default) to choose the dynamic library for aprutil-1.dll -# (Static libaprutil-1.lib always presumes libexpatMT with XML_STATIC flag.) -# -# XML_PARSER="libexpat" -# -# For example; -# -# nmake -f Makefile.win PREFIX=C:\APR buildall checkall installall clean -# - -!IF EXIST("aprutil.sln") && ([devenv /help > NUL 2>&1] == 0) \ - && !defined(USEMAK) && !defined(USEDSW) -USESLN=1 -USEMAK=0 -USEDSW=0 -!ELSEIF EXIST("aprutil.mak") && !defined(USEDSW) -USESLN=0 -USEMAK=1 -USEDSW=0 -!ELSE -USESLN=0 -USEMAK=0 -USEDSW=1 -!ENDIF - -PREFIX=..\apr-dist - -!IF EXIST("..\openssl") -!IF EXIST("..\openssl\libcrypto.lib") -SSLOPT=_HAVE_OSSL110=1 -!ENDIF -!ENDIF - -# Legacy default (and unwise alternative) for libapr-1.dll is libexpatMT -XML_PARSER="libexpat" -!IF "$(XML_PARSER)" == "libexpat" -XMLOPT=XML_PARSER=$(XML_PARSER) -!ELSE -XMLOPT=XML_PARSER=$(XML_PARSER) XML_OPTIONS="/D XML_STATIC" -!ENDIF - -!IF [$(COMSPEC) /c cl /nologo /? \ - | $(SystemRoot)\System32\find.exe "x64" >NUL ] == 0 -ARCH=x64 Release -!ELSE -ARCH=Win32 Release -!ENDIF - -APR_PATH=..\apr -API_PATH=..\apr-iconv -APU_PATH=..\apr-util - -!MESSAGE ARCH = $(ARCH) -!MESSAGE APR_PATH = $(APR_PATH) -!MESSAGE API_PATH = $(API_PATH) (apr-iconv) -!MESSAGE APU_PATH = $(APU_PATH) (apr-util) -!MESSAGE PREFIX = $(PREFIX) (install path) -!MESSAGE DBD_LIST = $(DBD_LIST) -!MESSAGE DBM_LIST = $(DBM_LIST) -!MESSAGE CRYPTO_LIST = $(CRYPTO_LIST) - -# Utility and Translation things, nothing here for the user -# -!IF "$(ARCH)" == "Win32 Release" -SLNARCH=Release|Win32 -ARCHPATH=Release -LIBSPATH=LibR -ARCHOSPATH=Release -LIBSOSPATH=LibR -!ELSEIF "$(ARCH)" == "Win32 Debug" -SLNARCH=Debug|Win32 -ARCHPATH=Debug -LIBSPATH=LibD -ARCHOSPATH=Debug -LIBSOSPATH=LibD -!ELSEIF "$(ARCH)" == "Win32 Release9x" -SLNARCH=Release9x|Win32 -ARCHPATH=Release -LIBSPATH=LibR -ARCHOSPATH=9x\Release -LIBSOSPATH=9x\LibR -!ELSEIF "$(ARCH)" == "Win32 Debug9x" -SLNARCH=Debug9x|Win32 -ARCHPATH=Debug -LIBSPATH=LibD -ARCHOSPATH=9x\Debug -LIBSOSPATH=9x\LibD -!ELSEIF "$(ARCH)" == "x64 Release" -SLNARCH=Release|x64 -ARCHPATH=x64\Release -LIBSPATH=x64\LibR -ARCHOSPATH=x64\Release -LIBSOSPATH=x64\LibR -!ELSEIF "$(ARCH)" == "x64 Debug" -SLNARCH=Debug|x64 -ARCHPATH=x64\Debug -LIBSPATH=x64\LibD -ARCHOSPATH=x64\Debug -LIBSOSPATH=x64\LibD -!ENDIF - -!IFNDEF MAKEOPT -# Only default the behavior if MAKEOPT= is omitted -!IFDEF _NMAKE_VER -# Microsoft NMake options -MAKEOPT=-nologo -!ELSEIF "$(MAKE)" == "make" -# Borland make options? Not really supported (yet) -MAKEOPT=-s -N -!ENDIF -!ENDIF - - -# Sanity Checks -# -!IF !EXIST("$(APR_PATH)\apr.dsp") || !EXIST("$(API_PATH)\apriconv.dsp") \ - || !EXIST("$(APU_PATH)\aprutil.dsp") -!MESSAGE Please check out or download and unpack the Apache Portability Runtime -!MESSAGE sources (apr, apr-iconv and apr-util) under a single parent dir, -!MESSAGE or provide APR_PATH, API_PATH and APU_PATH (all relative to each other, -!MESSAGE or all absolute paths). -!MESSAGE Apache cannot build without these libraries! -!MESSAGE -!ERROR Need apr and apr-iconv alongside apr-util to build! -!ENDIF - - -all: buildall checkall - -# To help win32 pick up the locations where they don't fall in the usual -# path locations. This may not be completely effective for USESLN/USEDSP -# oriented builds, just yet -# -LIB=$(APR_PATH)\$(ARCHOSPATH);$(APR_PATH)\$(LIBSOSPATH);$(API_PATH)\$(ARCHPATH);$(API_PATH)\$(LIBSPATH);$(APU_PATH)\$(ARCHPATH);$(APU_PATH)\$(LIBSPATH);$(LIB) -INCLUDE=$(APR_PATH)\include;$(API_PATH)\include;$(INCLUDE) - -!IF $(USEMAK) == 1 - -clean: - $(MAKE) $(MAKEOPT) -f Makefile.win ARCH="$(ARCH)" \ - CTARGET=CLEAN buildall - -buildall: - cd $(APR_PATH) - $(MAKE) $(MAKEOPT) -f apr.mak CFG="apr - $(ARCH)" RECURSE=0 $(CTARGET) - $(MAKE) $(MAKEOPT) -f libapr.mak CFG="libapr - $(ARCH)" RECURSE=0 $(CTARGET) - cd build - $(MAKE) $(MAKEOPT) -f aprapp.mak CFG="aprapp - $(ARCH)" RECURSE=0 $(CTARGET) - $(MAKE) $(MAKEOPT) -f libaprapp.mak CFG="libaprapp - $(ARCH)" RECURSE=0 $(CTARGET) - cd .. - cd $(API_PATH) - $(MAKE) $(MAKEOPT) -f apriconv.mak CFG="apriconv - $(ARCH)" RECURSE=0 $(CTARGET) - $(MAKE) $(MAKEOPT) -f libapriconv.mak CFG="libapriconv - $(ARCH)" RECURSE=0 $(CTARGET) -!IF "$(CTARGET)" == "CLEAN" - $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \ - BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=. -!ELSE - cd ccs - $(MAKE) $(MAKEOPT) -f Makefile.win all \ - BUILD_MODE="$(ARCH)" BIND_MODE=shared - cd ..\ces - $(MAKE) $(MAKEOPT) -f Makefile.win all \ - BUILD_MODE="$(ARCH)" BIND_MODE=shared - cd .. -!ENDIF - cd $(APU_PATH) - $(MAKE) $(MAKEOPT) $(SSLOPT) $(XMLOPT) -f aprutil.mak CFG="aprutil - $(ARCH)" RECURSE=0 $(CTARGET) - $(MAKE) $(MAKEOPT) $(SSLOPT) $(XMLOPT) -f libaprutil.mak CFG="libaprutil - $(ARCH)" RECURSE=0 $(CTARGET) - cd ldap - $(MAKE) $(MAKEOPT) -f apr_ldap.mak CFG="apr_ldap - $(ARCH)" RECURSE=0 $(CTARGET) - cd .. - cd dbd - for %d in (odbc $(DBD_LIST)) do \ - $(MAKE) $(MAKEOPT) -f apr_dbd_%d.mak CFG="apr_dbd_%d - $(ARCH)" RECURSE=0 $(CTARGET) - cd .. - cd dbm - for %d in ($(DBM_LIST) x) do if not %d == x \ - $(MAKE) $(MAKEOPT) -f apr_dbm_%d.mak CFG="apr_dbm_%d - $(ARCH)" RECURSE=0 $(CTARGET) - cd .. - cd crypto - for %d in ($(CRYPTO_LIST) x) do if not %d == x \ - $(MAKE) $(MAKEOPT) $(SSLOPT) -f apr_crypto_%d.mak CFG="apr_crypto_%d - $(ARCH)" RECURSE=0 $(CTARGET) - cd .. - -!ELSEIF $(USESLN) == 1 - -clean: - -for %d in (odbc $(DBD_LIST)) do \ - devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_dbd_%d - -for %d in ($(DBM_LIST) x) do if not %d == x \ - devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_dbm_%d - -for %d in ($(CRYPTO_LIST) x) do if not %d == x \ - devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_crypto_%d - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_ldap - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libaprutil - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project aprutil - cd $(API_PATH) - -$(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \ - BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=. - cd $(APU_PATH) - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libapriconv - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apriconv - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libaprapp - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project aprapp - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libapr - -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr - -buildall: - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project aprapp - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libaprapp - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project aprutil - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libaprutil - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_ldap - for %d in (odbc $(DBD_LIST)) do \ - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_dbd_%d - for %d in ($(DBM_LIST) x) do if not %d == x \ - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_dbm_%d - for %d in ($(CRYPTO_LIST) x) do if not %d == x \ - devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_crypto_%d - -!ELSE -# $(USEDSP) == 1 - -clean: - -for %d in (odbc $(DBD_LIST)) do \ - msdev aprutil.dsw /USEENV /MAKE "apr_dbd_%d - $(ARCH)" /CLEAN - -for %d in ($(DBM_LIST) x) do if not %d == x \ - msdev aprutil.dsw /USEENV /MAKE "apr_dbm_%d - $(ARCH)" /CLEAN - -for %d in ($(CRYPTO_LIST) x) do if not %d == x \ - msdev aprutil.dsw /USEENV /MAKE "apr_crypto_%d - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "apr_ldap - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)" /CLEAN - cd $(API_PATH) - $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \ - BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=. - cd $(APU_PATH) - -msdev aprutil.dsw /USEENV /MAKE "libapriconv - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "apriconv - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "libaprapp - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "aprapp - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "libapr - $(ARCH)" /CLEAN - -msdev aprutil.dsw /USEENV /MAKE "apr - $(ARCH)" /CLEAN - -buildall: - @msdev aprutil.dsw /USEENV /MAKE "aprapp - $(ARCH)" - @msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)" - @msdev aprutil.dsw /USEENV /MAKE "libaprapp - $(ARCH)" - @msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)" - @msdev aprutil.dsw /USEENV /MAKE "apr_ldap - $(ARCH)" - @for %d in (odbc $(DBD_LIST)) do \ - msdev aprutil.dsw /USEENV /MAKE "apr_dbd_%d - $(ARCH)" - @for %d in ($(DBM_LIST) x) do if not %d == x \ - msdev aprutil.dsw /USEENV /MAKE "apr_dbm_%d - $(ARCH)" - @for %d in ($(CRYPTO_LIST) x) do if not %d == x \ - msdev aprutil.dsw /USEENV /MAKE "apr_crypto_%d - $(ARCH)" - -!ENDIF - - -checkapr: - cd $(APR_PATH)\test - $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \ - OUTDIR=$(LIBSOSPATH) check - $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \ - OUTDIR=$(ARCHOSPATH) check - cd .. - cd $(APU_PATH) - -checkapu: - cd $(APU_PATH) - cd test - $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \ - OUTDIR=$(LIBSPATH) APROUTDIR=$(LIBSOSPATH) \ - APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check - $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \ - OUTDIR=$(ARCHPATH) APROUTDIR=$(ARCHOSPATH) \ - APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check - cd .. - -checkall: checkapr checkapu - - -install: - echo Y >.y - echo A >.A - @if NOT EXIST "$(PREFIX)\." mkdir "$(PREFIX)" - @if NOT EXIST "$(PREFIX)\bin\." mkdir "$(PREFIX)\bin" - @if NOT EXIST "$(PREFIX)\bin\iconv\." mkdir "$(PREFIX)\bin\iconv" - @if NOT EXIST "$(PREFIX)\include\." mkdir "$(PREFIX)\include" - @if NOT EXIST "$(PREFIX)\lib\." mkdir "$(PREFIX)\lib" - copy CHANGES "$(PREFIX)\CHANGES.txt" <.y - copy LICENSE "$(PREFIX)\LICENSE.txt" <.y - copy NOTICE "$(PREFIX)\NOTICE.txt" <.y - xcopy $(APR_PATH)\include\*.h "$(PREFIX)\include\" /d < .a - xcopy $(APU_PATH)\include\*.h "$(PREFIX)\include\" /d < .a - copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.lib "$(PREFIX)\lib\" <.y - copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.pdb "$(PREFIX)\lib\" <.y - copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.lib "$(PREFIX)\lib\" <.y - copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.pdb "$(PREFIX)\lib\" <.y - copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.lib "$(PREFIX)\lib\" <.y - copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.exp "$(PREFIX)\lib\" <.y - copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.lib "$(PREFIX)\lib\" <.y - copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.exp "$(PREFIX)\lib\" <.y - copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.dll "$(PREFIX)\bin\" <.y - copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.pdb "$(PREFIX)\bin\" <.y - copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.dll "$(PREFIX)\bin\" <.y - copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.pdb "$(PREFIX)\bin\" <.y - copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.dll "$(PREFIX)\bin\" <.y - copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.pdb "$(PREFIX)\bin\" <.y - copy $(APU_PATH)\ldap\$(ARCHPATH)\apr_ldap-1.dll "$(PREFIX)\bin\" <.y - copy $(APU_PATH)\ldap\$(ARCHPATH)\apr_ldap-1.pdb "$(PREFIX)\bin\" <.y - for %d in (odbc $(DBD_LIST)) do ( \ - copy $(APU_PATH)\dbd\$(ARCHPATH)\apr_dbd_%d-1.dll "$(PREFIX)\bin\" <.y && \ - copy $(APU_PATH)\dbd\$(ARCHPATH)\apr_dbd_%d-1.pdb "$(PREFIX)\bin\" <.y \ - ) - for %d in ($(DBM_LIST) x) do if not %d == x ( \ - copy $(APU_PATH)\dbm\$(ARCHPATH)\apr_dbm_%d-1.dll "$(PREFIX)\bin\" <.y && \ - copy $(APU_PATH)\dbm\$(ARCHPATH)\apr_dbm_%d-1.pdb "$(PREFIX)\bin\" <.y \ - ) - for %d in ($(CRYPTO_LIST) x) do if not %d == x ( \ - copy $(APU_PATH)\crypto\$(ARCHPATH)\apr_crypto_%d-1.dll "$(PREFIX)\bin\" <.y && \ - copy $(APU_PATH)\crypto\$(ARCHPATH)\apr_crypto_%d-1.pdb "$(PREFIX)\bin\" <.y \ - ) - xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.so "$(PREFIX)\bin\iconv\" /d < .a - xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.pdb "$(PREFIX)\bin\iconv\" /d < .a - del .y - del .a - Index: contrib/apr-util/NOTICE =================================================================== --- contrib/apr-util/NOTICE +++ /dev/null @@ -1,14 +0,0 @@ -Apache Portable Runtime Utility Library -Copyright (c) 2000-2016 The Apache Software Foundation. - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -Portions of this software were developed at the National Center -for Supercomputing Applications (NCSA) at the University of -Illinois at Urbana-Champaign. - -This software contains code derived from the RSA Data Security -Inc. MD5 Message-Digest Algorithm, including various -modifications by Spyglass Inc., Carnegie Mellon University, and -Bell Communications Research, Inc (Bellcore). Index: contrib/apr-util/NWGNUmakefile =================================================================== --- contrib/apr-util/NWGNUmakefile +++ /dev/null @@ -1,310 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - ldap \ - xml \ - $(EOLIST) - -ifdef WITH_APR_DBD -SUBDIRS += \ - dbd \ - $(EOLIST) -endif - -ifdef WITH_APR_DBM -SUBDIRS += \ - dbm \ - $(EOLIST) -endif - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -include $(APR_WORK)/build/NWGNUhead.inc - -# -# Make sure all needed macro's are defined -# - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include \ - $(APR)/include/arch/NetWare \ - $(APU)/include \ - $(APU)/uri \ - $(APU)/dbm/sdbm \ - $(APU)/include/private \ - $(APUXML)/expat/lib \ - $(LDAPSDK)/inc \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = -# -# If this is specified, it will override VERSION value in -# $(APR_WORK)/build/NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If this is specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(APR)/misc/netware/apache.xdc. XDCData can -# be disabled by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# Declare all target files (you must add your files here) -# - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(OBJDIR)/apulib.lib \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(EOLIST) - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - $(EOLIST) - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - $(EOLIST) - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(OBJDIR)/apr_base64.o \ - $(OBJDIR)/apr_brigade.o \ - $(OBJDIR)/apr_buckets.o \ - $(OBJDIR)/apr_buckets_alloc.o \ - $(OBJDIR)/apr_buckets_eos.o \ - $(OBJDIR)/apr_buckets_file.o \ - $(OBJDIR)/apr_buckets_flush.o \ - $(OBJDIR)/apr_buckets_heap.o \ - $(OBJDIR)/apr_buckets_mmap.o \ - $(OBJDIR)/apr_buckets_pipe.o \ - $(OBJDIR)/apr_buckets_pool.o \ - $(OBJDIR)/apr_buckets_refcount.o \ - $(OBJDIR)/apr_buckets_simple.o \ - $(OBJDIR)/apr_buckets_socket.o \ - $(OBJDIR)/apr_crypto.o \ - $(OBJDIR)/apr_date.o \ - $(OBJDIR)/apr_dbm.o \ - $(OBJDIR)/apr_dbd.o \ - $(OBJDIR)/apr_dbm_sdbm.o \ - $(OBJDIR)/apu_dso.o \ - $(OBJDIR)/apr_hooks.o \ - $(OBJDIR)/apr_md4.o \ - $(OBJDIR)/apr_md5.o \ - $(OBJDIR)/apr_memcache.o \ - $(OBJDIR)/apr_passwd.o \ - $(OBJDIR)/apr_queue.o \ - $(OBJDIR)/apr_redis.o \ - $(OBJDIR)/apr_reslist.o \ - $(OBJDIR)/apr_rmm.o \ - $(OBJDIR)/apr_sha1.o \ - $(OBJDIR)/apr_siphash.o \ - $(OBJDIR)/apu_version.o \ - $(OBJDIR)/getuuid.o \ - $(OBJDIR)/uuid.o \ - $(OBJDIR)/apr_strmatch.o \ - $(OBJDIR)/apr_thread_pool.o \ - $(OBJDIR)/apr_uri.o \ - $(OBJDIR)/crypt_blowfish.o \ - $(OBJDIR)/sdbm.o \ - $(OBJDIR)/sdbm_hash.o \ - $(OBJDIR)/sdbm_lock.o \ - $(OBJDIR)/sdbm_pair.o \ - $(OBJDIR)/xlate.o \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(APR_WORK)/build/NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -vpath %.c buckets:crypto:dbd:dbm:dbm/sdbm:encoding:hooks:ldap:memcache:redis:misc:strmatch:uri:xlate:xml - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - Index: contrib/apr-util/README =================================================================== --- contrib/apr-util/README +++ /dev/null @@ -1,111 +0,0 @@ -Apache Portable Runtime Utility Library README ----------------------------------------------- - - The Apache Portable Runtime Utility Library provides a predictable - and consistent interface to underlying client library interfaces. - This API assures predictable if not identical behavior regardless - of which libraries are available on a given platform. - - APR and its companion libraries are implemented entirely in C - and provide a common programming interface across a wide variety - of operating system platforms without sacrificing performance. - Currently supported platforms include: - - UNIX variants - Windows - Netware - Mac OS X - OS/2 - - To give a brief overview, the primary core - subsystems of APR-util 1.3 include the following: - - Hashing and UUID services - Multiple SQL DBD client interfaces - Multiple flat-database DBM client interfaces - Typesafe function Hooks abstraction - LDAP SSL connections for a variety of LDAP toolkits - MemCache interface - Date parsing rourtines - Resource Lists - Thread Pools - Queues - Relocatable Memory Management functions - String filename-style pattern matching - URI Parsing - Charset translation (iconv based) - XML parsing (expat) - - For a more complete list, please refer to the following URLs: - - http://apr.apache.org/docs/apr-util/modules.html - - Users of APR 0.9 should be aware that migrating to the APR 1.x - programming interfaces may require some adjustments; APR 1.x is - neither source nor binary compatible with earlier APR 0.9 releases. - Users of APR 1.x can expect consistent interfaces and binary backwards - compatibility throughout the entire APR 1.x release cycle, as defined - in our versioning rules: - - http://apr.apache.org/versioning.html - - APR is already used extensively by the Apache HTTP Server - version 2 and the Subversion revision control system, to - name but a few. We list all known projects using APR at - http://apr.apache.org/projects.html -- so please let us know - if you find our libraries useful in your own projects! - - -Database Providers ------------------- -As of apr-util version 1.2.11, MySQL DBD driver is shipped as part of the -distribution. However, to avoid licensing incompatibilities, it is not -built by default. To enable MySQL support, use the --with-mysql option, -but be aware that the MySQL license may introduce licensing implications -for your compiled code. Similarly, the bindings for propritary drivers -such as Oracle (--with-oracle option) must also be explicitly enabled. - -On windows, selection of supported drivers is via the environment values -DBD_LIST (for mysql, oracle, pgsql, sqlite2 and/or sqlite3) -and DBM_LIST (db and/or gdbm). DBD odbc and DBM sdbm are unconditionally -compiled and installed, do not include these in the list. - -Whenever distributing apr-util in combination with database client -drivers, always review the license requirements of all components. - - -Cryptographic Software Notice ------------------------------ -This distribution includes cryptographic software. The country in -which you currently reside may have restrictions on the import, -possession, use, and/or re-export to another country, of -encryption software. BEFORE using any encryption software, please -check your country's laws, regulations and policies concerning the -import, possession, or use, and re-export of encryption software, to -see if this is permitted. See http://www.wassenaar.org/ for more -information. - -The U.S. Government Department of Commerce, Bureau of Industry and -Security (BIS), has classified this software as Export Commodity -Control Number (ECCN) 5D002.C.1, which includes information security -software using or performing cryptographic functions with asymmetric -algorithms. The form and manner of this Apache Software Foundation -distribution makes it eligible for export under the License Exception -ENC Technology Software Unrestricted (TSU) exception (see the BIS -Export Administration Regulations, Section 740.13) for both object -code and source code. - -The following provides more details on the included cryptographic -software: - - APR-Util provides an abstract interface for symmetrical cryptographic - functions that make use of a general-purpose encryption library, - such as OpenSSL, NSS, or the operating system's platform-specific - facilities. This interface is known as the apr_crypto interface, - with implementation beneath the /crypto directory. - - APR-Util provides an abstract interface for SSL encrypted LDAP (ldaps - and STARTTLS style) connections, which can be powered by OpenLDAP, - Netscape LDAP SDK, Mozilla LDAP SDK, or other platform specific ldap - interfaces. - Index: contrib/apr-util/README.FREETDS =================================================================== --- contrib/apr-util/README.FREETDS +++ /dev/null @@ -1,11 +0,0 @@ -The APR DBD Driver for FreeTDS has been removed from the build. -It is known to have problems, and we are not able to maintain it. - -The source code is still available. If you want it and are able -to manage maintenance for yourself, you can patch the build and -work through issues that affect you, but you're on your own. - -We expect that for most users, the ODBC driver will serve as -an alternative. - -Sorry. Index: contrib/apr-util/README.cmake =================================================================== --- contrib/apr-util/README.cmake +++ /dev/null @@ -1,139 +0,0 @@ -Experimental cmake-based build support for APR-Util on Microsoft Windows - -Status ------- - -This build support is currently intended only for Microsoft Windows. -Only Windows NT-based systems can be targeted. (The traditional -Windows build support for APR can target Windows 9x as well.) - -This build support is experimental. Specifically, - -* It does not support all features of APR-Util. -* Some components may not be built correctly and/or in a manner - compatible with the previous Windows build support. -* Build interfaces, such as the mechanisms which are used to enable - optional functionality or specify prerequisites, may change from - release to release as feedback is received from users and bugs and - limitations are resolved. - -Important: Refer to the "Known Bugs and Limitations" section for further - information. - - It is beyond the scope of this document to document or explain - how to utilize the various cmake features, such as different - build backends or provisions for finding support libraries. - - Please refer to the cmake documentation for additional information - that applies to building any project with cmake. - -Prerequisites -------------- - -The following tools must be in PATH: - -* cmake, version 2.8 or later - cmake version 3.1.3 or later is required to work with current OpenSSL - releases. (OpenSSL is an optional prerequisite of APR-Util.) -* If using a command-line compiler: compiler and linker and related tools - (Refer to the cmake documentation for more information.) - -The following support libraries are mandatory: - -* APR 1.4.x or APR 1.5.x, built with cmake - -Optional support libraries allow optional features of APR to be enabled: - -* OpenSSL -* many others potentially, though the build support isn't currently - implemented - -How to build ------------- - -1. cd to a clean directory for building (i.e., don't build in your - source tree) - -2. Some cmake backends may want your compile tools in PATH. (Hint: "Visual - Studio Command Prompt") - -3. set CMAKE_LIBRARY_PATH=d:\path\to\prereq1\lib;d:\path\to\prereq2\lib;... - -4. set CMAKE_INCLUDE_PATH=d:\path\to\prereq1\include;d:\path\to\prereq2\include;... - -5. cmake -G "some backend, like 'NMake Makefiles'" - -DCMAKE_INSTALL_PREFIX=d:/path/to/aprinst - -DAPR-Util-specific-flags - d:/path/to/aprutilsource - - If APR 1.x was installed to a different directory than APR-Util, - also pass these additional arguments: - - -DAPR_INCLUDE_DIR=d:/path/to/apr1inst/include - -DAPR_LIBRARIES=d:/path/to/apr1inst/lib/libapr-1.lib - - Alternately, use cmake-gui and update settings in the GUI. - - APR-Util feature flags: - - APU_HAVE_CRYPTO Build crypt support (only the OpenSSL - implementation is currently supported) - Default: OFF - APU_HAVE_ODBC Build ODBC DBD driver - Default: ON - APR_BUILD_TESTAPR Build APR-Util test suite - Default: OFF - TEST_STATIC_LIBS Build the test suite to test the APR static - library instead of the APR dynamic library. - Default: OFF - In order to build the test suite against both - static and dynamic libraries, separate builds - will be required, one with TEST_STATIC_LIBS - set to ON. - INSTALL_PDB Install .pdb files if generated. - Default: ON - - CMAKE_C_FLAGS_RELEASE, _DEBUG, _RELWITHDEBINFO, _MINSIZEREL - - CMAKE_BUILD_TYPE - - For NMake Makefiles the choices are at least DEBUG, RELEASE, - RELWITHDEBINFO, and MINSIZEREL - Other backends make have other selections. - -6. build using chosen backend (e.g., "nmake install") - -Known Bugs and Limitations --------------------------- - -* If include/apu.h or other generated files have been created in the source - directory by another build system, they will be used unexpectedly and - cause the build to fail. -* Options should be provided for remaining features, along with finding any - necessary libraries - + DBM: - . APU_HAVE_GDBM - . APU_HAVE_NDBM - . APU_HAVE_DB - + DBD: - . APU_HAVE_PGSQL - . APU_HAVE_MYSQL - . APU_HAVE_SQLITE3 - . APU_HAVE_SQLITE2 - . APU_HAVE_ORACLE - + CRYPTO: - . APU_HAVE_NSS - + XLATE, APU_HAVE_ICONV (no way to consume an apr-iconv build yet) -* Static builds of APR modules are not supported. -* CHANGES/LICENSE/NOTICE is not installed, unlike Makefile.win. - (But unlike Makefile.win we want to call them APR-Util-CHANGES.txt - and so on.) But perhaps that is a job for a higher-level script. - -Generally: - -* Many APR-Util features have not been tested with this build. -* Developers need to examine the existing Windows build in great detail and see - what is missing from the cmake-based build, whether a feature or some build - nuance. -* Any feedback you can provide on your experiences with this build will be - helpful. Index: contrib/apr-util/apr-util.pc.in =================================================================== --- contrib/apr-util/apr-util.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -APRUTIL_MAJOR_VERSION=@APRUTIL_MAJOR_VERSION@ -includedir=@includedir@ - -Name: APR Utils -Description: Companion library for APR -Version: @APRUTIL_DOTTED_VERSION@ -# assume that apr-util requires libapr of same major version -Requires: apr-@APRUTIL_MAJOR_VERSION@ -Libs: -L${libdir} -l@APRUTIL_LIBNAME@ @LDADD_ldap@ @APRUTIL_EXPORT_LIBS@ -Cflags: -I${includedir} Index: contrib/apr-util/apr-util.spec =================================================================== --- contrib/apr-util/apr-util.spec +++ /dev/null @@ -1,200 +0,0 @@ - -%define apuver 1 - -Summary: Apache Portable Runtime Utility library -Name: apr-util -Version: 1.6.1 -Release: 1 -License: Apache Software License -Group: System Environment/Libraries -URL: http://apr.apache.org/ -Source0: http://www.apache.org/dist/apr/%{name}-%{version}.tar.bz2 -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot -BuildRequires: autoconf, libtool, doxygen, apr-devel >= 1.4.0 -BuildRequires: expat-devel, libuuid-devel - -%description -The mission of the Apache Portable Runtime (APR) is to provide a -free library of C data structures and routines. This library -contains additional utility interfaces for APR; including support -for XML, LDAP, database interfaces, URI parsing and more. - -%package devel -Group: Development/Libraries -Summary: APR utility library development kit -Requires: apr-util = %{version}-%{release}, apr-devel -Requires: db4-devel, expat-devel - -%description devel -This package provides the support files which can be used to -build applications using the APR utility library. The mission -of the Apache Portable Runtime (APR) is to provide a free -library of C data structures and routines. - -%package dbm -Group: Development/Libraries -Summary: APR utility library DBM driver -BuildRequires: db4-devel -Requires: apr-util = %{version}-%{release} - -%description dbm -This package provides the DBM driver for the apr-util. - -%package pgsql -Group: Development/Libraries -Summary: APR utility library PostgreSQL DBD driver -BuildRequires: postgresql-devel -Requires: apr-util = %{version}-%{release} - -%description pgsql -This package provides the PostgreSQL driver for the apr-util -DBD (database abstraction) interface. - -%package mysql -Group: Development/Libraries -Summary: APR utility library MySQL DBD driver -BuildRequires: mysql-devel -Requires: apr-util = %{version}-%{release} - -%description mysql -This package provides the MySQL driver for the apr-util DBD -(database abstraction) interface. - -%package sqlite -Group: Development/Libraries -Summary: APR utility library SQLite DBD driver -BuildRequires: sqlite-devel >= 3.0.0 -Requires: apr-util = %{version}-%{release} - -%description sqlite -This package provides the SQLite driver for the apr-util DBD -(database abstraction) interface. - -%package odbc -Group: Development/Libraries -Summary: APR utility library ODBC DBD driver -BuildRequires: unixODBC-devel -Requires: apr-util = %{version}-%{release} - -%description odbc -This package provides the ODBC driver for the apr-util DBD -(database abstraction) interface. - -%package ldap -Group: Development/Libraries -Summary: APR utility library LDAP support -BuildRequires: openldap-devel -Requires: apr-util = %{version}-%{release} - -%description ldap -This package provides the LDAP support for the apr-util. - -%package openssl -Group: Development/Libraries -Summary: APR utility library OpenSSL crypto support -BuildRequires: openssl-devel -Requires: apr-util = %{version}-%{release} - -%description openssl -This package provides crypto support for apr-util based on OpenSSL. - -%package nss -Group: Development/Libraries -Summary: APR utility library NSS crypto support -BuildRequires: nss-devel -Requires: apr-util = %{version}-%{release} - -%description nss -This package provides crypto support for apr-util based on Mozilla NSS. - -%prep -%setup -q - -%build -%configure --with-apr=%{_prefix} \ - --includedir=%{_includedir}/apr-%{apuver} \ - --with-ldap --without-gdbm \ - --with-sqlite3 --with-pgsql --with-mysql --with-odbc \ - --with-berkeley-db \ - --with-crypto --with-openssl --with-nss \ - --without-sqlite2 -make %{?_smp_mflags} && make dox - -%check -# Run non-interactive tests -pushd test -make %{?_smp_mflags} all CFLAGS=-fno-strict-aliasing -make check || exit 1 -popd - -%install -rm -rf $RPM_BUILD_ROOT -make install DESTDIR=$RPM_BUILD_ROOT - -# Documentation -mv docs/dox/html html - -# Unpackaged files -rm -f $RPM_BUILD_ROOT%{_libdir}/aprutil.exp - -%clean -rm -rf $RPM_BUILD_ROOT - -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - -%files -%defattr(-,root,root,-) -%doc CHANGES LICENSE NOTICE -%{_libdir}/libaprutil-%{apuver}.so.* -%dir %{_libdir}/apr-util-%{apuver} - -%files dbm -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_dbm_db* - -%files pgsql -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_dbd_pgsql* - -%files mysql -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_dbd_mysql* - -%files sqlite -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_dbd_sqlite* - -%files odbc -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_dbd_odbc* - -%files ldap -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_ldap* - -%files openssl -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_crypto_openssl* - -%files nss -%defattr(-,root,root,-) -%{_libdir}/apr-util-%{apuver}/apr_crypto_nss* - -%files devel -%defattr(-,root,root,-) -%{_bindir}/apu-%{apuver}-config -%{_libdir}/libaprutil-%{apuver}.*a -%{_libdir}/libaprutil-%{apuver}.so -%{_libdir}/pkgconfig/apr-util-%{apuver}.pc -%{_includedir}/apr-%{apuver}/*.h -%doc html - -%changelog -* Tue Jun 22 2004 Graham Leggett 1.0.0-1 -- update to support v1.0.0 of APR - -* Tue Jun 22 2004 Graham Leggett 1.0.0-1 -- derived from Fedora Core apr.spec - Index: contrib/apr-util/aprutil.dsw =================================================================== --- contrib/apr-util/aprutil.dsw +++ /dev/null @@ -1,443 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "apr"="..\apr\apr.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "apr_crypto_nss"=".\crypto\apr_crypto_nss.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_crypto_openssl"=".\crypto\apr_crypto_openssl.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbd_mysql"=".\dbd\apr_dbd_mysql.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbd_odbc"=".\dbd\apr_dbd_odbc.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbd_oracle"=".\dbd\apr_dbd_oracle.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbd_pgsql"=".\dbd\apr_dbd_pgsql.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbd_sqlite2"=".\dbd\apr_dbd_sqlite2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbd_sqlite3"=".\dbd\apr_dbd_sqlite3.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbm_db"=".\dbm\apr_dbm_db.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_dbm_gdbm"=".\dbm\apr_dbm_gdbm.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "apr_ldap"=".\ldap\apr_ldap.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprutil - End Project Dependency -}}} - -############################################################################### - -Project: "aprapp"="..\apr\build\aprapp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name preaprapp - End Project Dependency -}}} - -############################################################################### - -Project: "apriconv"="..\apr-iconv\apriconv.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name preapriconv - End Project Dependency -}}} - -############################################################################### - -Project: "aprutil"=".\aprutil.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name preaprutil - End Project Dependency - Begin Project Dependency - Project_Dep_Name apriconv - End Project Dependency -}}} - -############################################################################### - -Project: "libapr"="..\apr\libapr.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "libaprapp"="..\apr\build\libaprapp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name prelibaprapp - End Project Dependency -}}} - -############################################################################### - -Project: "libapriconv"="..\apr-iconv\libapriconv.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency -}}} - -############################################################################### - -Project: "libapriconv_ccs_modules"="..\apr-iconv\ccs\libapriconv_ccs_modules.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libapriconv - End Project Dependency -}}} - -############################################################################### - -Project: "libapriconv_ces_modules"="..\apr-iconv\ces\libapriconv_ces_modules.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libapriconv - End Project Dependency -}}} - -############################################################################### - -Project: "libaprutil"=".\libaprutil.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency - Begin Project Dependency - Project_Dep_Name libaprapp - End Project Dependency - Begin Project Dependency - Project_Dep_Name libapriconv - End Project Dependency - Begin Project Dependency - Project_Dep_Name libapriconv_ccs_modules - End Project Dependency - Begin Project Dependency - Project_Dep_Name libapriconv_ces_modules - End Project Dependency -}}} - -############################################################################### - -Project: "preaprapp"="..\apr\build\preaprapp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name apr - End Project Dependency -}}} - -############################################################################### - -Project: "preapriconv"="..\apr-iconv\build\preapriconv.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name apr - End Project Dependency -}}} - -############################################################################### - -Project: "preaprutil"=".\build\preaprutil.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name apr - End Project Dependency - Begin Project Dependency - Project_Dep_Name aprapp - End Project Dependency -}}} - -############################################################################### - -Project: "prelibaprapp"="..\apr\build\prelibaprapp.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libapr - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - Index: contrib/apr-util/apu-config.in =================================================================== --- contrib/apr-util/apu-config.in +++ /dev/null @@ -1,221 +0,0 @@ -#!/bin/sh -# 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-util script designed to allow easy command line access to APR-util -# configuration parameters. - -APRUTIL_MAJOR_VERSION="@APRUTIL_MAJOR_VERSION@" -APRUTIL_DOTTED_VERSION="@APRUTIL_DOTTED_VERSION@" - -prefix="@prefix@" -exec_prefix="@exec_prefix@" -bindir="@bindir@" -libdir="@libdir@" -includedir="@includedir@" - -LIBS="@APRUTIL_EXPORT_LIBS@" -INCLUDES="@APRUTIL_INCLUDES@" -LDFLAGS="@APRUTIL_LDFLAGS@" -LDAP_LIBS="@LDADD_ldap@" -DBM_LIBS="@LDADD_dbm_db@ @LDADD_dbm_gdbm@ @LDADD_dbm_ndbm@" - -APRUTIL_LIBNAME="@APRUTIL_LIBNAME@" - -APU_SOURCE_DIR="@abs_srcdir@" -APU_BUILD_DIR="@abs_builddir@" -APR_XML_EXPAT_OLD="@APR_XML_EXPAT_OLD@" -APU_DB_VERSION="@apu_db_version@" - -# NOTE: the following line is modified during 'make install': alter with care! -location=@APU_CONFIG_LOCATION@ - -show_usage() -{ - cat << EOF -Usage: apu-$APRUTIL_MAJOR_VERSION-config [OPTION] - -Known values for OPTION are: - --prefix[=DIR] change prefix to DIR - --bindir print location where binaries are installed - --includes print include information - --includedir print location where headers are installed - --ldflags print linker flags - --libs print library information - --avoid-ldap do not include ldap library information with --libs - --ldap-libs print library information to link with ldap - --avoid-dbm do not include DBM library information with --libs - --dbm-libs print additional library information to link with DBM - --srcdir print APR-util source directory - --link-ld print link switch(es) for linking to APR-util - --link-libtool print the libtool inputs for linking to APR-util - --apu-la-file print the path to the .la file, if available - --old-expat indicate if APR-util was built against an old expat - --db-version print the DB version - --version print APR-util's version as a dotted triple - --help print this help - -When linking with libtool, an application should do something like: - APU_LIBS="\`apu-$APRUTIL_MAJOR_VERSION-config --link-libtool --libs\`" -or when linking directly: - APU_LIBS="\`apu-$APRUTIL_MAJOR_VERSION-config --link-ld --libs\`" - -An application should use the results of --includes, and --ldflags in -their build process. -EOF -} - -if test $# -eq 0; then - show_usage - exit 1 -fi - -if test "$location" = "installed"; then - LA_FILE="$libdir/lib${APRUTIL_LIBNAME}.la" -else - LA_FILE="$APU_BUILD_DIR/lib${APRUTIL_LIBNAME}.la" -fi - -flags="" - -while test $# -gt 0; do - # Normalize the prefix. - case "$1" in - -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case "$1" in - # It is possible for the user to override our prefix. - --prefix=*) - prefix=$optarg - ;; - --prefix) - echo $prefix - exit 0 - ;; - --bindir) - echo $bindir - exit 0 - ;; - --avoid-ldap) - LDAP_LIBS="" - ;; - --avoid-dbm) - DBM_LIBS="" - ;; - --libs) - flags="$flags $LDAP_LIBS $DBM_LIBS $LIBS" - ;; - --ldap-libs) - flags="$flags $LDAP_LIBS" - ;; - --dbm-libs) - flags="$flags $DBM_LIBS" - ;; - --includedir) - if test "$location" = "installed"; then - flags="$includedir" - elif test "$location" = "source"; then - flags="$APU_SOURCE_DIR/include" - else - # this is for VPATH builds - flags="$APU_BUILD_DIR/include $APU_SOURCE_DIR/include" - fi - echo $flags - exit 0 - ;; - --includes) - if test "$location" = "installed"; then - flags="$flags -I$includedir $INCLUDES" - elif test "$location" = "source"; then - flags="$flags -I$APU_SOURCE_DIR/include $INCLUDES" - else - # this is for VPATH builds - flags="$flags -I$APU_BUILD_DIR/include -I$APU_SOURCE_DIR/include $INCLUDES" - fi - ;; - --ldflags) - flags="$flags $LDFLAGS" - ;; - --srcdir) - echo $APU_SOURCE_DIR - exit 0 - ;; - --version) - echo $APRUTIL_DOTTED_VERSION - exit 0 - ;; - --link-ld) - if test "$location" = "installed"; then - ### avoid using -L if libdir is a "standard" location like /usr/lib - flags="$flags -L$libdir -l$APRUTIL_LIBNAME" - else - flags="$flags -L$APU_BUILD_DIR -l$APRUTIL_LIBNAME" - fi - ;; - --link-libtool) - # If the LA_FILE exists where we think it should be, use it. If we're - # installed and the LA_FILE does not exist, assume to use -L/-l - # (the LA_FILE may not have been installed). If we're building ourselves, - # we'll assume that at some point the .la file be created. - if test -f "$LA_FILE"; then - flags="$flags $LA_FILE" - elif test "$location" = "installed"; then - ### avoid using -L if libdir is a "standard" location like /usr/lib - # Since the user is specifying they are linking with libtool, we - # *know* that -R will be recognized by libtool. - flags="$flags -L$libdir -R$libdir -l$APRUTIL_LIBNAME" - else - flags="$flags $LA_FILE" - fi - ;; - --apu-la-file) - if test -f "$LA_FILE"; then - flags="$flags $LA_FILE" - fi - ;; - --old-expat) - if test ! -n "$APR_XML_EXPAT_OLD"; then - echo "no" - else - echo "$APR_XML_EXPAT_OLD" - fi - exit 0 - ;; - --db-version) - echo $APU_DB_VERSION - exit 0 - ;; - --help) - show_usage - exit 0 - ;; - *) - show_usage - exit 1 - ;; - esac - - # Next please. - shift -done - -if test -n "$flags"; then - echo "$flags" -fi - -exit 0 Index: contrib/apr-util/buckets/apr_brigade.c =================================================================== --- contrib/apr-util/buckets/apr_brigade.c +++ /dev/null @@ -1,736 +0,0 @@ -/* 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 "apr.h" -#include "apr_lib.h" -#include "apr_strings.h" -#include "apr_pools.h" -#include "apr_tables.h" -#include "apr_buckets.h" -#include "apr_errno.h" -#define APR_WANT_MEMFUNC -#define APR_WANT_STRFUNC -#include "apr_want.h" - -#if APR_HAVE_SYS_UIO_H -#include -#endif - -static apr_status_t brigade_cleanup(void *data) -{ - return apr_brigade_cleanup(data); -} - -APU_DECLARE(apr_status_t) apr_brigade_cleanup(void *data) -{ - apr_bucket_brigade *b = data; - apr_bucket *e; - - while (!APR_BRIGADE_EMPTY(b)) { - e = APR_BRIGADE_FIRST(b); - apr_bucket_delete(e); - } - /* We don't need to free(bb) because it's allocated from a pool. */ - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_brigade_destroy(apr_bucket_brigade *b) -{ - apr_pool_cleanup_kill(b->p, b, brigade_cleanup); - return apr_brigade_cleanup(b); -} - -APU_DECLARE(apr_bucket_brigade *) apr_brigade_create(apr_pool_t *p, - apr_bucket_alloc_t *list) -{ - apr_bucket_brigade *b; - - b = apr_palloc(p, sizeof(*b)); - b->p = p; - b->bucket_alloc = list; - - APR_RING_INIT(&b->list, apr_bucket, link); - - apr_pool_cleanup_register(b->p, b, brigade_cleanup, apr_pool_cleanup_null); - return b; -} - -APU_DECLARE(apr_bucket_brigade *) apr_brigade_split_ex(apr_bucket_brigade *b, - apr_bucket *e, - apr_bucket_brigade *a) -{ - apr_bucket *f; - - if (!a) { - a = apr_brigade_create(b->p, b->bucket_alloc); - } - else if (!APR_BRIGADE_EMPTY(a)) { - apr_brigade_cleanup(a); - } - /* Return an empty brigade if there is nothing left in - * the first brigade to split off - */ - if (e != APR_BRIGADE_SENTINEL(b)) { - f = APR_RING_LAST(&b->list); - APR_RING_UNSPLICE(e, f, link); - APR_RING_SPLICE_HEAD(&a->list, e, f, apr_bucket, link); - } - - APR_BRIGADE_CHECK_CONSISTENCY(a); - APR_BRIGADE_CHECK_CONSISTENCY(b); - - return a; -} - -APU_DECLARE(apr_bucket_brigade *) apr_brigade_split(apr_bucket_brigade *b, - apr_bucket *e) -{ - return apr_brigade_split_ex(b, e, NULL); -} - -APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b, - apr_off_t point, - apr_bucket **after_point) -{ - apr_bucket *e; - const char *s; - apr_size_t len; - apr_uint64_t point64; - apr_status_t rv; - - if (point < 0) { - /* this could cause weird (not necessarily SEGV) things to happen */ - return APR_EINVAL; - } - if (point == 0) { - *after_point = APR_BRIGADE_FIRST(b); - return APR_SUCCESS; - } - - /* - * Try to reduce the following casting mess: We know that point will be - * larger equal 0 now and forever and thus that point (apr_off_t) and - * apr_size_t will fit into apr_uint64_t in any case. - */ - point64 = (apr_uint64_t)point; - - APR_BRIGADE_CHECK_CONSISTENCY(b); - - for (e = APR_BRIGADE_FIRST(b); - e != APR_BRIGADE_SENTINEL(b); - e = APR_BUCKET_NEXT(e)) - { - /* For an unknown length bucket, while 'point64' is beyond the possible - * size contained in apr_size_t, read and continue... - */ - if ((e->length == (apr_size_t)(-1)) - && (point64 > (apr_uint64_t)APR_SIZE_MAX)) { - /* point64 is too far out to simply split this bucket, - * we must fix this bucket's size and keep going... */ - rv = apr_bucket_read(e, &s, &len, APR_BLOCK_READ); - if (rv != APR_SUCCESS) { - *after_point = e; - return rv; - } - } - else if ((point64 < (apr_uint64_t)e->length) - || (e->length == (apr_size_t)(-1))) { - /* We already consumed buckets where point64 is beyond - * our interest ( point64 > APR_SIZE_MAX ), above. - * Here point falls between 0 and APR_SIZE_MAX - * and is within this bucket, or this bucket's len - * is undefined, so now we are ready to split it. - * First try to split the bucket natively... */ - if ((rv = apr_bucket_split(e, (apr_size_t)point64)) - != APR_ENOTIMPL) { - *after_point = APR_BUCKET_NEXT(e); - return rv; - } - - /* if the bucket cannot be split, we must read from it, - * changing its type to one that can be split */ - rv = apr_bucket_read(e, &s, &len, APR_BLOCK_READ); - if (rv != APR_SUCCESS) { - *after_point = e; - return rv; - } - - /* this assumes that len == e->length, which is okay because e - * might have been morphed by the apr_bucket_read() above, but - * if it was, the length would have been adjusted appropriately */ - if (point64 < (apr_uint64_t)e->length) { - rv = apr_bucket_split(e, (apr_size_t)point64); - *after_point = APR_BUCKET_NEXT(e); - return rv; - } - } - if (point64 == (apr_uint64_t)e->length) { - *after_point = APR_BUCKET_NEXT(e); - return APR_SUCCESS; - } - point64 -= (apr_uint64_t)e->length; - } - *after_point = APR_BRIGADE_SENTINEL(b); - return APR_INCOMPLETE; -} - -APU_DECLARE(apr_status_t) apr_brigade_length(apr_bucket_brigade *bb, - int read_all, apr_off_t *length) -{ - apr_off_t total = 0; - apr_bucket *bkt; - apr_status_t status = APR_SUCCESS; - - for (bkt = APR_BRIGADE_FIRST(bb); - bkt != APR_BRIGADE_SENTINEL(bb); - bkt = APR_BUCKET_NEXT(bkt)) - { - if (bkt->length == (apr_size_t)(-1)) { - const char *ignore; - apr_size_t len; - - if (!read_all) { - total = -1; - break; - } - - if ((status = apr_bucket_read(bkt, &ignore, &len, - APR_BLOCK_READ)) != APR_SUCCESS) { - break; - } - } - - total += bkt->length; - } - - *length = total; - return status; -} - -APU_DECLARE(apr_status_t) apr_brigade_flatten(apr_bucket_brigade *bb, - char *c, apr_size_t *len) -{ - apr_size_t actual = 0; - apr_bucket *b; - - for (b = APR_BRIGADE_FIRST(bb); - b != APR_BRIGADE_SENTINEL(bb); - b = APR_BUCKET_NEXT(b)) - { - const char *str; - apr_size_t str_len; - apr_status_t status; - - status = apr_bucket_read(b, &str, &str_len, APR_BLOCK_READ); - if (status != APR_SUCCESS) { - return status; - } - - /* If we would overflow. */ - if (str_len + actual > *len) { - str_len = *len - actual; - } - - /* XXX: It appears that overflow of the final bucket - * is DISCARDED without any warning to the caller. - * - * No, we only copy the data up to their requested size. -- jre - */ - memcpy(c, str, str_len); - - c += str_len; - actual += str_len; - - /* This could probably be actual == *len, but be safe from stray - * photons. */ - if (actual >= *len) { - break; - } - } - - *len = actual; - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_brigade_pflatten(apr_bucket_brigade *bb, - char **c, - apr_size_t *len, - apr_pool_t *pool) -{ - apr_off_t actual; - apr_size_t total; - apr_status_t rv; - - apr_brigade_length(bb, 1, &actual); - - /* XXX: This is dangerous beyond belief. At least in the - * apr_brigade_flatten case, the user explicitly stated their - * buffer length - so we don't up and palloc 4GB for a single - * file bucket. This API must grow a useful max boundry, - * either compiled-in or preset via the *len value. - * - * Shouldn't both fn's grow an additional return value for - * the case that the brigade couldn't be flattened into the - * provided or allocated buffer (such as APR_EMOREDATA?) - * Not a failure, simply an advisory result. - */ - total = (apr_size_t)actual; - - *c = apr_palloc(pool, total); - - rv = apr_brigade_flatten(bb, *c, &total); - - if (rv != APR_SUCCESS) { - return rv; - } - - *len = total; - return APR_SUCCESS; -} - -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) -{ - apr_off_t readbytes = 0; - - while (!APR_BRIGADE_EMPTY(bbIn)) { - const char *pos; - const char *str; - apr_size_t len; - apr_status_t rv; - apr_bucket *e; - - e = APR_BRIGADE_FIRST(bbIn); - rv = apr_bucket_read(e, &str, &len, block); - - if (rv != APR_SUCCESS) { - return rv; - } - - pos = memchr(str, APR_ASCII_LF, len); - /* We found a match. */ - if (pos != NULL) { - apr_bucket_split(e, pos - str + 1); - APR_BUCKET_REMOVE(e); - APR_BRIGADE_INSERT_TAIL(bbOut, e); - return APR_SUCCESS; - } - APR_BUCKET_REMOVE(e); - if (APR_BUCKET_IS_METADATA(e) || len > APR_BUCKET_BUFF_SIZE/4) { - APR_BRIGADE_INSERT_TAIL(bbOut, e); - } - else { - if (len > 0) { - rv = apr_brigade_write(bbOut, NULL, NULL, str, len); - if (rv != APR_SUCCESS) { - return rv; - } - } - apr_bucket_destroy(e); - } - readbytes += len; - /* We didn't find an APR_ASCII_LF within the maximum line length. */ - if (readbytes >= maxbytes) { - break; - } - } - - return APR_SUCCESS; -} - - -APU_DECLARE(apr_status_t) apr_brigade_to_iovec(apr_bucket_brigade *b, - struct iovec *vec, int *nvec) -{ - int left = *nvec; - apr_bucket *e; - struct iovec *orig; - apr_size_t iov_len; - const char *iov_base; - apr_status_t rv; - - orig = vec; - - for (e = APR_BRIGADE_FIRST(b); - e != APR_BRIGADE_SENTINEL(b); - e = APR_BUCKET_NEXT(e)) - { - if (left-- == 0) - break; - - rv = apr_bucket_read(e, &iov_base, &iov_len, APR_NONBLOCK_READ); - if (rv != APR_SUCCESS) - return rv; - /* Set indirectly since types differ: */ - vec->iov_len = iov_len; - vec->iov_base = (void *)iov_base; - ++vec; - } - - *nvec = (int)(vec - orig); - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_brigade_vputstrs(apr_bucket_brigade *b, - apr_brigade_flush flush, - void *ctx, - va_list va) -{ -#define MAX_VECS 8 - struct iovec vec[MAX_VECS]; - apr_size_t i = 0; - - for (;;) { - char *str = va_arg(va, char *); - apr_status_t rv; - - if (str == NULL) - break; - - vec[i].iov_base = str; - vec[i].iov_len = strlen(str); - i++; - - if (i == MAX_VECS) { - rv = apr_brigade_writev(b, flush, ctx, vec, i); - if (rv != APR_SUCCESS) - return rv; - i = 0; - } - } - if (i != 0) - return apr_brigade_writev(b, flush, ctx, vec, i); - - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_brigade_putc(apr_bucket_brigade *b, - apr_brigade_flush flush, void *ctx, - const char c) -{ - return apr_brigade_write(b, flush, ctx, &c, 1); -} - -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) -{ - apr_bucket *e = APR_BRIGADE_LAST(b); - apr_size_t remaining = APR_BUCKET_BUFF_SIZE; - char *buf = NULL; - - /* - * If the last bucket is a heap bucket and its buffer is not shared with - * another bucket, we may write into that bucket. - */ - if (!APR_BRIGADE_EMPTY(b) && APR_BUCKET_IS_HEAP(e) - && ((apr_bucket_heap *)(e->data))->refcount.refcount == 1) { - apr_bucket_heap *h = e->data; - - /* HEAP bucket start offsets are always in-memory, safe to cast */ - remaining = h->alloc_len - (e->length + (apr_size_t)e->start); - buf = h->base + e->start + e->length; - } - - if (nbyte > remaining) { - /* either a buffer bucket exists but is full, - * or no buffer bucket exists and the data is too big - * to buffer. In either case, we should flush. */ - if (flush) { - e = apr_bucket_transient_create(str, nbyte, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - return flush(b, ctx); - } - else { - e = apr_bucket_heap_create(str, nbyte, NULL, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - return APR_SUCCESS; - } - } - else if (!buf) { - /* we don't have a buffer, but the data is small enough - * that we don't mind making a new buffer */ - buf = apr_bucket_alloc(APR_BUCKET_BUFF_SIZE, b->bucket_alloc); - e = apr_bucket_heap_create(buf, APR_BUCKET_BUFF_SIZE, - apr_bucket_free, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - e->length = 0; /* We are writing into the brigade, and - * allocating more memory than we need. This - * ensures that the bucket thinks it is empty just - * after we create it. We'll fix the length - * once we put data in it below. - */ - } - - /* there is a sufficiently big buffer bucket available now */ - memcpy(buf, str, nbyte); - e->length += nbyte; - - return APR_SUCCESS; -} - -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) -{ - apr_bucket *e; - apr_size_t total_len; - apr_size_t i; - char *buf; - - /* Compute the total length of the data to be written. - */ - total_len = 0; - for (i = 0; i < nvec; i++) { - total_len += vec[i].iov_len; - } - - /* If the data to be written is very large, try to convert - * the iovec to transient buckets rather than copying. - */ - if (total_len > APR_BUCKET_BUFF_SIZE) { - if (flush) { - for (i = 0; i < nvec; i++) { - e = apr_bucket_transient_create(vec[i].iov_base, - vec[i].iov_len, - b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - } - return flush(b, ctx); - } - else { - for (i = 0; i < nvec; i++) { - e = apr_bucket_heap_create((const char *) vec[i].iov_base, - vec[i].iov_len, NULL, - b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - } - return APR_SUCCESS; - } - } - - i = 0; - - /* If there is a heap bucket at the end of the brigade - * already, and its refcount is 1, copy into the existing bucket. - */ - e = APR_BRIGADE_LAST(b); - if (!APR_BRIGADE_EMPTY(b) && APR_BUCKET_IS_HEAP(e) - && ((apr_bucket_heap *)(e->data))->refcount.refcount == 1) { - apr_bucket_heap *h = e->data; - apr_size_t remaining = h->alloc_len - - (e->length + (apr_size_t)e->start); - buf = h->base + e->start + e->length; - - if (remaining >= total_len) { - /* Simple case: all the data will fit in the - * existing heap bucket - */ - for (; i < nvec; i++) { - apr_size_t len = vec[i].iov_len; - memcpy(buf, (const void *) vec[i].iov_base, len); - buf += len; - } - e->length += total_len; - return APR_SUCCESS; - } - else { - /* More complicated case: not all of the data - * will fit in the existing heap bucket. The - * total data size is <= APR_BUCKET_BUFF_SIZE, - * so we'll need only one additional bucket. - */ - const char *start_buf = buf; - for (; i < nvec; i++) { - apr_size_t len = vec[i].iov_len; - if (len > remaining) { - break; - } - memcpy(buf, (const void *) vec[i].iov_base, len); - buf += len; - remaining -= len; - } - e->length += (buf - start_buf); - total_len -= (buf - start_buf); - - if (flush) { - apr_status_t rv = flush(b, ctx); - if (rv != APR_SUCCESS) { - return rv; - } - } - - /* Now fall through into the case below to - * allocate another heap bucket and copy the - * rest of the array. (Note that i is not - * reset to zero here; it holds the index - * of the first vector element to be - * written to the new bucket.) - */ - } - } - - /* Allocate a new heap bucket, and copy the data into it. - * The checks above ensure that the amount of data to be - * written here is no larger than APR_BUCKET_BUFF_SIZE. - */ - buf = apr_bucket_alloc(APR_BUCKET_BUFF_SIZE, b->bucket_alloc); - e = apr_bucket_heap_create(buf, APR_BUCKET_BUFF_SIZE, - apr_bucket_free, b->bucket_alloc); - for (; i < nvec; i++) { - apr_size_t len = vec[i].iov_len; - memcpy(buf, (const void *) vec[i].iov_base, len); - buf += len; - } - e->length = total_len; - APR_BRIGADE_INSERT_TAIL(b, e); - - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_brigade_puts(apr_bucket_brigade *bb, - apr_brigade_flush flush, void *ctx, - const char *str) -{ - return apr_brigade_write(bb, flush, ctx, str, strlen(str)); -} - -APU_DECLARE_NONSTD(apr_status_t) apr_brigade_putstrs(apr_bucket_brigade *b, - apr_brigade_flush flush, - void *ctx, ...) -{ - va_list va; - apr_status_t rv; - - va_start(va, ctx); - rv = apr_brigade_vputstrs(b, flush, ctx, va); - va_end(va); - return rv; -} - -APU_DECLARE_NONSTD(apr_status_t) apr_brigade_printf(apr_bucket_brigade *b, - apr_brigade_flush flush, - void *ctx, - const char *fmt, ...) -{ - va_list ap; - apr_status_t rv; - - va_start(ap, fmt); - rv = apr_brigade_vprintf(b, flush, ctx, fmt, ap); - va_end(ap); - return rv; -} - -struct brigade_vprintf_data_t { - apr_vformatter_buff_t vbuff; - - apr_bucket_brigade *b; /* associated brigade */ - apr_brigade_flush *flusher; /* flushing function */ - void *ctx; - - char *cbuff; /* buffer to flush from */ -}; - -static apr_status_t brigade_flush(apr_vformatter_buff_t *buff) -{ - /* callback function passed to ap_vformatter to be - * called when vformatter needs to buff and - * buff.curpos > buff.endpos - */ - - /* "downcast," have really passed a brigade_vprintf_data_t* */ - struct brigade_vprintf_data_t *vd = (struct brigade_vprintf_data_t*)buff; - apr_status_t res = APR_SUCCESS; - - res = apr_brigade_write(vd->b, *vd->flusher, vd->ctx, vd->cbuff, - APR_BUCKET_BUFF_SIZE); - - if(res != APR_SUCCESS) { - return -1; - } - - vd->vbuff.curpos = vd->cbuff; - vd->vbuff.endpos = vd->cbuff + APR_BUCKET_BUFF_SIZE; - - return res; -} - -APU_DECLARE(apr_status_t) apr_brigade_vprintf(apr_bucket_brigade *b, - apr_brigade_flush flush, - void *ctx, - const char *fmt, va_list va) -{ - /* the cast, in order of appearance */ - struct brigade_vprintf_data_t vd; - char buf[APR_BUCKET_BUFF_SIZE]; - int written; - - vd.vbuff.curpos = buf; - vd.vbuff.endpos = buf + APR_BUCKET_BUFF_SIZE; - vd.b = b; - vd.flusher = &flush; - vd.ctx = ctx; - vd.cbuff = buf; - - written = apr_vformatter(brigade_flush, &vd.vbuff, fmt, va); - - if (written == -1) { - return -1; - } - - /* write out what remains in the buffer */ - return apr_brigade_write(b, flush, ctx, buf, vd.vbuff.curpos - buf); -} - -/* A "safe" maximum bucket size, 1Gb */ -#define MAX_BUCKET_SIZE (0x40000000) - -APU_DECLARE(apr_bucket *) apr_brigade_insert_file(apr_bucket_brigade *bb, - apr_file_t *f, - apr_off_t start, - apr_off_t length, - apr_pool_t *p) -{ - apr_bucket *e; - - if (sizeof(apr_off_t) == sizeof(apr_size_t) || length < MAX_BUCKET_SIZE) { - e = apr_bucket_file_create(f, start, (apr_size_t)length, p, - bb->bucket_alloc); - } - else { - /* Several buckets are needed. */ - e = apr_bucket_file_create(f, start, MAX_BUCKET_SIZE, p, - bb->bucket_alloc); - - while (length > MAX_BUCKET_SIZE) { - apr_bucket *ce; - apr_bucket_copy(e, &ce); - APR_BRIGADE_INSERT_TAIL(bb, ce); - e->start += MAX_BUCKET_SIZE; - length -= MAX_BUCKET_SIZE; - } - e->length = (apr_size_t)length; /* Resize just the last bucket */ - } - - APR_BRIGADE_INSERT_TAIL(bb, e); - return e; -} Index: contrib/apr-util/buckets/apr_buckets.c =================================================================== --- contrib/apr-util/buckets/apr_buckets.c +++ /dev/null @@ -1,46 +0,0 @@ -/* 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 "apr_buckets.h" - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_noop(apr_bucket *data, - apr_pool_t *pool) -{ - return APR_SUCCESS; -} - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_notimpl(apr_bucket *data, - apr_pool_t *pool) -{ - return APR_ENOTIMPL; -} - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_split_notimpl(apr_bucket *data, - apr_size_t point) -{ - return APR_ENOTIMPL; -} - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_copy_notimpl(apr_bucket *e, - apr_bucket **c) -{ - return APR_ENOTIMPL; -} - -APU_DECLARE_NONSTD(void) apr_bucket_destroy_noop(void *data) -{ - return; -} Index: contrib/apr-util/buckets/apr_buckets_alloc.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_alloc.c +++ /dev/null @@ -1,234 +0,0 @@ -/* 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 - -#include "apr_buckets.h" -#include "apr_allocator.h" -#include "apr_version.h" - -#define ALLOC_AMT (8192 - APR_MEMNODE_T_SIZE) - -typedef struct node_header_t { - apr_size_t size; - apr_bucket_alloc_t *alloc; - apr_memnode_t *memnode; - struct node_header_t *next; -} node_header_t; - -#define SIZEOF_NODE_HEADER_T APR_ALIGN_DEFAULT(sizeof(node_header_t)) -#define SMALL_NODE_SIZE (APR_BUCKET_ALLOC_SIZE + SIZEOF_NODE_HEADER_T) - -/** A list of free memory from which new buckets or private bucket - * structures can be allocated. - */ -struct apr_bucket_alloc_t { - apr_pool_t *pool; - apr_allocator_t *allocator; - node_header_t *freelist; - apr_memnode_t *blocks; -}; - -static apr_status_t alloc_cleanup(void *data) -{ - apr_bucket_alloc_t *list = data; - - apr_allocator_free(list->allocator, list->blocks); - -#if APR_POOL_DEBUG - if (list->pool && list->allocator != apr_pool_allocator_get(list->pool)) { - apr_allocator_destroy(list->allocator); - } -#endif - - return APR_SUCCESS; -} - -APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create(apr_pool_t *p) -{ - apr_allocator_t *allocator = apr_pool_allocator_get(p); - apr_bucket_alloc_t *list; - -#if APR_POOL_DEBUG - /* may be NULL for debug mode. */ - if (allocator == NULL) { - if (apr_allocator_create(&allocator) != APR_SUCCESS) { - apr_abortfunc_t fn = apr_pool_abort_get(p); - if (fn) - (fn)(APR_ENOMEM); - abort(); - } - } -#endif - list = apr_bucket_alloc_create_ex(allocator); - if (list == NULL) { - apr_abortfunc_t fn = apr_pool_abort_get(p); - if (fn) - (fn)(APR_ENOMEM); - abort(); - } - list->pool = p; - apr_pool_cleanup_register(list->pool, list, alloc_cleanup, - apr_pool_cleanup_null); - - return list; -} - -APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create_ex( - apr_allocator_t *allocator) -{ - apr_bucket_alloc_t *list; - apr_memnode_t *block; - - block = apr_allocator_alloc(allocator, ALLOC_AMT); - if (!block) { - return NULL; - } - list = (apr_bucket_alloc_t *)block->first_avail; - list->pool = NULL; - list->allocator = allocator; - list->freelist = NULL; - list->blocks = block; - block->first_avail += APR_ALIGN_DEFAULT(sizeof(*list)); - - return list; -} - -APU_DECLARE_NONSTD(void) apr_bucket_alloc_destroy(apr_bucket_alloc_t *list) -{ - if (list->pool) { - apr_pool_cleanup_kill(list->pool, list, alloc_cleanup); - } - - apr_allocator_free(list->allocator, list->blocks); - -#if APR_POOL_DEBUG - if (list->pool && list->allocator != apr_pool_allocator_get(list->pool)) { - apr_allocator_destroy(list->allocator); - } -#endif -} - -APU_DECLARE_NONSTD(apr_size_t) apr_bucket_alloc_aligned_floor(apr_bucket_alloc_t *list, - apr_size_t size) -{ - if (size <= SMALL_NODE_SIZE) { - size = SMALL_NODE_SIZE; - } - else { -#if APR_VERSION_AT_LEAST(1,6,0) - if (size < APR_MEMNODE_T_SIZE) { - size = apr_allocator_align(list->allocator, 0); - } - else { - size = apr_allocator_align(list->allocator, - size - APR_MEMNODE_T_SIZE); - } -#else - /* Assumes the minimum (default) allocator's boundary of 4K and - * minimum (immutable before APR-1.6.x) allocation size of 8K, - * hence possibly (yet unlikely) under-estimating the floor... - */ - size = APR_ALIGN(size, 4096); - if (size < 8192) { - size = 8192; - } -#endif - size -= APR_MEMNODE_T_SIZE; - } - size -= SIZEOF_NODE_HEADER_T; - return size; -} - -APU_DECLARE_NONSTD(void *) apr_bucket_alloc(apr_size_t size, - apr_bucket_alloc_t *list) -{ - node_header_t *node; - apr_memnode_t *active = list->blocks; - char *endp; - - size += SIZEOF_NODE_HEADER_T; - if (size <= SMALL_NODE_SIZE) { - if (list->freelist) { - node = list->freelist; - list->freelist = node->next; - } - else { - endp = active->first_avail + SMALL_NODE_SIZE; - if (endp >= active->endp) { - list->blocks = apr_allocator_alloc(list->allocator, ALLOC_AMT); - if (!list->blocks) { - list->blocks = active; - return NULL; - } - list->blocks->next = active; - active = list->blocks; - endp = active->first_avail + SMALL_NODE_SIZE; - } - node = (node_header_t *)active->first_avail; - node->alloc = list; - node->memnode = active; - node->size = SMALL_NODE_SIZE; - active->first_avail = endp; - } - } - else { - apr_memnode_t *memnode = apr_allocator_alloc(list->allocator, size); - if (!memnode) { - return NULL; - } - node = (node_header_t *)memnode->first_avail; - node->alloc = list; - node->memnode = memnode; - node->size = size; - } - return ((char *)node) + SIZEOF_NODE_HEADER_T; -} - -#ifdef APR_BUCKET_DEBUG -#if APR_HAVE_STDLIB_H -#include -#endif -static void check_not_already_free(node_header_t *node) -{ - apr_bucket_alloc_t *list = node->alloc; - node_header_t *curr = list->freelist; - - while (curr) { - if (node == curr) { - abort(); - } - curr = curr->next; - } -} -#else -#define check_not_already_free(node) -#endif - -APU_DECLARE_NONSTD(void) apr_bucket_free(void *mem) -{ - node_header_t *node = (node_header_t *)((char *)mem - SIZEOF_NODE_HEADER_T); - apr_bucket_alloc_t *list = node->alloc; - - if (node->size == SMALL_NODE_SIZE) { - check_not_already_free(node); - node->next = list->freelist; - list->freelist = node; - } - else { - apr_allocator_free(list->allocator, node->memnode); - } -} Index: contrib/apr-util/buckets/apr_buckets_eos.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_eos.c +++ /dev/null @@ -1,54 +0,0 @@ -/* 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 "apr_buckets.h" - -static apr_status_t eos_bucket_read(apr_bucket *b, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - *str = NULL; - *len = 0; - return APR_SUCCESS; -} - -APU_DECLARE(apr_bucket *) apr_bucket_eos_make(apr_bucket *b) -{ - b->length = 0; - b->start = 0; - b->data = NULL; - b->type = &apr_bucket_type_eos; - - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_eos_create(apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_eos_make(b); -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_eos = { - "EOS", 5, APR_BUCKET_METADATA, - apr_bucket_destroy_noop, - eos_bucket_read, - apr_bucket_setaside_noop, - apr_bucket_split_notimpl, - apr_bucket_simple_copy -}; Index: contrib/apr-util/buckets/apr_buckets_file.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_file.c +++ /dev/null @@ -1,242 +0,0 @@ -/* 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 "apr.h" -#include "apr_general.h" -#include "apr_file_io.h" -#include "apr_buckets.h" - -#if APR_HAS_MMAP -#include "apr_mmap.h" - -/* mmap support for static files based on ideas from John Heidemann's - * patch against 1.0.5. See - * . - */ - -#endif /* APR_HAS_MMAP */ - -static void file_bucket_destroy(void *data) -{ - apr_bucket_file *f = data; - - if (apr_bucket_shared_destroy(f)) { - /* no need to close the file here; it will get - * done automatically when the pool gets cleaned up */ - apr_bucket_free(f); - } -} - -#if APR_HAS_MMAP -static int file_make_mmap(apr_bucket *e, apr_size_t filelength, - apr_off_t fileoffset, apr_pool_t *p) -{ - apr_bucket_file *a = e->data; - apr_mmap_t *mm; - - if (!a->can_mmap) { - return 0; - } - - if (filelength > APR_MMAP_LIMIT) { - if (apr_mmap_create(&mm, a->fd, fileoffset, APR_MMAP_LIMIT, - APR_MMAP_READ, p) != APR_SUCCESS) - { - return 0; - } - apr_bucket_split(e, APR_MMAP_LIMIT); - filelength = APR_MMAP_LIMIT; - } - else if ((filelength < APR_MMAP_THRESHOLD) || - (apr_mmap_create(&mm, a->fd, fileoffset, filelength, - APR_MMAP_READ, p) != APR_SUCCESS)) - { - return 0; - } - apr_bucket_mmap_make(e, mm, 0, filelength); - file_bucket_destroy(a); - return 1; -} -#endif - -static apr_status_t file_bucket_read(apr_bucket *e, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - apr_bucket_file *a = e->data; - apr_file_t *f = a->fd; - apr_bucket *b = NULL; - char *buf; - apr_status_t rv; - apr_size_t filelength = e->length; /* bytes remaining in file past offset */ - apr_off_t fileoffset = e->start; -#if APR_HAS_THREADS && !APR_HAS_XTHREAD_FILES - apr_int32_t flags; -#endif - -#if APR_HAS_MMAP - if (file_make_mmap(e, filelength, fileoffset, a->readpool)) { - return apr_bucket_read(e, str, len, block); - } -#endif - -#if APR_HAS_THREADS && !APR_HAS_XTHREAD_FILES - if ((flags = apr_file_flags_get(f)) & APR_FOPEN_XTHREAD) { - /* this file descriptor is shared across multiple threads and - * this OS doesn't support that natively, so as a workaround - * we must reopen the file into a->readpool */ - const char *fname; - apr_file_name_get(&fname, f); - - rv = apr_file_open(&f, fname, (flags & ~APR_FOPEN_XTHREAD), 0, a->readpool); - if (rv != APR_SUCCESS) - return rv; - - a->fd = f; - } -#endif - - *str = NULL; /* in case we die prematurely */ - *len = (filelength > a->read_size) ? a->read_size : filelength; - buf = apr_bucket_alloc(*len, e->list); - - /* Handle offset ... */ - rv = apr_file_seek(f, APR_SET, &fileoffset); - if (rv != APR_SUCCESS) { - apr_bucket_free(buf); - return rv; - } - rv = apr_file_read(f, buf, len); - if (rv != APR_SUCCESS && rv != APR_EOF) { - apr_bucket_free(buf); - return rv; - } - filelength -= *len; - /* - * Change the current bucket to refer to what we read, - * even if we read nothing because we hit EOF. - */ - apr_bucket_heap_make(e, buf, *len, apr_bucket_free); - - /* If we have more to read from the file, then create another bucket */ - if (filelength > 0 && rv != APR_EOF) { - /* for efficiency, we can just build a new apr_bucket struct - * to wrap around the existing file bucket */ - b = apr_bucket_alloc(sizeof(*b), e->list); - b->start = fileoffset + (*len); - b->length = filelength; - b->data = a; - b->type = &apr_bucket_type_file; - b->free = apr_bucket_free; - b->list = e->list; - APR_BUCKET_INSERT_AFTER(e, b); - } - else { - file_bucket_destroy(a); - } - - *str = buf; - return rv; -} - -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) -{ - apr_bucket_file *f; - - f = apr_bucket_alloc(sizeof(*f), b->list); - f->fd = fd; - f->readpool = p; -#if APR_HAS_MMAP - f->can_mmap = 1; -#endif - f->read_size = APR_BUCKET_BUFF_SIZE; - - b = apr_bucket_shared_make(b, f, offset, len); - b->type = &apr_bucket_type_file; - - return b; -} - -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) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_file_make(b, fd, offset, len, p); -} - -APU_DECLARE(apr_status_t) apr_bucket_file_enable_mmap(apr_bucket *e, - int enabled) -{ -#if APR_HAS_MMAP - apr_bucket_file *a = e->data; - a->can_mmap = enabled; - return APR_SUCCESS; -#else - return APR_ENOTIMPL; -#endif /* APR_HAS_MMAP */ -} - -APU_DECLARE(apr_status_t) apr_bucket_file_set_buf_size(apr_bucket *e, - apr_size_t size) -{ - apr_bucket_file *a = e->data; - - if (size <= APR_BUCKET_BUFF_SIZE) { - a->read_size = APR_BUCKET_BUFF_SIZE; - } - else { - apr_size_t floor = apr_bucket_alloc_aligned_floor(e->list, size); - a->read_size = (size < floor) ? size : floor; - } - - return APR_SUCCESS; -} - -static apr_status_t file_bucket_setaside(apr_bucket *data, apr_pool_t *reqpool) -{ - apr_bucket_file *a = data->data; - apr_file_t *fd = NULL; - apr_file_t *f = a->fd; - apr_pool_t *curpool = apr_file_pool_get(f); - - if (apr_pool_is_ancestor(curpool, reqpool)) { - return APR_SUCCESS; - } - - if (!apr_pool_is_ancestor(a->readpool, reqpool)) { - a->readpool = reqpool; - } - - apr_file_setaside(&fd, f, reqpool); - a->fd = fd; - return APR_SUCCESS; -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_file = { - "FILE", 5, APR_BUCKET_DATA, - file_bucket_destroy, - file_bucket_read, - file_bucket_setaside, - apr_bucket_shared_split, - apr_bucket_shared_copy -}; Index: contrib/apr-util/buckets/apr_buckets_flush.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_flush.c +++ /dev/null @@ -1,54 +0,0 @@ -/* 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 "apr_buckets.h" - -static apr_status_t flush_bucket_read(apr_bucket *b, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - *str = NULL; - *len = 0; - return APR_SUCCESS; -} - -APU_DECLARE(apr_bucket *) apr_bucket_flush_make(apr_bucket *b) -{ - b->length = 0; - b->start = 0; - b->data = NULL; - b->type = &apr_bucket_type_flush; - - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_flush_create(apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_flush_make(b); -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_flush = { - "FLUSH", 5, APR_BUCKET_METADATA, - apr_bucket_destroy_noop, - flush_bucket_read, - apr_bucket_setaside_noop, - apr_bucket_split_notimpl, - apr_bucket_simple_copy -}; Index: contrib/apr-util/buckets/apr_buckets_heap.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_heap.c +++ /dev/null @@ -1,96 +0,0 @@ -/* 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 "apr_buckets.h" -#define APR_WANT_MEMFUNC -#include "apr_want.h" - -static apr_status_t heap_bucket_read(apr_bucket *b, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - apr_bucket_heap *h = b->data; - - *str = h->base + b->start; - *len = b->length; - return APR_SUCCESS; -} - -static void heap_bucket_destroy(void *data) -{ - apr_bucket_heap *h = data; - - if (apr_bucket_shared_destroy(h)) { - (*h->free_func)(h->base); - apr_bucket_free(h); - } -} - -/* Warning: if you change this function, be sure to - * change apr_bucket_pool_make() too! */ -APU_DECLARE(apr_bucket *) apr_bucket_heap_make(apr_bucket *b, const char *buf, - apr_size_t length, - void (*free_func)(void *data)) -{ - apr_bucket_heap *h; - - h = apr_bucket_alloc(sizeof(*h), b->list); - - if (!free_func) { - h->alloc_len = length; - h->base = apr_bucket_alloc(h->alloc_len, b->list); - if (h->base == NULL) { - apr_bucket_free(h); - return NULL; - } - h->free_func = apr_bucket_free; - memcpy(h->base, buf, length); - } - else { - /* XXX: we lose the const qualifier here which indicates - * there's something screwy with the API... - */ - h->base = (char *) buf; - h->alloc_len = length; - h->free_func = free_func; - } - - b = apr_bucket_shared_make(b, h, 0, length); - b->type = &apr_bucket_type_heap; - - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_heap_create(const char *buf, - apr_size_t length, - void (*free_func)(void *data), - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_heap_make(b, buf, length, free_func); -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_heap = { - "HEAP", 5, APR_BUCKET_DATA, - heap_bucket_destroy, - heap_bucket_read, - apr_bucket_setaside_noop, - apr_bucket_shared_split, - apr_bucket_shared_copy -}; Index: contrib/apr-util/buckets/apr_buckets_mmap.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_mmap.c +++ /dev/null @@ -1,144 +0,0 @@ -/* 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 "apr_buckets.h" - -#if APR_HAS_MMAP - -static apr_status_t mmap_bucket_read(apr_bucket *b, const char **str, - apr_size_t *length, apr_read_type_e block) -{ - apr_bucket_mmap *m = b->data; - apr_status_t ok; - void *addr; - - if (!m->mmap) { - /* the apr_mmap_t was already cleaned up out from under us */ - return APR_EINVAL; - } - - ok = apr_mmap_offset(&addr, m->mmap, b->start); - if (ok != APR_SUCCESS) { - return ok; - } - *str = addr; - *length = b->length; - return APR_SUCCESS; -} - -static apr_status_t mmap_bucket_cleanup(void *data) -{ - /* the apr_mmap_t is about to disappear out from under us, so we - * have no choice but to pretend it doesn't exist anymore. the - * refcount is now useless because there's nothing to refer to - * anymore. so the only valid action on any remaining referrer - * is to delete it. no more reads, no more anything. */ - apr_bucket_mmap *m = data; - - m->mmap = NULL; - return APR_SUCCESS; -} - -static void mmap_bucket_destroy(void *data) -{ - apr_bucket_mmap *m = data; - - if (apr_bucket_shared_destroy(m)) { - if (m->mmap) { - apr_pool_cleanup_kill(m->mmap->cntxt, m, mmap_bucket_cleanup); - apr_mmap_delete(m->mmap); - } - apr_bucket_free(m); - } -} - -/* - * XXX: are the start and length arguments useful? - */ -APU_DECLARE(apr_bucket *) apr_bucket_mmap_make(apr_bucket *b, apr_mmap_t *mm, - apr_off_t start, - apr_size_t length) -{ - apr_bucket_mmap *m; - - m = apr_bucket_alloc(sizeof(*m), b->list); - m->mmap = mm; - - apr_pool_cleanup_register(mm->cntxt, m, mmap_bucket_cleanup, - apr_pool_cleanup_null); - - b = apr_bucket_shared_make(b, m, start, length); - b->type = &apr_bucket_type_mmap; - - return b; -} - - -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) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_mmap_make(b, mm, start, length); -} - -static apr_status_t mmap_bucket_setaside(apr_bucket *b, apr_pool_t *p) -{ - apr_bucket_mmap *m = b->data; - apr_mmap_t *mm = m->mmap; - apr_mmap_t *new_mm; - apr_status_t ok; - - if (!mm) { - /* the apr_mmap_t was already cleaned up out from under us */ - return APR_EINVAL; - } - - /* shortcut if possible */ - if (apr_pool_is_ancestor(mm->cntxt, p)) { - return APR_SUCCESS; - } - - /* duplicate apr_mmap_t into new pool */ - ok = apr_mmap_dup(&new_mm, mm, p); - if (ok != APR_SUCCESS) { - return ok; - } - - /* decrement refcount on old apr_bucket_mmap */ - mmap_bucket_destroy(m); - - /* create new apr_bucket_mmap pointing to new apr_mmap_t */ - apr_bucket_mmap_make(b, new_mm, b->start, b->length); - - return APR_SUCCESS; -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_mmap = { - "MMAP", 5, APR_BUCKET_DATA, - mmap_bucket_destroy, - mmap_bucket_read, - mmap_bucket_setaside, - apr_bucket_shared_split, - apr_bucket_shared_copy -}; - -#endif Index: contrib/apr-util/buckets/apr_buckets_pipe.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_pipe.c +++ /dev/null @@ -1,119 +0,0 @@ -/* 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 "apr_buckets.h" - -static apr_status_t pipe_bucket_read(apr_bucket *a, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - apr_file_t *p = a->data; - char *buf; - apr_status_t rv; - apr_interval_time_t timeout; - - if (block == APR_NONBLOCK_READ) { - apr_file_pipe_timeout_get(p, &timeout); - apr_file_pipe_timeout_set(p, 0); - } - - *str = NULL; - *len = APR_BUCKET_BUFF_SIZE; - buf = apr_bucket_alloc(*len, a->list); /* XXX: check for failure? */ - - rv = apr_file_read(p, buf, len); - - if (block == APR_NONBLOCK_READ) { - apr_file_pipe_timeout_set(p, timeout); - } - - if (rv != APR_SUCCESS && rv != APR_EOF) { - apr_bucket_free(buf); - return rv; - } - /* - * If there's more to read we have to keep the rest of the pipe - * for later. Otherwise, we'll close the pipe. - * XXX: Note that more complicated bucket types that - * refer to data not in memory and must therefore have a read() - * function similar to this one should be wary of copying this - * code because if they have a destroy function they probably - * want to migrate the bucket's subordinate structure from the - * old bucket to a raw new one and adjust it as appropriate, - * rather than destroying the old one and creating a completely - * new bucket. - */ - if (*len > 0) { - apr_bucket_heap *h; - /* Change the current bucket to refer to what we read */ - a = apr_bucket_heap_make(a, buf, *len, apr_bucket_free); - h = a->data; - h->alloc_len = APR_BUCKET_BUFF_SIZE; /* note the real buffer size */ - *str = buf; - APR_BUCKET_INSERT_AFTER(a, apr_bucket_pipe_create(p, a->list)); - } - else { - apr_bucket_free(buf); - a = apr_bucket_immortal_make(a, "", 0); - *str = a->data; - if (rv == APR_EOF) { - apr_file_close(p); - } - } - return APR_SUCCESS; -} - -APU_DECLARE(apr_bucket *) apr_bucket_pipe_make(apr_bucket *b, apr_file_t *p) -{ - /* - * A pipe is closed when the end is reached in pipe_bucket_read(). If - * the pipe isn't read to the end (e.g., error path), the pipe will be - * closed when its pool goes away. - * - * Note that typically the pipe is allocated from the request pool - * so it will disappear when the request is finished. However the - * core filter may decide to set aside the tail end of a CGI - * response if the connection is pipelined. This turns out not to - * be a problem because the core will have read to the end of the - * stream so the bucket(s) that it sets aside will be the heap - * buckets created by pipe_bucket_read() above. - */ - b->type = &apr_bucket_type_pipe; - b->length = (apr_size_t)(-1); - b->start = -1; - b->data = p; - - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_pipe_create(apr_file_t *p, - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_pipe_make(b, p); -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_pipe = { - "PIPE", 5, APR_BUCKET_DATA, - apr_bucket_destroy_noop, - pipe_bucket_read, - apr_bucket_setaside_notimpl, - apr_bucket_split_notimpl, - apr_bucket_copy_notimpl -}; Index: contrib/apr-util/buckets/apr_buckets_pool.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_pool.c +++ /dev/null @@ -1,142 +0,0 @@ -/* 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 "apr_buckets.h" -#define APR_WANT_MEMFUNC -#include "apr_want.h" - -static apr_status_t pool_bucket_cleanup(void *data) -{ - apr_bucket_pool *p = data; - - /* - * If the pool gets cleaned up, we have to copy the data out - * of the pool and onto the heap. But the apr_buckets out there - * that point to this pool bucket need to be notified such that - * they can morph themselves into a regular heap bucket the next - * time they try to read. To avoid having to manipulate - * reference counts and b->data pointers, the apr_bucket_pool - * actually _contains_ an apr_bucket_heap as its first element, - * so the two share their apr_bucket_refcount member, and you - * can typecast a pool bucket struct to make it look like a - * regular old heap bucket struct. - */ - p->heap.base = apr_bucket_alloc(p->heap.alloc_len, p->list); - memcpy(p->heap.base, p->base, p->heap.alloc_len); - p->base = NULL; - p->pool = NULL; - - return APR_SUCCESS; -} - -static apr_status_t pool_bucket_read(apr_bucket *b, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - apr_bucket_pool *p = b->data; - const char *base = p->base; - - if (p->pool == NULL) { - /* - * pool has been cleaned up... masquerade as a heap bucket from now - * on. subsequent bucket operations will use the heap bucket code. - */ - b->type = &apr_bucket_type_heap; - base = p->heap.base; - } - *str = base + b->start; - *len = b->length; - return APR_SUCCESS; -} - -static void pool_bucket_destroy(void *data) -{ - apr_bucket_pool *p = data; - - /* If the pool is cleaned up before the last reference goes - * away, the data is really now on the heap; heap_destroy() takes - * over. free() in heap_destroy() thinks it's freeing - * an apr_bucket_heap, when in reality it's freeing the whole - * apr_bucket_pool for us. - */ - if (p->pool) { - /* the shared resource is still in the pool - * because the pool has not been cleaned up yet - */ - if (apr_bucket_shared_destroy(p)) { - apr_pool_cleanup_kill(p->pool, p, pool_bucket_cleanup); - apr_bucket_free(p); - } - } - else { - /* the shared resource is no longer in the pool, it's - * on the heap, but this reference still thinks it's a pool - * bucket. we should just go ahead and pass control to - * heap_destroy() for it since it doesn't know any better. - */ - apr_bucket_type_heap.destroy(p); - } -} - -APU_DECLARE(apr_bucket *) apr_bucket_pool_make(apr_bucket *b, - const char *buf, apr_size_t length, apr_pool_t *pool) -{ - apr_bucket_pool *p; - - p = apr_bucket_alloc(sizeof(*p), b->list); - - /* XXX: we lose the const qualifier here which indicates - * there's something screwy with the API... - */ - /* XXX: why is this? buf is const, p->base is const... what's - * the problem? --jcw */ - p->base = (char *) buf; - p->pool = pool; - p->list = b->list; - - b = apr_bucket_shared_make(b, p, 0, length); - b->type = &apr_bucket_type_pool; - - /* pre-initialize heap bucket member */ - p->heap.alloc_len = length; - p->heap.base = NULL; - p->heap.free_func = apr_bucket_free; - - apr_pool_cleanup_register(p->pool, p, pool_bucket_cleanup, - apr_pool_cleanup_null); - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_pool_create(const char *buf, - apr_size_t length, - apr_pool_t *pool, - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_pool_make(b, buf, length, pool); -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_pool = { - "POOL", 5, APR_BUCKET_DATA, - pool_bucket_destroy, - pool_bucket_read, - apr_bucket_setaside_noop, /* don't need to setaside thanks to the cleanup*/ - apr_bucket_shared_split, - apr_bucket_shared_copy -}; Index: contrib/apr-util/buckets/apr_buckets_refcount.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_refcount.c +++ /dev/null @@ -1,64 +0,0 @@ -/* 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 "apr_buckets.h" - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_split(apr_bucket *a, - apr_size_t point) -{ - apr_bucket_refcount *r = a->data; - apr_status_t rv; - - if ((rv = apr_bucket_simple_split(a, point)) != APR_SUCCESS) { - return rv; - } - r->refcount++; - - return APR_SUCCESS; -} - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_shared_copy(apr_bucket *a, - apr_bucket **b) -{ - apr_bucket_refcount *r = a->data; - - apr_bucket_simple_copy(a, b); - r->refcount++; - - return APR_SUCCESS; -} - -APU_DECLARE(int) apr_bucket_shared_destroy(void *data) -{ - apr_bucket_refcount *r = data; - r->refcount--; - return (r->refcount == 0); -} - -APU_DECLARE(apr_bucket *) apr_bucket_shared_make(apr_bucket *b, void *data, - apr_off_t start, - apr_size_t length) -{ - apr_bucket_refcount *r = data; - - b->data = r; - b->start = start; - b->length = length; - /* caller initializes the type field */ - r->refcount = 1; - - return b; -} Index: contrib/apr-util/buckets/apr_buckets_simple.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_simple.c +++ /dev/null @@ -1,137 +0,0 @@ -/* 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 "apr_buckets.h" - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_copy(apr_bucket *a, - apr_bucket **b) -{ - *b = apr_bucket_alloc(sizeof(**b), a->list); /* XXX: check for failure? */ - **b = *a; - - return APR_SUCCESS; -} - -APU_DECLARE_NONSTD(apr_status_t) apr_bucket_simple_split(apr_bucket *a, - apr_size_t point) -{ - apr_bucket *b; - - if (point > a->length) { - return APR_EINVAL; - } - - apr_bucket_simple_copy(a, &b); - - a->length = point; - b->length -= point; - b->start += point; - - APR_BUCKET_INSERT_AFTER(a, b); - - return APR_SUCCESS; -} - -static apr_status_t simple_bucket_read(apr_bucket *b, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - *str = (char *)b->data + b->start; - *len = b->length; - return APR_SUCCESS; -} - -APU_DECLARE(apr_bucket *) apr_bucket_immortal_make(apr_bucket *b, - const char *buf, - apr_size_t length) -{ - b->data = (char *)buf; - b->length = length; - b->start = 0; - b->type = &apr_bucket_type_immortal; - - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_immortal_create(const char *buf, - apr_size_t length, - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_immortal_make(b, buf, length); -} - -/* - * XXX: This function could do with some tweaking to reduce memory - * usage in various cases, e.g. share buffers in the heap between all - * the buckets that are set aside, or even spool set-aside data to - * disk if it gets too voluminous (but if it does then that's probably - * a bug elsewhere). There should probably be a apr_brigade_setaside() - * function that co-ordinates the action of all the bucket setaside - * functions to improve memory efficiency. - */ -static apr_status_t transient_bucket_setaside(apr_bucket *b, apr_pool_t *pool) -{ - b = apr_bucket_heap_make(b, (char *)b->data + b->start, b->length, NULL); - if (b == NULL) { - return APR_ENOMEM; - } - return APR_SUCCESS; -} - -APU_DECLARE(apr_bucket *) apr_bucket_transient_make(apr_bucket *b, - const char *buf, - apr_size_t length) -{ - b->data = (char *)buf; - b->length = length; - b->start = 0; - b->type = &apr_bucket_type_transient; - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_transient_create(const char *buf, - apr_size_t length, - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_transient_make(b, buf, length); -} - -const apr_bucket_type_t apr_bucket_type_immortal = { - "IMMORTAL", 5, APR_BUCKET_DATA, - apr_bucket_destroy_noop, - simple_bucket_read, - apr_bucket_setaside_noop, - apr_bucket_simple_split, - apr_bucket_simple_copy -}; - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_transient = { - "TRANSIENT", 5, APR_BUCKET_DATA, - apr_bucket_destroy_noop, - simple_bucket_read, - transient_bucket_setaside, - apr_bucket_simple_split, - apr_bucket_simple_copy -}; Index: contrib/apr-util/buckets/apr_buckets_socket.c =================================================================== --- contrib/apr-util/buckets/apr_buckets_socket.c +++ /dev/null @@ -1,114 +0,0 @@ -/* 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 "apr_buckets.h" - -static apr_status_t socket_bucket_read(apr_bucket *a, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - apr_socket_t *p = a->data; - char *buf; - apr_status_t rv; - apr_interval_time_t timeout; - - if (block == APR_NONBLOCK_READ) { - apr_socket_timeout_get(p, &timeout); - apr_socket_timeout_set(p, 0); - } - - *str = NULL; - *len = APR_BUCKET_BUFF_SIZE; - buf = apr_bucket_alloc(*len, a->list); /* XXX: check for failure? */ - - rv = apr_socket_recv(p, buf, len); - - if (block == APR_NONBLOCK_READ) { - apr_socket_timeout_set(p, timeout); - } - - if (rv != APR_SUCCESS && rv != APR_EOF) { - apr_bucket_free(buf); - return rv; - } - /* - * If there's more to read we have to keep the rest of the socket - * for later. XXX: Note that more complicated bucket types that - * refer to data not in memory and must therefore have a read() - * function similar to this one should be wary of copying this - * code because if they have a destroy function they probably - * want to migrate the bucket's subordinate structure from the - * old bucket to a raw new one and adjust it as appropriate, - * rather than destroying the old one and creating a completely - * new bucket. - * - * Even if there is nothing more to read, don't close the socket here - * as we have to use it to send any response :) We could shut it - * down for reading, but there is no benefit to doing so. - */ - if (*len > 0) { - apr_bucket_heap *h; - /* Change the current bucket to refer to what we read */ - a = apr_bucket_heap_make(a, buf, *len, apr_bucket_free); - h = a->data; - h->alloc_len = APR_BUCKET_BUFF_SIZE; /* note the real buffer size */ - *str = buf; - APR_BUCKET_INSERT_AFTER(a, apr_bucket_socket_create(p, a->list)); - } - else { - apr_bucket_free(buf); - a = apr_bucket_immortal_make(a, "", 0); - *str = a->data; - } - return APR_SUCCESS; -} - -APU_DECLARE(apr_bucket *) apr_bucket_socket_make(apr_bucket *b, apr_socket_t *p) -{ - /* - * XXX: We rely on a cleanup on some pool or other to actually - * destroy the socket. We should probably explicitly call apr to - * destroy it instead. - * - * Note that typically the socket is allocated from the connection pool - * so it will disappear when the connection is finished. - */ - b->type = &apr_bucket_type_socket; - b->length = (apr_size_t)(-1); - b->start = -1; - b->data = p; - - return b; -} - -APU_DECLARE(apr_bucket *) apr_bucket_socket_create(apr_socket_t *p, - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_socket_make(b, p); -} - -APU_DECLARE_DATA const apr_bucket_type_t apr_bucket_type_socket = { - "SOCKET", 5, APR_BUCKET_DATA, - apr_bucket_destroy_noop, - socket_bucket_read, - apr_bucket_setaside_notimpl, - apr_bucket_split_notimpl, - apr_bucket_copy_notimpl -}; Index: contrib/apr-util/build-outputs.mk =================================================================== --- contrib/apr-util/build-outputs.mk +++ /dev/null @@ -1,152 +0,0 @@ -# DO NOT EDIT. AUTOMATICALLY GENERATED. - -buckets/apr_brigade.lo: buckets/apr_brigade.c .make.dirs include/apr_buckets.h -buckets/apr_buckets.lo: buckets/apr_buckets.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_alloc.lo: buckets/apr_buckets_alloc.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_eos.lo: buckets/apr_buckets_eos.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_file.lo: buckets/apr_buckets_file.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_flush.lo: buckets/apr_buckets_flush.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_heap.lo: buckets/apr_buckets_heap.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_mmap.lo: buckets/apr_buckets_mmap.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_pipe.lo: buckets/apr_buckets_pipe.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_pool.lo: buckets/apr_buckets_pool.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_refcount.lo: buckets/apr_buckets_refcount.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_simple.lo: buckets/apr_buckets_simple.c .make.dirs include/apr_buckets.h -buckets/apr_buckets_socket.lo: buckets/apr_buckets_socket.c .make.dirs include/apr_buckets.h -crypto/apr_crypto.lo: crypto/apr_crypto.c .make.dirs include/apr_crypto.h include/apu_errno.h include/apu_version.h include/private/apr_crypto_internal.h include/private/apu_internal.h -crypto/apr_md4.lo: crypto/apr_md4.c .make.dirs include/apr_md4.h include/apr_xlate.h -crypto/apr_md5.lo: crypto/apr_md5.c .make.dirs include/apr_md5.h include/apr_xlate.h -crypto/apr_passwd.lo: crypto/apr_passwd.c .make.dirs include/apr_md5.h include/apr_sha1.h include/apr_xlate.h -crypto/apr_sha1.lo: crypto/apr_sha1.c .make.dirs include/apr_base64.h include/apr_sha1.h include/apr_xlate.h -crypto/apr_siphash.lo: crypto/apr_siphash.c .make.dirs include/apr_siphash.h -crypto/crypt_blowfish.lo: crypto/crypt_blowfish.c .make.dirs -crypto/getuuid.lo: crypto/getuuid.c .make.dirs include/apr_md5.h include/apr_uuid.h include/apr_xlate.h -crypto/uuid.lo: crypto/uuid.c .make.dirs include/apr_uuid.h -dbd/apr_dbd.lo: dbd/apr_dbd.c .make.dirs include/apr_dbd.h include/apu_version.h include/private/apr_dbd_internal.h include/private/apu_internal.h -dbm/apr_dbm.lo: dbm/apr_dbm.c .make.dirs include/apr_dbm.h include/apu_version.h include/private/apr_dbm_private.h include/private/apu_internal.h -dbm/apr_dbm_sdbm.lo: dbm/apr_dbm_sdbm.c .make.dirs include/apr_dbm.h include/apr_sdbm.h include/private/apr_dbm_private.h -dbm/sdbm/sdbm.lo: dbm/sdbm/sdbm.c .make.dirs include/apr_sdbm.h -dbm/sdbm/sdbm_hash.lo: dbm/sdbm/sdbm_hash.c .make.dirs include/apr_sdbm.h -dbm/sdbm/sdbm_lock.lo: dbm/sdbm/sdbm_lock.c .make.dirs include/apr_sdbm.h -dbm/sdbm/sdbm_pair.lo: dbm/sdbm/sdbm_pair.c .make.dirs include/apr_sdbm.h -encoding/apr_base64.lo: encoding/apr_base64.c .make.dirs include/apr_base64.h include/apr_xlate.h -hooks/apr_hooks.lo: hooks/apr_hooks.c .make.dirs include/apr_hooks.h include/apr_optional.h include/apr_optional_hooks.h -ldap/apr_ldap_stub.lo: ldap/apr_ldap_stub.c .make.dirs include/apu_version.h include/private/apu_internal.h -ldap/apr_ldap_url.lo: ldap/apr_ldap_url.c .make.dirs -memcache/apr_memcache.lo: memcache/apr_memcache.c .make.dirs include/apr_buckets.h include/apr_memcache.h include/apr_reslist.h -misc/apr_date.lo: misc/apr_date.c .make.dirs include/apr_date.h -misc/apr_queue.lo: misc/apr_queue.c .make.dirs include/apr_queue.h -misc/apr_reslist.lo: misc/apr_reslist.c .make.dirs include/apr_reslist.h -misc/apr_rmm.lo: misc/apr_rmm.c .make.dirs include/apr_anylock.h include/apr_rmm.h -misc/apr_thread_pool.lo: misc/apr_thread_pool.c .make.dirs include/apr_thread_pool.h -misc/apu_dso.lo: misc/apu_dso.c .make.dirs include/apu_version.h include/private/apu_internal.h -misc/apu_version.lo: misc/apu_version.c .make.dirs include/apu_version.h -redis/apr_redis.lo: redis/apr_redis.c .make.dirs include/apr_buckets.h include/apr_redis.h include/apr_reslist.h -strmatch/apr_strmatch.lo: strmatch/apr_strmatch.c .make.dirs include/apr_strmatch.h -uri/apr_uri.lo: uri/apr_uri.c .make.dirs include/apr_uri.h -xlate/xlate.lo: xlate/xlate.c .make.dirs include/apr_xlate.h -xml/apr_xml.lo: xml/apr_xml.c .make.dirs include/apr_xlate.h include/apr_xml.h - -OBJECTS_all = buckets/apr_brigade.lo buckets/apr_buckets.lo buckets/apr_buckets_alloc.lo buckets/apr_buckets_eos.lo buckets/apr_buckets_file.lo buckets/apr_buckets_flush.lo buckets/apr_buckets_heap.lo buckets/apr_buckets_mmap.lo buckets/apr_buckets_pipe.lo buckets/apr_buckets_pool.lo buckets/apr_buckets_refcount.lo buckets/apr_buckets_simple.lo buckets/apr_buckets_socket.lo crypto/apr_crypto.lo crypto/apr_md4.lo crypto/apr_md5.lo crypto/apr_passwd.lo crypto/apr_sha1.lo crypto/apr_siphash.lo crypto/crypt_blowfish.lo crypto/getuuid.lo crypto/uuid.lo dbd/apr_dbd.lo dbm/apr_dbm.lo dbm/apr_dbm_sdbm.lo dbm/sdbm/sdbm.lo dbm/sdbm/sdbm_hash.lo dbm/sdbm/sdbm_lock.lo dbm/sdbm/sdbm_pair.lo encoding/apr_base64.lo hooks/apr_hooks.lo ldap/apr_ldap_stub.lo ldap/apr_ldap_url.lo memcache/apr_memcache.lo misc/apr_date.lo misc/apr_queue.lo misc/apr_reslist.lo misc/apr_rmm.lo misc/apr_thread_pool.lo misc/apu_dso.lo misc/apu_version.lo redis/apr_redis.lo strmatch/apr_strmatch.lo uri/apr_uri.lo xlate/xlate.lo xml/apr_xml.lo - -OBJECTS_unix = $(OBJECTS_all) - -OBJECTS_aix = $(OBJECTS_all) - -OBJECTS_beos = $(OBJECTS_all) - -OBJECTS_os2 = $(OBJECTS_all) - -OBJECTS_os390 = $(OBJECTS_all) - -OBJECTS_win32 = $(OBJECTS_all) - -HEADERS = $(top_srcdir)/include/apr_anylock.h $(top_srcdir)/include/apr_base64.h $(top_srcdir)/include/apr_buckets.h $(top_srcdir)/include/apr_crypto.h $(top_srcdir)/include/apr_date.h $(top_srcdir)/include/apr_dbd.h $(top_srcdir)/include/apr_dbm.h $(top_srcdir)/include/apr_hooks.h $(top_srcdir)/include/apr_ldap_init.h $(top_srcdir)/include/apr_ldap_option.h $(top_srcdir)/include/apr_ldap_rebind.h $(top_srcdir)/include/apr_ldap_url.h $(top_srcdir)/include/apr_md4.h $(top_srcdir)/include/apr_md5.h $(top_srcdir)/include/apr_memcache.h $(top_srcdir)/include/apr_optional.h $(top_srcdir)/include/apr_optional_hooks.h $(top_srcdir)/include/apr_queue.h $(top_srcdir)/include/apr_redis.h $(top_srcdir)/include/apr_reslist.h $(top_srcdir)/include/apr_rmm.h $(top_srcdir)/include/apr_sdbm.h $(top_srcdir)/include/apr_sha1.h $(top_srcdir)/include/apr_siphash.h $(top_srcdir)/include/apr_strmatch.h $(top_srcdir)/include/apr_thread_pool.h $(top_srcdir)/include/apr_uri.h $(top_srcdir)/include/apr_uuid.h $(top_srcdir)/include/apr_xlate.h $(top_srcdir)/include/apr_xml.h $(top_srcdir)/include/apu_errno.h $(top_srcdir)/include/apu_version.h $(top_srcdir)/include/private/apr_crypto_internal.h $(top_srcdir)/include/private/apr_dbd_internal.h $(top_srcdir)/include/private/apr_dbd_odbc_v2.h $(top_srcdir)/include/private/apr_dbm_private.h $(top_srcdir)/include/private/apu_internal.h - -SOURCE_DIRS = xml redis dbm encoding hooks buckets uri misc crypto dbd strmatch memcache dbm/sdbm ldap xlate $(EXTRA_SOURCE_DIRS) - -ldap/apr_ldap_init.lo: ldap/apr_ldap_init.c .make.dirs include/private/apu_internal.h -ldap/apr_ldap_option.lo: ldap/apr_ldap_option.c .make.dirs -ldap/apr_ldap_rebind.lo: ldap/apr_ldap_rebind.c .make.dirs include/apr_ldap_rebind.h -OBJECTS_ldap = ldap/apr_ldap_init.lo ldap/apr_ldap_option.lo ldap/apr_ldap_rebind.lo -MODULE_ldap = ldap/apr_ldap.la -ldap/apr_ldap.la: ldap/apr_ldap_init.lo ldap/apr_ldap_option.lo ldap/apr_ldap_rebind.lo - $(LINK_MODULE) -o $@ $(OBJECTS_ldap) $(LDADD_ldap) - -crypto/apr_crypto_openssl.lo: crypto/apr_crypto_openssl.c .make.dirs include/apr_buckets.h include/apr_crypto.h include/apu_errno.h include/private/apr_crypto_internal.h -OBJECTS_crypto_openssl = crypto/apr_crypto_openssl.lo -MODULE_crypto_openssl = crypto/apr_crypto_openssl.la -crypto/apr_crypto_openssl.la: crypto/apr_crypto_openssl.lo - $(LINK_MODULE) -o $@ $(OBJECTS_crypto_openssl) $(LDADD_crypto_openssl) - -crypto/apr_crypto_nss.lo: crypto/apr_crypto_nss.c .make.dirs include/apr_buckets.h include/apr_crypto.h include/apu_errno.h include/private/apr_crypto_internal.h -OBJECTS_crypto_nss = crypto/apr_crypto_nss.lo -MODULE_crypto_nss = crypto/apr_crypto_nss.la -crypto/apr_crypto_nss.la: crypto/apr_crypto_nss.lo - $(LINK_MODULE) -o $@ $(OBJECTS_crypto_nss) $(LDADD_crypto_nss) - -crypto/apr_crypto_commoncrypto.lo: crypto/apr_crypto_commoncrypto.c .make.dirs include/apr_buckets.h include/apr_crypto.h include/apu_errno.h include/private/apr_crypto_internal.h -OBJECTS_crypto_commoncrypto = crypto/apr_crypto_commoncrypto.lo -MODULE_crypto_commoncrypto = crypto/apr_crypto_commoncrypto.la -crypto/apr_crypto_commoncrypto.la: crypto/apr_crypto_commoncrypto.lo - $(LINK_MODULE) -o $@ $(OBJECTS_crypto_commoncrypto) $(LDADD_crypto_commoncrypto) - -dbd/apr_dbd_pgsql.lo: dbd/apr_dbd_pgsql.c .make.dirs include/apr_buckets.h include/apr_dbd.h include/private/apr_dbd_internal.h -OBJECTS_dbd_pgsql = dbd/apr_dbd_pgsql.lo -MODULE_dbd_pgsql = dbd/apr_dbd_pgsql.la -dbd/apr_dbd_pgsql.la: dbd/apr_dbd_pgsql.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbd_pgsql) $(LDADD_dbd_pgsql) - -dbd/apr_dbd_sqlite2.lo: dbd/apr_dbd_sqlite2.c .make.dirs include/apr_buckets.h include/apr_dbd.h include/private/apr_dbd_internal.h -OBJECTS_dbd_sqlite2 = dbd/apr_dbd_sqlite2.lo -MODULE_dbd_sqlite2 = dbd/apr_dbd_sqlite2.la -dbd/apr_dbd_sqlite2.la: dbd/apr_dbd_sqlite2.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbd_sqlite2) $(LDADD_dbd_sqlite2) - -dbd/apr_dbd_sqlite3.lo: dbd/apr_dbd_sqlite3.c .make.dirs include/apr_buckets.h include/apr_dbd.h include/private/apr_dbd_internal.h -OBJECTS_dbd_sqlite3 = dbd/apr_dbd_sqlite3.lo -MODULE_dbd_sqlite3 = dbd/apr_dbd_sqlite3.la -dbd/apr_dbd_sqlite3.la: dbd/apr_dbd_sqlite3.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbd_sqlite3) $(LDADD_dbd_sqlite3) - -dbd/apr_dbd_oracle.lo: dbd/apr_dbd_oracle.c .make.dirs include/apr_buckets.h include/apr_dbd.h include/private/apr_dbd_internal.h -OBJECTS_dbd_oracle = dbd/apr_dbd_oracle.lo -MODULE_dbd_oracle = dbd/apr_dbd_oracle.la -dbd/apr_dbd_oracle.la: dbd/apr_dbd_oracle.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbd_oracle) $(LDADD_dbd_oracle) - -dbd/apr_dbd_mysql.lo: dbd/apr_dbd_mysql.c .make.dirs include/apr_buckets.h include/apr_dbd.h include/apu_version.h include/private/apr_dbd_internal.h -OBJECTS_dbd_mysql = dbd/apr_dbd_mysql.lo -MODULE_dbd_mysql = dbd/apr_dbd_mysql.la -dbd/apr_dbd_mysql.la: dbd/apr_dbd_mysql.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbd_mysql) $(LDADD_dbd_mysql) - -dbd/apr_dbd_odbc.lo: dbd/apr_dbd_odbc.c .make.dirs include/apr_buckets.h include/apr_dbd.h include/apu_version.h include/private/apr_dbd_internal.h include/private/apr_dbd_odbc_v2.h -OBJECTS_dbd_odbc = dbd/apr_dbd_odbc.lo -MODULE_dbd_odbc = dbd/apr_dbd_odbc.la -dbd/apr_dbd_odbc.la: dbd/apr_dbd_odbc.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbd_odbc) $(LDADD_dbd_odbc) - -dbm/apr_dbm_berkeleydb.lo: dbm/apr_dbm_berkeleydb.c .make.dirs include/apr_dbm.h include/private/apr_dbm_private.h -OBJECTS_dbm_db = dbm/apr_dbm_berkeleydb.lo -MODULE_dbm_db = dbm/apr_dbm_db.la -dbm/apr_dbm_db.la: dbm/apr_dbm_berkeleydb.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbm_db) $(LDADD_dbm_db) - -dbm/apr_dbm_gdbm.lo: dbm/apr_dbm_gdbm.c .make.dirs include/apr_dbm.h include/private/apr_dbm_private.h -OBJECTS_dbm_gdbm = dbm/apr_dbm_gdbm.lo -MODULE_dbm_gdbm = dbm/apr_dbm_gdbm.la -dbm/apr_dbm_gdbm.la: dbm/apr_dbm_gdbm.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbm_gdbm) $(LDADD_dbm_gdbm) - -dbm/apr_dbm_ndbm.lo: dbm/apr_dbm_ndbm.c .make.dirs include/apr_dbm.h include/private/apr_dbm_private.h -OBJECTS_dbm_ndbm = dbm/apr_dbm_ndbm.lo -MODULE_dbm_ndbm = dbm/apr_dbm_ndbm.la -dbm/apr_dbm_ndbm.la: dbm/apr_dbm_ndbm.lo - $(LINK_MODULE) -o $@ $(OBJECTS_dbm_ndbm) $(LDADD_dbm_ndbm) - -BUILD_DIRS = buckets crypto dbd dbm dbm/sdbm encoding hooks ldap memcache misc redis strmatch uri xlate xml - -.make.dirs: $(srcdir)/build-outputs.mk - @for d in $(BUILD_DIRS); do test -d $$d || mkdir $$d; done - @echo timestamp > $@ Index: contrib/apr-util/build.conf =================================================================== --- contrib/apr-util/build.conf +++ /dev/null @@ -1,104 +0,0 @@ -# -# Configuration file for APRUTIL. Used by APR/build/gen-build.py -# - -[options] - -# the platform-independent .c files -paths = - buckets/*.c - crypto/apr_crypto.c - crypto/apr_md4.c - crypto/apr_md5.c - crypto/apr_passwd.c - crypto/apr_sha1.c - crypto/apr_siphash.c - crypto/getuuid.c - crypto/uuid.c - crypto/crypt_blowfish.c - dbm/apr_dbm_sdbm.c - dbm/apr_dbm.c - dbm/sdbm/*.c - encoding/*.c - hooks/*.c - ldap/apr_ldap_stub.c - ldap/apr_ldap_url.c - misc/*.c - memcache/*.c - redis/*.c - uri/apr_uri.c - xml/*.c - strmatch/*.c - xlate/*.c - dbd/apr_dbd.c - -# we have no platform-specific subdirs -platform_dirs = - -# the public headers -headers = include/*.h include/private/*.h - -modules = - ldap crypto_openssl crypto_nss crypto_commoncrypto dbd_pgsql - dbd_sqlite2 dbd_sqlite3 dbd_oracle dbd_mysql dbd_odbc - dbm_db dbm_gdbm dbm_ndbm - -# gen_uri_delim.c - -# we have a recursive makefile for the test files (for now) -# test/*.c - -[crypto_commoncrypto] -paths = crypto/apr_crypto_commoncrypto.c -target = crypto/apr_crypto_commoncrypto.la - -[crypto_openssl] -paths = crypto/apr_crypto_openssl.c -target = crypto/apr_crypto_openssl.la - -[crypto_nss] -paths = crypto/apr_crypto_nss.c -target = crypto/apr_crypto_nss.la - -[dbd_pgsql] -paths = dbd/apr_dbd_pgsql.c -target = dbd/apr_dbd_pgsql.la - -[dbd_sqlite2] -paths = dbd/apr_dbd_sqlite2.c -target = dbd/apr_dbd_sqlite2.la - -[dbd_sqlite3] -paths = dbd/apr_dbd_sqlite3.c -target = dbd/apr_dbd_sqlite3.la - -[dbd_oracle] -paths = dbd/apr_dbd_oracle.c -target = dbd/apr_dbd_oracle.la - -[dbd_mysql] -paths = dbd/apr_dbd_mysql.c -target = dbd/apr_dbd_mysql.la - -[dbd_odbc] -paths = dbd/apr_dbd_odbc.c -target = dbd/apr_dbd_odbc.la - -[dbm_db] -paths = dbm/apr_dbm_berkeleydb.c -target = dbm/apr_dbm_db.la - -[dbm_gdbm] -paths = dbm/apr_dbm_gdbm.c -target = dbm/apr_dbm_gdbm.la - -[dbm_ndbm] -paths = dbm/apr_dbm_ndbm.c -target = dbm/apr_dbm_ndbm.la - -[ldap] -paths = ldap/apr_ldap_init.c - ldap/apr_ldap_option.c - ldap/apr_ldap_rebind.c -target = ldap/apr_ldap.la - Index: contrib/apr-util/buildconf =================================================================== --- contrib/apr-util/buildconf +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh -# -# 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. -# -# - -if [ "$1" = "--verbose" -o "$1" = "-v" ]; then - verbose="--verbose" - shift -fi - -# Default place to look for apr source. Can be overridden with -# --with-apr=[directory] -apr_src_dir=../apr - -while test $# -gt 0 -do - # Normalize - case "$1" in - -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - case "$1" in - --with-apr=*) - apr_src_dir=$optarg - ;; - esac - - shift -done - -if [ -f "$apr_src_dir/build/apr_common.m4" ]; then - apr_src_dir=`cd $apr_src_dir; pwd` - echo "" - echo "Looking for apr source in $apr_src_dir" -else - echo "" - echo "Problem finding apr source in $apr_src_dir." - echo "Use:" - echo " --with-apr=[directory]" - exit 1 -fi - -set -e - -# Remove some files, then copy them from apr source tree -rm -f build/apr_common.m4 build/find_apr.m4 build/install.sh \ - build/config.guess build/config.sub build/get-version.sh -cp -p $apr_src_dir/build/apr_common.m4 $apr_src_dir/build/find_apr.m4 \ - $apr_src_dir/build/install.sh $apr_src_dir/build/config.guess \ - $apr_src_dir/build/config.sub $apr_src_dir/build/get-version.sh \ - build/ - -# Remove aclocal.m4 as it'll break some builds... -rm -rf aclocal.m4 autom4te*.cache - -# -# Generate the autoconf header (include/apu_config.h) and ./configure -# -echo "Creating include/private/apu_config.h ..." -${AUTOHEADER:-autoheader} $verbose - -echo "Creating configure ..." -### do some work to toss config.cache? -if ${AUTOCONF:-autoconf} $verbose; then - : -else - echo "autoconf failed" - exit 1 -fi - -# -# Generate build-outputs.mk for the build system -# -echo "Generating 'make' outputs ..." -$apr_src_dir/build/gen-build.py $verbose make - -# Remove autoconf cache again -rm -rf autom4te*.cache - -# Create RPM Spec file -if [ -f `which cut` ]; then - echo rebuilding rpm spec file - REVISION=`build/get-version.sh all include/apu_version.h APU` - VERSION=`echo $REVISION | cut -d- -s -f1` - RELEASE=`echo $REVISION | cut -d- -s -f2` - if [ "x$VERSION" = "x" ]; then - VERSION=$REVISION - RELEASE=1 - fi - sed -e "s/APU_VERSION/$VERSION/" -e "s/APU_RELEASE/$RELEASE/" \ - ./build/rpm/apr-util.spec.in > apr-util.spec -fi - -# Verify the tree was clean, notify user if not (normal in development) -# -if [ -f "include/apu.h" -o -f "include/private/apu_config.h" -o \ - -f "include/apu_want.h" -o -f "include/private/apu_select_dbm.h" ]; then - echo "" - echo "Generated include files already exist, the tree is not clean." - echo "The resulting build-outputs.mk file is incorrect" -fi - -exit 0 Index: contrib/apr-util/config.layout =================================================================== --- contrib/apr-util/config.layout +++ /dev/null @@ -1,232 +0,0 @@ -## -## config.layout -- Pre-defined Installation Path Layouts -## -## Hints: -## - layouts can be loaded with configure's --enable-layout=ID option -## - when no --enable-layout option is given, the default layout is `apr' -## - a trailing plus character (`+') on paths is replaced with a -## `/' suffix where is currently hardcoded to 'apr'. -## (This may become a configurable parameter at some point.) -## - -# Classical APR-util path layout designed for parallel installs. - - prefix: /usr/local/apr - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/bin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/modules - mandir: ${prefix}/man - sysconfdir: ${prefix}/conf - datadir: ${prefix} - installbuilddir: ${datadir}/build - includedir: ${prefix}/include/apr-${APRUTIL_MAJOR_VERSION} - localstatedir: ${prefix} - libsuffix: -${APRUTIL_MAJOR_VERSION} - - -# Classical single-installation APR path layout. - - prefix: /usr/local/apr - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/bin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/modules - mandir: ${prefix}/man - sysconfdir: ${prefix}/conf - datadir: ${prefix} - installbuilddir: ${datadir}/build - includedir: ${prefix}/include - localstatedir: ${prefix} - - -# GNU standards conforming path layout. -# See FSF's GNU project `make-stds' document for details. - - prefix: /usr/local - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/libexec - mandir: ${prefix}/man - sysconfdir: ${prefix}/etc+ - datadir: ${prefix}/share+ - installbuilddir: ${datadir}/build - includedir: ${prefix}/include+ - localstatedir: ${prefix}/var+ - runtimedir: ${localstatedir}/run - - -# Mac OS X Server (Rhapsody) - - prefix: /Local/Library/WebServer - exec_prefix: /usr - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - libdir: ${exec_prefix}/lib - libexecdir: /System/Library/apr/Modules - mandir: ${exec_prefix}/share/man - sysconfdir: ${prefix}/Configuration - datadir: ${prefix} - installbuilddir: /System/Library/apr/Build - includedir: /System/Library/Frameworks/apr.framework/Versions/2.0/Headers - localstatedir: /var - runtimedir: ${prefix}/Logs - - -# Darwin/Mac OS Layout - - prefix: /usr - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/libexec+ - mandir: ${prefix}/share/man - datadir: /Library/WebServer - sysconfdir: /etc+ - installbuilddir: ${prefix}/share/httpd/build - includedir: ${prefix}/include+ - localstatedir: /var - runtimedir: ${localstatedir}/run - - -# Red Hat Linux 7.x layout - - prefix: /usr - exec_prefix: ${prefix} - bindir: ${prefix}/bin - sbindir: ${prefix}/sbin - libdir: ${prefix}/lib - libexecdir: ${prefix}/lib/apr - mandir: ${prefix}/man - sysconfdir: /etc/httpd/conf - datadir: /var/www - installbuilddir: ${datadir}/build - includedir: ${prefix}/include/apr - localstatedir: /var - runtimedir: ${localstatedir}/run - - -# According to the /opt filesystem conventions - - prefix: /opt/apr - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/libexec - mandir: ${prefix}/man - sysconfdir: /etc${prefix} - datadir: ${prefix}/share - installbuilddir: ${datadir}/build - includedir: ${prefix}/include - localstatedir: /var${prefix} - runtimedir: ${localstatedir}/run - - -# BeOS layout... - - prefix: /boot/home/apr - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/bin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/libexec - mandir: ${prefix}/man - sysconfdir: ${prefix}/conf - datadir: ${prefix} - installbuilddir: ${datadir}/build - includedir: ${prefix}/include - localstatedir: ${prefix} - runtimedir: ${localstatedir}/logs - - -# SuSE 6.x layout - - prefix: /usr - exec_prefix: ${prefix} - bindir: ${prefix}/bin - sbindir: ${prefix}/sbin - libdir: ${prefix}/lib - libexecdir: ${prefix}/lib/apr - mandir: ${prefix}/share/man - sysconfdir: /etc/httpd - datadir: /usr/local/httpd - installbuilddir: ${datadir}/build - includedir: ${prefix}/include/apr - localstatedir: /var/lib/httpd - runtimedir: /var/run - - -# BSD/OS layout - - prefix: /var/www - exec_prefix: /usr/contrib - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/bin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/libexec/apr - mandir: ${exec_prefix}/man - sysconfdir: ${prefix}/conf - datadir: ${prefix} - installbuilddir: ${datadir}/build - includedir: ${exec_prefix}/include/apr - localstatedir: /var - runtimedir: ${localstatedir}/run - - -# Solaris 8 Layout - - prefix: /usr/apr - exec_prefix: ${prefix} - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/bin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/libexec - mandir: ${exec_prefix}/man - sysconfdir: /etc/apr - datadir: /var/apr - installbuilddir: ${datadir}/build - includedir: ${exec_prefix}/include - localstatedir: ${prefix} - runtimedir: /var/run - - -# OpenBSD Layout - - prefix: /var/www - exec_prefix: /usr - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/lib/apr/modules - mandir: ${exec_prefix}/share/man - sysconfdir: ${prefix}/conf - datadir: ${prefix} - installbuilddir: ${prefix}/build - includedir: ${exec_prefix}/lib/apr/include - localstatedir: ${prefix} - runtimedir: ${prefix}/logs - - -# Debian layout - - prefix: - exec_prefix: ${prefix}/usr - bindir: ${exec_prefix}/bin - sbindir: ${exec_prefix}/sbin - libdir: ${exec_prefix}/lib - libexecdir: ${exec_prefix}/lib/apr/modules - mandir: ${exec_prefix}/share/man - datadir: ${exec_prefix}/share/apr - includedir: ${exec_prefix}/include/apr-${APRUTIL_MAJOR_VERSION} - localstatedir: ${prefix}/var/run - runtimedir: ${prefix}/var/run - infodir: ${exec_prefix}/share/info - libsuffix: -${APRUTIL_MAJOR_VERSION} - installbuilddir: ${prefix}/usr/share/apache2/build - Index: contrib/apr-util/configure =================================================================== --- contrib/apr-util/configure +++ /dev/null @@ -1,25340 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="export_vars.sh.in" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -INCLUDE_OUTPUTS -INCLUDE_RULES -APRUTIL_LIBS -APRUTIL_LDFLAGS -APRUTIL_INCLUDES -APRUTIL_PRIV_INCLUDES -APRUTIL_EXPORT_LIBS -EXTRA_OBJECTS -APU_MODULES -APU_DSO_LIBDIR -APU_HAVE_MODULES -APRUTIL_LIBNAME -lib_target -so_ext -have_apr_iconv -have_iconv -apu_dbd_tests -LDADD_dbd_odbc -apu_have_odbc -ODBC_CONFIG -LDADD_dbd_oracle -apu_have_oracle -LDADD_dbd_sqlite2 -apu_have_sqlite2 -LDADD_dbd_sqlite3 -apu_have_sqlite3 -LDADD_dbd_mysql -apu_have_mysql -MYSQL_CONFIG -LDADD_dbd_pgsql -apu_have_pgsql -PGSQL_CONFIG -LDADD_dbm_ndbm -LDADD_dbm_gdbm -LDADD_dbm_db -apu_db_version -apu_db_header -apu_have_db -apu_have_ndbm -apu_have_gdbm -apu_have_sdbm -apu_use_db -apu_use_ndbm -apu_use_gdbm -apu_use_sdbm -LDADD_ldap -apu_has_ldap_other -apu_has_ldap_zos -apu_has_ldap_tivoli -apu_has_ldap_mozilla -apu_has_ldap_netscape -apu_has_ldap_microsoft -apu_has_ldap_novell -apu_has_ldap_solaris -apu_has_ldap_openldap -apu_has_ldap -apu_has_ldapssl_install_routines -apu_has_ldap_sslinit -apu_has_ldapssl_init -apu_has_ldap_start_tls_s -apu_has_ldapssl_add_trusted_cert -apu_has_ldapssl_client_deinit -apu_has_ldapssl_client_init -ldap_ssl_h -lber_h -ldap_h -LDADD_crypto_commoncrypto -apu_have_commoncrypto -LDADD_crypto_nss -apu_have_nss -PKG_CONFIG -apu_have_crypto -LDADD_crypto_openssl -apu_have_openssl -EGREP -GREP -CPP -APR_ICONV_DIR -apr_shlibpath_var -APR_BUILD_DIR -APR_LIBS -APR_INCLUDES -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -APU_LTVERSION -APRUTIL_MAJOR_VERSION -APRUTIL_DOTTED_VERSION -abs_builddir -abs_srcdir -top_builddir -LT_NO_INSTALL -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -APU_CONFIG_LOCATION -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_layout -with_apr -with_apr_iconv -with_crypto -with_openssl -with_nss -with_commoncrypto -with_lber -with_ldap_include -with_ldap_lib -with_ldap -with_dbm -with_gdbm -with_ndbm -with_berkeley_db -with_pgsql -with_mysql -with_sqlite3 -with_sqlite2 -with_oracle_include -with_oracle -with_odbc -with_expat -with_iconv -enable_util_dso -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-layout=LAYOUT - --disable-util-dso disable DSO build of modular components (crypto, - dbd, dbm, ldap) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-apr=PATH prefix for installed APR or the full path to - apr-config - --with-apr-iconv=DIR relative path to apr-iconv source - --with-crypto enable crypto support - --with-openssl=DIR specify location of OpenSSL - --with-nss=DIR specify location of NSS - --with-commoncrypto=DIR specify location of CommonCrypto - --with-lber=library lber library to use - --with-ldap-include=path path to ldap include files with trailing slash - --with-ldap-lib=path path to ldap lib file - --with-ldap=library ldap library to use - --with-dbm=DBM choose the DBM type to use. - DBM={sdbm,gdbm,ndbm,db,db1,db185,db2,db3,db4,db4X,db5X,db6X} - for some X=0,...,9 - --with-gdbm=DIR enable GDBM support - --with-ndbm=PATH Find the NDBM header and library in `PATH/include' - and `PATH/lib'. If PATH is of the form `HEADER:LIB', - then search for header files in HEADER, and the - library in LIB. If you omit the `=PATH' part - completely, the configure script will search for - NDBM in a number of standard places. - --with-berkeley-db=PATH Find the Berkeley DB header and library in - `PATH/include' and `PATH/lib'. If PATH is of the - form `HEADER:LIB', then search for header files in - HEADER, and the library in LIB. If you omit the - `=PATH' part completely, the configure script will - search for Berkeley DB in a number of standard - places. - --with-pgsql=DIR specify PostgreSQL location - --with-mysql=DIR enable MySQL DBD driver - --with-sqlite3=DIR enable sqlite3 DBD driver - --with-sqlite2=DIR enable sqlite2 DBD driver - --with-oracle-include=DIR - path to Oracle include files - --with-oracle=DIR enable Oracle DBD driver; giving ORACLE_HOME as DIR - --with-odbc=DIR specify ODBC location - --with-expat=DIR specify Expat location - --with-iconv=DIR path to iconv installation - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_decl - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -ac_config_headers="$ac_config_headers include/private/apu_config.h" - -ac_aux_dir= -for ac_dir in build "$srcdir"/build; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build \"$srcdir\"/build" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - rm -f config.nice - cat >config.nice<> config.nice - fi - if test -n "$CFLAGS"; then - echo "CFLAGS=\"$CFLAGS\"; export CFLAGS" >> config.nice - fi - if test -n "$CPPFLAGS"; then - echo "CPPFLAGS=\"$CPPFLAGS\"; export CPPFLAGS" >> config.nice - fi - if test -n "$LDFLAGS"; then - echo "LDFLAGS=\"$LDFLAGS\"; export LDFLAGS" >> config.nice - fi - if test -n "$LTFLAGS"; then - echo "LTFLAGS=\"$LTFLAGS\"; export LTFLAGS" >> config.nice - fi - if test -n "$LIBS"; then - echo "LIBS=\"$LIBS\"; export LIBS" >> config.nice - fi - if test -n "$INCLUDES"; then - echo "INCLUDES=\"$INCLUDES\"; export INCLUDES" >> config.nice - fi - if test -n "$NOTEST_CFLAGS"; then - echo "NOTEST_CFLAGS=\"$NOTEST_CFLAGS\"; export NOTEST_CFLAGS" >> config.nice - fi - if test -n "$NOTEST_CPPFLAGS"; then - echo "NOTEST_CPPFLAGS=\"$NOTEST_CPPFLAGS\"; export NOTEST_CPPFLAGS" >> config.nice - fi - if test -n "$NOTEST_LDFLAGS"; then - echo "NOTEST_LDFLAGS=\"$NOTEST_LDFLAGS\"; export NOTEST_LDFLAGS" >> config.nice - fi - if test -n "$NOTEST_LIBS"; then - echo "NOTEST_LIBS=\"$NOTEST_LIBS\"; export NOTEST_LIBS" >> config.nice - fi - - # Retrieve command-line arguments. - eval "set x $0 $ac_configure_args" - shift - - for arg - do - -ap_last= -ap_cur="$arg" -while test "x${ap_cur}" != "x${ap_last}"; -do - ap_last="${ap_cur}" - ap_cur=`eval "echo ${ap_cur}"` -done -arg="${ap_cur}" - - echo "\"$arg\" \\" >> config.nice - done - echo '"$@"' >> config.nice - chmod +x config.nice - - - -abs_srcdir=`(cd $srcdir && pwd)` -abs_builddir=`pwd` - -if test "$abs_builddir" != "$abs_srcdir"; then - USE_VPATH=1 - APU_CONFIG_LOCATION=build -else - APU_CONFIG_LOCATION=source -fi - - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - -# Use -no-install or -no-fast-install to link the test -# programs on all platforms but Darwin, where it would cause -# the programs to be linked against installed versions of -# libapr instead of those just built. -case $host in - *-apple-darwin*) - LT_NO_INSTALL="" - ;; - *-mingw*) - LT_NO_INSTALL="-no-fast-install" - ;; - *) - LT_NO_INSTALL="-no-install" - ;; -esac - - -top_builddir="$abs_builddir" - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mkdir -p" >&5 -$as_echo_n "checking for working mkdir -p... " >&6; } -if ${ac_cv_mkdir_p+:} false; then : - $as_echo_n "(cached) " >&6 -else - - test -d conftestdir && rm -rf conftestdir - mkdir -p conftestdir/somedir >/dev/null 2>&1 - if test -d conftestdir/somedir; then - ac_cv_mkdir_p=yes - else - ac_cv_mkdir_p=no - fi - rm -rf conftestdir - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_p" >&5 -$as_echo "$ac_cv_mkdir_p" >&6; } - if test "$ac_cv_mkdir_p" = "yes"; then - mkdir_p="mkdir -p" - else - mkdir_p="$abs_srcdir/build/mkdir.sh" - fi - - -get_version="$abs_srcdir/build/get-version.sh" -version_hdr="$abs_srcdir/include/apu_version.h" -APRUTIL_MAJOR_VERSION="`$get_version major $version_hdr APU`" -APRUTIL_DOTTED_VERSION="`$get_version all $version_hdr APU`" - -APU_LTVERSION="-version-info `$get_version libtool $version_hdr APU`" - - - - - -echo "APR-util Version: ${APRUTIL_DOTTED_VERSION}" - - -# Check whether --enable-layout was given. -if test "${enable_layout+set}" = set; then : - enableval=$enable_layout; - LAYOUT=$enableval - -fi - - -if test -z "$LAYOUT"; then - LAYOUT="apr-util" -fi - - if test ! -f $srcdir/config.layout; then - echo "** Error: Layout file $srcdir/config.layout not found" - echo "** Error: Cannot use undefined layout '$LAYOUT'" - exit 1 - fi - # Catch layout names including a slash which will otherwise - # confuse the heck out of the sed script. - case $LAYOUT in - */*) - echo "** Error: $LAYOUT is not a valid layout name" - exit 1 ;; - esac - pldconf=./config.pld - - sed -e "1s/[ ]*<[lL]ayout[ ]*$LAYOUT[ ]*>[ ]*//;1t" \ - -e "1,/[ ]*<[lL]ayout[ ]*$LAYOUT[ ]*>[ ]*/d" \ - -e '/[ ]*<\/Layout>[ ]*/,$d' \ - -e "s/^[ ]*//g" \ - -e "s/:[ ]*/=\'/g" \ - -e "s/[ ]*$/'/g" \ - $srcdir/config.layout > $pldconf - layout_name=$LAYOUT - if test ! -s $pldconf; then - echo "** Error: unable to find layout $layout_name" - exit 1 - fi - . $pldconf - rm $pldconf - for var in prefix exec_prefix bindir sbindir libexecdir mandir \ - sysconfdir datadir includedir localstatedir runtimedir \ - logfiledir libdir installbuilddir libsuffix ; do - eval "val=\"\$$var\"" - case $val in - *+) - val=`echo $val | sed -e 's;\+$;;'` - eval "$var=\"\$val\"" - autosuffix=yes - ;; - *) - autosuffix=no - ;; - esac - val=`echo $val | sed -e 's:\(.\)/*$:\1:'` - val=`echo $val | sed -e 's:[\$]\([a-z_]*\):$\1:g'` - if test "$autosuffix" = "yes"; then - if echo $val | grep apache >/dev/null; then - addtarget=no - else - addtarget=yes - fi - if test "$addtarget" = "yes"; then - val="$val/apache2" - fi - fi - eval "$var='$val'" - done - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for chosen layout" >&5 -$as_echo_n "checking for chosen layout... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $layout_name" >&5 -$as_echo "$layout_name" >&6; } - - -ac_prev= -# Retrieve the command-line arguments. The eval is needed because -# the arguments are quoted to preserve accuracy. -eval "set x $ac_configure_args" -shift -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` - - case $ac_option in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - esac -done - -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) as_fn_error $? "expected an absolute path for --$ac_var: $ac_val" "$LINENO" 5;; - esac -done - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -if test "x$apu_preload_done" != "xyes" ; then - apu_preload_done="yes" - - echo "Applying apr-util hints file rules for $host" - - case "$host" in - *-dec-osf*) - - if test -z "$apu_crypt_threadsafe"; then - test "x$silent" != "xyes" && echo " setting apu_crypt_threadsafe to \"1\"" - apu_crypt_threadsafe="1" - fi - - ;; - *-hp-hpux11.*) - - if test -z "$apu_crypt_threadsafe"; then - test "x$silent" != "xyes" && echo " setting apu_crypt_threadsafe to \"1\"" - apu_crypt_threadsafe="1" - fi - - ;; - *-ibm-aix4*|*-ibm-aix5.1*) - - if test -z "$apu_iconv_inbuf_const"; then - test "x$silent" != "xyes" && echo " setting apu_iconv_inbuf_const to \"1\"" - apu_iconv_inbuf_const="1" - fi - - ;; - *-ibm-os390) - - if test -z "$apu_crypt_threadsafe"; then - test "x$silent" != "xyes" && echo " setting apu_crypt_threadsafe to \"1\"" - apu_crypt_threadsafe="1" - fi - - ;; - *-solaris2*) - - if test -z "$apu_iconv_inbuf_const"; then - test "x$silent" != "xyes" && echo " setting apu_iconv_inbuf_const to \"1\"" - apu_iconv_inbuf_const="1" - fi - - - if test -z "$apu_crypt_threadsafe"; then - test "x$silent" != "xyes" && echo " setting apu_crypt_threadsafe to \"1\"" - apu_crypt_threadsafe="1" - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fdatasync" >&5 -$as_echo_n "checking for library containing fdatasync... " >&6; } -if ${ac_cv_search_fdatasync+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char fdatasync (); -int -main () -{ -return fdatasync (); - ; - return 0; -} -_ACEOF -for ac_lib in '' rt posix4; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_fdatasync=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_fdatasync+:} false; then : - break -fi -done -if ${ac_cv_search_fdatasync+:} false; then : - -else - ac_cv_search_fdatasync=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fdatasync" >&5 -$as_echo "$ac_cv_search_fdatasync" >&6; } -ac_res=$ac_cv_search_fdatasync -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - - ;; - *-sco3.2v5*) - - if test -z "$apu_db_xtra_libs"; then - test "x$silent" != "xyes" && echo " setting apu_db_xtra_libs to \"-lsocket\"" - apu_db_xtra_libs="-lsocket" - fi - - ;; - esac - -fi - - - -APRUTIL_INCLUDES="" -APRUTIL_PRIV_INCLUDES="-I$top_builddir/include -I$top_builddir/include/private" -if test -n "$USE_VPATH"; then - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES -I$abs_srcdir/include/private -I$abs_srcdir/include" -fi - - - - - apr_found="no" - - if test "$target_os" = "os2-emx"; then - # Scripts don't pass test -x on OS/2 - TEST_X="test -f" - else - TEST_X="test -x" - fi - - acceptable_majors="1" - - apr_temp_acceptable_apr_config="" - for apr_temp_major in $acceptable_majors - do - case $apr_temp_major in - 0) - apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-config" - ;; - *) - apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-$apr_temp_major-config" - ;; - esac - done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for APR" >&5 -$as_echo_n "checking for APR... " >&6; } - -# Check whether --with-apr was given. -if test "${with_apr+set}" = set; then : - withval=$with_apr; - if test "$withval" = "no" || test "$withval" = "yes"; then - as_fn_error $? "--with-apr requires a directory or file to be provided" "$LINENO" 5 - fi - - for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config - do - for lookdir in "$withval/bin" "$withval" - do - if $TEST_X "$lookdir/$apr_temp_apr_config_file"; then - apr_config="$lookdir/$apr_temp_apr_config_file" - - apr_found="yes" - break 2 - fi - done - done - - if test "$apr_found" != "yes" && $TEST_X "$withval" && $withval --help > /dev/null 2>&1 ; then - apr_config="$withval" - apr_found="yes" - fi - - if test "$apr_found" != "yes"; then - as_fn_error $? "the --with-apr parameter is incorrect. It must specify an install prefix, a build directory, or an apr-config file." "$LINENO" 5 - fi - -else - - if test -n "" && test "" = "1"; then - for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config - do - if $apr_temp_apr_config_file --help > /dev/null 2>&1 ; then - apr_config="$apr_temp_apr_config_file" - - apr_found="yes" - break - else - for lookdir in /usr /usr/local /usr/local/apr /opt/apr; do - if $TEST_X "$lookdir/bin/$apr_temp_apr_config_file"; then - apr_config="$lookdir/bin/$apr_temp_apr_config_file" - - apr_found="yes" - break 2 - fi - done - fi - done - fi - if test "$apr_found" = "no" && test -d ""; then - apr_temp_abs_srcdir="`cd \"\" && pwd`" - apr_found="reconfig" - apr_bundled_major="`sed -n '/#define.*APR_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p' \"/include/apr_version.h\"`" - case $apr_bundled_major in - "") - as_fn_error $? "failed to find major version of bundled APR" "$LINENO" 5 - ;; - 0) - apr_temp_apr_config_file="apr-config" - ;; - *) - apr_temp_apr_config_file="apr-$apr_bundled_major-config" - ;; - esac - if test -n ""; then - apr_config="/$apr_temp_apr_config_file" - else - apr_config="/$apr_temp_apr_config_file" - fi - fi - -fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $apr_found" >&5 -$as_echo "$apr_found" >&6; } - - if test "$apr_found" = "no"; then - as_fn_error $? "APR could not be located. Please use the --with-apr option." "$LINENO" 5 - fi - - APR_BUILD_DIR="`$apr_config --installbuilddir`" - - APR_BUILD_DIR="`cd $APR_BUILD_DIR && pwd`" - - APR_INCLUDES="`$apr_config --includes`" - APR_LIBS="`$apr_config --link-libtool --libs`" - APR_SO_EXT="`$apr_config --apr-so-ext`" - APR_LIB_TARGET="`$apr_config --apr-lib-target`" - - - - - - - - if test -z "$CC"; then - test "x$silent" != "xyes" && echo " setting CC to \"`$apr_config --cc`\"" - CC="`$apr_config --cc`" - fi - - - if test -z "$CPP"; then - test "x$silent" != "xyes" && echo " setting CPP to \"`$apr_config --cpp`\"" - CPP="`$apr_config --cpp`" - fi - - - if test "x$CFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CFLAGS to \"`$apr_config --cflags`\"" - CFLAGS="`$apr_config --cflags`" - else - apr_addto_bugger="`$apr_config --cflags`" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CFLAGS" - CFLAGS="$CFLAGS $i" - fi - done - fi - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"`$apr_config --cppflags`\"" - CPPFLAGS="`$apr_config --cppflags`" - else - apr_addto_bugger="`$apr_config --cppflags`" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - -apr_shlibpath_var=`$apr_config --shlib-path-var` - - - -# Check whether --with-apr-iconv was given. -if test "${with_apr_iconv+set}" = set; then : - withval=$with_apr_iconv; apu_apriconv_dir="$withval" - if test "$apu_apriconv_dir" != "no"; then - if test -d "$apu_apriconv_dir"; then - - # save our work to this point; this allows the sub-package to use it - cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - - echo "configuring package in "$apu_apriconv_dir" now" - ac_popdir=`pwd` - apr_config_subdirs=""$apu_apriconv_dir"" - test -d "$apu_apriconv_dir" || $mkdir_p "$apu_apriconv_dir" - ac_abs_srcdir=`(cd $srcdir/"$apu_apriconv_dir" && pwd)` - cd "$apu_apriconv_dir" - - # A "../" for each directory in /$config_subdirs. - ac_dots=`echo $apr_config_subdirs|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'` - - # Make the cache file pathname absolute for the subdirs - # required to correctly handle subdirs that might actually - # be symlinks - case "$cache_file" in - /*) # already absolute - ac_sub_cache_file=$cache_file ;; - *) # Was relative path. - ac_sub_cache_file="$ac_popdir/$cache_file" ;; - esac - - - apr_configure_args= - apr_sep= - for apr_configure_arg in $ac_configure_args - do - case "$apr_configure_arg" in - --enable-layout=*|\'--enable-layout=*) - continue ;; - esac - apr_configure_args="$apr_configure_args$apr_sep'$apr_configure_arg'" - apr_sep=" " - done - - - test "x$silent" = "xyes" && apr_configure_args="$apr_configure_args --silent" - - apr_configure_args="--disable-option-checking $apr_configure_args" - - if eval $SHELL $ac_abs_srcdir/configure $apr_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_abs_srcdir $apache_apr_flags \ - --prefix=$prefix \ - --exec-prefix=$exec_prefix \ - --libdir=$libdir \ - --includedir=$includedir \ - --bindir=$bindir \ - --datadir=$datadir \ - --with-installbuilddir=$installbuilddir - then : - echo ""$apu_apriconv_dir" configured properly" - else - echo "configure failed for "$apu_apriconv_dir"" - exit 1 - fi - - cd $ac_popdir - - # grab any updates from the sub-package - if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - - - APRUTIL_EXPORT_LIBS="$abs_srcdir/$apu_apriconv_dir/lib/libapriconv.la \ - $APRUTIL_EXPORT_LIBS" - APRUTIL_INCLUDES="-I$abs_srcdir/$apu_apriconv_dir/include \ - $APRUTIL_INCLUDES" - APR_ICONV_DIR="$apu_apriconv_dir" - else - APR_ICONV_DIR="" - fi - else - APR_ICONV_DIR="" - fi - -fi - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - apu_have_crypto=0 - apu_have_openssl=0 - apu_have_nss=0 - apu_have_commoncrypto=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-crypto was given. -if test "${with_crypto+set}" = set; then : - withval=$with_crypto; - cryptolibs="openssl nss commoncrypto" - - if test "$withval" = "yes"; then - - crypto_library_enabled=0 - for cryptolib in $cryptolibs; do - eval v=\$with_$cryptolib - if test "$v" != "" -a "$v" != "no"; then - crypto_library_enabled=1 - fi - done - - if test "$crypto_library_enabled" = "0"; then - for cryptolib in $cryptolibs; do - eval v=\$with_$cryptolib - if test "$v" != "no"; then - eval with_$cryptolib=yes - crypto_library_enabled=1 - fi - done - if test "$crypto_library_enabled" = "1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Crypto was requested but no crypto library was found; autodetecting possible libraries" >&5 -$as_echo "$as_me: Crypto was requested but no crypto library was found; autodetecting possible libraries" >&6;} - else - as_fn_error $? "Crypto was requested but all possible crypto libraries were disabled." "$LINENO" 5 - fi - fi - - - openssl_have_headers=0 - openssl_have_libs=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-openssl was given. -if test "${with_openssl+set}" = set; then : - withval=$with_openssl; - if test "$withval" = "yes"; then - for ac_header in openssl/x509.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "openssl/x509.h" "ac_cv_header_openssl_x509_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_x509_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_X509_H 1 -_ACEOF - openssl_have_headers=1 -fi - -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_CIPHER_CTX_new in -lcrypto" >&5 -$as_echo_n "checking for EVP_CIPHER_CTX_new in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_EVP_CIPHER_CTX_new+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char EVP_CIPHER_CTX_new (); -int -main () -{ -return EVP_CIPHER_CTX_new (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_EVP_CIPHER_CTX_new=yes -else - ac_cv_lib_crypto_EVP_CIPHER_CTX_new=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_EVP_CIPHER_CTX_new" >&5 -$as_echo "$ac_cv_lib_crypto_EVP_CIPHER_CTX_new" >&6; } -if test "x$ac_cv_lib_crypto_EVP_CIPHER_CTX_new" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_accept in -lssl" >&5 -$as_echo_n "checking for SSL_accept in -lssl... " >&6; } -if ${ac_cv_lib_ssl_SSL_accept+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lssl -lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SSL_accept (); -int -main () -{ -return SSL_accept (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ssl_SSL_accept=yes -else - ac_cv_lib_ssl_SSL_accept=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_accept" >&5 -$as_echo "$ac_cv_lib_ssl_SSL_accept" >&6; } -if test "x$ac_cv_lib_ssl_SSL_accept" = xyes; then : - openssl_have_libs=1 -fi - -fi - - if test "$openssl_have_headers" != "0" && test "$openssl_have_libs" != "0"; then - apu_have_openssl=1 - fi - elif test "$withval" = "no"; then - apu_have_openssl=0 - else - - openssl_CPPFLAGS="-I$withval/include" - openssl_LDFLAGS="-L$withval/lib " - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$openssl_CPPFLAGS\"" - CPPFLAGS="$openssl_CPPFLAGS" - else - apr_addto_bugger="$openssl_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$openssl_LDFLAGS\"" - LDFLAGS="$openssl_LDFLAGS" - else - apr_addto_bugger="$openssl_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl in $withval" >&5 -$as_echo "$as_me: checking for openssl in $withval" >&6;} - for ac_header in openssl/x509.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "openssl/x509.h" "ac_cv_header_openssl_x509_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_x509_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_X509_H 1 -_ACEOF - openssl_have_headers=1 -fi - -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EVP_CIPHER_CTX_new in -lcrypto" >&5 -$as_echo_n "checking for EVP_CIPHER_CTX_new in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_EVP_CIPHER_CTX_new+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char EVP_CIPHER_CTX_new (); -int -main () -{ -return EVP_CIPHER_CTX_new (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_EVP_CIPHER_CTX_new=yes -else - ac_cv_lib_crypto_EVP_CIPHER_CTX_new=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_EVP_CIPHER_CTX_new" >&5 -$as_echo "$ac_cv_lib_crypto_EVP_CIPHER_CTX_new" >&6; } -if test "x$ac_cv_lib_crypto_EVP_CIPHER_CTX_new" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_accept in -lssl" >&5 -$as_echo_n "checking for SSL_accept in -lssl... " >&6; } -if ${ac_cv_lib_ssl_SSL_accept+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lssl -lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SSL_accept (); -int -main () -{ -return SSL_accept (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ssl_SSL_accept=yes -else - ac_cv_lib_ssl_SSL_accept=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_accept" >&5 -$as_echo "$ac_cv_lib_ssl_SSL_accept" >&6; } -if test "x$ac_cv_lib_ssl_SSL_accept" = xyes; then : - openssl_have_libs=1 -fi - -fi - - if test "$openssl_have_headers" != "0" && test "$openssl_have_libs" != "0"; then - apu_have_openssl=1 - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$withval/lib\"" - APRUTIL_LDFLAGS="-L$withval/lib" - else - apr_addto_bugger="-L$withval/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$withval/include\"" - APRUTIL_INCLUDES="-I$withval/include" - else - apr_addto_bugger="-I$withval/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - fi - - ac_fn_c_check_decl "$LINENO" "EVP_PKEY_CTX_new" "ac_cv_have_decl_EVP_PKEY_CTX_new" "#include -" -if test "x$ac_cv_have_decl_EVP_PKEY_CTX_new" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_EVP_PKEY_CTX_NEW $ac_have_decl -_ACEOF - - - fi - -else - - apu_have_openssl=0 - -fi - - - - - if test "$apu_have_openssl" = "1"; then - - if test "x$LDADD_crypto_openssl" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_crypto_openssl to \"$openssl_LDFLAGS -lssl -lcrypto\"" - LDADD_crypto_openssl="$openssl_LDFLAGS -lssl -lcrypto" - else - apr_addto_bugger="$openssl_LDFLAGS -lssl -lcrypto" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_crypto_openssl; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_crypto_openssl" - LDADD_crypto_openssl="$LDADD_crypto_openssl $i" - fi - done - fi - - apu_have_crypto=1 - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for const input buffers in OpenSSL" >&5 -$as_echo_n "checking for const input buffers in OpenSSL... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - const unsigned char * buf; - unsigned char * outbuf; - RSA rsa; - - RSA_private_decrypt(1, - buf, - outbuf, - &rsa, - RSA_PKCS1_PADDING); - - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -$as_echo "#define CRYPTO_OPENSSL_CONST_BUFFERS 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - - fi - - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - - nss_have_libs=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-nss was given. -if test "${with_nss+set}" = set; then : - withval=$with_nss; - if test "$withval" = "yes"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - - if test -n "$PKG_CONFIG"; then - nss_CPPFLAGS=`$PKG_CONFIG --cflags-only-I nss` - nss_LDFLAGS=`$PKG_CONFIG --libs nss` - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$nss_CPPFLAGS\"" - CPPFLAGS="$nss_CPPFLAGS" - else - apr_addto_bugger="$nss_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$nss_LDFLAGS\"" - LDFLAGS="$nss_LDFLAGS" - else - apr_addto_bugger="$nss_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - fi - nss_have_prerrorh=0 - nss_have_nssh=0 - nss_have_pk11pubh=0 - for ac_header in prerror.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "prerror.h" "ac_cv_header_prerror_h" "$ac_includes_default" -if test "x$ac_cv_header_prerror_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PRERROR_H 1 -_ACEOF - nss_have_prerrorh=1 -fi - -done - - for ac_header in nss/nss.h nss.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - nss_have_nssh=1 -fi - -done - - for ac_header in nss/pk11pub.h pk11pub.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - nss_have_pk11pubh=1 -fi - -done - - nss_have_headers=${nss_have_prerrorh}${nss_have_nssh}${nss_have_pk11pubh} - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PR_Initialize in -lnspr4" >&5 -$as_echo_n "checking for PR_Initialize in -lnspr4... " >&6; } -if ${ac_cv_lib_nspr4_PR_Initialize+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnspr4 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PR_Initialize (); -int -main () -{ -return PR_Initialize (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nspr4_PR_Initialize=yes -else - ac_cv_lib_nspr4_PR_Initialize=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nspr4_PR_Initialize" >&5 -$as_echo "$ac_cv_lib_nspr4_PR_Initialize" >&6; } -if test "x$ac_cv_lib_nspr4_PR_Initialize" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PK11_CreatePBEV2AlgorithmID in -lnss3" >&5 -$as_echo_n "checking for PK11_CreatePBEV2AlgorithmID in -lnss3... " >&6; } -if ${ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnss3 -lnspr4 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PK11_CreatePBEV2AlgorithmID (); -int -main () -{ -return PK11_CreatePBEV2AlgorithmID (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID=yes -else - ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID" >&5 -$as_echo "$ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID" >&6; } -if test "x$ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID" = xyes; then : - nss_have_libs=1 -fi - -fi - - if test "$nss_have_headers" = "111" && test "$nss_have_libs" != "0"; then - apu_have_nss=1 - fi - elif test "$withval" = "no"; then - apu_have_nss=0 - elif test "x$withval" != "x"; then - - nss_CPPFLAGS="-I$withval/include/nss -I$withval/include/nss3 -I$withval/include/nspr -I$withval/include/nspr4 -I$withval/include -I$withval/../public" - nss_LDFLAGS="-L$withval/lib " - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$nss_CPPFLAGS\"" - CPPFLAGS="$nss_CPPFLAGS" - else - apr_addto_bugger="$nss_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$nss_LDFLAGS\"" - LDFLAGS="$nss_LDFLAGS" - else - apr_addto_bugger="$nss_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nss in $withval" >&5 -$as_echo "$as_me: checking for nss in $withval" >&6;} - nss_have_prerrorh=0 - nss_have_nssh=0 - nss_have_pk11pubh=0 - for ac_header in prerror.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "prerror.h" "ac_cv_header_prerror_h" "$ac_includes_default" -if test "x$ac_cv_header_prerror_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PRERROR_H 1 -_ACEOF - nss_have_prerrorh=1 -fi - -done - - for ac_header in nss/nss.h nss.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - nss_have_nssh=1 -fi - -done - - for ac_header in nss/pk11pub.h pk11pub.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - nss_have_pk11pubh=1 -fi - -done - - nss_have_headers=${nss_have_prerrorh}${nss_have_nssh}${nss_have_pk11pubh} - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PR_Initialize in -lnspr4" >&5 -$as_echo_n "checking for PR_Initialize in -lnspr4... " >&6; } -if ${ac_cv_lib_nspr4_PR_Initialize+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnspr4 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PR_Initialize (); -int -main () -{ -return PR_Initialize (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nspr4_PR_Initialize=yes -else - ac_cv_lib_nspr4_PR_Initialize=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nspr4_PR_Initialize" >&5 -$as_echo "$ac_cv_lib_nspr4_PR_Initialize" >&6; } -if test "x$ac_cv_lib_nspr4_PR_Initialize" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PK11_CreatePBEV2AlgorithmID in -lnss3" >&5 -$as_echo_n "checking for PK11_CreatePBEV2AlgorithmID in -lnss3... " >&6; } -if ${ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnss3 -lnspr4 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PK11_CreatePBEV2AlgorithmID (); -int -main () -{ -return PK11_CreatePBEV2AlgorithmID (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID=yes -else - ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID" >&5 -$as_echo "$ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID" >&6; } -if test "x$ac_cv_lib_nss3_PK11_CreatePBEV2AlgorithmID" = xyes; then : - nss_have_libs=1 -fi - -fi - - if test "$nss_have_headers" = "111" && test "$nss_have_libs" != "0"; then - apu_have_nss=1 - fi - - fi - if test "$apu_have_nss" != "0"; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$nss_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$nss_CPPFLAGS" - else - apr_addto_bugger="$nss_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - -else - - apu_have_nss=0 - -fi - - - - - if test "$apu_have_nss" = "1"; then - - if test "x$LDADD_crypto_nss" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_crypto_nss to \"$nss_LDFLAGS -lnspr4 -lnss3\"" - LDADD_crypto_nss="$nss_LDFLAGS -lnspr4 -lnss3" - else - apr_addto_bugger="$nss_LDFLAGS -lnspr4 -lnss3" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_crypto_nss; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_crypto_nss" - LDADD_crypto_nss="$LDADD_crypto_nss $i" - fi - done - fi - - apu_have_crypto=1 - fi - - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - - apu_have_commoncrypto=0 - commoncrypto_have_headers=0 - commoncrypto_have_libs=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-commoncrypto was given. -if test "${with_commoncrypto+set}" = set; then : - withval=$with_commoncrypto; - if test "$withval" = "yes"; then - for ac_header in CommonCrypto/CommonKeyDerivation.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "CommonCrypto/CommonKeyDerivation.h" "ac_cv_header_CommonCrypto_CommonKeyDerivation_h" "$ac_includes_default" -if test "x$ac_cv_header_CommonCrypto_CommonKeyDerivation_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_COMMONCRYPTO_COMMONKEYDERIVATION_H 1 -_ACEOF - commoncrypto_have_headers=1 -fi - -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CCKeyDerivationPBKDF in -lSystem" >&5 -$as_echo_n "checking for CCKeyDerivationPBKDF in -lSystem... " >&6; } -if ${ac_cv_lib_System_CCKeyDerivationPBKDF+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lSystem $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char CCKeyDerivationPBKDF (); -int -main () -{ -return CCKeyDerivationPBKDF (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_System_CCKeyDerivationPBKDF=yes -else - ac_cv_lib_System_CCKeyDerivationPBKDF=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_System_CCKeyDerivationPBKDF" >&5 -$as_echo "$ac_cv_lib_System_CCKeyDerivationPBKDF" >&6; } -if test "x$ac_cv_lib_System_CCKeyDerivationPBKDF" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CCCryptorCreate in -lSystem" >&5 -$as_echo_n "checking for CCCryptorCreate in -lSystem... " >&6; } -if ${ac_cv_lib_System_CCCryptorCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lSystem -lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char CCCryptorCreate (); -int -main () -{ -return CCCryptorCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_System_CCCryptorCreate=yes -else - ac_cv_lib_System_CCCryptorCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_System_CCCryptorCreate" >&5 -$as_echo "$ac_cv_lib_System_CCCryptorCreate" >&6; } -if test "x$ac_cv_lib_System_CCCryptorCreate" = xyes; then : - commoncrypto_have_libs=1 -fi - -fi - - if test "$commoncrypto_have_headers" != "0" && test "$commoncrypto_have_libs" != "0"; then - apu_have_commoncrypto=1 - fi - elif test "$withval" = "no"; then - apu_have_commoncrypto=0 - else - - commoncrypto_CPPFLAGS="-I$withval/include" - commoncrypto_LDFLAGS="-L$withval/lib " - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$commoncrypto_CPPFLAGS\"" - CPPFLAGS="$commoncrypto_CPPFLAGS" - else - apr_addto_bugger="$commoncrypto_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$commoncrypto_LDFLAGS\"" - LDFLAGS="$commoncrypto_LDFLAGS" - else - apr_addto_bugger="$commoncrypto_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for commoncrypto in $withval" >&5 -$as_echo "$as_me: checking for commoncrypto in $withval" >&6;} - for ac_header in CommonCrypto/CommonKeyDerivation.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "CommonCrypto/CommonKeyDerivation.h" "ac_cv_header_CommonCrypto_CommonKeyDerivation_h" "$ac_includes_default" -if test "x$ac_cv_header_CommonCrypto_CommonKeyDerivation_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_COMMONCRYPTO_COMMONKEYDERIVATION_H 1 -_ACEOF - commoncrypto_have_headers=1 -fi - -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CCKeyDerivationPBKDF in -lSystem" >&5 -$as_echo_n "checking for CCKeyDerivationPBKDF in -lSystem... " >&6; } -if ${ac_cv_lib_System_CCKeyDerivationPBKDF+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lSystem $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char CCKeyDerivationPBKDF (); -int -main () -{ -return CCKeyDerivationPBKDF (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_System_CCKeyDerivationPBKDF=yes -else - ac_cv_lib_System_CCKeyDerivationPBKDF=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_System_CCKeyDerivationPBKDF" >&5 -$as_echo "$ac_cv_lib_System_CCKeyDerivationPBKDF" >&6; } -if test "x$ac_cv_lib_System_CCKeyDerivationPBKDF" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CCCryptorCreate in -lSystem" >&5 -$as_echo_n "checking for CCCryptorCreate in -lSystem... " >&6; } -if ${ac_cv_lib_System_CCCryptorCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lSystem -lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char CCCryptorCreate (); -int -main () -{ -return CCCryptorCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_System_CCCryptorCreate=yes -else - ac_cv_lib_System_CCCryptorCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_System_CCCryptorCreate" >&5 -$as_echo "$ac_cv_lib_System_CCCryptorCreate" >&6; } -if test "x$ac_cv_lib_System_CCCryptorCreate" = xyes; then : - commoncrypto_have_libs=1 -fi - -fi - - if test "$commoncrypto_have_headers" != "0" && test "$commoncrypto_have_libs" != "0"; then - apu_have_commoncrypto=1 - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"-L$withval/lib\"" - LDFLAGS="-L$withval/lib" - else - apr_addto_bugger="-L$withval/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - if test "x$INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting INCLUDES to \"-I$withval/include\"" - INCLUDES="-I$withval/include" - else - apr_addto_bugger="-I$withval/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to INCLUDES" - INCLUDES="$INCLUDES $i" - fi - done - fi - - fi - - fi - -else - - apu_have_commoncrypto=0 - -fi - - - if test "$apu_have_commoncrypto" = "1"; then - apu_have_crypto=1 - fi - - - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - if test "$apu_have_crypto" = "0"; then - as_fn_error $? "Crypto was requested but no crypto library could be enabled; specify the location of a crypto library using --with-openssl, --with-nss, and/or --with-commoncrypto." "$LINENO" 5 - fi - fi - -else - - apu_have_crypto=0 - -fi - - - - - - - -echo $ac_n "${nl}checking for ldap support..." - -apu_has_ldap="0"; -apu_has_ldapssl_client_init="0" -apu_has_ldapssl_client_deinit="0" -apu_has_ldapssl_add_trusted_cert="0" -apu_has_ldap_start_tls_s="0" -apu_has_ldapssl_init="0" -apu_has_ldap_sslinit="0" -apu_has_ldapssl_install_routines="0" -apu_has_ldap_openldap="0" -apu_has_ldap_solaris="0" -apu_has_ldap_novell="0" -apu_has_ldap_microsoft="0" -apu_has_ldap_netscape="0" -apu_has_ldap_mozilla="0" -apu_has_ldap_tivoli="0" -apu_has_ldap_zos="0" -apu_has_ldap_other="0" -LDADD_ldap_found="" - - -# Check whether --with-lber was given. -if test "${with_lber+set}" = set; then : - withval=$with_lber; - if test "$withval" = "yes"; then - apu_liblber_name="lber" - else - apu_liblber_name="$withval" - fi - -else - - apu_liblber_name="lber" - -fi - - - -# Check whether --with-ldap-include was given. -if test "${with_ldap_include+set}" = set; then : - withval=$with_ldap_include; -fi - - -# Check whether --with-ldap-lib was given. -if test "${with_ldap_lib+set}" = set; then : - withval=$with_ldap_lib; -fi - - -# Check whether --with-ldap was given. -if test "${with_ldap+set}" = set; then : - withval=$with_ldap; - if test "$with_ldap" != "no"; then - save_cppflags="$CPPFLAGS" - save_ldflags="$LDFLAGS" - save_libs="$LIBS" - if test -n "$with_ldap_include"; then - CPPFLAGS="$CPPFLAGS -I$with_ldap_include" - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$with_ldap_include\"" - APRUTIL_INCLUDES="-I$with_ldap_include" - else - apr_addto_bugger="-I$with_ldap_include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - fi - if test -n "$with_ldap_lib"; then - LDFLAGS="$LDFLAGS -L$with_ldap_lib" - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$with_ldap_lib\"" - APRUTIL_LDFLAGS="-L$with_ldap_lib" - else - apr_addto_bugger="-L$with_ldap_lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - fi - - LIBLDAP="$withval" - if test "$LIBLDAP" = "yes"; then - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldap50" - extralib="-lnspr4 -lplc4 -lplds4 -liutil50 -llber50 -lldif50 -lnss3 -lprldap50 -lssl3 -lssldap50" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldapssl41" - extralib="-lnspr3 -lplc3 -lplds3" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldapssl40" - extralib= - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldapssl30" - extralib= - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldapssl20" - extralib= - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldapsdk" - extralib="-lldapx -lldapssl -lldapgss -lgssapi_krb5" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldapsdk" - extralib="-lldapx -lldapssl -lldapgss -lgss -lresolv -lsocket" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldap" - extralib="-llber" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldap" - extralib="-llber -lresolv" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldap" - extralib="-llber -lresolv -lsocket -lnsl" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib="ldap" - extralib="-ldl -lpthread" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - else - - if test ${apu_has_ldap} != "1"; then - ldaplib=$LIBLDAP - extralib= - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib=$LIBLDAP - extralib="-lresolv" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib=$LIBLDAP - extralib="-lresolv -lsocket -lnsl" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - - if test ${apu_has_ldap} != "1"; then - ldaplib=$LIBLDAP - extralib="-ldl -lpthread" - # Clear the cache entry for subsequent APU_FIND_LDAPLIB invocations. - - ldaplib_cache_id="`echo $ldaplib | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset ac_cv_lib_${ldaplib_cache_id}_ldap_init - unset ac_cv_lib_${ldaplib_cache_id}___ldap_init - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_init (); -int -main () -{ -return ldap_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - LDADD_ldap_found="-l${ldaplib} ${extralib}" - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_init (); -int -main () -{ -return ldapssl_client_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_client_deinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_client_deinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_client_deinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_client_deinit (); -int -main () -{ -return ldapssl_client_deinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_client_deinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_add_trusted_cert" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_add_trusted_cert in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_add_trusted_cert in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_add_trusted_cert (); -int -main () -{ -return ldapssl_add_trusted_cert (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_add_trusted_cert="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_start_tls_s" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_start_tls_s in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_start_tls_s in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_start_tls_s (); -int -main () -{ -return ldap_start_tls_s (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_start_tls_s="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldap_sslinit" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap_sslinit in -l${ldaplib}" >&5 -$as_echo_n "checking for ldap_sslinit in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldap_sslinit (); -int -main () -{ -return ldap_sslinit (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldap_sslinit="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_init in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_init in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_init (); -int -main () -{ -return ldapssl_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_init="1" -fi - - as_ac_Lib=`$as_echo "ac_cv_lib_${ldaplib}''_ldapssl_install_routines" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldapssl_install_routines in -l${ldaplib}" >&5 -$as_echo_n "checking for ldapssl_install_routines in -l${ldaplib}... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l${ldaplib} ${extralib} $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ldapssl_install_routines (); -int -main () -{ -return ldapssl_install_routines (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - apu_has_ldapssl_install_routines="1" -fi - - apu_has_ldap="1"; - -fi - - fi - - fi - - if test ${apu_has_ldap} != "1"; then - as_fn_error $? "could not find an LDAP library" "$LINENO" 5 - else - - if test "x$LDADD_ldap" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_ldap to \"$LDADD_ldap_found\"" - LDADD_ldap="$LDADD_ldap_found" - else - apr_addto_bugger="$LDADD_ldap_found" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_ldap; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_ldap" - LDADD_ldap="$LDADD_ldap $i" - fi - done - fi - - fi - as_ac_Lib=`$as_echo "ac_cv_lib_$apu_liblber_name''_ber_init" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ber_init in -l$apu_liblber_name" >&5 -$as_echo_n "checking for ber_init in -l$apu_liblber_name... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$apu_liblber_name $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char ber_init (); -int -main () -{ -return ber_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - - if test "x$LDADD_ldap" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_ldap to \"-l${apu_liblber_name}\"" - LDADD_ldap="-l${apu_liblber_name}" - else - apr_addto_bugger="-l${apu_liblber_name}" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_ldap; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_ldap" - LDADD_ldap="$LDADD_ldap $i" - fi - done - fi - -fi - - - for ac_header in lber.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "lber.h" "ac_cv_header_lber_h" "$ac_includes_default" -if test "x$ac_cv_header_lber_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LBER_H 1 -_ACEOF - lber_h="#include " -fi - -done - - - # Solaris has a problem in which prevents it from - # being included by itself. Check for manually, - # including lber.h first. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap.h" >&5 -$as_echo_n "checking for ldap.h... " >&6; } -if ${apr_cv_hdr_ldap_h+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef HAVE_LBER_H - #include - #endif - #include - -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - apr_cv_hdr_ldap_h=yes -else - apr_cv_hdr_ldap_h=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apr_cv_hdr_ldap_h" >&5 -$as_echo "$apr_cv_hdr_ldap_h" >&6; } - if test "$apr_cv_hdr_ldap_h" = "yes"; then - ldap_h="#include " - -$as_echo "#define HAVE_LDAP_H 1" >>confdefs.h - - fi - - for ac_header in ldap_ssl.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "ldap_ssl.h" "ac_cv_header_ldap_ssl_h" "$ac_includes_default" -if test "x$ac_cv_header_ldap_ssl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LDAP_SSL_H 1 -_ACEOF - ldap_ssl_h="#include " -fi - -done - - - if test "$apr_cv_hdr_ldap_h" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LDAP toolkit" >&5 -$as_echo_n "checking for LDAP toolkit... " >&6; } -if ${apr_cv_ldap_toolkit+:} false; then : - $as_echo_n "(cached) " >&6 -else - - if test "x$apr_cv_ldap_toolkit" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h - LDAP_VENDOR_NAME -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "OpenLDAP" >/dev/null 2>&1; then : - apu_has_ldap_openldap="1" - apr_cv_ldap_toolkit="OpenLDAP" -fi -rm -f conftest* - - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h - LDAP_VENDOR_NAME -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Sun Microsystems Inc." >/dev/null 2>&1; then : - apu_has_ldap_solaris="1" - apr_cv_ldap_toolkit="Solaris" -fi -rm -f conftest* - - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h - LDAP_VENDOR_NAME -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Novell" >/dev/null 2>&1; then : - apu_has_ldap_novell="1" - apr_cv_ldap_toolkit="Novell" -fi -rm -f conftest* - - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h - LDAP_VENDOR_NAME -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Microsoft Corporation." >/dev/null 2>&1; then : - apu_has_ldap_microsoft="1" - apr_cv_ldap_toolkit="Microsoft" -fi -rm -f conftest* - - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h - LDAP_VENDOR_NAME -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Netscape Communications Corp." >/dev/null 2>&1; then : - apu_has_ldap_netscape="1" - apr_cv_ldap_toolkit="Netscape" -fi -rm -f conftest* - - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h - LDAP_VENDOR_NAME -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "mozilla.org" >/dev/null 2>&1; then : - apu_has_ldap_mozilla="1" - apr_cv_ldap_toolkit="Mozilla" -fi -rm -f conftest* - - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h - LDAP_VENDOR_NAME -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "International Business Machines" >/dev/null 2>&1; then : - apu_has_ldap_tivoli="1" - apr_cv_ldap_toolkit="Tivoli" -fi -rm -f conftest* - - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - case "$host" in - *-ibm-os390) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$lber_h - $ldap_h -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "IBM" >/dev/null 2>&1; then : - apu_has_ldap_zos="1" - apr_cv_ldap_toolkit="z/OS" -fi -rm -f conftest* - - ;; - esac - fi - if test "x$apr_cv_ldap_toolkit" = "x"; then - apu_has_ldap_other="1" - apr_cv_ldap_toolkit="unknown" - fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apr_cv_ldap_toolkit" >&5 -$as_echo "$apr_cv_ldap_toolkit" >&6; } - fi - - CPPFLAGS=$save_cppflags - LDFLAGS=$save_ldflags - LIBS=$save_libs - fi - -fi - - -if test "$apu_has_ldap_openldap" = "1"; then - save_cppflags="$CPPFLAGS" - save_ldflags="$LDFLAGS" - save_libs="$LIBS" - - CPPFLAGS="$CPPFLAGS $APRUTIL_INCLUDES" - LDFLAGS="$LDFLAGS $APRUTIL_LDFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking style of ldap_set_rebind_proc routine" >&5 -$as_echo_n "checking style of ldap_set_rebind_proc routine... " >&6; } -if ${ac_cv_ldap_set_rebind_proc_style+:} false; then : - $as_echo_n "(cached) " >&6 -else - apr_save_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $CFLAGS_WARN" - if test "$ac_cv_c_compiler_gnu" = "yes"; then - CFLAGS="$CFLAGS -Werror" - fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "confdefs.h" - - - #ifdef HAVE_LBER_H - #include - #endif - #ifdef HAVE_LDAP_H - #include - #endif - - int main(int argc, const char *const *argv) { - - ldap_set_rebind_proc((LDAP *)0, (LDAP_REBIND_PROC *)0, (void *)0); - - return 0; } - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_ldap_set_rebind_proc_style=three -else - ac_cv_ldap_set_rebind_proc_style=two -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$apr_save_CFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_ldap_set_rebind_proc_style" >&5 -$as_echo "$ac_cv_ldap_set_rebind_proc_style" >&6; } - - if test "$ac_cv_ldap_set_rebind_proc_style" = "three"; then - -$as_echo "#define LDAP_SET_REBIND_PROC_THREE 1" >>confdefs.h - - fi - - CPPFLAGS="$save_cppflags" - LDFLAGS="$save_ldflags" - LIBS="$save_libs" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - apu_use_sdbm=0 - apu_use_ndbm=0 - apu_use_gdbm=0 - apu_use_db=0 - apu_have_sdbm=1 - apu_have_gdbm=0 - apu_have_ndbm=0 - apu_have_db=0 - - apu_db_header=db.h # default so apu_select_dbm.h is syntactically correct - apu_db_version=0 - - # Maximum supported version announced in help string. - # Although we search for all versions up to 6.9, - # we should only include existing versions in our - # help string. - dbm_list="sdbm, gdbm, ndbm, db, db1, db185, db2, db3, db4" - db_max_version=48 - db_min_version=41 - db_version="$db_min_version" - while [ $db_version -le $db_max_version ] - do - dbm_list="$dbm_list, db$db_version" - db_version=`expr $db_version + 1` - done - db_max_version=53 - db_min_version=50 - db_version="$db_min_version" - while [ $db_version -le $db_max_version ] - do - dbm_list="$dbm_list, db$db_version" - db_version=`expr $db_version + 1` - done - db_max_version=60 - db_min_version=60 - db_version="$db_min_version" - while [ $db_version -le $db_max_version ] - do - dbm_list="$dbm_list, db$db_version" - db_version=`expr $db_version + 1` - done - - -# Check whether --with-dbm was given. -if test "${with_dbm+set}" = set; then : - withval=$with_dbm; - if test "$withval" = "yes"; then - as_fn_error $? "--with-dbm needs to specify a DBM type to use. - One of: $dbm_list" "$LINENO" 5 - fi - requested="$withval" - -else - - requested=default - -fi - - - -# Check whether --with-gdbm was given. -if test "${with_gdbm+set}" = set; then : - withval=$with_gdbm; - apu_have_gdbm=0 - if test "$withval" = "yes"; then - ac_fn_c_check_header_mongrel "$LINENO" "gdbm.h" "ac_cv_header_gdbm_h" "$ac_includes_default" -if test "x$ac_cv_header_gdbm_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdbm_open in -lgdbm" >&5 -$as_echo_n "checking for gdbm_open in -lgdbm... " >&6; } -if ${ac_cv_lib_gdbm_gdbm_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgdbm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gdbm_open (); -int -main () -{ -return gdbm_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gdbm_gdbm_open=yes -else - ac_cv_lib_gdbm_gdbm_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gdbm_gdbm_open" >&5 -$as_echo "$ac_cv_lib_gdbm_gdbm_open" >&6; } -if test "x$ac_cv_lib_gdbm_gdbm_open" = xyes; then : - apu_have_gdbm=1 -fi - -fi - - - elif test "$withval" = "no"; then - apu_have_gdbm=0 - else - saved_cppflags="$CPPFLAGS" - saved_ldflags="$LDFLAGS" - CPPFLAGS="$CPPFLAGS -I$withval/include" - LDFLAGS="$LDFLAGS -L$withval/lib " - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking checking for gdbm in $withval" >&5 -$as_echo_n "checking checking for gdbm in $withval... " >&6; } - ac_fn_c_check_header_mongrel "$LINENO" "gdbm.h" "ac_cv_header_gdbm_h" "$ac_includes_default" -if test "x$ac_cv_header_gdbm_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdbm_open in -lgdbm" >&5 -$as_echo_n "checking for gdbm_open in -lgdbm... " >&6; } -if ${ac_cv_lib_gdbm_gdbm_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgdbm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gdbm_open (); -int -main () -{ -return gdbm_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_gdbm_gdbm_open=yes -else - ac_cv_lib_gdbm_gdbm_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gdbm_gdbm_open" >&5 -$as_echo "$ac_cv_lib_gdbm_gdbm_open" >&6; } -if test "x$ac_cv_lib_gdbm_gdbm_open" = xyes; then : - apu_have_gdbm=1 -fi - -fi - - - if test "$apu_have_gdbm" != "0"; then - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$withval/lib\"" - APRUTIL_LDFLAGS="-L$withval/lib" - else - apr_addto_bugger="-L$withval/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$withval/include\"" - APRUTIL_INCLUDES="-I$withval/include" - else - apr_addto_bugger="-I$withval/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - fi - CPPFLAGS="$saved_cppflags" - LDFLAGS="$saved_ldflags" - fi - -fi - - - -# Check whether --with-ndbm was given. -if test "${with_ndbm+set}" = set; then : - withval=$with_ndbm; - apu_have_ndbm=0 - if test "$withval" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking checking for ndbm in the usual places" >&5 -$as_echo_n "checking checking for ndbm in the usual places... " >&6; } - apu_want_ndbm=1 - NDBM_INC="" - NDBM_LDFLAGS="" - elif test "$withval" = "no"; then - apu_want_ndbm=0 - else - apu_want_ndbm=1 - case "$withval" in - *":"*) - NDBM_INC="-I`echo $withval |sed -e 's/:.*$//'`" - NDBM_LDFLAGS="-L`echo $withval |sed -e 's/^.*://'`" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking checking for ndbm includes with $NDBM_INC libs with $NDBM_LDFLAGS " >&5 -$as_echo_n "checking checking for ndbm includes with $NDBM_INC libs with $NDBM_LDFLAGS ... " >&6; } - ;; - *) - NDBM_INC="-I$withval/include" - NDBM_LDFLAGS="-L$withval/lib" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking checking for ndbm includes in $withval" >&5 -$as_echo_n "checking checking for ndbm includes in $withval... " >&6; } - ;; - esac - fi - - save_cppflags="$CPPFLAGS" - save_ldflags="$LDFLAGS" - CPPFLAGS="$CPPFLAGS $NDBM_INC" - LDFLAGS="$LDFLAGS $NDBM_LDFLAGS" - if test "$apu_want_ndbm" != "0"; then - ac_fn_c_check_header_mongrel "$LINENO" "ndbm.h" "ac_cv_header_ndbm_h" "$ac_includes_default" -if test "x$ac_cv_header_ndbm_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbm_open in -lc" >&5 -$as_echo_n "checking for dbm_open in -lc... " >&6; } -if ${ac_cv_lib_c_dbm_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbm_open (); -int -main () -{ -return dbm_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_c_dbm_open=yes -else - ac_cv_lib_c_dbm_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_dbm_open" >&5 -$as_echo "$ac_cv_lib_c_dbm_open" >&6; } -if test "x$ac_cv_lib_c_dbm_open" = xyes; then : - apu_have_ndbm=1;apu_ndbm_lib=c -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbm_open in -ldbm" >&5 -$as_echo_n "checking for dbm_open in -ldbm... " >&6; } -if ${ac_cv_lib_dbm_dbm_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldbm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbm_open (); -int -main () -{ -return dbm_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dbm_dbm_open=yes -else - ac_cv_lib_dbm_dbm_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dbm_dbm_open" >&5 -$as_echo "$ac_cv_lib_dbm_dbm_open" >&6; } -if test "x$ac_cv_lib_dbm_dbm_open" = xyes; then : - apu_have_ndbm=1;apu_ndbm_lib=dbm -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbm_open in -ldb" >&5 -$as_echo_n "checking for dbm_open in -ldb... " >&6; } -if ${ac_cv_lib_db_dbm_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldb $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbm_open (); -int -main () -{ -return dbm_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_db_dbm_open=yes -else - ac_cv_lib_db_dbm_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_db_dbm_open" >&5 -$as_echo "$ac_cv_lib_db_dbm_open" >&6; } -if test "x$ac_cv_lib_db_dbm_open" = xyes; then : - apu_have_ndbm=1;apu_ndbm_lib=db -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __db_ndbm_open in -ldb" >&5 -$as_echo_n "checking for __db_ndbm_open in -ldb... " >&6; } -if ${ac_cv_lib_db___db_ndbm_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldb $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char __db_ndbm_open (); -int -main () -{ -return __db_ndbm_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_db___db_ndbm_open=yes -else - ac_cv_lib_db___db_ndbm_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_db___db_ndbm_open" >&5 -$as_echo "$ac_cv_lib_db___db_ndbm_open" >&6; } -if test "x$ac_cv_lib_db___db_ndbm_open" = xyes; then : - apu_have_ndbm=1;apu_ndbm_lib=db -fi - - -fi - - -fi - - -fi - - -fi - - - if test "$apu_have_ndbm" != "0"; then - if test "$withval" != "yes"; then - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"$NDBM_INC\"" - APRUTIL_INCLUDES="$NDBM_INC" - else - apr_addto_bugger="$NDBM_INC" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"$NDBM_LDFLAGS\"" - APRUTIL_LDFLAGS="$NDBM_LDFLAGS" - else - apr_addto_bugger="$NDBM_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - fi - elif test "$withval" != "yes"; then - as_fn_error $? "NDBM not found in the specified directory" "$LINENO" 5 - fi - fi - CPPFLAGS="$save_cppflags" - LDFLAGS="$save_ldflags" - -else - - apu_have_ndbm=0 - -fi - - - - if test -n "$apu_db_xtra_libs"; then - saveddbxtralibs="$LIBS" - LIBS="$apu_db_xtra_libs $LIBS" - fi - - -# Check whether --with-berkeley-db was given. -if test "${with_berkeley_db+set}" = set; then : - withval=$with_berkeley_db; - if test "$withval" = "yes"; then - apu_want_db=1 - user_places="" - elif test "$withval" = "no"; then - apu_want_db=0 - else - apu_want_db=1 - user_places="$withval" - fi - - if test "$apu_want_db" != "0"; then - - requested=$requested - check_places=$user_places - - case "$requested" in - db) - - all_places="$check_places" - - # Start version search at version 6.9 - db_version=69 - while [ $db_version -ge 40 ] - do - db_major=`echo $db_version | sed -e 's/.$//'` - db_minor=`echo $db_version | sed -e 's/.//'` - - places="$all_places" - db_major="$db_major" - db_minor="$db_minor" - if test -z "$places"; then - places="std /usr/local /usr/local/BerkeleyDB.${db_major}.${db_minor} /boot/home/config" - fi - - bdb_version="${db_major}" - if test ""${db_minor}"" != "-1"; then - bdb_version="$bdb_version."${db_minor}"" - if test ""-1"" != "-1"; then - bdb_version="$bdb_version."-1"" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db${db_major}${db_minor}/db.h db${db_major}/db.h db.h" - bdb_default_search_lib_names="db-${db_major}.${db_minor} db${db_major}-${db_major}.${db_minor} db${db_major}${db_minor} db-${db_major} db${db_major} db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_"${db_major}"_"${db_minor}"_"-1"_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major="${db_major}" - apu_check_berkeley_db_minor="${db_minor}" - apu_check_berkeley_db_patch="-1" - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test ""${db_major}"" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test ""${db_major}"" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=${db_major} - fi - - if test "$apu_have_db" = "1"; then - break - fi - db_version=`expr $db_version - 1` - done - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=3 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db3/db.h db.h" - bdb_default_search_lib_names="db3 db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "3" = "3" -o "3" = "4" -o "3" = "5" -o "3" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_3_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=3 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "3" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "3" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=3 - fi - - fi - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=2 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db2/db.h db.h" - bdb_default_search_lib_names="db2 db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "2" = "3" -o "2" = "4" -o "2" = "5" -o "2" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_2_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=2 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "2" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "2" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=2 - fi - - fi - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=1 - if test "0" != "-1"; then - bdb_version="$bdb_version.0" - if test "0" != "-1"; then - bdb_version="$bdb_version.0" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db1/db.h db.h" - bdb_default_search_lib_names="db1" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_1_0_0_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=1 - apu_check_berkeley_db_minor=0 - apu_check_berkeley_db_patch=0 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "1" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "1" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=1 - fi - - fi - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=1 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db_185.h" - bdb_default_search_lib_names="db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_1_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=1 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "1" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "1" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=185 - fi - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB" >&5 -$as_echo_n "checking for Berkeley DB... " >&6; } - if test "$apu_have_db" = "1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found db$apu_db_version" >&5 -$as_echo "found db$apu_db_version" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } - fi - - if test "$apu_have_db" = "0"; then - as_fn_error but not found "Berkeley db requested" "$LINENO" 5 - fi - ;; - db1) - - places="$check_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=1 - if test "0" != "-1"; then - bdb_version="$bdb_version.0" - if test "0" != "-1"; then - bdb_version="$bdb_version.0" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db1/db.h db.h" - bdb_default_search_lib_names="db1" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_1_0_0_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=1 - apu_check_berkeley_db_minor=0 - apu_check_berkeley_db_patch=0 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "1" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "1" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=1 - fi - - if test "$apu_db_version" != "1"; then - as_fn_error $? "Berkeley db1 not found" "$LINENO" 5 - fi - ;; - db185) - - places="$check_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=1 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db_185.h" - bdb_default_search_lib_names="db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_1_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=1 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "1" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "1" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=185 - fi - - if test "$apu_db_version" != "185"; then - as_fn_error $? "Berkeley db185 not found" "$LINENO" 5 - fi - ;; - db2) - - places="$check_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=2 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db2/db.h db.h" - bdb_default_search_lib_names="db2 db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "2" = "3" -o "2" = "4" -o "2" = "5" -o "2" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_2_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=2 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "2" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "2" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=2 - fi - - if test "$apu_db_version" != "2"; then - as_fn_error $? "Berkeley db2 not found" "$LINENO" 5 - fi - ;; - db3) - - places="$check_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=3 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db3/db.h db.h" - bdb_default_search_lib_names="db3 db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "3" = "3" -o "3" = "4" -o "3" = "5" -o "3" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_3_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=3 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "3" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "3" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=3 - fi - - if test "$apu_db_version" != "3"; then - as_fn_error $? "Berkeley db3 not found" "$LINENO" 5 - fi - ;; - db[456][0-9]) - db_major=`echo "$requested" | sed -e 's/db//' -e 's/.$//'` - db_minor=`echo "$requested" | sed -e 's/db//' -e 's/.//'` - - places="$check_places" - db_major="$db_major" - db_minor="$db_minor" - if test -z "$places"; then - places="std /usr/local /usr/local/BerkeleyDB.${db_major}.${db_minor} /boot/home/config" - fi - - bdb_version="${db_major}" - if test ""${db_minor}"" != "-1"; then - bdb_version="$bdb_version."${db_minor}"" - if test ""-1"" != "-1"; then - bdb_version="$bdb_version."-1"" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db${db_major}${db_minor}/db.h db${db_major}/db.h db.h" - bdb_default_search_lib_names="db-${db_major}.${db_minor} db${db_major}-${db_major}.${db_minor} db${db_major}${db_minor} db-${db_major} db${db_major} db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_"${db_major}"_"${db_minor}"_"-1"_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major="${db_major}" - apu_check_berkeley_db_minor="${db_minor}" - apu_check_berkeley_db_patch="-1" - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test ""${db_major}"" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test ""${db_major}"" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=${db_major} - fi - - if test "$apu_db_version" != "$db_major"; then - as_fn_error $? "Berkeley db$db_major not found" "$LINENO" 5 - fi - ;; - db[456]) - db_major=`echo "$requested" | sed -e 's/db//'` - # Start version search at version x.9 - db_minor=9 - while [ $db_minor -ge 0 ] - do - - places="$check_places" - db_major="$db_major" - db_minor="$db_minor" - if test -z "$places"; then - places="std /usr/local /usr/local/BerkeleyDB.${db_major}.${db_minor} /boot/home/config" - fi - - bdb_version="${db_major}" - if test ""${db_minor}"" != "-1"; then - bdb_version="$bdb_version."${db_minor}"" - if test ""-1"" != "-1"; then - bdb_version="$bdb_version."-1"" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db${db_major}${db_minor}/db.h db${db_major}/db.h db.h" - bdb_default_search_lib_names="db-${db_major}.${db_minor} db${db_major}-${db_major}.${db_minor} db${db_major}${db_minor} db-${db_major} db${db_major} db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_"${db_major}"_"${db_minor}"_"-1"_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major="${db_major}" - apu_check_berkeley_db_minor="${db_minor}" - apu_check_berkeley_db_patch="-1" - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test ""${db_major}"" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test ""${db_major}"" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=${db_major} - fi - - if test "$apu_have_db" = "1"; then - break - fi - db_minor=`expr $db_minor - 1` - done - if test "$apu_db_version" != "$db_major"; then - as_fn_error $? "Berkeley db$db_major not found" "$LINENO" 5 - fi - ;; - default) - - all_places="$check_places" - - # Start version search at version 6.9 - db_version=69 - while [ $db_version -ge 40 ] - do - db_major=`echo $db_version | sed -e 's/.$//'` - db_minor=`echo $db_version | sed -e 's/.//'` - - places="$all_places" - db_major="$db_major" - db_minor="$db_minor" - if test -z "$places"; then - places="std /usr/local /usr/local/BerkeleyDB.${db_major}.${db_minor} /boot/home/config" - fi - - bdb_version="${db_major}" - if test ""${db_minor}"" != "-1"; then - bdb_version="$bdb_version."${db_minor}"" - if test ""-1"" != "-1"; then - bdb_version="$bdb_version."-1"" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db${db_major}${db_minor}/db.h db${db_major}/db.h db.h" - bdb_default_search_lib_names="db-${db_major}.${db_minor} db${db_major}-${db_major}.${db_minor} db${db_major}${db_minor} db-${db_major} db${db_major} db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test ""${db_major}"" = "3" -o ""${db_major}"" = "4" -o ""${db_major}"" = "5" -o ""${db_major}"" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_"${db_major}"_"${db_minor}"_"-1"_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major="${db_major}" - apu_check_berkeley_db_minor="${db_minor}" - apu_check_berkeley_db_patch="-1" - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test ""${db_major}"" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test ""${db_major}"" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=${db_major} - fi - - if test "$apu_have_db" = "1"; then - break - fi - db_version=`expr $db_version - 1` - done - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=3 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db3/db.h db.h" - bdb_default_search_lib_names="db3 db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "3" = "3" -o "3" = "4" -o "3" = "5" -o "3" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_3_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=3 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "3" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "3" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=3 - fi - - fi - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=2 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db2/db.h db.h" - bdb_default_search_lib_names="db2 db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "2" = "3" -o "2" = "4" -o "2" = "5" -o "2" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_2_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=2 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "2" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "2" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=2 - fi - - fi - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=1 - if test "0" != "-1"; then - bdb_version="$bdb_version.0" - if test "0" != "-1"; then - bdb_version="$bdb_version.0" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db1/db.h db.h" - bdb_default_search_lib_names="db1" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_1_0_0_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=1 - apu_check_berkeley_db_minor=0 - apu_check_berkeley_db_patch=0 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "1" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "1" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=1 - fi - - fi - if test "$apu_have_db" = "0"; then - - places="$all_places" - if test -z "$places"; then - places="std" - fi - - bdb_version=1 - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - if test "-1" != "-1"; then - bdb_version="$bdb_version.-1" - fi - fi - bdb_places="$places" - bdb_default_search_headers="db_185.h" - bdb_default_search_lib_names="db" - - - apu_have_db=0 - - # Save the original values of the flags we tweak. - apu_check_lib_save_libs="$LIBS" - apu_check_lib_save_ldflags="$LDFLAGS" - apu_check_lib_save_cppflags="$CPPFLAGS" - - # The variable `found' is the prefix under which we've found - # Berkeley DB, or `not' if we haven't found it anywhere yet. - found=not - for bdb_place in $bdb_places; do - - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - case "$bdb_place" in - "std" ) - description="the standard places" - ;; - *":"* ) - header="`echo $bdb_place | sed -e 's/:.*$//'`" - lib="`echo $bdb_place | sed -e 's/^.*://'`" - CPPFLAGS="$CPPFLAGS -I$header" - LDFLAGS="$LDFLAGS -L$lib" - description="$header and $lib" - ;; - * ) - if test -d $bdb_place; then - LDFLAGS="$LDFLAGS -L$bdb_place/lib" - CPPFLAGS="$CPPFLAGS -I$bdb_place/include" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $bdb_place" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $bdb_place... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: directory not found" >&5 -$as_echo "directory not found" >&6; } - continue - fi - description="$bdb_place" - ;; - esac - - # Since there is no AC_MSG_NOTICE in autoconf 2.13, we use this - # trick to display a message instead. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB $bdb_version in $description" >&5 -$as_echo_n "checking for Berkeley DB $bdb_version in $description... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - - for bdb_libname in $bdb_default_search_lib_names; do - for bdb_header in $bdb_default_search_headers; do - # Clear the header cache variable for each location - - cache_id="`echo ac_cv_header_${bdb_header} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - unset $cache_id - as_ac_Header=`$as_echo "ac_cv_header_$bdb_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$bdb_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - - if test "1" = "3" -o "1" = "4" -o "1" = "5" -o "1" = "6"; then - # We generate a separate cache variable for each prefix and libname - # we search under. That way, we avoid caching information that - # changes if the user runs `configure' with a different set of - # switches. - - cache_id="`echo apu_cv_check_berkeley_db_1_-1_-1_${bdb_header}_${bdb_libname}_in_${bdb_place} \ - | sed -e 's/[^a-zA-Z0-9_]/_/g'`" - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -l$bdb_libname" >&5 -$as_echo_n "checking for -l$bdb_libname... " >&6; } - if eval \${$cache_id+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - apu_try_berkeley_db_save_libs="$LIBS" - - apu_check_berkeley_db_major=1 - apu_check_berkeley_db_minor=-1 - apu_check_berkeley_db_patch=-1 - apu_try_berkeley_db_header=$bdb_header - apu_try_berkeley_db_libname=$bdb_libname - - LIBS="$LIBS -l$apu_try_berkeley_db_libname" - if test "$cross_compiling" = yes; then : - apu_try_berkeley_db=yes - -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include -#include <$apu_try_berkeley_db_header> -main () -{ - int major, minor, patch; - - db_version(&major, &minor, &patch); - - /* Sanity check: ensure that db.h constants actually match the db library */ - if (major != DB_VERSION_MAJOR - || minor != DB_VERSION_MINOR - || patch != DB_VERSION_PATCH) - exit (1); - - /* Run-time check: ensure the library claims to be the correct version. */ - - if ($apu_check_berkeley_db_major != -1) { - if (major < $apu_check_berkeley_db_major) - exit (1); - if (major > $apu_check_berkeley_db_major) - exit (0); - } - - if ($apu_check_berkeley_db_minor != -1) { - if (minor < $apu_check_berkeley_db_minor) - exit (1); - if (minor > $apu_check_berkeley_db_minor) - exit (0); - } - - if ($apu_check_berkeley_db_patch == -1 - || patch >= $apu_check_berkeley_db_patch) - exit (0); - else - exit (1); -} - -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_try_berkeley_db=yes -else - apu_try_berkeley_db=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - - LIBS="$apu_try_berkeley_db_save_libs" - - - eval "$cache_id=$apu_try_berkeley_db" - -fi - - result="`eval echo '$'$cache_id`" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -$as_echo "$result" >&6; } - elif test "1" = "1"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_dbopen" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dbopen in -l$bdb_libname" >&5 -$as_echo_n "checking for dbopen in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dbopen (); -int -main () -{ -return dbopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - elif test "1" = "2"; then - as_ac_Lib=`$as_echo "ac_cv_lib_$bdb_libname''_db_open" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for db_open in -l$bdb_libname" >&5 -$as_echo_n "checking for db_open in -l$bdb_libname... " >&6; } -if eval \${$as_ac_Lib+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-l$bdb_libname $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char db_open (); -int -main () -{ -return db_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$as_ac_Lib=yes" -else - eval "$as_ac_Lib=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -eval ac_res=\$$as_ac_Lib - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : - result=yes -else - result=no - -fi - - fi - -else - result="no" -fi - - - - # If we found it, no need to search any more. - if test "$result" = "yes"; then - found="$bdb_place" - break - fi - done - test "$found" != "not" && break - done - test "$found" != "not" && break - done - - # Restore the original values of the flags we tweak. - LDFLAGS="$apu_check_lib_save_ldflags" - CPPFLAGS="$apu_check_lib_save_cppflags" - - case "$found" in - "not") - apu_have_db=0 - ;; - "std") - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *":"*) - header="`echo $found | sed -e 's/:.*$//'`" - lib="`echo $found | sed -e 's/^.*://'`" - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$header\"" - APRUTIL_INCLUDES="-I$header" - else - apr_addto_bugger="-I$header" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$lib\"" - APRUTIL_LDFLAGS="-L$lib" - else - apr_addto_bugger="-L$lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - *) - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$found/include\"" - APRUTIL_INCLUDES="-I$found/include" - else - apr_addto_bugger="-I$found/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$found/lib\"" - APRUTIL_LDFLAGS="-L$found/lib" - else - apr_addto_bugger="-L$found/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - apu_db_header=$bdb_header - apu_db_lib=$bdb_libname - apu_have_db=1 - ;; - esac - - if test "$apu_have_db" = "1"; then - apu_db_version=185 - fi - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Berkeley DB" >&5 -$as_echo_n "checking for Berkeley DB... " >&6; } - if test "$apu_have_db" = "1"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found db$apu_db_version" >&5 -$as_echo "found db$apu_db_version" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } - fi - - ;; - esac - - if test "$apu_have_db" = "0"; then - as_fn_error $? "Berkeley DB not found." "$LINENO" 5 - fi - fi - -fi - - - if test -n "$apu_db_xtra_libs"; then - LIBS="$saveddbxtralibs" - fi - - case "$requested" in - sdbm | gdbm | ndbm | db) - eval "apu_use_$requested=1" - apu_default_dbm=$requested - ;; - db185 | db[123456]) - apu_use_db=1 - apu_default_dbm=$requested - ;; - db[456][0-9]) - apu_use_db=1 - apu_default_dbm=`echo $requested | sed -e 's/.$//'` - ;; - default) - apu_default_dbm="sdbm (default)" - apu_use_sdbm=1 - ;; - *) - as_fn_error $? "--with-dbm=$requested is an unknown DBM type. - Use one of: $dbm_list" "$LINENO" 5 - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default DBM" >&5 -$as_echo_n "checking for default DBM... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_default_dbm" >&5 -$as_echo "$apu_default_dbm" >&6; } - - - - - - - - - - - - - - if test "$apu_have_db" = "1"; then - - if test "x$LDADD_dbm_db" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbm_db to \"-l$apu_db_lib\"" - LDADD_dbm_db="-l$apu_db_lib" - else - apr_addto_bugger="-l$apu_db_lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbm_db; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbm_db" - LDADD_dbm_db="$LDADD_dbm_db $i" - fi - done - fi - - if test -n "apu_db_xtra_libs"; then - - if test "x$LDADD_dbm_db" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbm_db to \"$apu_db_xtra_libs\"" - LDADD_dbm_db="$apu_db_xtra_libs" - else - apr_addto_bugger="$apu_db_xtra_libs" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbm_db; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbm_db" - LDADD_dbm_db="$LDADD_dbm_db $i" - fi - done - fi - - fi - fi - - if test "$apu_have_gdbm" = "1"; then - - if test "x$LDADD_dbm_gdbm" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbm_gdbm to \"-lgdbm\"" - LDADD_dbm_gdbm="-lgdbm" - else - apr_addto_bugger="-lgdbm" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbm_gdbm; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbm_gdbm" - LDADD_dbm_gdbm="$LDADD_dbm_gdbm $i" - fi - done - fi - - fi - - if test "$apu_have_ndbm" = "1"; then - - if test "x$LDADD_dbm_ndbm" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbm_ndbm to \"-l$apu_ndbm_lib\"" - LDADD_dbm_ndbm="-l$apu_ndbm_lib" - else - apr_addto_bugger="-l$apu_ndbm_lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbm_ndbm; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbm_ndbm" - LDADD_dbm_ndbm="$LDADD_dbm_ndbm $i" - fi - done - fi - - fi - - - - - - - apu_have_pgsql=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-pgsql was given. -if test "${with_pgsql+set}" = set; then : - withval=$with_pgsql; - if test "$withval" = "yes"; then - # Extract the first word of "pg_config", so it can be a program name with args. -set dummy pg_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PGSQL_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PGSQL_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PGSQL_CONFIG="$PGSQL_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PGSQL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PGSQL_CONFIG=$ac_cv_path_PGSQL_CONFIG -if test -n "$PGSQL_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_CONFIG" >&5 -$as_echo "$PGSQL_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$PGSQL_CONFIG" != 'x'; then - pgsql_CPPFLAGS="-I`$PGSQL_CONFIG --includedir`" - pgsql_LDFLAGS="-L`$PGSQL_CONFIG --libdir`" - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$pgsql_CPPFLAGS\"" - CPPFLAGS="$pgsql_CPPFLAGS" - else - apr_addto_bugger="$pgsql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$pgsql_LDFLAGS\"" - LDFLAGS="$pgsql_LDFLAGS" - else - apr_addto_bugger="$pgsql_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - fi - - for ac_header in libpq-fe.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "libpq-fe.h" "ac_cv_header_libpq_fe_h" "$ac_includes_default" -if test "x$ac_cv_header_libpq_fe_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBPQ_FE_H 1 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -else - - if test "x$PGSQL_CONFIG" != 'x'; then - unset ac_cv_lib_pq_PQsendQueryPrepared - pgsql_LIBS="`$PGSQL_CONFIG --libs`" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$pgsql_LIBS\"" - LIBS="$pgsql_LIBS" - else - apr_addto_bugger="$pgsql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -fi - - fi - -fi - - -fi - -done - - if test "$apu_have_pgsql" = "0"; then - for ac_header in postgresql/libpq-fe.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "postgresql/libpq-fe.h" "ac_cv_header_postgresql_libpq_fe_h" "$ac_includes_default" -if test "x$ac_cv_header_postgresql_libpq_fe_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POSTGRESQL_LIBPQ_FE_H 1 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -else - - if test "x$PGSQL_CONFIG" != 'x'; then - unset ac_cv_lib_pq_PQsendQueryPrepared - pgsql_LIBS="`$PGSQL_CONFIG --libs`" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$pgsql_LIBS\"" - LIBS="$pgsql_LIBS" - else - apr_addto_bugger="$pgsql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -fi - - fi - -fi - - -fi - -done - - fi - if test "$apu_have_pgsql" != "0" && test "x$PGSQL_CONFIG" != 'x'; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$pgsql_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$pgsql_CPPFLAGS" - else - apr_addto_bugger="$pgsql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - elif test "$withval" = "no"; then - : - else - # Extract the first word of "pg_config", so it can be a program name with args. -set dummy pg_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PGSQL_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PGSQL_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PGSQL_CONFIG="$PGSQL_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $withval/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PGSQL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PGSQL_CONFIG=$ac_cv_path_PGSQL_CONFIG -if test -n "$PGSQL_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_CONFIG" >&5 -$as_echo "$PGSQL_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$PGSQL_CONFIG" != 'x'; then - pgsql_CPPFLAGS="-I`$PGSQL_CONFIG --includedir`" - pgsql_LDFLAGS="-L`$PGSQL_CONFIG --libdir`" - else - pgsql_CPPFLAGS="-I$withval/include" - pgsql_LDFLAGS="-L$withval/lib " - fi - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$pgsql_CPPFLAGS\"" - CPPFLAGS="$pgsql_CPPFLAGS" - else - apr_addto_bugger="$pgsql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$pgsql_LDFLAGS\"" - LDFLAGS="$pgsql_LDFLAGS" - else - apr_addto_bugger="$pgsql_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pgsql in $withval" >&5 -$as_echo "$as_me: checking for pgsql in $withval" >&6;} - for ac_header in libpq-fe.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "libpq-fe.h" "ac_cv_header_libpq_fe_h" "$ac_includes_default" -if test "x$ac_cv_header_libpq_fe_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBPQ_FE_H 1 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -else - - if test "x$PGSQL_CONFIG" != 'x'; then - unset ac_cv_lib_pq_PQsendQueryPrepared - pgsql_LIBS="`$PGSQL_CONFIG --libs`" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$pgsql_LIBS\"" - LIBS="$pgsql_LIBS" - else - apr_addto_bugger="$pgsql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -fi - - fi - -fi - - -fi - -done - - if test "$apu_have_pgsql" != "1"; then - for ac_header in postgresql/libpq-fe.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "postgresql/libpq-fe.h" "ac_cv_header_postgresql_libpq_fe_h" "$ac_includes_default" -if test "x$ac_cv_header_postgresql_libpq_fe_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POSTGRESQL_LIBPQ_FE_H 1 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -else - - if test "x$PGSQL_CONFIG" != 'x'; then - unset ac_cv_lib_pq_PQsendQueryPrepared - pgsql_LIBS="`$PGSQL_CONFIG --libs`" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$pgsql_LIBS\"" - LIBS="$pgsql_LIBS" - else - apr_addto_bugger="$pgsql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -fi - - fi - -fi - - -fi - -done - - fi - if test "$apu_have_pgsql" != "0"; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$pgsql_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$pgsql_CPPFLAGS" - else - apr_addto_bugger="$pgsql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - fi - -else - - # Extract the first word of "pg_config", so it can be a program name with args. -set dummy pg_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PGSQL_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PGSQL_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PGSQL_CONFIG="$PGSQL_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PGSQL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PGSQL_CONFIG=$ac_cv_path_PGSQL_CONFIG -if test -n "$PGSQL_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_CONFIG" >&5 -$as_echo "$PGSQL_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$PGSQL_CONFIG" != 'x'; then - pgsql_CPPFLAGS="-I`$PGSQL_CONFIG --includedir`" - pgsql_LDFLAGS="-L`$PGSQL_CONFIG --libdir`" - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$pgsql_CPPFLAGS\"" - CPPFLAGS="$pgsql_CPPFLAGS" - else - apr_addto_bugger="$pgsql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$pgsql_LDFLAGS\"" - LDFLAGS="$pgsql_LDFLAGS" - else - apr_addto_bugger="$pgsql_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - fi - - for ac_header in libpq-fe.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "libpq-fe.h" "ac_cv_header_libpq_fe_h" "$ac_includes_default" -if test "x$ac_cv_header_libpq_fe_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBPQ_FE_H 1 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -else - - if test "x$PGSQL_CONFIG" != 'x'; then - unset ac_cv_lib_pq_PQsendQueryPrepared - pgsql_LIBS="`$PGSQL_CONFIG --libs`" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$pgsql_LIBS\"" - LIBS="$pgsql_LIBS" - else - apr_addto_bugger="$pgsql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -fi - - fi - -fi - - -fi - -done - - if test "$apu_have_pgsql" = "0"; then - for ac_header in postgresql/libpq-fe.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "postgresql/libpq-fe.h" "ac_cv_header_postgresql_libpq_fe_h" "$ac_includes_default" -if test "x$ac_cv_header_postgresql_libpq_fe_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POSTGRESQL_LIBPQ_FE_H 1 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -else - - if test "x$PGSQL_CONFIG" != 'x'; then - unset ac_cv_lib_pq_PQsendQueryPrepared - pgsql_LIBS="`$PGSQL_CONFIG --libs`" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$pgsql_LIBS\"" - LIBS="$pgsql_LIBS" - else - apr_addto_bugger="$pgsql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PQsendQueryPrepared in -lpq" >&5 -$as_echo_n "checking for PQsendQueryPrepared in -lpq... " >&6; } -if ${ac_cv_lib_pq_PQsendQueryPrepared+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpq $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char PQsendQueryPrepared (); -int -main () -{ -return PQsendQueryPrepared (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pq_PQsendQueryPrepared=yes -else - ac_cv_lib_pq_PQsendQueryPrepared=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pq_PQsendQueryPrepared" >&5 -$as_echo "$ac_cv_lib_pq_PQsendQueryPrepared" >&6; } -if test "x$ac_cv_lib_pq_PQsendQueryPrepared" = xyes; then : - apu_have_pgsql=1 -fi - - fi - -fi - - -fi - -done - - fi - if test "$apu_have_pgsql" != "0" && test "x$PGSQL_CONFIG" != 'x'; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$pgsql_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$pgsql_CPPFLAGS" - else - apr_addto_bugger="$pgsql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - -fi - - - if test "$apu_have_pgsql" = "1"; then - - if test "x$LDADD_dbd_pgsql" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbd_pgsql to \"$pgsql_LDFLAGS -lpq $pgsql_LIBS\"" - LDADD_dbd_pgsql="$pgsql_LDFLAGS -lpq $pgsql_LIBS" - else - apr_addto_bugger="$pgsql_LDFLAGS -lpq $pgsql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbd_pgsql; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbd_pgsql" - LDADD_dbd_pgsql="$LDADD_dbd_pgsql $i" - fi - done - fi - - fi - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - - apu_have_mysql=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-mysql was given. -if test "${with_mysql+set}" = set; then : - withval=$with_mysql; - if test "$withval" = "yes"; then - # Extract the first word of "mysql_config", so it can be a program name with args. -set dummy mysql_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_MYSQL_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MYSQL_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_MYSQL_CONFIG="$MYSQL_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_MYSQL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MYSQL_CONFIG=$ac_cv_path_MYSQL_CONFIG -if test -n "$MYSQL_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CONFIG" >&5 -$as_echo "$MYSQL_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$MYSQL_CONFIG" != 'x'; then - mysql_CPPFLAGS="`$MYSQL_CONFIG --include`" - mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r | sed -e 's/-l[^ ]\+//g'`" - mysql_LIBS="`$MYSQL_CONFIG --libs_r`" - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$mysql_CPPFLAGS\"" - CPPFLAGS="$mysql_CPPFLAGS" - else - apr_addto_bugger="$mysql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$mysql_LIBS\"" - LIBS="$mysql_LIBS" - else - apr_addto_bugger="$mysql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - fi - - for ac_header in mysql.h my_global.h my_sys.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_init in -lmysqlclient" >&5 -$as_echo_n "checking for mysql_init in -lmysqlclient... " >&6; } -if ${ac_cv_lib_mysqlclient_mysql_init+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmysqlclient $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mysql_init (); -int -main () -{ -return mysql_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_mysqlclient_mysql_init=yes -else - ac_cv_lib_mysqlclient_mysql_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mysqlclient_mysql_init" >&5 -$as_echo "$ac_cv_lib_mysqlclient_mysql_init" >&6; } -if test "x$ac_cv_lib_mysqlclient_mysql_init" = xyes; then : - apu_have_mysql=1 -fi - -else - apu_have_mysql=0; break -fi - -done - - if test "$apu_have_mysql" = "0"; then - for ac_header in mysql/mysql.h mysql/my_global.h mysql/my_sys.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_init in -lmysqlclient" >&5 -$as_echo_n "checking for mysql_init in -lmysqlclient... " >&6; } -if ${ac_cv_lib_mysqlclient_mysql_init+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmysqlclient $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mysql_init (); -int -main () -{ -return mysql_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_mysqlclient_mysql_init=yes -else - ac_cv_lib_mysqlclient_mysql_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mysqlclient_mysql_init" >&5 -$as_echo "$ac_cv_lib_mysqlclient_mysql_init" >&6; } -if test "x$ac_cv_lib_mysqlclient_mysql_init" = xyes; then : - apu_have_mysql=1 -fi - -else - apu_have_mysql=0; break -fi - -done - - fi - if test "$apu_have_mysql" != "0" && test "x$MYSQL_CONFIG" != 'x'; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$mysql_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$mysql_CPPFLAGS" - else - apr_addto_bugger="$mysql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - elif test "$withval" = "no"; then - : - else - # Extract the first word of "mysql_config", so it can be a program name with args. -set dummy mysql_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_MYSQL_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MYSQL_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_MYSQL_CONFIG="$MYSQL_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $withval/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_MYSQL_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -MYSQL_CONFIG=$ac_cv_path_MYSQL_CONFIG -if test -n "$MYSQL_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CONFIG" >&5 -$as_echo "$MYSQL_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$MYSQL_CONFIG" != 'x'; then - mysql_CPPFLAGS="`$MYSQL_CONFIG --include`" - mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r | sed -e 's/-l[^ ]\+//g'`" - mysql_LIBS="`$MYSQL_CONFIG --libs_r`" - else - mysql_CPPFLAGS="-I$withval/include" - mysql_LDFLAGS="-L$withval/lib " - fi - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$mysql_CPPFLAGS\"" - CPPFLAGS="$mysql_CPPFLAGS" - else - apr_addto_bugger="$mysql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$mysql_LDFLAGS\"" - LDFLAGS="$mysql_LDFLAGS" - else - apr_addto_bugger="$mysql_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$mysql_LIBS\"" - LIBS="$mysql_LIBS" - else - apr_addto_bugger="$mysql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql in $withval" >&5 -$as_echo "$as_me: checking for mysql in $withval" >&6;} - for ac_header in mysql.h my_global.h my_sys.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_init in -lmysqlclient" >&5 -$as_echo_n "checking for mysql_init in -lmysqlclient... " >&6; } -if ${ac_cv_lib_mysqlclient_mysql_init+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmysqlclient $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mysql_init (); -int -main () -{ -return mysql_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_mysqlclient_mysql_init=yes -else - ac_cv_lib_mysqlclient_mysql_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mysqlclient_mysql_init" >&5 -$as_echo "$ac_cv_lib_mysqlclient_mysql_init" >&6; } -if test "x$ac_cv_lib_mysqlclient_mysql_init" = xyes; then : - apu_have_mysql=1 -fi - -else - apu_have_mysql=0; break -fi - -done - - - if test "$apu_have_mysql" != "1"; then - for ac_header in mysql/mysql.h mysql/my_global.h mysql/my_sys.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_init in -lmysqlclient" >&5 -$as_echo_n "checking for mysql_init in -lmysqlclient... " >&6; } -if ${ac_cv_lib_mysqlclient_mysql_init+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmysqlclient $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mysql_init (); -int -main () -{ -return mysql_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_mysqlclient_mysql_init=yes -else - ac_cv_lib_mysqlclient_mysql_init=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mysqlclient_mysql_init" >&5 -$as_echo "$ac_cv_lib_mysqlclient_mysql_init" >&6; } -if test "x$ac_cv_lib_mysqlclient_mysql_init" = xyes; then : - apu_have_mysql=1 -fi - -else - apu_have_mysql=0; break -fi - -done - - fi - if test "$apu_have_mysql" != "0"; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$mysql_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$mysql_CPPFLAGS" - else - apr_addto_bugger="$mysql_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - fi - -fi - - - - - if test "$apu_have_mysql" = "1"; then - - if test "x$LDADD_dbd_mysql" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbd_mysql to \"$mysql_LDFLAGS -lmysqlclient $mysql_LIBS\"" - LDADD_dbd_mysql="$mysql_LDFLAGS -lmysqlclient $mysql_LIBS" - else - apr_addto_bugger="$mysql_LDFLAGS -lmysqlclient $mysql_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbd_mysql; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbd_mysql" - LDADD_dbd_mysql="$LDADD_dbd_mysql $i" - fi - done - fi - - fi - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - - apu_have_sqlite3=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-sqlite3 was given. -if test "${with_sqlite3+set}" = set; then : - withval=$with_sqlite3; - if test "$withval" = "yes"; then - for ac_header in sqlite3.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default" -if test "x$ac_cv_header_sqlite3_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQLITE3_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_open in -lsqlite3" >&5 -$as_echo_n "checking for sqlite3_open in -lsqlite3... " >&6; } -if ${ac_cv_lib_sqlite3_sqlite3_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsqlite3 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sqlite3_open (); -int -main () -{ -return sqlite3_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_sqlite3_sqlite3_open=yes -else - ac_cv_lib_sqlite3_sqlite3_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_open" >&5 -$as_echo "$ac_cv_lib_sqlite3_sqlite3_open" >&6; } -if test "x$ac_cv_lib_sqlite3_sqlite3_open" = xyes; then : - apu_have_sqlite3=1 -fi - -fi - -done - - elif test "$withval" = "no"; then - : - else - sqlite3_CPPFLAGS="-I$withval/include" - sqlite3_LDFLAGS="-L$withval/lib " - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$sqlite3_CPPFLAGS\"" - CPPFLAGS="$sqlite3_CPPFLAGS" - else - apr_addto_bugger="$sqlite3_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$sqlite3_LDFLAGS\"" - LDFLAGS="$sqlite3_LDFLAGS" - else - apr_addto_bugger="$sqlite3_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3 in $withval" >&5 -$as_echo "$as_me: checking for sqlite3 in $withval" >&6;} - for ac_header in sqlite3.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default" -if test "x$ac_cv_header_sqlite3_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQLITE3_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_open in -lsqlite3" >&5 -$as_echo_n "checking for sqlite3_open in -lsqlite3... " >&6; } -if ${ac_cv_lib_sqlite3_sqlite3_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsqlite3 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sqlite3_open (); -int -main () -{ -return sqlite3_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_sqlite3_sqlite3_open=yes -else - ac_cv_lib_sqlite3_sqlite3_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_open" >&5 -$as_echo "$ac_cv_lib_sqlite3_sqlite3_open" >&6; } -if test "x$ac_cv_lib_sqlite3_sqlite3_open" = xyes; then : - apu_have_sqlite3=1 -fi - -fi - -done - - if test "$apu_have_sqlite3" != "0"; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"-I$withval/include\"" - APRUTIL_PRIV_INCLUDES="-I$withval/include" - else - apr_addto_bugger="-I$withval/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - fi - -else - - for ac_header in sqlite3.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default" -if test "x$ac_cv_header_sqlite3_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQLITE3_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_open in -lsqlite3" >&5 -$as_echo_n "checking for sqlite3_open in -lsqlite3... " >&6; } -if ${ac_cv_lib_sqlite3_sqlite3_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsqlite3 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sqlite3_open (); -int -main () -{ -return sqlite3_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_sqlite3_sqlite3_open=yes -else - ac_cv_lib_sqlite3_sqlite3_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_open" >&5 -$as_echo "$ac_cv_lib_sqlite3_sqlite3_open" >&6; } -if test "x$ac_cv_lib_sqlite3_sqlite3_open" = xyes; then : - apu_have_sqlite3=1 -fi - -fi - -done - - -fi - - - - - if test "$apu_have_sqlite3" = "1"; then - - if test "x$LDADD_dbd_sqlite3" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbd_sqlite3 to \"$sqlite3_LDFLAGS -lsqlite3\"" - LDADD_dbd_sqlite3="$sqlite3_LDFLAGS -lsqlite3" - else - apr_addto_bugger="$sqlite3_LDFLAGS -lsqlite3" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbd_sqlite3; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbd_sqlite3" - LDADD_dbd_sqlite3="$LDADD_dbd_sqlite3 $i" - fi - done - fi - - fi - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - - apu_have_sqlite2=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-sqlite2 was given. -if test "${with_sqlite2+set}" = set; then : - withval=$with_sqlite2; - if test "$withval" = "yes"; then - for ac_header in sqlite.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sqlite.h" "ac_cv_header_sqlite_h" "$ac_includes_default" -if test "x$ac_cv_header_sqlite_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQLITE_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite_open in -lsqlite" >&5 -$as_echo_n "checking for sqlite_open in -lsqlite... " >&6; } -if ${ac_cv_lib_sqlite_sqlite_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsqlite $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sqlite_open (); -int -main () -{ -return sqlite_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_sqlite_sqlite_open=yes -else - ac_cv_lib_sqlite_sqlite_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite_sqlite_open" >&5 -$as_echo "$ac_cv_lib_sqlite_sqlite_open" >&6; } -if test "x$ac_cv_lib_sqlite_sqlite_open" = xyes; then : - apu_have_sqlite2=1 -fi - -fi - -done - - elif test "$withval" = "no"; then - : - else - sqlite2_CPPFLAGS="-I$withval/include" - sqlite2_LDFLAGS="-L$withval/lib " - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$sqlite2_CPPFLAGS\"" - CPPFLAGS="$sqlite2_CPPFLAGS" - else - apr_addto_bugger="$sqlite2_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$sqlite2_LDFLAGS\"" - LDFLAGS="$sqlite2_LDFLAGS" - else - apr_addto_bugger="$sqlite2_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite2 in $withval" >&5 -$as_echo "$as_me: checking for sqlite2 in $withval" >&6;} - for ac_header in sqlite.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sqlite.h" "ac_cv_header_sqlite_h" "$ac_includes_default" -if test "x$ac_cv_header_sqlite_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQLITE_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite_open in -lsqlite" >&5 -$as_echo_n "checking for sqlite_open in -lsqlite... " >&6; } -if ${ac_cv_lib_sqlite_sqlite_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsqlite $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sqlite_open (); -int -main () -{ -return sqlite_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_sqlite_sqlite_open=yes -else - ac_cv_lib_sqlite_sqlite_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite_sqlite_open" >&5 -$as_echo "$ac_cv_lib_sqlite_sqlite_open" >&6; } -if test "x$ac_cv_lib_sqlite_sqlite_open" = xyes; then : - apu_have_sqlite2=1 -fi - -fi - -done - - if test "$apu_have_sqlite2" != "0"; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"-I$withval/include\"" - APRUTIL_PRIV_INCLUDES="-I$withval/include" - else - apr_addto_bugger="-I$withval/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - fi - -else - - for ac_header in sqlite.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sqlite.h" "ac_cv_header_sqlite_h" "$ac_includes_default" -if test "x$ac_cv_header_sqlite_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQLITE_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite_open in -lsqlite" >&5 -$as_echo_n "checking for sqlite_open in -lsqlite... " >&6; } -if ${ac_cv_lib_sqlite_sqlite_open+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsqlite $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char sqlite_open (); -int -main () -{ -return sqlite_open (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_sqlite_sqlite_open=yes -else - ac_cv_lib_sqlite_sqlite_open=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite_sqlite_open" >&5 -$as_echo "$ac_cv_lib_sqlite_sqlite_open" >&6; } -if test "x$ac_cv_lib_sqlite_sqlite_open" = xyes; then : - apu_have_sqlite2=1 -fi - -fi - -done - - -fi - - - - - if test "$apu_have_sqlite2" = "1"; then - - if test "x$LDADD_dbd_sqlite2" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbd_sqlite2 to \"$sqlite2_LDFLAGS -lsqlite\"" - LDADD_dbd_sqlite2="$sqlite2_LDFLAGS -lsqlite" - else - apr_addto_bugger="$sqlite2_LDFLAGS -lsqlite" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbd_sqlite2; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbd_sqlite2" - LDADD_dbd_sqlite2="$LDADD_dbd_sqlite2 $i" - fi - done - fi - - fi - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - - apu_have_oracle=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-oracle-include was given. -if test "${with_oracle_include+set}" = set; then : - withval=$with_oracle_include; -fi - - -# Check whether --with-oracle was given. -if test "${with_oracle+set}" = set; then : - withval=$with_oracle; - if test "$withval" = "yes"; then - if test -n "$with_oracle_include"; then - oracle_CPPFLAGS="$CPPFLAGS -I$with_oracle_include" - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"-I$with_oracle_include\"" - APRUTIL_PRIV_INCLUDES="-I$with_oracle_include" - else - apr_addto_bugger="-I$with_oracle_include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$oracle_CPPFLAGS\"" - CPPFLAGS="$oracle_CPPFLAGS" - else - apr_addto_bugger="$oracle_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - for ac_header in oci.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "oci.h" "ac_cv_header_oci_h" "$ac_includes_default" -if test "x$ac_cv_header_oci_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OCI_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCIEnvCreate in -lclntsh" >&5 -$as_echo_n "checking for OCIEnvCreate in -lclntsh... " >&6; } -if ${ac_cv_lib_clntsh_OCIEnvCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lclntsh $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char OCIEnvCreate (); -int -main () -{ -return OCIEnvCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_clntsh_OCIEnvCreate=yes -else - ac_cv_lib_clntsh_OCIEnvCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_clntsh_OCIEnvCreate" >&5 -$as_echo "$ac_cv_lib_clntsh_OCIEnvCreate" >&6; } -if test "x$ac_cv_lib_clntsh_OCIEnvCreate" = xyes; then : - apu_have_oracle=1 -else - - unset ac_cv_lib_clntsh_OCIEnvCreate - oracle_LIBS="-lnnz11" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$oracle_LIBS\"" - LIBS="$oracle_LIBS" - else - apr_addto_bugger="$oracle_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCIEnvCreate in -lclntsh" >&5 -$as_echo_n "checking for OCIEnvCreate in -lclntsh... " >&6; } -if ${ac_cv_lib_clntsh_OCIEnvCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lclntsh $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char OCIEnvCreate (); -int -main () -{ -return OCIEnvCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_clntsh_OCIEnvCreate=yes -else - ac_cv_lib_clntsh_OCIEnvCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_clntsh_OCIEnvCreate" >&5 -$as_echo "$ac_cv_lib_clntsh_OCIEnvCreate" >&6; } -if test "x$ac_cv_lib_clntsh_OCIEnvCreate" = xyes; then : - apu_have_oracle=1 -else - - unset ac_cv_lib_clntsh_OCIEnvCreate - - if test "x$LIBS" = "x$oracle_LIBS"; then - test "x$silent" != "xyes" && echo " nulling LIBS" - LIBS="" - else - apr_new_bugger="" - apr_removed=0 - for i in $LIBS; do - if test "x$i" != "x$oracle_LIBS"; then - apr_new_bugger="$apr_new_bugger $i" - else - apr_removed=1 - fi - done - if test $apr_removed = "1"; then - test "x$silent" != "xyes" && echo " removed \"$oracle_LIBS\" from LIBS" - LIBS=$apr_new_bugger - fi - fi - - oracle_LIBS="-lnnz10" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$oracle_LIBS\"" - LIBS="$oracle_LIBS" - else - apr_addto_bugger="$oracle_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCIEnvCreate in -lclntsh" >&5 -$as_echo_n "checking for OCIEnvCreate in -lclntsh... " >&6; } -if ${ac_cv_lib_clntsh_OCIEnvCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lclntsh $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char OCIEnvCreate (); -int -main () -{ -return OCIEnvCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_clntsh_OCIEnvCreate=yes -else - ac_cv_lib_clntsh_OCIEnvCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_clntsh_OCIEnvCreate" >&5 -$as_echo "$ac_cv_lib_clntsh_OCIEnvCreate" >&6; } -if test "x$ac_cv_lib_clntsh_OCIEnvCreate" = xyes; then : - apu_have_oracle=1 -fi - - -fi - - -fi - -fi - -done - - elif test "$withval" = "no"; then - : - else - if test -n "$with_oracle_include"; then - oracle_CPPFLAGS="$CPPFLAGS -I$with_oracle_include" - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"-I$with_oracle_include\"" - APRUTIL_PRIV_INCLUDES="-I$with_oracle_include" - else - apr_addto_bugger="-I$with_oracle_include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - else - oracle_CPPFLAGS="-I$withval/rdbms/demo -I$withval/rdbms/public" - fi - oracle_LDFLAGS="-L$withval/lib " - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$oracle_CPPFLAGS\"" - CPPFLAGS="$oracle_CPPFLAGS" - else - apr_addto_bugger="$oracle_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$oracle_LDFLAGS\"" - LDFLAGS="$oracle_LDFLAGS" - else - apr_addto_bugger="$oracle_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for oracle in $withval" >&5 -$as_echo "$as_me: checking for oracle in $withval" >&6;} - for ac_header in oci.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "oci.h" "ac_cv_header_oci_h" "$ac_includes_default" -if test "x$ac_cv_header_oci_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OCI_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCIEnvCreate in -lclntsh" >&5 -$as_echo_n "checking for OCIEnvCreate in -lclntsh... " >&6; } -if ${ac_cv_lib_clntsh_OCIEnvCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lclntsh $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char OCIEnvCreate (); -int -main () -{ -return OCIEnvCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_clntsh_OCIEnvCreate=yes -else - ac_cv_lib_clntsh_OCIEnvCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_clntsh_OCIEnvCreate" >&5 -$as_echo "$ac_cv_lib_clntsh_OCIEnvCreate" >&6; } -if test "x$ac_cv_lib_clntsh_OCIEnvCreate" = xyes; then : - apu_have_oracle=1 -else - - unset ac_cv_lib_clntsh_OCIEnvCreate - oracle_LIBS="-lnnz11" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$oracle_LIBS\"" - LIBS="$oracle_LIBS" - else - apr_addto_bugger="$oracle_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCIEnvCreate in -lclntsh" >&5 -$as_echo_n "checking for OCIEnvCreate in -lclntsh... " >&6; } -if ${ac_cv_lib_clntsh_OCIEnvCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lclntsh $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char OCIEnvCreate (); -int -main () -{ -return OCIEnvCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_clntsh_OCIEnvCreate=yes -else - ac_cv_lib_clntsh_OCIEnvCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_clntsh_OCIEnvCreate" >&5 -$as_echo "$ac_cv_lib_clntsh_OCIEnvCreate" >&6; } -if test "x$ac_cv_lib_clntsh_OCIEnvCreate" = xyes; then : - apu_have_oracle=1 -else - - unset ac_cv_lib_clntsh_OCIEnvCreate - - if test "x$LIBS" = "x$oracle_LIBS"; then - test "x$silent" != "xyes" && echo " nulling LIBS" - LIBS="" - else - apr_new_bugger="" - apr_removed=0 - for i in $LIBS; do - if test "x$i" != "x$oracle_LIBS"; then - apr_new_bugger="$apr_new_bugger $i" - else - apr_removed=1 - fi - done - if test $apr_removed = "1"; then - test "x$silent" != "xyes" && echo " removed \"$oracle_LIBS\" from LIBS" - LIBS=$apr_new_bugger - fi - fi - - oracle_LIBS="-lnnz10" - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$oracle_LIBS\"" - LIBS="$oracle_LIBS" - else - apr_addto_bugger="$oracle_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OCIEnvCreate in -lclntsh" >&5 -$as_echo_n "checking for OCIEnvCreate in -lclntsh... " >&6; } -if ${ac_cv_lib_clntsh_OCIEnvCreate+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lclntsh $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char OCIEnvCreate (); -int -main () -{ -return OCIEnvCreate (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_clntsh_OCIEnvCreate=yes -else - ac_cv_lib_clntsh_OCIEnvCreate=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_clntsh_OCIEnvCreate" >&5 -$as_echo "$ac_cv_lib_clntsh_OCIEnvCreate" >&6; } -if test "x$ac_cv_lib_clntsh_OCIEnvCreate" = xyes; then : - apu_have_oracle=1 -fi - - -fi - - -fi - -fi - -done - - if test "$apu_have_oracle" != "0"; then - oracle_LDFLAGS="$oracle_LDFLAGS -R$withval/lib" - if test -z "$with_oracle_include"; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"-I$withval/rdbms/demo\"" - APRUTIL_PRIV_INCLUDES="-I$withval/rdbms/demo" - else - apr_addto_bugger="-I$withval/rdbms/demo" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"-I$withval/rdbms/public\"" - APRUTIL_PRIV_INCLUDES="-I$withval/rdbms/public" - else - apr_addto_bugger="-I$withval/rdbms/public" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - fi - fi - -fi - - - - - if test "$apu_have_oracle" = "1"; then - - if test "x$LDADD_dbd_oracle" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbd_oracle to \"$oracle_LDFLAGS -lclntsh $oracle_LIBS\"" - LDADD_dbd_oracle="$oracle_LDFLAGS -lclntsh $oracle_LIBS" - else - apr_addto_bugger="$oracle_LDFLAGS -lclntsh $oracle_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbd_oracle; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbd_oracle" - LDADD_dbd_oracle="$LDADD_dbd_oracle $i" - fi - done - fi - - fi - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - - apu_have_odbc=0 - - old_libs="$LIBS" - old_cppflags="$CPPFLAGS" - old_ldflags="$LDFLAGS" - - -# Check whether --with-odbc was given. -if test "${with_odbc+set}" = set; then : - withval=$with_odbc; - if test "$withval" = "yes"; then - # Extract the first word of "odbc_config", so it can be a program name with args. -set dummy odbc_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ODBC_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ODBC_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ODBC_CONFIG="$ODBC_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ODBC_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ODBC_CONFIG=$ac_cv_path_ODBC_CONFIG -if test -n "$ODBC_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ODBC_CONFIG" >&5 -$as_echo "$ODBC_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$ODBC_CONFIG" != 'x'; then - odbc_CPPFLAGS="-I`$ODBC_CONFIG --include-prefix`" - odbc_LDFLAGS="-L`$ODBC_CONFIG --lib-prefix`" - odbc_LIBS="`$ODBC_CONFIG --libs`" - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$odbc_CPPFLAGS\"" - CPPFLAGS="$odbc_CPPFLAGS" - else - apr_addto_bugger="$odbc_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$odbc_LDFLAGS\"" - LDFLAGS="$odbc_LDFLAGS" - else - apr_addto_bugger="$odbc_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$odbc_LIBS\"" - LIBS="$odbc_LIBS" - else - apr_addto_bugger="$odbc_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - fi - - for ac_header in sql.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sql.h" "ac_cv_header_sql_h" "$ac_includes_default" -if test "x$ac_cv_header_sql_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQL_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5 -$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; } -if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lodbc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SQLAllocHandle (); -int -main () -{ -return SQLAllocHandle (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_odbc_SQLAllocHandle=yes -else - ac_cv_lib_odbc_SQLAllocHandle=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5 -$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; } -if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then : - apu_have_odbc=1 -fi - -fi - -done - - if test "$apu_have_odbc" = "0"; then - for ac_header in odbc/sql.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "odbc/sql.h" "ac_cv_header_odbc_sql_h" "$ac_includes_default" -if test "x$ac_cv_header_odbc_sql_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ODBC_SQL_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5 -$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; } -if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lodbc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SQLAllocHandle (); -int -main () -{ -return SQLAllocHandle (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_odbc_SQLAllocHandle=yes -else - ac_cv_lib_odbc_SQLAllocHandle=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5 -$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; } -if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then : - apu_have_odbc=1 -fi - -fi - -done - - fi - if test "$apu_have_odbc" != "0" && test "x$ODBC_CONFIG" != 'x'; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$odbc_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$odbc_CPPFLAGS" - else - apr_addto_bugger="$odbc_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - elif test "$withval" = "no"; then - : - else - # Extract the first word of "odbc_config", so it can be a program name with args. -set dummy odbc_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ODBC_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ODBC_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ODBC_CONFIG="$ODBC_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $withval/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ODBC_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ODBC_CONFIG=$ac_cv_path_ODBC_CONFIG -if test -n "$ODBC_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ODBC_CONFIG" >&5 -$as_echo "$ODBC_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$ODBC_CONFIG" != 'x'; then - odbc_CPPFLAGS="-I`$ODBC_CONFIG --include-prefix`" - odbc_LDFLAGS="-L`$ODBC_CONFIG --lib-prefix`" - odbc_LIBS="`$ODBC_CONFIG --libs`" - else - if test -f "$withval" && test -x "$withval"; then - odbc_CPPFLAGS="-I`$withval --include-prefix`" - odbc_LDFLAGS="-L`$withval --lib-prefix`" - odbc_LIBS="`$withval --libs`" - else - odbc_CPPFLAGS="-I$withval/include" - odbc_LDFLAGS="-L$withval/lib " - fi - fi - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$odbc_CPPFLAGS\"" - CPPFLAGS="$odbc_CPPFLAGS" - else - apr_addto_bugger="$odbc_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$odbc_LDFLAGS\"" - LDFLAGS="$odbc_LDFLAGS" - else - apr_addto_bugger="$odbc_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$odbc_LIBS\"" - LIBS="$odbc_LIBS" - else - apr_addto_bugger="$odbc_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for odbc in $withval" >&5 -$as_echo "$as_me: checking for odbc in $withval" >&6;} - for ac_header in sql.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sql.h" "ac_cv_header_sql_h" "$ac_includes_default" -if test "x$ac_cv_header_sql_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQL_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5 -$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; } -if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lodbc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SQLAllocHandle (); -int -main () -{ -return SQLAllocHandle (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_odbc_SQLAllocHandle=yes -else - ac_cv_lib_odbc_SQLAllocHandle=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5 -$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; } -if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then : - apu_have_odbc=1 -fi - -fi - -done - - if test "$apu_have_odbc" = "0"; then - for ac_header in odbc/sql.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "odbc/sql.h" "ac_cv_header_odbc_sql_h" "$ac_includes_default" -if test "x$ac_cv_header_odbc_sql_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ODBC_SQL_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5 -$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; } -if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lodbc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SQLAllocHandle (); -int -main () -{ -return SQLAllocHandle (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_odbc_SQLAllocHandle=yes -else - ac_cv_lib_odbc_SQLAllocHandle=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5 -$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; } -if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then : - apu_have_odbc=1 -fi - -fi - -done - - fi - if test "$apu_have_odbc" != "0" && test "x$ODBC_CONFIG" != 'x'; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$odbc_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$odbc_CPPFLAGS" - else - apr_addto_bugger="$odbc_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - fi - -else - - # Extract the first word of "odbc_config", so it can be a program name with args. -set dummy odbc_config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ODBC_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ODBC_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ODBC_CONFIG="$ODBC_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ODBC_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ODBC_CONFIG=$ac_cv_path_ODBC_CONFIG -if test -n "$ODBC_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ODBC_CONFIG" >&5 -$as_echo "$ODBC_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$ODBC_CONFIG" != 'x'; then - odbc_CPPFLAGS="-I`$ODBC_CONFIG --include-prefix`" - odbc_LDFLAGS="-L`$ODBC_CONFIG --lib-prefix`" - odbc_LIBS="`$ODBC_CONFIG --libs`" - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$odbc_CPPFLAGS\"" - CPPFLAGS="$odbc_CPPFLAGS" - else - apr_addto_bugger="$odbc_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$odbc_LDFLAGS\"" - LDFLAGS="$odbc_LDFLAGS" - else - apr_addto_bugger="$odbc_LDFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"$odbc_LIBS\"" - LIBS="$odbc_LIBS" - else - apr_addto_bugger="$odbc_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - fi - - for ac_header in sql.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sql.h" "ac_cv_header_sql_h" "$ac_includes_default" -if test "x$ac_cv_header_sql_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SQL_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5 -$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; } -if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lodbc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SQLAllocHandle (); -int -main () -{ -return SQLAllocHandle (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_odbc_SQLAllocHandle=yes -else - ac_cv_lib_odbc_SQLAllocHandle=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5 -$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; } -if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then : - apu_have_odbc=1 -fi - -fi - -done - - if test "$apu_have_odbc" = "0"; then - for ac_header in odbc/sql.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "odbc/sql.h" "ac_cv_header_odbc_sql_h" "$ac_includes_default" -if test "x$ac_cv_header_odbc_sql_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ODBC_SQL_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocHandle in -lodbc" >&5 -$as_echo_n "checking for SQLAllocHandle in -lodbc... " >&6; } -if ${ac_cv_lib_odbc_SQLAllocHandle+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lodbc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SQLAllocHandle (); -int -main () -{ -return SQLAllocHandle (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_odbc_SQLAllocHandle=yes -else - ac_cv_lib_odbc_SQLAllocHandle=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocHandle" >&5 -$as_echo "$ac_cv_lib_odbc_SQLAllocHandle" >&6; } -if test "x$ac_cv_lib_odbc_SQLAllocHandle" = xyes; then : - apu_have_odbc=1 -fi - -fi - -done - - fi - if test "$apu_have_odbc" != "0" && test "x$ODBC_CONFIG" != 'x'; then - - if test "x$APRUTIL_PRIV_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_PRIV_INCLUDES to \"$odbc_CPPFLAGS\"" - APRUTIL_PRIV_INCLUDES="$odbc_CPPFLAGS" - else - apr_addto_bugger="$odbc_CPPFLAGS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_PRIV_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_PRIV_INCLUDES" - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES $i" - fi - done - fi - - fi - -fi - - - if test "$apu_have_odbc" = "1"; then - - if test "x$LDADD_dbd_odbc" = "x"; then - test "x$silent" != "xyes" && echo " setting LDADD_dbd_odbc to \"$odbc_LDFLAGS -lodbc $odbc_LIBS\"" - LDADD_dbd_odbc="$odbc_LDFLAGS -lodbc $odbc_LIBS" - else - apr_addto_bugger="$odbc_LDFLAGS -lodbc $odbc_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDADD_dbd_odbc; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDADD_dbd_odbc" - LDADD_dbd_odbc="$LDADD_dbd_odbc $i" - fi - done - fi - - fi - - - LIBS="$old_libs" - CPPFLAGS="$old_cppflags" - LDFLAGS="$old_ldflags" - - apu_dbd_tests="" - test $apu_have_oracle = 1 && apu_dbd_tests="$apu_dbd_tests oracle" - test $apu_have_pgsql = 1 && apu_dbd_tests="$apu_dbd_tests pgsql" - test $apu_have_mysql = 1 && apu_dbd_tests="$apu_dbd_tests mysql" - test $apu_have_sqlite2 = 1 && apu_dbd_tests="$apu_dbd_tests sqlite2" - test $apu_have_sqlite3 = 1 && apu_dbd_tests="$apu_dbd_tests sqlite3" - test $apu_have_odbc = 1 && apu_dbd_tests="$apu_dbd_tests odbc" - - - - -save_cppflags="$CPPFLAGS" -save_ldflags="$LDFLAGS" - -apu_has_expat=0 - -apu_try_external_expat=1 - - -# Check whether --with-expat was given. -if test "${with_expat+set}" = set; then : - withval=$with_expat; - if test "$withval" = "yes"; then - as_fn_error $? "a directory must be specified for --with-expat" "$LINENO" 5 - elif test "$withval" = "no"; then - as_fn_error $? "Expat cannot be disabled (at this time)" "$LINENO" 5 - else - # Add given path to standard search paths if appropriate: - if test "$withval" != "/usr"; then - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"-L$withval/lib\"" - LDFLAGS="-L$withval/lib" - else - apr_addto_bugger="-L$withval/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-I$withval/include\"" - CPPFLAGS="-I$withval/include" - else - apr_addto_bugger="-I$withval/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$withval/include\"" - APRUTIL_INCLUDES="-I$withval/include" - else - apr_addto_bugger="-I$withval/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$withval/lib\"" - APRUTIL_LDFLAGS="-L$withval/lib" - else - apr_addto_bugger="-L$withval/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - - fi - fi - -fi - - -if test $apu_try_external_expat = 1; then - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Expat 1.95.x" >&5 -$as_echo_n "checking Expat 1.95.x... " >&6; } -if ${apu_cv_expat_system+:} false; then : - $as_echo_n "(cached) " >&6 -else - - apu_expat_LIBS=$LIBS - LIBS="$LIBS -lexpat" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main () -{ -XML_ParserCreate(NULL); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - apu_cv_expat_system=yes -else - apu_cv_expat_system=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$apu_expat_LIBS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_expat_system" >&5 -$as_echo "$apu_cv_expat_system" >&6; } - -if test $apu_cv_expat_system = yes; then - -$as_echo "#define HAVE_EXPAT_H 1" >>confdefs.h - - apu_expat_libs="-lexpat" - apu_has_expat=1 - -else - apu_has_expat=0 - -fi - - - if test $apu_has_expat = 0; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking old Debian-packaged expat" >&5 -$as_echo_n "checking old Debian-packaged expat... " >&6; } -if ${apu_cv_expat_debian+:} false; then : - $as_echo_n "(cached) " >&6 -else - - apu_expat_LIBS=$LIBS - LIBS="$LIBS -lxmlparse -lxmltok" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main () -{ -XML_ParserCreate(NULL); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - apu_cv_expat_debian=yes -else - apu_cv_expat_debian=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$apu_expat_LIBS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_expat_debian" >&5 -$as_echo "$apu_cv_expat_debian" >&6; } - -if test $apu_cv_expat_debian = yes; then - -$as_echo "#define HAVE_XMLTOK_XMLPARSE_H 1" >>confdefs.h - - apu_expat_libs="-lxmlparse -lxmltok" - apu_has_expat=1 - -else - apu_has_expat=0 - -fi - - fi - - if test $apu_has_expat = 0; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking old FreeBSD-packaged expat" >&5 -$as_echo_n "checking old FreeBSD-packaged expat... " >&6; } -if ${apu_cv_expat_freebsd+:} false; then : - $as_echo_n "(cached) " >&6 -else - - apu_expat_LIBS=$LIBS - LIBS="$LIBS -lexpat" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main () -{ -XML_ParserCreate(NULL); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - apu_cv_expat_freebsd=yes -else - apu_cv_expat_freebsd=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$apu_expat_LIBS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_expat_freebsd" >&5 -$as_echo "$apu_cv_expat_freebsd" >&6; } - -if test $apu_cv_expat_freebsd = yes; then - -$as_echo "#define HAVE_XML_XMLPARSE_H 1" >>confdefs.h - - apu_expat_libs="-lexpat" - apu_has_expat=1 - -else - apu_has_expat=0 - -fi - - fi - - if test $apu_has_expat = 0; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Expat 1.0/1.1" >&5 -$as_echo_n "checking Expat 1.0/1.1... " >&6; } -if ${apu_cv_expat_1011+:} false; then : - $as_echo_n "(cached) " >&6 -else - - apu_expat_LIBS=$LIBS - LIBS="$LIBS -lexpat" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main () -{ -XML_ParserCreate(NULL); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - apu_cv_expat_1011=yes -else - apu_cv_expat_1011=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$apu_expat_LIBS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_expat_1011" >&5 -$as_echo "$apu_cv_expat_1011" >&6; } - -if test $apu_cv_expat_1011 = yes; then - -$as_echo "#define HAVE_XMLPARSE_XMLPARSE_H 1" >>confdefs.h - - apu_expat_libs="-lexpat" - apu_has_expat=1 - -else - apu_has_expat=0 - -fi - - fi - - if test $apu_has_expat = 0; then - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"-L/usr/local/lib\"" - LDFLAGS="-L/usr/local/lib" - else - apr_addto_bugger="-L/usr/local/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-I/usr/local/include\"" - CPPFLAGS="-I/usr/local/include" - else - apr_addto_bugger="-I/usr/local/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Expat 1.95.x in /usr/local" >&5 -$as_echo_n "checking Expat 1.95.x in /usr/local... " >&6; } -if ${apu_cv_expat_usrlocal+:} false; then : - $as_echo_n "(cached) " >&6 -else - - apu_expat_LIBS=$LIBS - LIBS="$LIBS -lexpat" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main () -{ -XML_ParserCreate(NULL); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - apu_cv_expat_usrlocal=yes -else - apu_cv_expat_usrlocal=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS=$apu_expat_LIBS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_expat_usrlocal" >&5 -$as_echo "$apu_cv_expat_usrlocal" >&6; } - -if test $apu_cv_expat_usrlocal = yes; then - -$as_echo "#define HAVE_EXPAT_H 1" >>confdefs.h - - apu_expat_libs="-lexpat" - apu_has_expat=1 - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I/usr/local/include\"" - APRUTIL_INCLUDES="-I/usr/local/include" - else - apr_addto_bugger="-I/usr/local/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L/usr/local/lib\"" - APRUTIL_LDFLAGS="-L/usr/local/lib" - else - apr_addto_bugger="-L/usr/local/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - -else - apu_has_expat=0 - - - if test "x$LDFLAGS" = "x-L/usr/local/lib"; then - test "x$silent" != "xyes" && echo " nulling LDFLAGS" - LDFLAGS="" - else - apr_new_bugger="" - apr_removed=0 - for i in $LDFLAGS; do - if test "x$i" != "x-L/usr/local/lib"; then - apr_new_bugger="$apr_new_bugger $i" - else - apr_removed=1 - fi - done - if test $apr_removed = "1"; then - test "x$silent" != "xyes" && echo " removed \"-L/usr/local/lib\" from LDFLAGS" - LDFLAGS=$apr_new_bugger - fi - fi - - - if test "x$CPPFLAGS" = "x-I/usr/local/include"; then - test "x$silent" != "xyes" && echo " nulling CPPFLAGS" - CPPFLAGS="" - else - apr_new_bugger="" - apr_removed=0 - for i in $CPPFLAGS; do - if test "x$i" != "x-I/usr/local/include"; then - apr_new_bugger="$apr_new_bugger $i" - else - apr_removed=1 - fi - done - if test $apr_removed = "1"; then - test "x$silent" != "xyes" && echo " removed \"-I/usr/local/include\" from CPPFLAGS" - CPPFLAGS=$apr_new_bugger - fi - fi - - -fi - - fi - -fi - - - if test "x$APRUTIL_EXPORT_LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_EXPORT_LIBS to \"$apu_expat_libs\"" - APRUTIL_EXPORT_LIBS="$apu_expat_libs" - else - apr_addto_bugger="$apu_expat_libs" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_EXPORT_LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_EXPORT_LIBS" - APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $i" - fi - done - fi - - - if test "x$APRUTIL_LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LIBS to \"$apu_expat_libs\"" - APRUTIL_LIBS="$apu_expat_libs" - else - apr_addto_bugger="$apu_expat_libs" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LIBS" - APRUTIL_LIBS="$APRUTIL_LIBS $i" - fi - done - fi - - -CPPFLAGS=$save_cppflags -LDFLAGS=$save_ldflags - - - -apu_iconv_dir="unknown" -have_apr_iconv="0" -want_iconv="1" - -# Check whether --with-iconv was given. -if test "${with_iconv+set}" = set; then : - withval=$with_iconv; apu_iconv_dir="$withval" - if test "$apu_iconv_dir" = "no"; then - have_apr_iconv="0" - have_iconv="0" - want_iconv="0" - elif test "$apu_iconv_dir" != "yes"; then - if test -f "$apu_iconv_dir/include/apr-1/api_version.h"; then - have_apr_iconv="1" - have_iconv="0" - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$apu_iconv_dir/include/apr-1\"" - APRUTIL_INCLUDES="-I$apu_iconv_dir/include/apr-1" - else - apr_addto_bugger="-I$apu_iconv_dir/include/apr-1" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LIBS to \"$apu_iconv_dir/lib/libapriconv-1.la\"" - APRUTIL_LIBS="$apu_iconv_dir/lib/libapriconv-1.la" - else - apr_addto_bugger="$apu_iconv_dir/lib/libapriconv-1.la" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LIBS" - APRUTIL_LIBS="$APRUTIL_LIBS $i" - fi - done - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: using apr-iconv" >&5 -$as_echo "using apr-iconv" >&6; } - elif test -f "$apu_iconv_dir/include/iconv.h"; then - have_apr_iconv="0" - have_iconv="1" - - if test "x$CPPFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-I$apu_iconv_dir/include\"" - CPPFLAGS="-I$apu_iconv_dir/include" - else - apr_addto_bugger="-I$apu_iconv_dir/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $CPPFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS" - CPPFLAGS="$CPPFLAGS $i" - fi - done - fi - - - if test "x$LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting LDFLAGS to \"-L$apu_iconv_dir/lib\"" - LDFLAGS="-L$apu_iconv_dir/lib" - else - apr_addto_bugger="-L$apu_iconv_dir/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS" - LDFLAGS="$LDFLAGS $i" - fi - done - fi - - fi - fi - -fi - - -if test "$want_iconv" = "1" -a "$have_apr_iconv" != "1"; then - ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" -if test "x$ac_cv_header_iconv_h" = xyes; then : - - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - - iconv_t cd = iconv_open("", ""); - iconv(cd, NULL, NULL, NULL, NULL); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_iconv="1" -else - - - - if test "x$LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting LIBS to \"-liconv\"" - LIBS="-liconv" - else - apr_addto_bugger="-liconv" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS" - LIBS="$LIBS $i" - fi - done - fi - - - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - - iconv_t cd = iconv_open("", ""); - iconv(cd, NULL, NULL, NULL, NULL); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - - if test "x$APRUTIL_LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LIBS to \"-liconv\"" - APRUTIL_LIBS="-liconv" - else - apr_addto_bugger="-liconv" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LIBS" - APRUTIL_LIBS="$APRUTIL_LIBS $i" - fi - done - fi - - - if test "x$APRUTIL_EXPORT_LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_EXPORT_LIBS to \"-liconv\"" - APRUTIL_EXPORT_LIBS="-liconv" - else - apr_addto_bugger="-liconv" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_EXPORT_LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_EXPORT_LIBS" - APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $i" - fi - done - fi - - have_iconv="1" -else - have_iconv="0" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - - - if test "x$LIBS" = "x-liconv"; then - test "x$silent" != "xyes" && echo " nulling LIBS" - LIBS="" - else - apr_new_bugger="" - apr_removed=0 - for i in $LIBS; do - if test "x$i" != "x-liconv"; then - apr_new_bugger="$apr_new_bugger $i" - else - apr_removed=1 - fi - done - if test $apr_removed = "1"; then - test "x$silent" != "xyes" && echo " removed \"-liconv\" from LIBS" - LIBS=$apr_new_bugger - fi - fi - - - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - -else - have_iconv="0" -fi - - -fi - -if test "$want_iconv" = "1" -a "$apu_iconv_dir" != "unknown"; then - if test "$have_iconv" != "1"; then - if test "$have_apr_iconv" != "1"; then - as_fn_error $? "iconv support requested, but not found" "$LINENO" 5 - fi - fi - - if test "x$CPPFLAGS" = "x-I$apu_iconv_dir/include"; then - test "x$silent" != "xyes" && echo " nulling CPPFLAGS" - CPPFLAGS="" - else - apr_new_bugger="" - apr_removed=0 - for i in $CPPFLAGS; do - if test "x$i" != "x-I$apu_iconv_dir/include"; then - apr_new_bugger="$apr_new_bugger $i" - else - apr_removed=1 - fi - done - if test $apr_removed = "1"; then - test "x$silent" != "xyes" && echo " removed \"-I$apu_iconv_dir/include\" from CPPFLAGS" - CPPFLAGS=$apr_new_bugger - fi - fi - - - if test "x$LDFLAGS" = "x-L$apu_iconv_dir/lib"; then - test "x$silent" != "xyes" && echo " nulling LDFLAGS" - LDFLAGS="" - else - apr_new_bugger="" - apr_removed=0 - for i in $LDFLAGS; do - if test "x$i" != "x-L$apu_iconv_dir/lib"; then - apr_new_bugger="$apr_new_bugger $i" - else - apr_removed=1 - fi - done - if test $apr_removed = "1"; then - test "x$silent" != "xyes" && echo " removed \"-L$apu_iconv_dir/lib\" from LDFLAGS" - LDFLAGS=$apr_new_bugger - fi - fi - - - if test "x$APRUTIL_INCLUDES" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$apu_iconv_dir/include\"" - APRUTIL_INCLUDES="-I$apu_iconv_dir/include" - else - apr_addto_bugger="-I$apu_iconv_dir/include" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_INCLUDES; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES" - APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i" - fi - done - fi - - - if test "x$APRUTIL_LDFLAGS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$apu_iconv_dir/lib\"" - APRUTIL_LDFLAGS="-L$apu_iconv_dir/lib" - else - apr_addto_bugger="-L$apu_iconv_dir/lib" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LDFLAGS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS" - APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i" - fi - done - fi - -fi - -if test "$have_iconv" = "1"; then - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of inbuf parameter to iconv" >&5 -$as_echo_n "checking for type of inbuf parameter to iconv... " >&6; } -if test "x$apu_iconv_inbuf_const" = "x"; then - apr_save_CFLAGS=$CFLAGS - CFLAGS="$CFLAGS $CFLAGS_WARN" - if test "$ac_cv_c_compiler_gnu" = "yes"; then - CFLAGS="$CFLAGS -Werror" - fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "confdefs.h" - - - #include - #include - - int main(int argc, const char *const *argv) { - - iconv(0,(char **)0,(size_t *)0,(char **)0,(size_t *)0); - - return 0; } - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - apu_iconv_inbuf_const="0" -else - apu_iconv_inbuf_const="1" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$apr_save_CFLAGS - -fi -if test "$apu_iconv_inbuf_const" = "1"; then - -$as_echo "#define APU_ICONV_INBUF_CONST 1" >>confdefs.h - - msg="const char **" -else - msg="char **" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $msg" >&5 -$as_echo "$msg" >&6; } - -fi - - -for ac_header in iconv.h langinfo.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -for aprt_i in iconv.h langinfo.h -do - ac_safe=`echo "$aprt_i" | sed 'y%./+-%__p_%'` - aprt_2=`echo "$aprt_i" | sed -e 's%/%_%g' -e 's/\.//g' -e 's/-//g'` - if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - eval "$aprt_2=1" - else - eval "$aprt_2=0" - fi -done - - -for ac_func in nl_langinfo -do : - ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" -if test "x$ac_cv_func_nl_langinfo" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NL_LANGINFO 1 -_ACEOF - -fi -done - -for aprt_j in nl_langinfo -do - aprt_3="have_$aprt_j" - if eval "test \"`echo '$ac_cv_func_'$aprt_j`\" = yes"; then - eval "$aprt_3=1" - else - eval "$aprt_3=0" - fi -done - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CODESET in langinfo.h" >&5 -$as_echo_n "checking for CODESET in langinfo.h... " >&6; } -if ${ac_cv_define_CODESET+:} false; then : - $as_echo_n "(cached) " >&6 -else - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -#ifdef CODESET -YES_IS_DEFINED -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : - ac_cv_define_CODESET=yes -else - ac_cv_define_CODESET=no -fi -rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_define_CODESET" >&5 -$as_echo "$ac_cv_define_CODESET" >&6; } - if test "$ac_cv_define_CODESET" = "yes"; then - -$as_echo "#define HAVE_CODESET 1" >>confdefs.h - - fi - - - - - - - - - # Check whether --enable-util-dso was given. -if test "${enable_util_dso+set}" = set; then : - enableval=$enable_util_dso; -fi - - - if test "$enable_util_dso" = "no"; then - apu_dso_build="0" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether APR has DSO support" >&5 -$as_echo_n "checking whether APR has DSO support... " >&6; } -if ${apu_cv_aprdso+:} false; then : - $as_echo_n "(cached) " >&6 -else - apu_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS $APR_INCLUDES" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "apr.h" -#if APR_HAS_DSO -yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - apu_cv_aprdso=yes -else - apu_cv_aprdso=no -fi -rm -f conftest* - - CPPFLAGS=$apu_save_CPPFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_aprdso" >&5 -$as_echo "$apu_cv_aprdso" >&6; } - - if test $apu_cv_aprdso = yes; then - apu_dso_build=1 - else - apu_dso_build=0 - fi - fi - - if test "$apu_dso_build" = "0"; then - - # Statically link the drivers: - objs= - test $apu_have_openssl = 1 && objs="$objs crypto/apr_crypto_openssl.lo" - test $apu_have_nss = 1 && objs="$objs crypto/apr_crypto_nss.lo" - test $apu_have_commoncrypto = 1 && objs="$objs crypto/apr_crypto_commoncrypto.lo" - test $apu_have_oracle = 1 && objs="$objs dbd/apr_dbd_oracle.lo" - test $apu_have_pgsql = 1 && objs="$objs dbd/apr_dbd_pgsql.lo" - test $apu_have_mysql = 1 && objs="$objs dbd/apr_dbd_mysql.lo" - test $apu_have_sqlite2 = 1 && objs="$objs dbd/apr_dbd_sqlite2.lo" - test $apu_have_sqlite3 = 1 && objs="$objs dbd/apr_dbd_sqlite3.lo" - test $apu_have_odbc = 1 && objs="$objs dbd/apr_dbd_odbc.lo" - test $apu_have_db = 1 && objs="$objs dbm/apr_dbm_berkeleydb.lo" - test $apu_have_gdbm = 1 && objs="$objs dbm/apr_dbm_gdbm.lo" - test $apu_have_ndbm = 1 && objs="$objs dbm/apr_dbm_ndbm.lo" - test $apu_has_ldap = 1 && objs="$objs ldap/apr_ldap_init.lo" - test $apu_has_ldap = 1 && objs="$objs ldap/apr_ldap_option.lo" - test $apu_has_ldap = 1 && objs="$objs ldap/apr_ldap_rebind.lo" - EXTRA_OBJECTS="$EXTRA_OBJECTS $objs" - - # Use libtool *.la for mysql if available - if test $apu_have_mysql = 1; then - for flag in $LDADD_dbd_mysql - do - dir=`echo $flag | grep "^-L" | sed s:-L::` - if test "x$dir" != 'x'; then - if test -f "$dir/libmysqlclient_r.la"; then - LDADD_dbd_mysql=$dir/libmysqlclient_r.la - break - fi - fi - done - fi - - APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_crypto_openssl $LDADD_crypto_nss $LDADD_crypto_commoncrypto" - APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_dbd_pgsql $LDADD_dbd_sqlite2 $LDADD_dbd_sqlite3 $LDADD_dbd_oracle $LDADD_dbd_mysql $LDADD_dbd_odbc" - APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_dbm_db $LDADD_dbm_gdbm $LDADD_dbm_ndbm" - APRUTIL_LIBS="$APRUTIL_LIBS $LDADD_ldap" - APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_crypto_openssl $LDADD_crypto_nss $LDADD_crypto_commoncrypto" - APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_dbd_pgsql $LDADD_dbd_sqlite2 $LDADD_dbd_sqlite3 $LDADD_dbd_oracle $LDADD_dbd_mysql $LDADD_dbd_odbc" - APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_dbm_db $LDADD_dbm_gdbm $LDADD_dbm_ndbm" - APRUTIL_EXPORT_LIBS="$APRUTIL_EXPORT_LIBS $LDADD_ldap" - - else - - # Build the drivers as loadable modules: - dsos= - test $apu_have_openssl = 1 && dsos="$dsos crypto/apr_crypto_openssl.la" - test $apu_have_nss = 1 && dsos="$dsos crypto/apr_crypto_nss.la" - test $apu_have_commoncrypto = 1 && dsos="$dsos crypto/apr_crypto_commoncrypto.la" - test $apu_have_oracle = 1 && dsos="$dsos dbd/apr_dbd_oracle.la" - test $apu_have_pgsql = 1 && dsos="$dsos dbd/apr_dbd_pgsql.la" - test $apu_have_mysql = 1 && dsos="$dsos dbd/apr_dbd_mysql.la" - test $apu_have_sqlite2 = 1 && dsos="$dsos dbd/apr_dbd_sqlite2.la" - test $apu_have_sqlite3 = 1 && dsos="$dsos dbd/apr_dbd_sqlite3.la" - test $apu_have_odbc = 1 && dsos="$dsos dbd/apr_dbd_odbc.la" - test $apu_have_db = 1 && dsos="$dsos dbm/apr_dbm_db.la" - test $apu_have_gdbm = 1 && dsos="$dsos dbm/apr_dbm_gdbm.la" - test $apu_have_ndbm = 1 && dsos="$dsos dbm/apr_dbm_ndbm.la" - test $apu_has_ldap = 1 && dsos="$dsos ldap/apr_ldap.la" - - if test -n "$dsos"; then - APU_MODULES="$APU_MODULES $dsos" - fi - - fi - - -cat >>confdefs.h <<_ACEOF -#define APU_DSO_BUILD $apu_dso_build -_ACEOF - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 -$as_echo_n "checking for library containing crypt... " >&6; } -if ${ac_cv_search_crypt+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char crypt (); -int -main () -{ -return crypt (); - ; - return 0; -} -_ACEOF -for ac_lib in '' crypt ufc; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_crypt=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_crypt+:} false; then : - break -fi -done -if ${ac_cv_search_crypt+:} false; then : - -else - ac_cv_search_crypt=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 -$as_echo "$ac_cv_search_crypt" >&6; } -ac_res=$ac_cv_search_crypt -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if system crypt() function is threadsafe" >&5 -$as_echo_n "checking if system crypt() function is threadsafe... " >&6; } -if test "x$apu_crypt_threadsafe" = "x1"; then - -$as_echo "#define APU_CRYPT_THREADSAFE 1" >>confdefs.h - - msg="yes" -else - msg="no" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $msg" >&5 -$as_echo "$msg" >&6; } - -for ac_func in crypt_r -do : - ac_fn_c_check_func "$LINENO" "crypt_r" "ac_cv_func_crypt_r" -if test "x$ac_cv_func_crypt_r" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CRYPT_R 1 -_ACEOF - crypt_r="1" -else - crypt_r="0" -fi -done - -if test "$crypt_r" = "1"; then - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking style of crypt_r" >&5 -$as_echo_n "checking style of crypt_r... " >&6; } -if ${apr_cv_crypt_r_style+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -CRYPTD buffer; - crypt_r("passwd", "hash", &buffer); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - apr_cv_crypt_r_style=cryptd -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -struct crypt_data buffer; - crypt_r("passwd", "hash", &buffer); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - apr_cv_crypt_r_style=struct_crypt_data -else - apr_cv_crypt_r_style=none -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apr_cv_crypt_r_style" >&5 -$as_echo "$apr_cv_crypt_r_style" >&6; } - -if test "$apr_cv_crypt_r_style" = "cryptd"; then - -$as_echo "#define CRYPT_R_CRYPTD 1" >>confdefs.h - -elif test "$apr_cv_crypt_r_style" = "struct_crypt_data"; then - -$as_echo "#define CRYPT_R_STRUCT_CRYPT_DATA 1" >>confdefs.h - -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler handles weak symbols" >&5 -$as_echo_n "checking whether the compiler handles weak symbols... " >&6; } -if ${apu_cv_weak_symbols+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - apu_cv_weak_symbols=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -__attribute__ ((weak)) -int weak_noop(void) -{ - return 0; -} -int main() -{ - return weak_noop(); -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_cv_weak_symbols=yes -else - apu_cv_weak_symbols=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_weak_symbols" >&5 -$as_echo "$apu_cv_weak_symbols" >&6; } - -if test "$apu_cv_weak_symbols" = "yes"; then - -$as_echo "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for memset_s support" >&5 -$as_echo_n "checking for memset_s support... " >&6; } -if ${apu_cv_memset_s+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - apu_cv_memset_s=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef HAVE_STRING_H -#define __STDC_WANT_LIB_EXT1__ 1 -#include -#endif - -int main(int argc, const char **argv) -{ - char buf[1] = {1}; - return memset_s(buf, sizeof buf, 0, sizeof buf) != 0 || *buf != '\0'; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_cv_memset_s=yes -else - apu_cv_memset_s=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_memset_s" >&5 -$as_echo "$apu_cv_memset_s" >&6; } - -if test "$apu_cv_memset_s" = "yes"; then - -$as_echo "#define HAVE_MEMSET_S 1" >>confdefs.h - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit_bzero support" >&5 -$as_echo_n "checking for explicit_bzero support... " >&6; } -if ${apu_cv_explicit_bzero+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - apu_cv_explicit_bzero=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_STRINGS_H -#include -#endif - -int main(int argc, const char **argv) -{ - char buf[1] = {1}; - explicit_bzero(buf, sizeof buf); - return *buf != '\0'; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - apu_cv_explicit_bzero=yes -else - apu_cv_explicit_bzero=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_cv_explicit_bzero" >&5 -$as_echo "$apu_cv_explicit_bzero" >&6; } - -if test "$apu_cv_explicit_bzero" = "yes"; then - -$as_echo "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h - -fi - -so_ext=$APR_SO_EXT -lib_target=$APR_LIB_TARGET - - - -APRUTIL_LIBNAME="aprutil${libsuffix}" - - -# Set up destination directory for DSOs. -APU_DSO_LIBDIR="\${libdir}/apr-util-${APRUTIL_MAJOR_VERSION}" -# Set APU_HAVE_MODULES appropriately for the Makefile -if test -n "$APU_MODULES"; then - APU_HAVE_MODULES=yes -else - APU_HAVE_MODULES=no -fi -# Define expanded libdir for apu_config.h - -ap_last= -ap_cur="$APU_DSO_LIBDIR" -while test "x${ap_cur}" != "x${ap_last}"; -do - ap_last="${ap_cur}" - ap_cur=`eval "echo ${ap_cur}"` -done -abs_dso_libdir="${ap_cur}" - - -cat >>confdefs.h <<_ACEOF -#define APU_DSO_LIBDIR "$abs_dso_libdir" -_ACEOF - - - - - - - - if test "x$APRUTIL_LIBS" = "x"; then - test "x$silent" != "xyes" && echo " setting APRUTIL_LIBS to \"$APR_LIBS\"" - APRUTIL_LIBS="$APR_LIBS" - else - apr_addto_bugger="$APR_LIBS" - for i in $apr_addto_bugger; do - apr_addto_duplicate="0" - for j in $APRUTIL_LIBS; do - if test "x$i" = "x$j"; then - apr_addto_duplicate="1" - break - fi - done - if test $apr_addto_duplicate = "0"; then - test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LIBS" - APRUTIL_LIBS="$APRUTIL_LIBS $i" - fi - done - fi - - - - - - - - - -if test ! -d ./build; then - $mkdir_p build -fi -case $host in - *-mingw*) - sed -e 's/-DAPR_DECLARE_EXPORT/-DAPU_DECLARE_EXPORT/' \ - -e 's/-DAPR_DECLARE_STATIC/-DAPU_DECLARE_STATIC -DAPR_DECLARE_STATIC/' \ - < $APR_BUILD_DIR/apr_rules.mk > $abs_builddir/build/rules.mk - ;; - *) - cp $APR_BUILD_DIR/apr_rules.mk $abs_builddir/build/rules.mk - ;; -esac - -case "$host_alias" in -*bsdi* | BSD/OS) - # Check whether they've installed GNU make - if make --version > /dev/null 2>&1; then - INCLUDE_RULES="include $abs_builddir/build/rules.mk" - INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk" - else - INCLUDE_RULES=".include \"$abs_builddir/build/rules.mk\"" - INCLUDE_OUTPUTS=".include \"$abs_srcdir/build-outputs.mk\"" - fi - ;; -*) - INCLUDE_RULES="include $abs_builddir/build/rules.mk" - INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk" - ;; -esac - - - -for d in include include/private; do - test -d $top_builddir/$d || mkdir $top_builddir/$d -done - -ac_config_files="$ac_config_files Makefile export_vars.sh build/pkg/pkginfo apr-util.pc apu-$APRUTIL_MAJOR_VERSION-config:apu-config.in include/private/apu_select_dbm.h include/apr_ldap.h include/apu.h include/apu_want.h" - - -ac_config_commands="$ac_config_commands default" - - -if test -d $srcdir/test; then - ac_config_files="$ac_config_files test/Makefile" - -fi - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# - -APRUTIL_MAJOR_VERSION=$APRUTIL_MAJOR_VERSION - - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "include/private/apu_config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/private/apu_config.h" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "export_vars.sh") CONFIG_FILES="$CONFIG_FILES export_vars.sh" ;; - "build/pkg/pkginfo") CONFIG_FILES="$CONFIG_FILES build/pkg/pkginfo" ;; - "apr-util.pc") CONFIG_FILES="$CONFIG_FILES apr-util.pc" ;; - "apu-$APRUTIL_MAJOR_VERSION-config") CONFIG_FILES="$CONFIG_FILES apu-$APRUTIL_MAJOR_VERSION-config:apu-config.in" ;; - "include/private/apu_select_dbm.h") CONFIG_FILES="$CONFIG_FILES include/private/apu_select_dbm.h" ;; - "include/apr_ldap.h") CONFIG_FILES="$CONFIG_FILES include/apr_ldap.h" ;; - "include/apu.h") CONFIG_FILES="$CONFIG_FILES include/apu.h" ;; - "include/apu_want.h") CONFIG_FILES="$CONFIG_FILES include/apu_want.h" ;; - "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; - "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "default":C) -chmod +x apu-$APRUTIL_MAJOR_VERSION-config - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - Index: contrib/apr-util/configure.in =================================================================== --- contrib/apr-util/configure.in +++ /dev/null @@ -1,344 +0,0 @@ -dnl -dnl Process this file with autoconf to produce a configure script -dnl - -AC_PREREQ(2.59) -AC_INIT(export_vars.sh.in) - -AC_CONFIG_HEADER(include/private/apu_config.h) -AC_CONFIG_AUX_DIR(build) - -sinclude(build/apu-conf.m4) -sinclude(build/apu-iconv.m4) -sinclude(build/apu-hints.m4) -sinclude(build/apr_common.m4) -sinclude(build/find_apr.m4) -sinclude(build/crypto.m4) -sinclude(build/dbm.m4) -sinclude(build/dbd.m4) -sinclude(build/dso.m4) - -dnl Generate ./config.nice for reproducing runs of configure -dnl -APR_CONFIG_NICE(config.nice) - -dnl # Some initial steps for configuration. We setup the default directory -dnl # and which files are to be configured. - -dnl Absolute source/build directory -abs_srcdir=`(cd $srcdir && pwd)` -abs_builddir=`pwd` - -if test "$abs_builddir" != "$abs_srcdir"; then - USE_VPATH=1 - APU_CONFIG_LOCATION=build -else - APU_CONFIG_LOCATION=source -fi - -AC_SUBST(APU_CONFIG_LOCATION) - -AC_CANONICAL_SYSTEM - -AC_PROG_INSTALL - -# Use -no-install or -no-fast-install to link the test -# programs on all platforms but Darwin, where it would cause -# the programs to be linked against installed versions of -# libapr instead of those just built. -case $host in - *-apple-darwin*) - LT_NO_INSTALL="" - ;; - *-mingw*) - LT_NO_INSTALL="-no-fast-install" - ;; - *) - LT_NO_INSTALL="-no-install" - ;; -esac -AC_SUBST(LT_NO_INSTALL) - -dnl -dnl compute the top directory of the build -dnl note: this is needed for LIBTOOL and exporting the bundled Expat -dnl -top_builddir="$abs_builddir" -AC_SUBST(top_builddir) -AC_SUBST(abs_srcdir) -AC_SUBST(abs_builddir) - -dnl Initialize mkdir -p functionality. -APR_MKDIR_P_CHECK($abs_srcdir/build/mkdir.sh) - -dnl get our version information -get_version="$abs_srcdir/build/get-version.sh" -version_hdr="$abs_srcdir/include/apu_version.h" -APRUTIL_MAJOR_VERSION="`$get_version major $version_hdr APU`" -APRUTIL_DOTTED_VERSION="`$get_version all $version_hdr APU`" - -APU_LTVERSION="-version-info `$get_version libtool $version_hdr APU`" - -AC_SUBST(APRUTIL_DOTTED_VERSION) -AC_SUBST(APRUTIL_MAJOR_VERSION) -AC_SUBST(APU_LTVERSION) - -echo "APR-util Version: ${APRUTIL_DOTTED_VERSION}" - -dnl Enable the layout handling code, then reparse the prefix-style -dnl arguments due to autoconf being a PITA. -APR_ENABLE_LAYOUT(apr-util) -APR_PARSE_ARGUMENTS - -dnl load os-specific hints for apr-util -APU_PRELOAD - -dnl -dnl set up the compilation flags and stuff -dnl - -APRUTIL_INCLUDES="" -APRUTIL_PRIV_INCLUDES="-I$top_builddir/include -I$top_builddir/include/private" -if test -n "$USE_VPATH"; then - APRUTIL_PRIV_INCLUDES="$APRUTIL_PRIV_INCLUDES -I$abs_srcdir/include/private -I$abs_srcdir/include" -fi - -dnl -dnl Find the APR includes directory and (possibly) the source (base) dir. -dnl -APU_FIND_APR - -dnl -dnl even though we use apr_rules.mk for building apr-util, we need -dnl to grab CC and CPP ahead of time so that apr-util config tests -dnl use the same compiler as APR; we need the same compiler options -dnl and feature test macros as well -dnl -APR_SETIFNULL(CC, `$apr_config --cc`) -APR_SETIFNULL(CPP, `$apr_config --cpp`) -APR_ADDTO(CFLAGS, `$apr_config --cflags`) -APR_ADDTO(CPPFLAGS, `$apr_config --cppflags`) -apr_shlibpath_var=`$apr_config --shlib-path-var` -AC_SUBST(apr_shlibpath_var) - -dnl -dnl Find the APR-ICONV directory. -dnl -AC_ARG_WITH(apr-iconv, - [ --with-apr-iconv=DIR relative path to apr-iconv source], - [ apu_apriconv_dir="$withval" - if test "$apu_apriconv_dir" != "no"; then - if test -d "$apu_apriconv_dir"; then - APR_SUBDIR_CONFIG("$apu_apriconv_dir", - [$apache_apr_flags \ - --prefix=$prefix \ - --exec-prefix=$exec_prefix \ - --libdir=$libdir \ - --includedir=$includedir \ - --bindir=$bindir \ - --datadir=$datadir \ - --with-installbuilddir=$installbuilddir], - [--enable-layout=*|\'--enable-layout=*]) - APRUTIL_EXPORT_LIBS="$abs_srcdir/$apu_apriconv_dir/lib/libapriconv.la \ - $APRUTIL_EXPORT_LIBS" - APRUTIL_INCLUDES="-I$abs_srcdir/$apu_apriconv_dir/include \ - $APRUTIL_INCLUDES" - APR_ICONV_DIR="$apu_apriconv_dir" - else - APR_ICONV_DIR="" - fi - else - APR_ICONV_DIR="" - fi - ]) -AC_SUBST(APR_ICONV_DIR) - -dnl Find LDAP library -dnl Determine what DBM backend type to use. -dnl Find Expat -dnl Find an iconv library -APU_CHECK_CRYPTO -APU_FIND_LDAP -APU_CHECK_DBM -APU_CHECK_DBD -APU_CHECK_DBD_MYSQL -APU_CHECK_DBD_SQLITE3 -APU_CHECK_DBD_SQLITE2 -APU_CHECK_DBD_ORACLE -APU_CHECK_DBD_ODBC -APU_FIND_EXPAT -APU_FIND_ICONV - -dnl Enable DSO build; must be last: -APU_CHECK_UTIL_DSO - -AC_SEARCH_LIBS(crypt, crypt ufc) -AC_MSG_CHECKING(if system crypt() function is threadsafe) -if test "x$apu_crypt_threadsafe" = "x1"; then - AC_DEFINE(APU_CRYPT_THREADSAFE, 1, [Define if the system crypt() function is threadsafe]) - msg="yes" -else - msg="no" -fi -AC_MSG_RESULT([$msg]) - -AC_CHECK_FUNCS(crypt_r, [ crypt_r="1" ], [ crypt_r="0" ]) -if test "$crypt_r" = "1"; then - APU_CHECK_CRYPT_R_STYLE -fi - -AC_CACHE_CHECK([whether the compiler handles weak symbols], [apu_cv_weak_symbols], -[AC_TRY_RUN([ -__attribute__ ((weak)) -int weak_noop(void) -{ - return 0; -} -int main() -{ - return weak_noop(); -}], [apu_cv_weak_symbols=yes], [apu_cv_weak_symbols=no], [apu_cv_weak_symbols=no])]) - -if test "$apu_cv_weak_symbols" = "yes"; then - AC_DEFINE(HAVE_WEAK_SYMBOLS, 1, [Define if compiler handles weak symbols]) -fi - -AC_CACHE_CHECK([for memset_s support], [apu_cv_memset_s], -[AC_TRY_RUN([ -#ifdef HAVE_STRING_H -#define __STDC_WANT_LIB_EXT1__ 1 -#include -#endif - -int main(int argc, const char **argv) -{ - char buf[1] = {1}; - return memset_s(buf, sizeof buf, 0, sizeof buf) != 0 || *buf != '\0'; -}], [apu_cv_memset_s=yes], [apu_cv_memset_s=no], [apu_cv_memset_s=no])]) - -if test "$apu_cv_memset_s" = "yes"; then - AC_DEFINE([HAVE_MEMSET_S], 1, [Define if memset_s function is supported]) -fi - -AC_CACHE_CHECK([for explicit_bzero support], [apu_cv_explicit_bzero], -[AC_TRY_RUN([ -#ifdef HAVE_STRING_H -#include -#endif -#ifdef HAVE_STRINGS_H -#include -#endif - -int main(int argc, const char **argv) -{ - char buf[1] = {1}; - explicit_bzero(buf, sizeof buf); - return *buf != '\0'; -}], [apu_cv_explicit_bzero=yes], [apu_cv_explicit_bzero=no], [apu_cv_explicit_bzero=no])]) - -if test "$apu_cv_explicit_bzero" = "yes"; then - AC_DEFINE([HAVE_EXPLICIT_BZERO], 1, [Define if explicit_bzero function is supported]) -fi - -so_ext=$APR_SO_EXT -lib_target=$APR_LIB_TARGET -AC_SUBST(so_ext) -AC_SUBST(lib_target) - -APRUTIL_LIBNAME="aprutil${libsuffix}" -AC_SUBST(APRUTIL_LIBNAME) - -# Set up destination directory for DSOs. -APU_DSO_LIBDIR="\${libdir}/apr-util-${APRUTIL_MAJOR_VERSION}" -# Set APU_HAVE_MODULES appropriately for the Makefile -if test -n "$APU_MODULES"; then - APU_HAVE_MODULES=yes -else - APU_HAVE_MODULES=no -fi -# Define expanded libdir for apu_config.h -APR_EXPAND_VAR(abs_dso_libdir, $APU_DSO_LIBDIR) -AC_DEFINE_UNQUOTED([APU_DSO_LIBDIR], ["$abs_dso_libdir"], - [Define to be absolute path to DSO directory]) -AC_SUBST(APU_HAVE_MODULES) -AC_SUBST(APU_DSO_LIBDIR) -AC_SUBST(APU_MODULES) -AC_SUBST(EXTRA_OBJECTS) - -dnl -dnl Prep all the flags and stuff for compilation and export to other builds -dnl -APR_ADDTO(APRUTIL_LIBS, [$APR_LIBS]) - -AC_SUBST(APRUTIL_EXPORT_LIBS) -AC_SUBST(APRUTIL_PRIV_INCLUDES) -AC_SUBST(APRUTIL_INCLUDES) -AC_SUBST(APRUTIL_LDFLAGS) -AC_SUBST(APRUTIL_LIBS) -AC_SUBST(LDFLAGS) - -dnl copy apr's rules.mk into our build directory. -if test ! -d ./build; then - $mkdir_p build -fi -dnl -dnl MinGW: If APR is shared, APR_DECLARE_EXPORT will be defined in the -dnl internal CPPFLAGS, but APR-Util needs APU_DECLARE_EXPORT instead. -dnl If APR is static, APR_DECLARE_STATIC will be defined in the -dnl internal CPPFLAGS, but APR-Util needs APU_DECLARE_STATIC too. -dnl -case $host in - *-mingw*) - sed -e 's/-DAPR_DECLARE_EXPORT/-DAPU_DECLARE_EXPORT/' \ - -e 's/-DAPR_DECLARE_STATIC/-DAPU_DECLARE_STATIC -DAPR_DECLARE_STATIC/' \ - < $APR_BUILD_DIR/apr_rules.mk > $abs_builddir/build/rules.mk - ;; - *) - cp $APR_BUILD_DIR/apr_rules.mk $abs_builddir/build/rules.mk - ;; -esac - -dnl -dnl BSD/OS (BSDi) needs to use a different include syntax in the Makefiles -dnl -case "$host_alias" in -*bsdi* | BSD/OS) - # Check whether they've installed GNU make - if make --version > /dev/null 2>&1; then - INCLUDE_RULES="include $abs_builddir/build/rules.mk" - INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk" - else - INCLUDE_RULES=".include \"$abs_builddir/build/rules.mk\"" - INCLUDE_OUTPUTS=".include \"$abs_srcdir/build-outputs.mk\"" - fi - ;; -*) - INCLUDE_RULES="include $abs_builddir/build/rules.mk" - INCLUDE_OUTPUTS="include $abs_srcdir/build-outputs.mk" - ;; -esac -AC_SUBST(INCLUDE_RULES) -AC_SUBST(INCLUDE_OUTPUTS) - -for d in include include/private; do - test -d $top_builddir/$d || mkdir $top_builddir/$d -done - -AC_CONFIG_FILES([Makefile export_vars.sh - build/pkg/pkginfo apr-util.pc - apu-$APRUTIL_MAJOR_VERSION-config:apu-config.in - include/private/apu_select_dbm.h - include/apr_ldap.h - include/apu.h include/apu_want.h]) - -AC_CONFIG_COMMANDS([default], [ -chmod +x apu-$APRUTIL_MAJOR_VERSION-config -],[ -APRUTIL_MAJOR_VERSION=$APRUTIL_MAJOR_VERSION -]) - -if test -d $srcdir/test; then - AC_CONFIG_FILES([test/Makefile]) -fi - -AC_OUTPUT Index: contrib/apr-util/crypto/apr_crypto.c =================================================================== --- contrib/apr-util/crypto/apr_crypto.c +++ /dev/null @@ -1,608 +0,0 @@ -/* 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 -#include - -#include "apu_config.h" -#include "apu.h" -#include "apr_pools.h" -#include "apr_dso.h" -#include "apr_strings.h" -#include "apr_hash.h" -#include "apr_thread_mutex.h" -#include "apr_lib.h" - -#if APU_HAVE_CRYPTO - -#include "apu_internal.h" -#include "apr_crypto_internal.h" -#include "apr_crypto.h" -#include "apu_version.h" - -static apr_hash_t *drivers = NULL; - -#define ERROR_SIZE 1024 - -#define CLEANUP_CAST (apr_status_t (*)(void*)) - -#define APR_TYPEDEF_STRUCT(type, incompletion) \ -struct type { \ - incompletion \ - void *unk[]; \ -}; - -APR_TYPEDEF_STRUCT(apr_crypto_t, - apr_pool_t *pool; - apr_crypto_driver_t *provider; -) - -APR_TYPEDEF_STRUCT(apr_crypto_key_t, - apr_pool_t *pool; - apr_crypto_driver_t *provider; - const apr_crypto_t *f; -) - -APR_TYPEDEF_STRUCT(apr_crypto_block_t, - apr_pool_t *pool; - apr_crypto_driver_t *provider; - const apr_crypto_t *f; -) - -typedef struct apr_crypto_clear_t { - void *buffer; - apr_size_t size; -} apr_crypto_clear_t; - -#if !APU_DSO_BUILD -#define DRIVER_LOAD(name,driver_name,pool,params,rv,result) \ - { \ - extern const apr_crypto_driver_t driver_name; \ - apr_hash_set(drivers,name,APR_HASH_KEY_STRING,&driver_name); \ - if (driver_name.init) { \ - rv = driver_name.init(pool, params, result); \ - } \ - *driver = &driver_name; \ - } -#endif - -static apr_status_t apr_crypto_term(void *ptr) -{ - /* set drivers to NULL so init can work again */ - drivers = NULL; - - /* Everything else we need is handled by cleanups registered - * when we created mutexes and loaded DSOs - */ - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_crypto_init(apr_pool_t *pool) -{ - apr_status_t ret = APR_SUCCESS; - apr_pool_t *parent; - - if (drivers != NULL) { - return APR_SUCCESS; - } - - /* Top level pool scope, need process-scope lifetime */ - for (parent = apr_pool_parent_get(pool); - parent && parent != pool; - parent = apr_pool_parent_get(pool)) - pool = parent; -#if APU_DSO_BUILD - /* deprecate in 2.0 - permit implicit initialization */ - apu_dso_init(pool); -#endif - drivers = apr_hash_make(pool); - - apr_pool_cleanup_register(pool, NULL, apr_crypto_term, - apr_pool_cleanup_null); - - return ret; -} - -static apr_status_t crypto_clear(void *ptr) -{ - apr_crypto_clear_t *clear = (apr_crypto_clear_t *)ptr; - - apr_crypto_memzero(clear->buffer, clear->size); - clear->buffer = NULL; - clear->size = 0; - - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_crypto_clear(apr_pool_t *pool, - void *buffer, apr_size_t size) -{ - apr_crypto_clear_t *clear = apr_palloc(pool, sizeof(apr_crypto_clear_t)); - - clear->buffer = buffer; - clear->size = size; - - apr_pool_cleanup_register(pool, clear, crypto_clear, - apr_pool_cleanup_null); - - return APR_SUCCESS; -} - -#if defined(HAVE_WEAK_SYMBOLS) -void apr__memzero_explicit(void *buffer, apr_size_t size); - -__attribute__ ((weak)) -void apr__memzero_explicit(void *buffer, apr_size_t size) -{ - memset(buffer, 0, size); -} -#endif - -APU_DECLARE(apr_status_t) apr_crypto_memzero(void *buffer, apr_size_t size) -{ -#if defined(WIN32) - SecureZeroMemory(buffer, size); -#elif defined(HAVE_MEMSET_S) - if (size) { - return memset_s(buffer, (rsize_t)size, 0, (rsize_t)size); - } -#elif defined(HAVE_EXPLICIT_BZERO) - explicit_bzero(buffer, size); -#elif defined(HAVE_WEAK_SYMBOLS) - apr__memzero_explicit(buffer, size); -#else - apr_size_t i; - volatile unsigned char *volatile ptr = buffer; - for (i = 0; i < size; ++i) { - ptr[i] = 0; - } -#endif - return APR_SUCCESS; -} - -APU_DECLARE(int) apr_crypto_equals(const void *buf1, const void *buf2, - apr_size_t size) -{ - const unsigned char *p1 = buf1; - const unsigned char *p2 = buf2; - unsigned char diff = 0; - apr_size_t i; - - for (i = 0; i < size; ++i) { - diff |= p1[i] ^ p2[i]; - } - - return 1 & ((diff - 1) >> 8); -} - -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) -{ -#if APU_DSO_BUILD - char modname[32]; - char symname[34]; - apr_dso_handle_t *dso; - apr_dso_handle_sym_t symbol; -#endif - apr_status_t rv; - - if (result) { - *result = NULL; /* until further notice */ - } - -#if APU_DSO_BUILD - rv = apu_dso_mutex_lock(); - if (rv) { - return rv; - } -#endif - *driver = apr_hash_get(drivers, name, APR_HASH_KEY_STRING); - if (*driver) { -#if APU_DSO_BUILD - apu_dso_mutex_unlock(); -#endif - return APR_SUCCESS; - } - -#if APU_DSO_BUILD - /* The driver DSO must have exactly the same lifetime as the - * drivers hash table; ignore the passed-in pool */ - pool = apr_hash_pool_get(drivers); - -#if defined(NETWARE) - apr_snprintf(modname, sizeof(modname), "crypto%s.nlm", name); -#elif defined(WIN32) || defined(__CYGWIN__) - apr_snprintf(modname, sizeof(modname), - "apr_crypto_%s-" APU_STRINGIFY(APU_MAJOR_VERSION) ".dll", name); -#else - apr_snprintf(modname, sizeof(modname), - "apr_crypto_%s-" APU_STRINGIFY(APU_MAJOR_VERSION) ".so", name); -#endif - apr_snprintf(symname, sizeof(symname), "apr_crypto_%s_driver", name); - rv = apu_dso_load(&dso, &symbol, modname, symname, pool); - if (rv == APR_SUCCESS || rv == APR_EINIT) { /* previously loaded?!? */ - apr_crypto_driver_t *d = symbol; - rv = APR_SUCCESS; - if (d->init) { - rv = d->init(pool, params, result); - } - if (APR_SUCCESS == rv) { - *driver = symbol; - name = apr_pstrdup(pool, name); - apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver); - } - } - apu_dso_mutex_unlock(); - - if (APR_SUCCESS != rv && result && !*result) { - char *buffer = apr_pcalloc(pool, ERROR_SIZE); - apu_err_t *err = apr_pcalloc(pool, sizeof(apu_err_t)); - if (err && buffer) { - apr_dso_error(dso, buffer, ERROR_SIZE - 1); - err->msg = buffer; - err->reason = apr_pstrdup(pool, modname); - *result = err; - } - } - -#else /* not builtin and !APR_HAS_DSO => not implemented */ - rv = APR_ENOTIMPL; - - /* Load statically-linked drivers: */ -#if APU_HAVE_OPENSSL - if (name[0] == 'o' && !strcmp(name, "openssl")) { - DRIVER_LOAD("openssl", apr_crypto_openssl_driver, pool, params, rv, result); - } -#endif -#if APU_HAVE_NSS - if (name[0] == 'n' && !strcmp(name, "nss")) { - DRIVER_LOAD("nss", apr_crypto_nss_driver, pool, params, rv, result); - } -#endif -#if APU_HAVE_COMMONCRYPTO - if (name[0] == 'c' && !strcmp(name, "commoncrypto")) { - DRIVER_LOAD("commoncrypto", apr_crypto_commoncrypto_driver, pool, params, rv, result); - } -#endif -#if APU_HAVE_MSCAPI - if (name[0] == 'm' && !strcmp(name, "mscapi")) { - DRIVER_LOAD("mscapi", apr_crypto_mscapi_driver, pool, params, rv, result); - } -#endif -#if APU_HAVE_MSCNG - if (name[0] == 'm' && !strcmp(name, "mscng")) { - DRIVER_LOAD("mscng", apr_crypto_mscng_driver, pool, params, rv, result); - } -#endif - -#endif - - return rv; -} - -/** - * @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) -{ - return driver->name; -} - -/** - * @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) -{ - return f->provider->error(result, 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) -{ - return driver->make(f, driver, params, pool); -} - -/** - * @brief Get a hash table of key types, keyed by the name of the type against - * a pointer to apr_crypto_block_key_type_t, which in turn begins with an - * integer. - * - * @param types - hashtable of key types keyed to constants. - * @param f - encryption context - * @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) -{ - return f->provider->get_block_key_types(types, f); -} - -/** - * @brief Get a hash table of key modes, keyed by the name of the mode against - * a pointer to apr_crypto_block_key_mode_t, which in turn begins with an - * integer. - * - * @param modes - hashtable of key modes keyed to constants. - * @param f - encryption context - * @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) -{ - return f->provider->get_block_key_modes(modes, f); -} - -/** - * @brief Create a key from the provided secret or passphrase. The key is cleaned - * up when the context is cleaned, and may be reused with multiple encryption - * or decryption operations. - * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If - * *key is not NULL, *key must point at a previously created structure. - * @param key The key returned, see note. - * @param rec The key record, from which the key will be derived. - * @param f The context to use. - * @param p The pool to use. - * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend - * error occurred while generating the key. APR_ENOCIPHER if the type or mode - * is not supported by the particular backend. APR_EKEYTYPE if the key type is - * not known. APR_EPADDING if padding was requested but is not supported. - * APR_ENOTIMPL if not implemented. - */ -APU_DECLARE(apr_status_t) apr_crypto_key(apr_crypto_key_t **key, - const apr_crypto_key_rec_t *rec, const apr_crypto_t *f, apr_pool_t *p) -{ - return f->provider->key(key, rec, f, p); -} - -/** - * @brief Create a key from the given passphrase. By default, the PBKDF2 - * algorithm is used to generate the key from the passphrase. It is expected - * that the same pass phrase will generate the same key, regardless of the - * 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) -{ - return f->provider->passphrase(key, ivSize, pass, passLen, salt, saltLen, - type, mode, doPad, iterations, f, 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) -{ - return key->provider->block_encrypt_init(ctx, iv, key, blockSize, 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) -{ - return ctx->provider->block_encrypt(out, outlen, in, inlen, 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) -{ - return ctx->provider->block_encrypt_finish(out, outlen, 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) -{ - return key->provider->block_decrypt_init(ctx, blockSize, iv, key, 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) -{ - return ctx->provider->block_decrypt(out, outlen, in, inlen, 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) -{ - return ctx->provider->block_decrypt_finish(out, outlen, 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) -{ - return ctx->provider->block_cleanup(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) -{ - return f->provider->cleanup(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) -{ - return driver->shutdown(); -} - -#endif /* APU_HAVE_CRYPTO */ Index: contrib/apr-util/crypto/apr_crypto_commoncrypto.c =================================================================== --- contrib/apr-util/crypto/apr_crypto_commoncrypto.c +++ /dev/null @@ -1,906 +0,0 @@ -/* 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 "apr.h" -#include "apr_lib.h" -#include "apu.h" -#include "apu_errno.h" - -#include -#include -#include - -#include "apr_strings.h" -#include "apr_time.h" -#include "apr_buckets.h" -#include "apr_random.h" - -#include "apr_crypto_internal.h" - -#if APU_HAVE_CRYPTO - -#include - -#define LOG_PREFIX "apr_crypto_commoncrypto: " - -struct apr_crypto_t -{ - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - apu_err_t *result; - apr_hash_t *types; - apr_hash_t *modes; - apr_random_t *rng; -}; - -struct apr_crypto_key_t -{ - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - const apr_crypto_t *f; - CCAlgorithm algorithm; - CCOptions options; - unsigned char *key; - int keyLen; - int ivSize; - apr_size_t blockSize; -}; - -struct apr_crypto_block_t -{ - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - const apr_crypto_t *f; - const apr_crypto_key_t *key; - CCCryptorRef ref; -}; - -static struct apr_crypto_block_key_type_t key_types[] = -{ -{ APR_KEY_3DES_192, 24, 8, 8 }, -{ APR_KEY_AES_128, 16, 16, 16 }, -{ APR_KEY_AES_192, 24, 16, 16 }, -{ APR_KEY_AES_256, 32, 16, 16 } }; - -static struct apr_crypto_block_key_mode_t key_modes[] = -{ -{ APR_MODE_ECB }, -{ APR_MODE_CBC } }; - -/** - * Fetch the most recent error from this driver. - */ -static apr_status_t crypto_error(const apu_err_t **result, - const apr_crypto_t *f) -{ - *result = f->result; - return APR_SUCCESS; -} - -/** - * Shutdown the crypto library and release resources. - */ -static apr_status_t crypto_shutdown(void) -{ - return APR_SUCCESS; -} - -static apr_status_t crypto_shutdown_helper(void *data) -{ - return crypto_shutdown(); -} - -/** - * Initialise the crypto library and perform one time initialisation. - */ -static apr_status_t crypto_init(apr_pool_t *pool, const char *params, - const apu_err_t **result) -{ - - apr_pool_cleanup_register(pool, pool, crypto_shutdown_helper, - apr_pool_cleanup_null); - - return APR_SUCCESS; -} - -/** - * @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. - */ -static apr_status_t crypto_block_cleanup(apr_crypto_block_t *ctx) -{ - - if (ctx->ref) { - CCCryptorRelease(ctx->ref); - ctx->ref = NULL; - } - - return APR_SUCCESS; - -} - -static apr_status_t crypto_block_cleanup_helper(void *data) -{ - apr_crypto_block_t *block = (apr_crypto_block_t *) data; - return crypto_block_cleanup(block); -} - -/** - * @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. - */ -static apr_status_t crypto_cleanup(apr_crypto_t *f) -{ - - return APR_SUCCESS; - -} - -static apr_status_t crypto_cleanup_helper(void *data) -{ - apr_crypto_t *f = (apr_crypto_t *) data; - return crypto_cleanup(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 provider - provider 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. - */ -static apr_status_t crypto_make(apr_crypto_t **ff, - const apr_crypto_driver_t *provider, const char *params, - apr_pool_t *pool) -{ - apr_crypto_t *f = apr_pcalloc(pool, sizeof(apr_crypto_t)); - apr_status_t rv; - - if (!f) { - return APR_ENOMEM; - } - *ff = f; - f->pool = pool; - f->provider = provider; - - /* seed the secure random number generator */ - f->rng = apr_random_standard_new(pool); - if (!f->rng) { - return APR_ENOMEM; - } - do { - unsigned char seed[8]; - rv = apr_generate_random_bytes(seed, sizeof(seed)); - if (rv != APR_SUCCESS) { - return rv; - } - apr_random_add_entropy(f->rng, seed, sizeof(seed)); - rv = apr_random_secure_ready(f->rng); - } while (rv == APR_ENOTENOUGHENTROPY); - - f->result = apr_pcalloc(pool, sizeof(apu_err_t)); - if (!f->result) { - return APR_ENOMEM; - } - - f->types = apr_hash_make(pool); - if (!f->types) { - return APR_ENOMEM; - } - apr_hash_set(f->types, "3des192", APR_HASH_KEY_STRING, &(key_types[0])); - apr_hash_set(f->types, "aes128", APR_HASH_KEY_STRING, &(key_types[1])); - apr_hash_set(f->types, "aes192", APR_HASH_KEY_STRING, &(key_types[2])); - apr_hash_set(f->types, "aes256", APR_HASH_KEY_STRING, &(key_types[3])); - - f->modes = apr_hash_make(pool); - if (!f->modes) { - return APR_ENOMEM; - } - apr_hash_set(f->modes, "ecb", APR_HASH_KEY_STRING, &(key_modes[0])); - apr_hash_set(f->modes, "cbc", APR_HASH_KEY_STRING, &(key_modes[1])); - - apr_pool_cleanup_register(pool, f, crypto_cleanup_helper, - apr_pool_cleanup_null); - - return APR_SUCCESS; - -} - -/** - * @brief Get a hash table of key types, keyed by the name of the type against - * a pointer to apr_crypto_block_key_type_t. - * - * @param types - hashtable of key types keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ -static apr_status_t crypto_get_block_key_types(apr_hash_t **types, - const apr_crypto_t *f) -{ - *types = f->types; - return APR_SUCCESS; -} - -/** - * @brief Get a hash table of key modes, keyed by the name of the mode against - * a pointer to apr_crypto_block_key_mode_t. - * - * @param modes - hashtable of key modes keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ -static apr_status_t crypto_get_block_key_modes(apr_hash_t **modes, - const apr_crypto_t *f) -{ - *modes = f->modes; - return APR_SUCCESS; -} - -/* - * Work out which mechanism to use. - */ -static apr_status_t crypto_cipher_mechanism(apr_crypto_key_t *key, - const apr_crypto_block_key_type_e type, - const apr_crypto_block_key_mode_e mode, const int doPad, apr_pool_t *p) -{ - /* handle padding */ - key->options = doPad ? kCCOptionPKCS7Padding : 0; - - /* determine the algorithm to be used */ - switch (type) { - - case (APR_KEY_3DES_192): - - /* A 3DES key */ - if (mode == APR_MODE_CBC) { - key->algorithm = kCCAlgorithm3DES; - key->keyLen = kCCKeySize3DES; - key->ivSize = kCCBlockSize3DES; - key->blockSize = kCCBlockSize3DES; - } - else { - key->algorithm = kCCAlgorithm3DES; - key->options += kCCOptionECBMode; - key->keyLen = kCCKeySize3DES; - key->ivSize = 0; - key->blockSize = kCCBlockSize3DES; - } - break; - - case (APR_KEY_AES_128): - - if (mode == APR_MODE_CBC) { - key->algorithm = kCCAlgorithmAES128; - key->keyLen = kCCKeySizeAES128; - key->ivSize = kCCBlockSizeAES128; - key->blockSize = kCCBlockSizeAES128; - } - else { - key->algorithm = kCCAlgorithmAES128; - key->options += kCCOptionECBMode; - key->keyLen = kCCKeySizeAES128; - key->ivSize = 0; - key->blockSize = kCCBlockSizeAES128; - } - break; - - case (APR_KEY_AES_192): - - if (mode == APR_MODE_CBC) { - key->algorithm = kCCAlgorithmAES128; - key->keyLen = kCCKeySizeAES192; - key->ivSize = kCCBlockSizeAES128; - key->blockSize = kCCBlockSizeAES128; - } - else { - key->algorithm = kCCAlgorithmAES128; - key->options += kCCOptionECBMode; - key->keyLen = kCCKeySizeAES192; - key->ivSize = 0; - key->blockSize = kCCBlockSizeAES128; - } - break; - - case (APR_KEY_AES_256): - - if (mode == APR_MODE_CBC) { - key->algorithm = kCCAlgorithmAES128; - key->keyLen = kCCKeySizeAES256; - key->ivSize = kCCBlockSizeAES128; - key->blockSize = kCCBlockSizeAES128; - } - else { - key->algorithm = kCCAlgorithmAES128; - key->options += kCCOptionECBMode; - key->keyLen = kCCKeySizeAES256; - key->ivSize = 0; - key->blockSize = kCCBlockSizeAES128; - } - break; - - default: - - /* TODO: Support CAST, Blowfish */ - - /* unknown key type, give up */ - return APR_EKEYTYPE; - - } - - /* make space for the key */ - key->key = apr_palloc(p, key->keyLen); - if (!key->key) { - return APR_ENOMEM; - } - apr_crypto_clear(p, key->key, key->keyLen); - - return APR_SUCCESS; -} - -/** - * @brief Create a key from the provided secret or passphrase. The key is cleaned - * up when the context is cleaned, and may be reused with multiple encryption - * or decryption operations. - * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If - * *key is not NULL, *key must point at a previously created structure. - * @param key The key returned, see note. - * @param rec The key record, from which the key will be derived. - * @param f The context to use. - * @param p The pool to use. - * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend - * error occurred while generating the key. APR_ENOCIPHER if the type or mode - * is not supported by the particular backend. APR_EKEYTYPE if the key type is - * not known. APR_EPADDING if padding was requested but is not supported. - * APR_ENOTIMPL if not implemented. - */ -static apr_status_t crypto_key(apr_crypto_key_t **k, - const apr_crypto_key_rec_t *rec, const apr_crypto_t *f, apr_pool_t *p) -{ - apr_status_t rv; - apr_crypto_key_t *key = *k; - - if (!key) { - *k = key = apr_pcalloc(p, sizeof *key); - } - if (!key) { - return APR_ENOMEM; - } - - key->f = f; - key->provider = f->provider; - - /* decide on what cipher mechanism we will be using */ - rv = crypto_cipher_mechanism(key, rec->type, rec->mode, rec->pad, p); - if (APR_SUCCESS != rv) { - return rv; - } - - switch (rec->ktype) { - - case APR_CRYPTO_KTYPE_PASSPHRASE: { - - /* generate the key */ - if ((f->result->rc = CCKeyDerivationPBKDF(kCCPBKDF2, - rec->k.passphrase.pass, rec->k.passphrase.passLen, - rec->k.passphrase.salt, rec->k.passphrase.saltLen, - kCCPRFHmacAlgSHA1, rec->k.passphrase.iterations, key->key, - key->keyLen)) == kCCParamError) { - return APR_ENOKEY; - } - - break; - } - - case APR_CRYPTO_KTYPE_SECRET: { - - /* sanity check - key correct size? */ - if (rec->k.secret.secretLen != key->keyLen) { - return APR_EKEYLENGTH; - } - - /* copy the key */ - memcpy(key->key, rec->k.secret.secret, rec->k.secret.secretLen); - - break; - } - - default: { - - return APR_ENOKEY; - - } - } - - return APR_SUCCESS; -} - -/** - * @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 Iteration count - * @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. - */ -static apr_status_t crypto_passphrase(apr_crypto_key_t **k, 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) -{ - apr_status_t rv; - apr_crypto_key_t *key = *k; - - if (!key) { - *k = key = apr_pcalloc(p, sizeof *key); - if (!key) { - return APR_ENOMEM; - } - } - - key->f = f; - key->provider = f->provider; - - /* decide on what cipher mechanism we will be using */ - rv = crypto_cipher_mechanism(key, type, mode, doPad, p); - if (APR_SUCCESS != rv) { - return rv; - } - - /* generate the key */ - if ((f->result->rc = CCKeyDerivationPBKDF(kCCPBKDF2, pass, passLen, salt, - saltLen, kCCPRFHmacAlgSHA1, iterations, key->key, key->keyLen)) - == kCCParamError) { - return APR_ENOKEY; - } - - if (ivSize) { - *ivSize = key->ivSize; - } - - return APR_SUCCESS; -} - -/** - * @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. - * @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. - */ -static apr_status_t 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) -{ - unsigned char *usedIv; - apr_crypto_block_t *block = *ctx; - if (!block) { - *ctx = block = apr_pcalloc(p, sizeof(apr_crypto_block_t)); - } - if (!block) { - return APR_ENOMEM; - } - block->f = key->f; - block->pool = p; - block->provider = key->provider; - block->key = key; - - apr_pool_cleanup_register(p, block, crypto_block_cleanup_helper, - apr_pool_cleanup_null); - - /* generate an IV, if necessary */ - usedIv = NULL; - if (key->ivSize) { - if (iv == NULL) { - return APR_ENOIV; - } - if (*iv == NULL) { - apr_status_t status; - usedIv = apr_pcalloc(p, key->ivSize); - if (!usedIv) { - return APR_ENOMEM; - } - apr_crypto_clear(p, usedIv, key->ivSize); - status = apr_random_secure_bytes(block->f->rng, usedIv, - key->ivSize); - if (APR_SUCCESS != status) { - return status; - } - *iv = usedIv; - } - else { - usedIv = (unsigned char *) *iv; - } - } - - /* create a new context for encryption */ - switch ((block->f->result->rc = CCCryptorCreate(kCCEncrypt, key->algorithm, - key->options, key->key, key->keyLen, usedIv, &block->ref))) { - case kCCSuccess: { - break; - } - case kCCParamError: { - return APR_EINIT; - } - case kCCMemoryFailure: { - return APR_ENOMEM; - } - case kCCAlignmentError: { - return APR_EPADDING; - } - case kCCUnimplemented: { - return APR_ENOTIMPL; - } - default: { - return APR_EINIT; - } - } - - if (blockSize) { - *blockSize = key->blockSize; - } - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_encrypt(unsigned char **out, - apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, - apr_crypto_block_t *ctx) -{ - apr_size_t outl = *outlen; - unsigned char *buffer; - - /* are we after the maximum size of the out buffer? */ - if (!out) { - *outlen = CCCryptorGetOutputLength(ctx->ref, inlen, 1); - return APR_SUCCESS; - } - - /* must we allocate the output buffer from a pool? */ - if (!*out) { - outl = CCCryptorGetOutputLength(ctx->ref, inlen, 1); - buffer = apr_palloc(ctx->pool, outl); - if (!buffer) { - return APR_ENOMEM; - } - apr_crypto_clear(ctx->pool, buffer, outl); - *out = buffer; - } - - switch ((ctx->f->result->rc = CCCryptorUpdate(ctx->ref, in, inlen, (*out), - outl, &outl))) { - case kCCSuccess: { - break; - } - case kCCBufferTooSmall: { - return APR_ENOSPACE; - } - default: { - return APR_ECRYPT; - } - } - *outlen = outl; - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_encrypt_finish(unsigned char *out, - apr_size_t *outlen, apr_crypto_block_t *ctx) -{ - apr_size_t len = *outlen; - - ctx->f->result->rc = CCCryptorFinal(ctx->ref, out, - CCCryptorGetOutputLength(ctx->ref, 0, 1), &len); - - /* always clean up */ - crypto_block_cleanup(ctx); - - switch (ctx->f->result->rc) { - case kCCSuccess: { - break; - } - case kCCBufferTooSmall: { - return APR_ENOSPACE; - } - case kCCAlignmentError: { - return APR_EPADDING; - } - case kCCDecodeError: { - return APR_ECRYPT; - } - default: { - return APR_ECRYPT; - } - } - *outlen = len; - - return APR_SUCCESS; - -} - -/** - * @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. If the buffer pointed to is NULL, - * an IV will be created at random, in space allocated from the pool. - * If the buffer is not NULL, the IV in the buffer will be used. - * @param key The key structure. - * @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. - */ -static apr_status_t 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) -{ - apr_crypto_block_t *block = *ctx; - if (!block) { - *ctx = block = apr_pcalloc(p, sizeof(apr_crypto_block_t)); - } - if (!block) { - return APR_ENOMEM; - } - block->f = key->f; - block->pool = p; - block->provider = key->provider; - - apr_pool_cleanup_register(p, block, crypto_block_cleanup_helper, - apr_pool_cleanup_null); - - /* generate an IV, if necessary */ - if (key->ivSize) { - if (iv == NULL) { - return APR_ENOIV; - } - } - - /* create a new context for decryption */ - switch ((block->f->result->rc = CCCryptorCreate(kCCDecrypt, key->algorithm, - key->options, key->key, key->keyLen, iv, &block->ref))) { - case kCCSuccess: { - break; - } - case kCCParamError: { - return APR_EINIT; - } - case kCCMemoryFailure: { - return APR_ENOMEM; - } - case kCCAlignmentError: { - return APR_EPADDING; - } - case kCCUnimplemented: { - return APR_ENOTIMPL; - } - default: { - return APR_EINIT; - } - } - - if (blockSize) { - *blockSize = key->blockSize; - } - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_decrypt(unsigned char **out, - apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, - apr_crypto_block_t *ctx) -{ - apr_size_t outl = *outlen; - unsigned char *buffer; - - /* are we after the maximum size of the out buffer? */ - if (!out) { - *outlen = CCCryptorGetOutputLength(ctx->ref, inlen, 1); - return APR_SUCCESS; - } - - /* must we allocate the output buffer from a pool? */ - if (!*out) { - outl = CCCryptorGetOutputLength(ctx->ref, inlen, 1); - buffer = apr_palloc(ctx->pool, outl); - if (!buffer) { - return APR_ENOMEM; - } - apr_crypto_clear(ctx->pool, buffer, outl); - *out = buffer; - } - - switch ((ctx->f->result->rc = CCCryptorUpdate(ctx->ref, in, inlen, (*out), - outl, &outl))) { - case kCCSuccess: { - break; - } - case kCCBufferTooSmall: { - return APR_ENOSPACE; - } - default: { - return APR_ECRYPT; - } - } - *outlen = outl; - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_decrypt_finish(unsigned char *out, - apr_size_t *outlen, apr_crypto_block_t *ctx) -{ - apr_size_t len = *outlen; - - ctx->f->result->rc = CCCryptorFinal(ctx->ref, out, - CCCryptorGetOutputLength(ctx->ref, 0, 1), &len); - - /* always clean up */ - crypto_block_cleanup(ctx); - - switch (ctx->f->result->rc) { - case kCCSuccess: { - break; - } - case kCCBufferTooSmall: { - return APR_ENOSPACE; - } - case kCCAlignmentError: { - return APR_EPADDING; - } - case kCCDecodeError: { - return APR_ECRYPT; - } - default: { - return APR_ECRYPT; - } - } - *outlen = len; - - return APR_SUCCESS; - -} - -/** - * OSX Common Crypto module. - */ -APU_MODULE_DECLARE_DATA const apr_crypto_driver_t apr_crypto_commoncrypto_driver = -{ - "commoncrypto", crypto_init, crypto_make, crypto_get_block_key_types, - crypto_get_block_key_modes, crypto_passphrase, - crypto_block_encrypt_init, crypto_block_encrypt, - crypto_block_encrypt_finish, crypto_block_decrypt_init, - crypto_block_decrypt, crypto_block_decrypt_finish, crypto_block_cleanup, - crypto_cleanup, crypto_shutdown, crypto_error, crypto_key -}; - -#endif Index: contrib/apr-util/crypto/apr_crypto_nss.c =================================================================== --- contrib/apr-util/crypto/apr_crypto_nss.c +++ /dev/null @@ -1,1097 +0,0 @@ -/* 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 "apr_lib.h" -#include "apu.h" -#include "apu_config.h" -#include "apu_errno.h" - -#include -#include - -#include "apr_strings.h" -#include "apr_time.h" -#include "apr_buckets.h" - -#include "apr_crypto_internal.h" - -#if APU_HAVE_CRYPTO - -#include - -#ifdef HAVE_NSS_NSS_H -#include -#endif -#ifdef HAVE_NSS_H -#include -#endif - -#ifdef HAVE_NSS_PK11PUB_H -#include -#endif -#ifdef HAVE_PK11PUB_H -#include -#endif - -struct apr_crypto_t { - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - apu_err_t *result; - apr_crypto_config_t *config; - apr_hash_t *types; - apr_hash_t *modes; -}; - -struct apr_crypto_config_t { - void *opaque; -}; - -struct apr_crypto_key_t { - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - const apr_crypto_t *f; - CK_MECHANISM_TYPE cipherMech; - SECOidTag cipherOid; - PK11SymKey *symKey; - int ivSize; - int keyLength; -}; - -struct apr_crypto_block_t { - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - const apr_crypto_t *f; - PK11Context *ctx; - apr_crypto_key_t *key; - SECItem *secParam; - int blockSize; -}; - -static struct apr_crypto_block_key_type_t key_types[] = -{ -{ APR_KEY_3DES_192, 24, 8, 8 }, -{ APR_KEY_AES_128, 16, 16, 16 }, -{ APR_KEY_AES_192, 24, 16, 16 }, -{ APR_KEY_AES_256, 32, 16, 16 } }; - -static struct apr_crypto_block_key_mode_t key_modes[] = -{ -{ APR_MODE_ECB }, -{ APR_MODE_CBC } }; - -/* sufficient space to wrap a key */ -#define BUFFER_SIZE 128 - -/** - * Fetch the most recent error from this driver. - */ -static apr_status_t crypto_error(const apu_err_t **result, - const apr_crypto_t *f) -{ - *result = f->result; - return APR_SUCCESS; -} - -/** - * Shutdown the crypto library and release resources. - * - * It is safe to shut down twice. - */ -static apr_status_t crypto_shutdown(void) -{ - if (NSS_IsInitialized()) { - SECStatus s = NSS_Shutdown(); - if (s != SECSuccess) { - fprintf(stderr, "NSS failed to shutdown, possible leak: %d: %s", - PR_GetError(), PR_ErrorToName(s)); - return APR_EINIT; - } - } - return APR_SUCCESS; -} - -static apr_status_t crypto_shutdown_helper(void *data) -{ - return crypto_shutdown(); -} - -/** - * Initialise the crypto library and perform one time initialisation. - */ -static apr_status_t crypto_init(apr_pool_t *pool, const char *params, - const apu_err_t **result) -{ - SECStatus s; - const char *dir = NULL; - const char *keyPrefix = NULL; - const char *certPrefix = NULL; - const char *secmod = NULL; - int noinit = 0; - PRUint32 flags = 0; - - struct { - const char *field; - const char *value; - int set; - } fields[] = { - { "dir", NULL, 0 }, - { "key3", NULL, 0 }, - { "cert7", NULL, 0 }, - { "secmod", NULL, 0 }, - { "noinit", NULL, 0 }, - { NULL, NULL, 0 } - }; - const char *ptr; - size_t klen; - char **elts = NULL; - char *elt; - int i = 0, j; - apr_status_t status; - - if (params) { - if (APR_SUCCESS != (status = apr_tokenize_to_argv(params, &elts, pool))) { - return status; - } - while ((elt = elts[i])) { - ptr = strchr(elt, '='); - if (ptr) { - for (klen = ptr - elt; klen && apr_isspace(elt[klen - 1]); --klen) - ; - ptr++; - } - else { - for (klen = strlen(elt); klen && apr_isspace(elt[klen - 1]); --klen) - ; - } - elt[klen] = 0; - - for (j = 0; fields[j].field != NULL; ++j) { - if (klen && !strcasecmp(fields[j].field, elt)) { - fields[j].set = 1; - if (ptr) { - fields[j].value = ptr; - } - break; - } - } - - i++; - } - dir = fields[0].value; - keyPrefix = fields[1].value; - certPrefix = fields[2].value; - secmod = fields[3].value; - noinit = fields[4].set; - } - - /* if we've been asked to bypass, do so here */ - if (noinit) { - return APR_SUCCESS; - } - - /* sanity check - we can only initialise NSS once */ - if (NSS_IsInitialized()) { - return APR_EREINIT; - } - - if (keyPrefix || certPrefix || secmod) { - s = NSS_Initialize(dir, certPrefix, keyPrefix, secmod, flags); - } - else if (dir) { - s = NSS_InitReadWrite(dir); - } - else { - s = NSS_NoDB_Init(NULL); - } - if (s != SECSuccess) { - if (result) { - /* Note: all memory must be owned by the caller, in case we're unloaded */ - apu_err_t *err = apr_pcalloc(pool, sizeof(apu_err_t)); - err->rc = PR_GetError(); - err->msg = apr_pstrdup(pool, PR_ErrorToName(s)); - err->reason = apr_pstrdup(pool, "Error during 'nss' initialisation"); - *result = err; - } - - return APR_ECRYPT; - } - - apr_pool_cleanup_register(pool, pool, crypto_shutdown_helper, - apr_pool_cleanup_null); - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_cleanup(apr_crypto_block_t *block) -{ - - if (block->secParam) { - SECITEM_FreeItem(block->secParam, PR_TRUE); - block->secParam = NULL; - } - - if (block->ctx) { - PK11_DestroyContext(block->ctx, PR_TRUE); - block->ctx = NULL; - } - - return APR_SUCCESS; - -} - -static apr_status_t crypto_block_cleanup_helper(void *data) -{ - apr_crypto_block_t *block = (apr_crypto_block_t *) data; - return crypto_block_cleanup(block); -} - -static apr_status_t crypto_key_cleanup(void *data) -{ - apr_crypto_key_t *key = data; - if (key->symKey) { - PK11_FreeSymKey(key->symKey); - key->symKey = NULL; - } - return APR_SUCCESS; -} -/** - * @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. - */ -static apr_status_t crypto_cleanup(apr_crypto_t *f) -{ - return APR_SUCCESS; -} - -static apr_status_t crypto_cleanup_helper(void *data) -{ - apr_crypto_t *f = (apr_crypto_t *) data; - return crypto_cleanup(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 provider - provider to use - * @param params - parameter string - * @param pool - process pool - * @return APR_ENOENGINE when the engine specified does not exist. APR_EINITENGINE - * if the engine cannot be initialised. - */ -static apr_status_t crypto_make(apr_crypto_t **ff, - const apr_crypto_driver_t *provider, const char *params, - apr_pool_t *pool) -{ - apr_crypto_config_t *config = NULL; - apr_crypto_t *f; - - f = apr_pcalloc(pool, sizeof(apr_crypto_t)); - if (!f) { - return APR_ENOMEM; - } - *ff = f; - f->pool = pool; - f->provider = provider; - config = f->config = apr_pcalloc(pool, sizeof(apr_crypto_config_t)); - if (!config) { - return APR_ENOMEM; - } - f->result = apr_pcalloc(pool, sizeof(apu_err_t)); - if (!f->result) { - return APR_ENOMEM; - } - - f->types = apr_hash_make(pool); - if (!f->types) { - return APR_ENOMEM; - } - apr_hash_set(f->types, "3des192", APR_HASH_KEY_STRING, &(key_types[0])); - apr_hash_set(f->types, "aes128", APR_HASH_KEY_STRING, &(key_types[1])); - apr_hash_set(f->types, "aes192", APR_HASH_KEY_STRING, &(key_types[2])); - apr_hash_set(f->types, "aes256", APR_HASH_KEY_STRING, &(key_types[3])); - - f->modes = apr_hash_make(pool); - if (!f->modes) { - return APR_ENOMEM; - } - apr_hash_set(f->modes, "ecb", APR_HASH_KEY_STRING, &(key_modes[0])); - apr_hash_set(f->modes, "cbc", APR_HASH_KEY_STRING, &(key_modes[1])); - - apr_pool_cleanup_register(pool, f, crypto_cleanup_helper, - apr_pool_cleanup_null); - - return APR_SUCCESS; - -} - -/** - * @brief Get a hash table of key types, keyed by the name of the type against - * a pointer to apr_crypto_block_key_type_t. - * - * @param types - hashtable of key types keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ -static apr_status_t crypto_get_block_key_types(apr_hash_t **types, - const apr_crypto_t *f) -{ - *types = f->types; - return APR_SUCCESS; -} - -/** - * @brief Get a hash table of key modes, keyed by the name of the mode against - * a pointer to apr_crypto_block_key_mode_t. - * - * @param modes - hashtable of key modes keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ -static apr_status_t crypto_get_block_key_modes(apr_hash_t **modes, - const apr_crypto_t *f) -{ - *modes = f->modes; - return APR_SUCCESS; -} - -/* - * Work out which mechanism to use. - */ -static apr_status_t crypto_cipher_mechanism(apr_crypto_key_t *key, - const apr_crypto_block_key_type_e type, - const apr_crypto_block_key_mode_e mode, const int doPad) -{ - - /* decide on what cipher mechanism we will be using */ - switch (type) { - - case (APR_KEY_3DES_192): - if (APR_MODE_CBC == mode) { - key->cipherOid = SEC_OID_DES_EDE3_CBC; - } - else if (APR_MODE_ECB == mode) { - return APR_ENOCIPHER; - /* No OID for CKM_DES3_ECB; */ - } - key->keyLength = 24; - break; - case (APR_KEY_AES_128): - if (APR_MODE_CBC == mode) { - key->cipherOid = SEC_OID_AES_128_CBC; - } - else { - key->cipherOid = SEC_OID_AES_128_ECB; - } - key->keyLength = 16; - break; - case (APR_KEY_AES_192): - if (APR_MODE_CBC == mode) { - key->cipherOid = SEC_OID_AES_192_CBC; - } - else { - key->cipherOid = SEC_OID_AES_192_ECB; - } - key->keyLength = 24; - break; - case (APR_KEY_AES_256): - if (APR_MODE_CBC == mode) { - key->cipherOid = SEC_OID_AES_256_CBC; - } - else { - key->cipherOid = SEC_OID_AES_256_ECB; - } - key->keyLength = 32; - break; - default: - /* unknown key type, give up */ - return APR_EKEYTYPE; - } - - /* AES_128_CBC --> CKM_AES_CBC --> CKM_AES_CBC_PAD */ - key->cipherMech = PK11_AlgtagToMechanism(key->cipherOid); - if (key->cipherMech == CKM_INVALID_MECHANISM) { - return APR_ENOCIPHER; - } - if (doPad) { - CK_MECHANISM_TYPE paddedMech; - paddedMech = PK11_GetPadMechanism(key->cipherMech); - if (CKM_INVALID_MECHANISM == paddedMech - || key->cipherMech == paddedMech) { - return APR_EPADDING; - } - key->cipherMech = paddedMech; - } - - key->ivSize = PK11_GetIVLength(key->cipherMech); - - return APR_SUCCESS; -} - -/** - * @brief Create a key from the provided secret or passphrase. The key is cleaned - * up when the context is cleaned, and may be reused with multiple encryption - * or decryption operations. - * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If - * *key is not NULL, *key must point at a previously created structure. - * @param key The key returned, see note. - * @param rec The key record, from which the key will be derived. - * @param f The context to use. - * @param p The pool to use. - * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend - * error occurred while generating the key. APR_ENOCIPHER if the type or mode - * is not supported by the particular backend. APR_EKEYTYPE if the key type is - * not known. APR_EPADDING if padding was requested but is not supported. - * APR_ENOTIMPL if not implemented. - */ -static apr_status_t crypto_key(apr_crypto_key_t **k, - const apr_crypto_key_rec_t *rec, const apr_crypto_t *f, apr_pool_t *p) -{ - apr_status_t rv = APR_SUCCESS; - PK11SlotInfo *slot, *tslot; - PK11SymKey *tkey; - SECItem secretItem; - SECItem wrappedItem; - SECItem *secParam; - PK11Context *ctx; - SECStatus s; - SECItem passItem; - SECItem saltItem; - SECAlgorithmID *algid; - void *wincx = NULL; /* what is wincx? */ - apr_crypto_key_t *key; - int blockSize; - int remainder; - - key = *k; - if (!key) { - *k = key = apr_pcalloc(p, sizeof *key); - if (!key) { - return APR_ENOMEM; - } - apr_pool_cleanup_register(p, key, crypto_key_cleanup, - apr_pool_cleanup_null); - } - - key->f = f; - key->provider = f->provider; - - /* decide on what cipher mechanism we will be using */ - rv = crypto_cipher_mechanism(key, rec->type, rec->mode, rec->pad); - if (APR_SUCCESS != rv) { - return rv; - } - - switch (rec->ktype) { - - case APR_CRYPTO_KTYPE_PASSPHRASE: { - - /* Turn the raw passphrase and salt into SECItems */ - passItem.data = (unsigned char*) rec->k.passphrase.pass; - passItem.len = rec->k.passphrase.passLen; - saltItem.data = (unsigned char*) rec->k.passphrase.salt; - saltItem.len = rec->k.passphrase.saltLen; - - /* generate the key */ - /* pbeAlg and cipherAlg are the same. */ - algid = PK11_CreatePBEV2AlgorithmID(key->cipherOid, key->cipherOid, - SEC_OID_HMAC_SHA1, key->keyLength, - rec->k.passphrase.iterations, &saltItem); - if (algid) { - slot = PK11_GetBestSlot(key->cipherMech, wincx); - if (slot) { - key->symKey = PK11_PBEKeyGen(slot, algid, &passItem, PR_FALSE, - wincx); - PK11_FreeSlot(slot); - } - SECOID_DestroyAlgorithmID(algid, PR_TRUE); - } - - break; - } - - case APR_CRYPTO_KTYPE_SECRET: { - - /* - * NSS is by default in FIPS mode, which disallows the use of unencrypted - * symmetrical keys. As per http://permalink.gmane.org/gmane.comp.mozilla.crypto/7947 - * we do the following: - * - * 1. Generate a (temporary) symmetric key in NSS. - * 2. Use that symmetric key to encrypt your symmetric key as data. - * 3. Unwrap your wrapped symmetric key, using the symmetric key - * you generated in Step 1 as the unwrapping key. - * - * http://permalink.gmane.org/gmane.comp.mozilla.crypto/7947 - */ - - /* generate the key */ - slot = PK11_GetBestSlot(key->cipherMech, NULL); - if (slot) { - unsigned char data[BUFFER_SIZE]; - - /* sanity check - key correct size? */ - if (rec->k.secret.secretLen != key->keyLength) { - PK11_FreeSlot(slot); - return APR_EKEYLENGTH; - } - - tslot = PK11_GetBestSlot(CKM_AES_ECB, NULL); - if (tslot) { - - /* generate a temporary wrapping key */ - tkey = PK11_KeyGen(tslot, CKM_AES_ECB, 0, PK11_GetBestKeyLength(tslot, CKM_AES_ECB), 0); - - /* prepare the key to wrap */ - secretItem.data = (unsigned char *) rec->k.secret.secret; - secretItem.len = rec->k.secret.secretLen; - - /* ensure our key matches the blocksize */ - secParam = PK11_GenerateNewParam(CKM_AES_ECB, tkey); - blockSize = PK11_GetBlockSize(CKM_AES_ECB, secParam); - remainder = rec->k.secret.secretLen % blockSize; - if (remainder) { - secretItem.data = - apr_pcalloc(p, rec->k.secret.secretLen + remainder); - apr_crypto_clear(p, secretItem.data, - rec->k.secret.secretLen); - memcpy(secretItem.data, rec->k.secret.secret, - rec->k.secret.secretLen); - secretItem.len += remainder; - } - - /* prepare a space for the wrapped key */ - wrappedItem.data = data; - - /* wrap the key */ - ctx = PK11_CreateContextBySymKey(CKM_AES_ECB, CKA_ENCRYPT, tkey, - secParam); - if (ctx) { - s = PK11_CipherOp(ctx, wrappedItem.data, - (int *) (&wrappedItem.len), BUFFER_SIZE, - secretItem.data, secretItem.len); - if (s == SECSuccess) { - - /* unwrap the key again */ - key->symKey = PK11_UnwrapSymKeyWithFlags(tkey, - CKM_AES_ECB, NULL, &wrappedItem, - key->cipherMech, CKA_ENCRYPT, - rec->k.secret.secretLen, 0); - - } - - PK11_DestroyContext(ctx, PR_TRUE); - } - - /* clean up */ - SECITEM_FreeItem(secParam, PR_TRUE); - PK11_FreeSymKey(tkey); - PK11_FreeSlot(tslot); - - } - - PK11_FreeSlot(slot); - } - - break; - } - - default: { - - return APR_ENOKEY; - - } - } - - /* sanity check? */ - if (!key->symKey) { - PRErrorCode perr = PORT_GetError(); - if (perr) { - f->result->rc = perr; - f->result->msg = PR_ErrorToName(perr); - rv = APR_ENOKEY; - } - } - - return rv; -} - -/** - * @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 Iteration count - * @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. - */ -static apr_status_t crypto_passphrase(apr_crypto_key_t **k, 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) -{ - apr_status_t rv = APR_SUCCESS; - PK11SlotInfo * slot; - SECItem passItem; - SECItem saltItem; - SECAlgorithmID *algid; - void *wincx = NULL; /* what is wincx? */ - apr_crypto_key_t *key = *k; - - if (!key) { - *k = key = apr_pcalloc(p, sizeof *key); - if (!key) { - return APR_ENOMEM; - } - apr_pool_cleanup_register(p, key, crypto_key_cleanup, - apr_pool_cleanup_null); - } - - key->f = f; - key->provider = f->provider; - - /* decide on what cipher mechanism we will be using */ - rv = crypto_cipher_mechanism(key, type, mode, doPad); - if (APR_SUCCESS != rv) { - return rv; - } - - /* Turn the raw passphrase and salt into SECItems */ - passItem.data = (unsigned char*) pass; - passItem.len = passLen; - saltItem.data = (unsigned char*) salt; - saltItem.len = saltLen; - - /* generate the key */ - /* pbeAlg and cipherAlg are the same. */ - algid = PK11_CreatePBEV2AlgorithmID(key->cipherOid, key->cipherOid, - SEC_OID_HMAC_SHA1, key->keyLength, iterations, &saltItem); - if (algid) { - slot = PK11_GetBestSlot(key->cipherMech, wincx); - if (slot) { - key->symKey = PK11_PBEKeyGen(slot, algid, &passItem, PR_FALSE, - wincx); - PK11_FreeSlot(slot); - } - SECOID_DestroyAlgorithmID(algid, PR_TRUE); - } - - /* sanity check? */ - if (!key->symKey) { - PRErrorCode perr = PORT_GetError(); - if (perr) { - f->result->rc = perr; - f->result->msg = PR_ErrorToName(perr); - rv = APR_ENOKEY; - } - } - - if (ivSize) { - *ivSize = key->ivSize; - } - - return rv; -} - -/** - * @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. - * @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. - */ -static apr_status_t 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) -{ - PRErrorCode perr; - SECItem ivItem; - unsigned char * usedIv; - apr_crypto_block_t *block = *ctx; - if (!block) { - *ctx = block = apr_pcalloc(p, sizeof(apr_crypto_block_t)); - } - if (!block) { - return APR_ENOMEM; - } - block->f = key->f; - block->pool = p; - block->provider = key->provider; - - apr_pool_cleanup_register(p, block, crypto_block_cleanup_helper, - apr_pool_cleanup_null); - - if (key->ivSize) { - if (iv == NULL) { - return APR_ENOIV; - } - if (*iv == NULL) { - SECStatus s; - usedIv = apr_pcalloc(p, key->ivSize); - if (!usedIv) { - return APR_ENOMEM; - } - apr_crypto_clear(p, usedIv, key->ivSize); - s = PK11_GenerateRandom(usedIv, key->ivSize); - if (s != SECSuccess) { - return APR_ENOIV; - } - *iv = usedIv; - } - else { - usedIv = (unsigned char *) *iv; - } - ivItem.data = usedIv; - ivItem.len = key->ivSize; - block->secParam = PK11_ParamFromIV(key->cipherMech, &ivItem); - } - else { - block->secParam = PK11_GenerateNewParam(key->cipherMech, key->symKey); - } - block->blockSize = PK11_GetBlockSize(key->cipherMech, block->secParam); - block->ctx = PK11_CreateContextBySymKey(key->cipherMech, CKA_ENCRYPT, - key->symKey, block->secParam); - - /* did an error occur? */ - perr = PORT_GetError(); - if (perr || !block->ctx) { - key->f->result->rc = perr; - key->f->result->msg = PR_ErrorToName(perr); - return APR_EINIT; - } - - if (blockSize) { - *blockSize = PK11_GetBlockSize(key->cipherMech, block->secParam); - } - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_encrypt(unsigned char **out, - apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, - apr_crypto_block_t *block) -{ - - unsigned char *buffer; - int outl = (int) *outlen; - SECStatus s; - if (!out) { - *outlen = inlen + block->blockSize; - return APR_SUCCESS; - } - if (!*out) { - buffer = apr_palloc(block->pool, inlen + block->blockSize); - if (!buffer) { - return APR_ENOMEM; - } - apr_crypto_clear(block->pool, buffer, inlen + block->blockSize); - *out = buffer; - } - - s = PK11_CipherOp(block->ctx, *out, &outl, inlen, (unsigned char*) in, - inlen); - if (s != SECSuccess) { - PRErrorCode perr = PORT_GetError(); - if (perr) { - block->f->result->rc = perr; - block->f->result->msg = PR_ErrorToName(perr); - } - return APR_ECRYPT; - } - *outlen = outl; - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_encrypt_finish(unsigned char *out, - apr_size_t *outlen, apr_crypto_block_t *block) -{ - - apr_status_t rv = APR_SUCCESS; - unsigned int outl = *outlen; - - SECStatus s = PK11_DigestFinal(block->ctx, out, &outl, block->blockSize); - *outlen = outl; - - if (s != SECSuccess) { - PRErrorCode perr = PORT_GetError(); - if (perr) { - block->f->result->rc = perr; - block->f->result->msg = PR_ErrorToName(perr); - } - rv = APR_ECRYPT; - } - crypto_block_cleanup(block); - - return rv; - -} - -/** - * @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. If the buffer pointed to is NULL, - * an IV will be created at random, in space allocated from the pool. - * If the buffer is not NULL, the IV in the buffer will be used. - * @param key The key structure. - * @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. - */ -static apr_status_t 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) -{ - PRErrorCode perr; - apr_crypto_block_t *block = *ctx; - if (!block) { - *ctx = block = apr_pcalloc(p, sizeof(apr_crypto_block_t)); - } - if (!block) { - return APR_ENOMEM; - } - block->f = key->f; - block->pool = p; - block->provider = key->provider; - - apr_pool_cleanup_register(p, block, crypto_block_cleanup_helper, - apr_pool_cleanup_null); - - if (key->ivSize) { - SECItem ivItem; - if (iv == NULL) { - return APR_ENOIV; /* Cannot initialise without an IV */ - } - ivItem.data = (unsigned char*) iv; - ivItem.len = key->ivSize; - block->secParam = PK11_ParamFromIV(key->cipherMech, &ivItem); - } - else { - block->secParam = PK11_GenerateNewParam(key->cipherMech, key->symKey); - } - block->blockSize = PK11_GetBlockSize(key->cipherMech, block->secParam); - block->ctx = PK11_CreateContextBySymKey(key->cipherMech, CKA_DECRYPT, - key->symKey, block->secParam); - - /* did an error occur? */ - perr = PORT_GetError(); - if (perr || !block->ctx) { - key->f->result->rc = perr; - key->f->result->msg = PR_ErrorToName(perr); - return APR_EINIT; - } - - if (blockSize) { - *blockSize = PK11_GetBlockSize(key->cipherMech, block->secParam); - } - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_decrypt(unsigned char **out, - apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, - apr_crypto_block_t *block) -{ - - unsigned char *buffer; - int outl = (int) *outlen; - SECStatus s; - if (!out) { - *outlen = inlen + block->blockSize; - return APR_SUCCESS; - } - if (!*out) { - buffer = apr_palloc(block->pool, inlen + block->blockSize); - if (!buffer) { - return APR_ENOMEM; - } - apr_crypto_clear(block->pool, buffer, inlen + block->blockSize); - *out = buffer; - } - - s = PK11_CipherOp(block->ctx, *out, &outl, inlen, (unsigned char*) in, - inlen); - if (s != SECSuccess) { - PRErrorCode perr = PORT_GetError(); - if (perr) { - block->f->result->rc = perr; - block->f->result->msg = PR_ErrorToName(perr); - } - return APR_ECRYPT; - } - *outlen = outl; - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_decrypt_finish(unsigned char *out, - apr_size_t *outlen, apr_crypto_block_t *block) -{ - - apr_status_t rv = APR_SUCCESS; - unsigned int outl = *outlen; - - SECStatus s = PK11_DigestFinal(block->ctx, out, &outl, block->blockSize); - *outlen = outl; - - if (s != SECSuccess) { - PRErrorCode perr = PORT_GetError(); - if (perr) { - block->f->result->rc = perr; - block->f->result->msg = PR_ErrorToName(perr); - } - rv = APR_ECRYPT; - } - crypto_block_cleanup(block); - - return rv; - -} - -/** - * NSS module. - */ -APU_MODULE_DECLARE_DATA const apr_crypto_driver_t apr_crypto_nss_driver = { - "nss", crypto_init, crypto_make, crypto_get_block_key_types, - crypto_get_block_key_modes, crypto_passphrase, - crypto_block_encrypt_init, crypto_block_encrypt, - crypto_block_encrypt_finish, crypto_block_decrypt_init, - crypto_block_decrypt, crypto_block_decrypt_finish, - crypto_block_cleanup, crypto_cleanup, crypto_shutdown, crypto_error, - crypto_key -}; - -#endif Index: contrib/apr-util/crypto/apr_crypto_openssl.c =================================================================== --- contrib/apr-util/crypto/apr_crypto_openssl.c +++ /dev/null @@ -1,973 +0,0 @@ -/* 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 "apr_lib.h" -#include "apu.h" -#include "apu_errno.h" - -#include -#include -#include - -#include "apr_strings.h" -#include "apr_time.h" -#include "apr_buckets.h" - -#include "apr_crypto_internal.h" - -#if APU_HAVE_CRYPTO - -#include -#include -#include - -#define LOG_PREFIX "apr_crypto_openssl: " - -#ifndef APR_USE_OPENSSL_PRE_1_1_API -#if defined(LIBRESSL_VERSION_NUMBER) -/* LibreSSL declares OPENSSL_VERSION_NUMBER == 2.0 but does not include most - * changes from OpenSSL >= 1.1 (new functions, macros, deprecations, ...), so - * we have to work around this... - */ -#define APR_USE_OPENSSL_PRE_1_1_API (1) -#else -#define APR_USE_OPENSSL_PRE_1_1_API (OPENSSL_VERSION_NUMBER < 0x10100000L) -#endif -#endif - -struct apr_crypto_t { - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - apu_err_t *result; - apr_crypto_config_t *config; - apr_hash_t *types; - apr_hash_t *modes; -}; - -struct apr_crypto_config_t { - ENGINE *engine; -}; - -struct apr_crypto_key_t { - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - const apr_crypto_t *f; - const EVP_CIPHER * cipher; - unsigned char *key; - int keyLen; - int doPad; - int ivSize; -}; - -struct apr_crypto_block_t { - apr_pool_t *pool; - const apr_crypto_driver_t *provider; - const apr_crypto_t *f; - EVP_CIPHER_CTX *cipherCtx; - int initialised; - int ivSize; - int blockSize; - int doPad; -}; - -static struct apr_crypto_block_key_type_t key_types[] = -{ -{ APR_KEY_3DES_192, 24, 8, 8 }, -{ APR_KEY_AES_128, 16, 16, 16 }, -{ APR_KEY_AES_192, 24, 16, 16 }, -{ APR_KEY_AES_256, 32, 16, 16 } }; - -static struct apr_crypto_block_key_mode_t key_modes[] = -{ -{ APR_MODE_ECB }, -{ APR_MODE_CBC } }; - -/* sufficient space to wrap a key */ -#define BUFFER_SIZE 128 - -/** - * Fetch the most recent error from this driver. - */ -static apr_status_t crypto_error(const apu_err_t **result, - const apr_crypto_t *f) -{ - *result = f->result; - return APR_SUCCESS; -} - -/** - * Shutdown the crypto library and release resources. - */ -static apr_status_t crypto_shutdown(void) -{ - ERR_free_strings(); - EVP_cleanup(); - ENGINE_cleanup(); - return APR_SUCCESS; -} - -static apr_status_t crypto_shutdown_helper(void *data) -{ - return crypto_shutdown(); -} - -/** - * Initialise the crypto library and perform one time initialisation. - */ -static apr_status_t crypto_init(apr_pool_t *pool, const char *params, - const apu_err_t **result) -{ -#if APR_USE_OPENSSL_PRE_1_1_API - (void)CRYPTO_malloc_init(); -#else - OPENSSL_malloc_init(); -#endif - ERR_load_crypto_strings(); - /* SSL_load_error_strings(); */ - OpenSSL_add_all_algorithms(); - ENGINE_load_builtin_engines(); - ENGINE_register_all_complete(); - - apr_pool_cleanup_register(pool, pool, crypto_shutdown_helper, - apr_pool_cleanup_null); - - return APR_SUCCESS; -} - -#if OPENSSL_VERSION_NUMBER < 0x0090802fL - -/* Code taken from OpenSSL 0.9.8b, see - * https://github.com/openssl/openssl/commit/cf6bc84148cb15af09b292394aaf2b45f0d5af0d - */ - -EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void) -{ - EVP_CIPHER_CTX *ctx = OPENSSL_malloc(sizeof *ctx); - if (ctx) - EVP_CIPHER_CTX_init(ctx); - return ctx; -} - -void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx) -{ - if (ctx) { - EVP_CIPHER_CTX_cleanup(ctx); - OPENSSL_free(ctx); - } -} - -#endif - -/** - * @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. - */ -static apr_status_t crypto_block_cleanup(apr_crypto_block_t *ctx) -{ - - if (ctx->initialised) { - EVP_CIPHER_CTX_free(ctx->cipherCtx); - ctx->initialised = 0; - } - - return APR_SUCCESS; - -} - -static apr_status_t crypto_block_cleanup_helper(void *data) -{ - apr_crypto_block_t *block = (apr_crypto_block_t *) data; - return crypto_block_cleanup(block); -} - -/** - * @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. - */ -static apr_status_t crypto_cleanup(apr_crypto_t *f) -{ - - if (f->config->engine) { - ENGINE_finish(f->config->engine); - ENGINE_free(f->config->engine); - f->config->engine = NULL; - } - return APR_SUCCESS; - -} - -static apr_status_t crypto_cleanup_helper(void *data) -{ - apr_crypto_t *f = (apr_crypto_t *) data; - return crypto_cleanup(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 provider - provider 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. - */ -static apr_status_t crypto_make(apr_crypto_t **ff, - const apr_crypto_driver_t *provider, const char *params, - apr_pool_t *pool) -{ - apr_crypto_config_t *config = NULL; - apr_crypto_t *f = apr_pcalloc(pool, sizeof(apr_crypto_t)); - - const char *engine = NULL; - - struct { - const char *field; - const char *value; - int set; - } fields[] = { - { "engine", NULL, 0 }, - { NULL, NULL, 0 } - }; - const char *ptr; - size_t klen; - char **elts = NULL; - char *elt; - int i = 0, j; - apr_status_t status; - - if (params) { - if (APR_SUCCESS != (status = apr_tokenize_to_argv(params, &elts, pool))) { - return status; - } - while ((elt = elts[i])) { - ptr = strchr(elt, '='); - if (ptr) { - for (klen = ptr - elt; klen && apr_isspace(elt[klen - 1]); --klen) - ; - ptr++; - } - else { - for (klen = strlen(elt); klen && apr_isspace(elt[klen - 1]); --klen) - ; - } - elt[klen] = 0; - - for (j = 0; fields[j].field != NULL; ++j) { - if (!strcasecmp(fields[j].field, elt)) { - fields[j].set = 1; - if (ptr) { - fields[j].value = ptr; - } - break; - } - } - - i++; - } - engine = fields[0].value; - } - - if (!f) { - return APR_ENOMEM; - } - *ff = f; - f->pool = pool; - f->provider = provider; - config = f->config = apr_pcalloc(pool, sizeof(apr_crypto_config_t)); - if (!config) { - return APR_ENOMEM; - } - - f->result = apr_pcalloc(pool, sizeof(apu_err_t)); - if (!f->result) { - return APR_ENOMEM; - } - - f->types = apr_hash_make(pool); - if (!f->types) { - return APR_ENOMEM; - } - apr_hash_set(f->types, "3des192", APR_HASH_KEY_STRING, &(key_types[0])); - apr_hash_set(f->types, "aes128", APR_HASH_KEY_STRING, &(key_types[1])); - apr_hash_set(f->types, "aes192", APR_HASH_KEY_STRING, &(key_types[2])); - apr_hash_set(f->types, "aes256", APR_HASH_KEY_STRING, &(key_types[3])); - - f->modes = apr_hash_make(pool); - if (!f->modes) { - return APR_ENOMEM; - } - apr_hash_set(f->modes, "ecb", APR_HASH_KEY_STRING, &(key_modes[0])); - apr_hash_set(f->modes, "cbc", APR_HASH_KEY_STRING, &(key_modes[1])); - - apr_pool_cleanup_register(pool, f, crypto_cleanup_helper, - apr_pool_cleanup_null); - - if (engine) { - config->engine = ENGINE_by_id(engine); - if (!config->engine) { - return APR_ENOENGINE; - } - if (!ENGINE_init(config->engine)) { - ENGINE_free(config->engine); - config->engine = NULL; - return APR_EINITENGINE; - } - } - - return APR_SUCCESS; - -} - -/** - * @brief Get a hash table of key types, keyed by the name of the type against - * a pointer to apr_crypto_block_key_type_t. - * - * @param types - hashtable of key types keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ -static apr_status_t crypto_get_block_key_types(apr_hash_t **types, - const apr_crypto_t *f) -{ - *types = f->types; - return APR_SUCCESS; -} - -/** - * @brief Get a hash table of key modes, keyed by the name of the mode against - * a pointer to apr_crypto_block_key_mode_t. - * - * @param modes - hashtable of key modes keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ -static apr_status_t crypto_get_block_key_modes(apr_hash_t **modes, - const apr_crypto_t *f) -{ - *modes = f->modes; - return APR_SUCCESS; -} - -/* - * Work out which mechanism to use. - */ -static apr_status_t crypto_cipher_mechanism(apr_crypto_key_t *key, - const apr_crypto_block_key_type_e type, - const apr_crypto_block_key_mode_e mode, const int doPad, apr_pool_t *p) -{ - /* determine the cipher to be used */ - switch (type) { - - case (APR_KEY_3DES_192): - - /* A 3DES key */ - if (mode == APR_MODE_CBC) { - key->cipher = EVP_des_ede3_cbc(); - } - else { - key->cipher = EVP_des_ede3_ecb(); - } - break; - - case (APR_KEY_AES_128): - - if (mode == APR_MODE_CBC) { - key->cipher = EVP_aes_128_cbc(); - } - else { - key->cipher = EVP_aes_128_ecb(); - } - break; - - case (APR_KEY_AES_192): - - if (mode == APR_MODE_CBC) { - key->cipher = EVP_aes_192_cbc(); - } - else { - key->cipher = EVP_aes_192_ecb(); - } - break; - - case (APR_KEY_AES_256): - - if (mode == APR_MODE_CBC) { - key->cipher = EVP_aes_256_cbc(); - } - else { - key->cipher = EVP_aes_256_ecb(); - } - break; - - default: - - /* unknown key type, give up */ - return APR_EKEYTYPE; - - } - - /* find the length of the key we need */ - key->keyLen = EVP_CIPHER_key_length(key->cipher); - - /* make space for the key */ - key->key = apr_pcalloc(p, key->keyLen); - if (!key->key) { - return APR_ENOMEM; - } - apr_crypto_clear(p, key->key, key->keyLen); - - return APR_SUCCESS; -} - -/** - * @brief Create a key from the provided secret or passphrase. The key is cleaned - * up when the context is cleaned, and may be reused with multiple encryption - * or decryption operations. - * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If - * *key is not NULL, *key must point at a previously created structure. - * @param key The key returned, see note. - * @param rec The key record, from which the key will be derived. - * @param f The context to use. - * @param p The pool to use. - * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend - * error occurred while generating the key. APR_ENOCIPHER if the type or mode - * is not supported by the particular backend. APR_EKEYTYPE if the key type is - * not known. APR_EPADDING if padding was requested but is not supported. - * APR_ENOTIMPL if not implemented. - */ -static apr_status_t crypto_key(apr_crypto_key_t **k, - const apr_crypto_key_rec_t *rec, const apr_crypto_t *f, apr_pool_t *p) -{ - apr_crypto_key_t *key = *k; - apr_status_t rv; - - if (!key) { - *k = key = apr_pcalloc(p, sizeof *key); - if (!key) { - return APR_ENOMEM; - } - } - - key->f = f; - key->provider = f->provider; - - /* decide on what cipher mechanism we will be using */ - rv = crypto_cipher_mechanism(key, rec->type, rec->mode, rec->pad, p); - if (APR_SUCCESS != rv) { - return rv; - } - - switch (rec->ktype) { - - case APR_CRYPTO_KTYPE_PASSPHRASE: { - - /* generate the key */ - if (PKCS5_PBKDF2_HMAC_SHA1(rec->k.passphrase.pass, - rec->k.passphrase.passLen, - (unsigned char *) rec->k.passphrase.salt, - rec->k.passphrase.saltLen, rec->k.passphrase.iterations, - key->keyLen, key->key) == 0) { - return APR_ENOKEY; - } - - break; - } - - case APR_CRYPTO_KTYPE_SECRET: { - - /* sanity check - key correct size? */ - if (rec->k.secret.secretLen != key->keyLen) { - return APR_EKEYLENGTH; - } - - /* copy the key */ - memcpy(key->key, rec->k.secret.secret, rec->k.secret.secretLen); - - break; - } - - default: { - - return APR_ENOKEY; - - } - } - - key->doPad = rec->pad; - - /* note: openssl incorrectly returns non zero IV size values for ECB - * algorithms, so work around this by ignoring the IV size. - */ - if (APR_MODE_ECB != rec->mode) { - key->ivSize = EVP_CIPHER_iv_length(key->cipher); - } - - return APR_SUCCESS; -} - -/** - * @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 Iteration count - * @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. - */ -static apr_status_t crypto_passphrase(apr_crypto_key_t **k, 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) -{ - apr_crypto_key_t *key = *k; - apr_status_t rv; - - if (!key) { - *k = key = apr_pcalloc(p, sizeof *key); - if (!key) { - return APR_ENOMEM; - } - } - - key->f = f; - key->provider = f->provider; - - /* decide on what cipher mechanism we will be using */ - rv = crypto_cipher_mechanism(key, type, mode, doPad, p); - if (APR_SUCCESS != rv) { - return rv; - } - - /* generate the key */ - if (PKCS5_PBKDF2_HMAC_SHA1(pass, passLen, (unsigned char *) salt, saltLen, - iterations, key->keyLen, key->key) == 0) { - return APR_ENOKEY; - } - - key->doPad = doPad; - - /* note: openssl incorrectly returns non zero IV size values for ECB - * algorithms, so work around this by ignoring the IV size. - */ - if (APR_MODE_ECB != mode) { - key->ivSize = EVP_CIPHER_iv_length(key->cipher); - } - if (ivSize) { - *ivSize = key->ivSize; - } - - return APR_SUCCESS; -} - -/** - * @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. - * @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. - */ -static apr_status_t 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) -{ - unsigned char *usedIv; - apr_crypto_config_t *config = key->f->config; - apr_crypto_block_t *block = *ctx; - if (!block) { - *ctx = block = apr_pcalloc(p, sizeof(apr_crypto_block_t)); - } - if (!block) { - return APR_ENOMEM; - } - block->f = key->f; - block->pool = p; - block->provider = key->provider; - - apr_pool_cleanup_register(p, block, crypto_block_cleanup_helper, - apr_pool_cleanup_null); - - /* create a new context for encryption */ - if (!block->initialised) { - block->cipherCtx = EVP_CIPHER_CTX_new(); - block->initialised = 1; - } - - /* generate an IV, if necessary */ - usedIv = NULL; - if (key->ivSize) { - if (iv == NULL) { - return APR_ENOIV; - } - if (*iv == NULL) { - usedIv = apr_pcalloc(p, key->ivSize); - if (!usedIv) { - return APR_ENOMEM; - } - apr_crypto_clear(p, usedIv, key->ivSize); - if (!((RAND_status() == 1) - && (RAND_bytes(usedIv, key->ivSize) == 1))) { - return APR_ENOIV; - } - *iv = usedIv; - } - else { - usedIv = (unsigned char *) *iv; - } - } - - /* set up our encryption context */ -#if CRYPTO_OPENSSL_CONST_BUFFERS - if (!EVP_EncryptInit_ex(block->cipherCtx, key->cipher, config->engine, - key->key, usedIv)) { -#else - if (!EVP_EncryptInit_ex(block->cipherCtx, key->cipher, config->engine, (unsigned char *) key->key, (unsigned char *) usedIv)) { -#endif - return APR_EINIT; - } - - /* Clear up any read padding */ - if (!EVP_CIPHER_CTX_set_padding(block->cipherCtx, key->doPad)) { - return APR_EPADDING; - } - - if (blockSize) { - *blockSize = EVP_CIPHER_block_size(key->cipher); - } - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_encrypt(unsigned char **out, - apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, - apr_crypto_block_t *ctx) -{ - int outl = *outlen; - unsigned char *buffer; - - /* are we after the maximum size of the out buffer? */ - if (!out) { - *outlen = inlen + EVP_MAX_BLOCK_LENGTH; - return APR_SUCCESS; - } - - /* must we allocate the output buffer from a pool? */ - if (!*out) { - buffer = apr_palloc(ctx->pool, inlen + EVP_MAX_BLOCK_LENGTH); - if (!buffer) { - return APR_ENOMEM; - } - apr_crypto_clear(ctx->pool, buffer, inlen + EVP_MAX_BLOCK_LENGTH); - *out = buffer; - } - -#if CRYPT_OPENSSL_CONST_BUFFERS - if (!EVP_EncryptUpdate(ctx->cipherCtx, (*out), &outl, in, inlen)) { -#else - if (!EVP_EncryptUpdate(ctx->cipherCtx, (*out), &outl, - (unsigned char *) in, inlen)) { -#endif -#if APR_USE_OPENSSL_PRE_1_1_API - EVP_CIPHER_CTX_cleanup(ctx->cipherCtx); -#else - EVP_CIPHER_CTX_reset(ctx->cipherCtx); -#endif - return APR_ECRYPT; - } - *outlen = outl; - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_encrypt_finish(unsigned char *out, - apr_size_t *outlen, apr_crypto_block_t *ctx) -{ - apr_status_t rc = APR_SUCCESS; - int len = *outlen; - - if (EVP_EncryptFinal_ex(ctx->cipherCtx, out, &len) == 0) { - rc = APR_EPADDING; - } - else { - *outlen = len; - } -#if APR_USE_OPENSSL_PRE_1_1_API - EVP_CIPHER_CTX_cleanup(ctx->cipherCtx); -#else - EVP_CIPHER_CTX_reset(ctx->cipherCtx); -#endif - - return rc; - -} - -/** - * @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. If the buffer pointed to is NULL, - * an IV will be created at random, in space allocated from the pool. - * If the buffer is not NULL, the IV in the buffer will be used. - * @param key The key structure. - * @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. - */ -static apr_status_t 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) -{ - apr_crypto_config_t *config = key->f->config; - apr_crypto_block_t *block = *ctx; - if (!block) { - *ctx = block = apr_pcalloc(p, sizeof(apr_crypto_block_t)); - } - if (!block) { - return APR_ENOMEM; - } - block->f = key->f; - block->pool = p; - block->provider = key->provider; - - apr_pool_cleanup_register(p, block, crypto_block_cleanup_helper, - apr_pool_cleanup_null); - - /* create a new context for encryption */ - if (!block->initialised) { - block->cipherCtx = EVP_CIPHER_CTX_new(); - block->initialised = 1; - } - - /* generate an IV, if necessary */ - if (key->ivSize) { - if (iv == NULL) { - return APR_ENOIV; - } - } - - /* set up our encryption context */ -#if CRYPTO_OPENSSL_CONST_BUFFERS - if (!EVP_DecryptInit_ex(block->cipherCtx, key->cipher, config->engine, - key->key, iv)) { -#else - if (!EVP_DecryptInit_ex(block->cipherCtx, key->cipher, config->engine, (unsigned char *) key->key, (unsigned char *) iv)) { -#endif - return APR_EINIT; - } - - /* Clear up any read padding */ - if (!EVP_CIPHER_CTX_set_padding(block->cipherCtx, key->doPad)) { - return APR_EPADDING; - } - - if (blockSize) { - *blockSize = EVP_CIPHER_block_size(key->cipher); - } - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_decrypt(unsigned char **out, - apr_size_t *outlen, const unsigned char *in, apr_size_t inlen, - apr_crypto_block_t *ctx) -{ - int outl = *outlen; - unsigned char *buffer; - - /* are we after the maximum size of the out buffer? */ - if (!out) { - *outlen = inlen + EVP_MAX_BLOCK_LENGTH; - return APR_SUCCESS; - } - - /* must we allocate the output buffer from a pool? */ - if (!(*out)) { - buffer = apr_palloc(ctx->pool, inlen + EVP_MAX_BLOCK_LENGTH); - if (!buffer) { - return APR_ENOMEM; - } - apr_crypto_clear(ctx->pool, buffer, inlen + EVP_MAX_BLOCK_LENGTH); - *out = buffer; - } - -#if CRYPT_OPENSSL_CONST_BUFFERS - if (!EVP_DecryptUpdate(ctx->cipherCtx, *out, &outl, in, inlen)) { -#else - if (!EVP_DecryptUpdate(ctx->cipherCtx, *out, &outl, (unsigned char *) in, - inlen)) { -#endif -#if APR_USE_OPENSSL_PRE_1_1_API - EVP_CIPHER_CTX_cleanup(ctx->cipherCtx); -#else - EVP_CIPHER_CTX_reset(ctx->cipherCtx); -#endif - return APR_ECRYPT; - } - *outlen = outl; - - return APR_SUCCESS; - -} - -/** - * @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. - */ -static apr_status_t crypto_block_decrypt_finish(unsigned char *out, - apr_size_t *outlen, apr_crypto_block_t *ctx) -{ - apr_status_t rc = APR_SUCCESS; - int len = *outlen; - - if (EVP_DecryptFinal_ex(ctx->cipherCtx, out, &len) == 0) { - rc = APR_EPADDING; - } - else { - *outlen = len; - } -#if APR_USE_OPENSSL_PRE_1_1_API - EVP_CIPHER_CTX_cleanup(ctx->cipherCtx); -#else - EVP_CIPHER_CTX_reset(ctx->cipherCtx); -#endif - - return rc; - -} - -/** - * OpenSSL module. - */ -APU_MODULE_DECLARE_DATA const apr_crypto_driver_t apr_crypto_openssl_driver = { - "openssl", crypto_init, crypto_make, crypto_get_block_key_types, - crypto_get_block_key_modes, crypto_passphrase, - crypto_block_encrypt_init, crypto_block_encrypt, - crypto_block_encrypt_finish, crypto_block_decrypt_init, - crypto_block_decrypt, crypto_block_decrypt_finish, - crypto_block_cleanup, crypto_cleanup, crypto_shutdown, crypto_error, - crypto_key -}; - -#endif Index: contrib/apr-util/crypto/apr_md4.c =================================================================== --- contrib/apr-util/crypto/apr_md4.c +++ /dev/null @@ -1,404 +0,0 @@ -/* 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. - */ - -#include "apr_strings.h" -#include "apr_md4.h" -#include "apr_lib.h" - -#if APR_HAVE_STRING_H -#include -#endif -#if APR_HAVE_UNISTD_H -#include -#endif - -/* Constants for MD4Transform routine. - */ - -#define S11 3 -#define S12 7 -#define S13 11 -#define S14 19 -#define S21 3 -#define S22 5 -#define S23 9 -#define S24 13 -#define S31 3 -#define S32 9 -#define S33 11 -#define S34 15 - -static void MD4Transform(apr_uint32_t state[4], const unsigned char block[64]); -static void Encode(unsigned char *output, const apr_uint32_t *input, - unsigned int len); -static void Decode(apr_uint32_t *output, const unsigned char *input, - unsigned int len); - -static unsigned char PADDING[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -#if APR_CHARSET_EBCDIC -static apr_xlate_t *xlate_ebcdic_to_ascii; /* used in apr_md4_encode() */ -#endif - -/* F, G and I are basic MD4 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG and HH are transformations for rounds 1, 2 and 3 */ -/* Rotation is separate from addition to prevent recomputation */ - -#define FF(a, b, c, d, x, s) { \ - (a) += F ((b), (c), (d)) + (x); \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define GG(a, b, c, d, x, s) { \ - (a) += G ((b), (c), (d)) + (x) + (apr_uint32_t)0x5a827999; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define HH(a, b, c, d, x, s) { \ - (a) += H ((b), (c), (d)) + (x) + (apr_uint32_t)0x6ed9eba1; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } - -/* MD4 initialization. Begins an MD4 operation, writing a new context. - */ -APU_DECLARE(apr_status_t) apr_md4_init(apr_md4_ctx_t *context) -{ - context->count[0] = context->count[1] = 0; - - /* Load magic initialization constants. */ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; - -#if APR_HAS_XLATE - context->xlate = NULL; -#endif - - return APR_SUCCESS; -} - -#if APR_HAS_XLATE -/* MD4 translation setup. Provides the APR translation handle - * to be used for translating the content before calculating the - * digest. - */ -APU_DECLARE(apr_status_t) apr_md4_set_xlate(apr_md4_ctx_t *context, - apr_xlate_t *xlate) -{ - apr_status_t rv; - int is_sb; - - /* TODO: remove the single-byte-only restriction from this code - */ - rv = apr_xlate_sb_get(xlate, &is_sb); - if (rv != APR_SUCCESS) { - return rv; - } - if (!is_sb) { - return APR_EINVAL; - } - context->xlate = xlate; - return APR_SUCCESS; -} -#endif /* APR_HAS_XLATE */ - -/* MD4 block update operation. Continues an MD4 message-digest - * operation, processing another message block, and updating the - * context. - */ -APU_DECLARE(apr_status_t) apr_md4_update(apr_md4_ctx_t *context, - const unsigned char *input, - apr_size_t inputLen) -{ - unsigned int i, idx, partLen; -#if APR_HAS_XLATE - apr_size_t inbytes_left, outbytes_left; -#endif - - /* Compute number of bytes mod 64 */ - idx = (unsigned int)((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if ((context->count[0] += ((apr_uint32_t)inputLen << 3)) - < ((apr_uint32_t)inputLen << 3)) - context->count[1]++; - context->count[1] += (apr_uint32_t)inputLen >> 29; - - partLen = 64 - idx; - - /* Transform as many times as possible. */ -#if !APR_HAS_XLATE - if (inputLen >= partLen) { - memcpy(&context->buffer[idx], input, partLen); - MD4Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD4Transform(context->state, &input[i]); - - idx = 0; - } - else - i = 0; - - /* Buffer remaining input */ - memcpy(&context->buffer[idx], &input[i], inputLen - i); -#else /*APR_HAS_XLATE*/ - if (inputLen >= partLen) { - if (context->xlate) { - inbytes_left = outbytes_left = partLen; - apr_xlate_conv_buffer(context->xlate, (const char *)input, - &inbytes_left, - (char *)&context->buffer[idx], - &outbytes_left); - } - else { - memcpy(&context->buffer[idx], input, partLen); - } - MD4Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) { - if (context->xlate) { - unsigned char inp_tmp[64]; - inbytes_left = outbytes_left = 64; - apr_xlate_conv_buffer(context->xlate, (const char *)&input[i], - &inbytes_left, - (char *)inp_tmp, &outbytes_left); - MD4Transform(context->state, inp_tmp); - } - else { - MD4Transform(context->state, &input[i]); - } - } - - idx = 0; - } - else - i = 0; - - /* Buffer remaining input */ - if (context->xlate) { - inbytes_left = outbytes_left = inputLen - i; - apr_xlate_conv_buffer(context->xlate, (const char *)&input[i], - &inbytes_left, (char *)&context->buffer[idx], - &outbytes_left); - } - else { - memcpy(&context->buffer[idx], &input[i], inputLen - i); - } -#endif /*APR_HAS_XLATE*/ - return APR_SUCCESS; -} - -/* MD4 finalization. Ends an MD4 message-digest operation, writing the - * the message digest and zeroizing the context. - */ -APU_DECLARE(apr_status_t) apr_md4_final( - unsigned char digest[APR_MD4_DIGESTSIZE], - apr_md4_ctx_t *context) -{ - unsigned char bits[8]; - unsigned int idx, padLen; - - /* Save number of bits */ - Encode(bits, context->count, 8); - -#if APR_HAS_XLATE - /* apr_md4_update() should not translate for this final round. */ - context->xlate = NULL; -#endif /*APR_HAS_XLATE*/ - - /* Pad out to 56 mod 64. */ - idx = (unsigned int) ((context->count[0] >> 3) & 0x3f); - padLen = (idx < 56) ? (56 - idx) : (120 - idx); - apr_md4_update(context, PADDING, padLen); - - /* Append length (before padding) */ - apr_md4_update(context, bits, 8); - - /* Store state in digest */ - Encode(digest, context->state, APR_MD4_DIGESTSIZE); - - /* Zeroize sensitive information. */ - memset(context, 0, sizeof(*context)); - - return APR_SUCCESS; -} - -/* MD4 computation in one step (init, update, final) - */ -APU_DECLARE(apr_status_t) apr_md4(unsigned char digest[APR_MD4_DIGESTSIZE], - const unsigned char *input, - apr_size_t inputLen) -{ - apr_md4_ctx_t ctx; - apr_status_t rv; - - apr_md4_init(&ctx); - - if ((rv = apr_md4_update(&ctx, input, inputLen)) != APR_SUCCESS) - return rv; - - return apr_md4_final(digest, &ctx); -} - -/* MD4 basic transformation. Transforms state based on block. */ -static void MD4Transform(apr_uint32_t state[4], const unsigned char block[64]) -{ - apr_uint32_t a = state[0], b = state[1], c = state[2], d = state[3], - x[APR_MD4_DIGESTSIZE]; - - Decode(x, block, 64); - - /* Round 1 */ - FF (a, b, c, d, x[ 0], S11); /* 1 */ - FF (d, a, b, c, x[ 1], S12); /* 2 */ - FF (c, d, a, b, x[ 2], S13); /* 3 */ - FF (b, c, d, a, x[ 3], S14); /* 4 */ - FF (a, b, c, d, x[ 4], S11); /* 5 */ - FF (d, a, b, c, x[ 5], S12); /* 6 */ - FF (c, d, a, b, x[ 6], S13); /* 7 */ - FF (b, c, d, a, x[ 7], S14); /* 8 */ - FF (a, b, c, d, x[ 8], S11); /* 9 */ - FF (d, a, b, c, x[ 9], S12); /* 10 */ - FF (c, d, a, b, x[10], S13); /* 11 */ - FF (b, c, d, a, x[11], S14); /* 12 */ - FF (a, b, c, d, x[12], S11); /* 13 */ - FF (d, a, b, c, x[13], S12); /* 14 */ - FF (c, d, a, b, x[14], S13); /* 15 */ - FF (b, c, d, a, x[15], S14); /* 16 */ - - /* Round 2 */ - GG (a, b, c, d, x[ 0], S21); /* 17 */ - GG (d, a, b, c, x[ 4], S22); /* 18 */ - GG (c, d, a, b, x[ 8], S23); /* 19 */ - GG (b, c, d, a, x[12], S24); /* 20 */ - GG (a, b, c, d, x[ 1], S21); /* 21 */ - GG (d, a, b, c, x[ 5], S22); /* 22 */ - GG (c, d, a, b, x[ 9], S23); /* 23 */ - GG (b, c, d, a, x[13], S24); /* 24 */ - GG (a, b, c, d, x[ 2], S21); /* 25 */ - GG (d, a, b, c, x[ 6], S22); /* 26 */ - GG (c, d, a, b, x[10], S23); /* 27 */ - GG (b, c, d, a, x[14], S24); /* 28 */ - GG (a, b, c, d, x[ 3], S21); /* 29 */ - GG (d, a, b, c, x[ 7], S22); /* 30 */ - GG (c, d, a, b, x[11], S23); /* 31 */ - GG (b, c, d, a, x[15], S24); /* 32 */ - - /* Round 3 */ - HH (a, b, c, d, x[ 0], S31); /* 33 */ - HH (d, a, b, c, x[ 8], S32); /* 34 */ - HH (c, d, a, b, x[ 4], S33); /* 35 */ - HH (b, c, d, a, x[12], S34); /* 36 */ - HH (a, b, c, d, x[ 2], S31); /* 37 */ - HH (d, a, b, c, x[10], S32); /* 38 */ - HH (c, d, a, b, x[ 6], S33); /* 39 */ - HH (b, c, d, a, x[14], S34); /* 40 */ - HH (a, b, c, d, x[ 1], S31); /* 41 */ - HH (d, a, b, c, x[ 9], S32); /* 42 */ - HH (c, d, a, b, x[ 5], S33); /* 43 */ - HH (b, c, d, a, x[13], S34); /* 44 */ - HH (a, b, c, d, x[ 3], S31); /* 45 */ - HH (d, a, b, c, x[11], S32); /* 46 */ - HH (c, d, a, b, x[ 7], S33); /* 47 */ - HH (b, c, d, a, x[15], S34); /* 48 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. */ - memset(x, 0, sizeof(x)); -} - -/* Encodes input (apr_uint32_t) into output (unsigned char). Assumes len is - * a multiple of 4. - */ -static void Encode(unsigned char *output, const apr_uint32_t *input, - unsigned int len) -{ - unsigned int i, j; - apr_uint32_t k; - - for (i = 0, j = 0; j < len; i++, j += 4) { - k = input[i]; - output[j] = (unsigned char)(k & 0xff); - output[j + 1] = (unsigned char)((k >> 8) & 0xff); - output[j + 2] = (unsigned char)((k >> 16) & 0xff); - output[j + 3] = (unsigned char)((k >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (apr_uint32_t). Assumes len is - * a multiple of 4. - */ -static void Decode(apr_uint32_t *output, const unsigned char *input, - unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((apr_uint32_t)input[j]) | - (((apr_uint32_t)input[j + 1]) << 8) | - (((apr_uint32_t)input[j + 2]) << 16) | - (((apr_uint32_t)input[j + 3]) << 24); -} - -#if APR_CHARSET_EBCDIC -APU_DECLARE(apr_status_t) apr_MD4InitEBCDIC(apr_xlate_t *xlate) -{ - xlate_ebcdic_to_ascii = xlate; - return APR_SUCCESS; -} -#endif Index: contrib/apr-util/crypto/apr_md5.c =================================================================== --- contrib/apr-util/crypto/apr_md5.c +++ /dev/null @@ -1,666 +0,0 @@ -/* - * 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. - */ - -/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm - */ - -/* 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. - */ - -/* - * The apr_md5_encode() routine uses much code obtained from the FreeBSD 3.0 - * MD5 crypt() function, which is licenced as follows: - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - */ -#include "apr_strings.h" -#include "apr_md5.h" -#include "apr_lib.h" -#include "apu_config.h" - -#if APR_HAVE_STRING_H -#include -#endif - -/* Constants for MD5Transform routine. - */ - -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static void MD5Transform(apr_uint32_t state[4], const unsigned char block[64]); -static void Encode(unsigned char *output, const apr_uint32_t *input, - unsigned int len); -static void Decode(apr_uint32_t *output, const unsigned char *input, - unsigned int len); - -static const unsigned char PADDING[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -#if APR_CHARSET_EBCDIC -static apr_xlate_t *xlate_ebcdic_to_ascii; /* used in apr_md5_encode() */ -#endif -#define DO_XLATE 0 -#define SKIP_XLATE 1 - -/* F, G, H and I are basic MD5 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. - * Rotation is separate from addition to prevent recomputation. - */ -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -/* MD5 initialization. Begins an MD5 operation, writing a new context. - */ -APU_DECLARE(apr_status_t) apr_md5_init(apr_md5_ctx_t *context) -{ - context->count[0] = context->count[1] = 0; - - /* Load magic initialization constants. */ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; - context->xlate = NULL; - - return APR_SUCCESS; -} - -/* MD5 translation setup. Provides the APR translation handle - * to be used for translating the content before calculating the - * digest. - */ -APU_DECLARE(apr_status_t) apr_md5_set_xlate(apr_md5_ctx_t *context, - apr_xlate_t *xlate) -{ -#if APR_HAS_XLATE - apr_status_t rv; - int is_sb; - - /* TODO: remove the single-byte-only restriction from this code - */ - rv = apr_xlate_sb_get(xlate, &is_sb); - if (rv != APR_SUCCESS) { - return rv; - } - if (!is_sb) { - return APR_EINVAL; - } - context->xlate = xlate; - return APR_SUCCESS; -#else - return APR_ENOTIMPL; -#endif /* APR_HAS_XLATE */ -} - -/* MD5 block update operation. Continues an MD5 message-digest - * operation, processing another message block, and updating the - * context. - */ -static apr_status_t md5_update_buffer(apr_md5_ctx_t *context, - const void *vinput, - apr_size_t inputLen, - int xlate_buffer) -{ - const unsigned char *input = vinput; - unsigned int i, idx, partLen; -#if APR_HAS_XLATE - apr_size_t inbytes_left, outbytes_left; -#endif - - /* Compute number of bytes mod 64 */ - idx = (unsigned int)((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if ((context->count[0] += ((apr_uint32_t)inputLen << 3)) - < ((apr_uint32_t)inputLen << 3)) - context->count[1]++; - context->count[1] += (apr_uint32_t)inputLen >> 29; - - partLen = 64 - idx; - - /* Transform as many times as possible. */ -#if !APR_HAS_XLATE - if (inputLen >= partLen) { - memcpy(&context->buffer[idx], input, partLen); - MD5Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD5Transform(context->state, &input[i]); - - idx = 0; - } - else - i = 0; - - /* Buffer remaining input */ - memcpy(&context->buffer[idx], &input[i], inputLen - i); -#else /*APR_HAS_XLATE*/ - if (inputLen >= partLen) { - if (context->xlate && (xlate_buffer == DO_XLATE)) { - inbytes_left = outbytes_left = partLen; - apr_xlate_conv_buffer(context->xlate, (const char *)input, - &inbytes_left, - (char *)&context->buffer[idx], - &outbytes_left); - } - else { - memcpy(&context->buffer[idx], input, partLen); - } - MD5Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) { - if (context->xlate && (xlate_buffer == DO_XLATE)) { - unsigned char inp_tmp[64]; - inbytes_left = outbytes_left = 64; - apr_xlate_conv_buffer(context->xlate, (const char *)&input[i], - &inbytes_left, (char *)inp_tmp, - &outbytes_left); - MD5Transform(context->state, inp_tmp); - } - else { - MD5Transform(context->state, &input[i]); - } - } - - idx = 0; - } - else - i = 0; - - /* Buffer remaining input */ - if (context->xlate && (xlate_buffer == DO_XLATE)) { - inbytes_left = outbytes_left = inputLen - i; - apr_xlate_conv_buffer(context->xlate, (const char *)&input[i], - &inbytes_left, (char *)&context->buffer[idx], - &outbytes_left); - } - else { - memcpy(&context->buffer[idx], &input[i], inputLen - i); - } -#endif /*APR_HAS_XLATE*/ - return APR_SUCCESS; -} - -/* MD5 block update operation. API with the default setting - * for EBCDIC translations - */ -APU_DECLARE(apr_status_t) apr_md5_update(apr_md5_ctx_t *context, - const void *input, - apr_size_t inputLen) -{ - return md5_update_buffer(context, input, inputLen, DO_XLATE); -} - -/* MD5 finalization. Ends an MD5 message-digest operation, writing the - * the message digest and zeroizing the context. - */ -APU_DECLARE(apr_status_t) apr_md5_final(unsigned char digest[APR_MD5_DIGESTSIZE], - apr_md5_ctx_t *context) -{ - unsigned char bits[8]; - unsigned int idx, padLen; - - /* Save number of bits */ - Encode(bits, context->count, 8); - -#if APR_HAS_XLATE - /* apr_md5_update() should not translate for this final round. */ - context->xlate = NULL; -#endif /*APR_HAS_XLATE*/ - - /* Pad out to 56 mod 64. */ - idx = (unsigned int)((context->count[0] >> 3) & 0x3f); - padLen = (idx < 56) ? (56 - idx) : (120 - idx); - apr_md5_update(context, PADDING, padLen); - - /* Append length (before padding) */ - apr_md5_update(context, bits, 8); - - /* Store state in digest */ - Encode(digest, context->state, APR_MD5_DIGESTSIZE); - - /* Zeroize sensitive information. */ - memset(context, 0, sizeof(*context)); - - return APR_SUCCESS; -} - -/* MD5 in one step (init, update, final) - */ -APU_DECLARE(apr_status_t) apr_md5(unsigned char digest[APR_MD5_DIGESTSIZE], - const void *_input, - apr_size_t inputLen) -{ - const unsigned char *input = _input; - apr_md5_ctx_t ctx; - apr_status_t rv; - - apr_md5_init(&ctx); - - if ((rv = apr_md5_update(&ctx, input, inputLen)) != APR_SUCCESS) - return rv; - - return apr_md5_final(digest, &ctx); -} - -/* MD5 basic transformation. Transforms state based on block. */ -static void MD5Transform(apr_uint32_t state[4], const unsigned char block[64]) -{ - apr_uint32_t a = state[0], b = state[1], c = state[2], d = state[3], - tmpbuf[APR_MD5_DIGESTSIZE]; - const apr_uint32_t *x; - -#if !APR_IS_BIGENDIAN - if ((apr_uintptr_t)block % sizeof(apr_uint32_t) == 0) { - x = (apr_uint32_t *)block; - } else -#endif - { - Decode(tmpbuf, block, 64); - x = tmpbuf; - } - - /* Round 1 */ - FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ - FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ - FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ - FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ - FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ - FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ - FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ - FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ - FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ - FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ - FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ - GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ - GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ - GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ - GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ - GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ - GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ - GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ - GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ - GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ - GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ - HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ - HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ - HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ - HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ - HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ - HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ - HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ - HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ - HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ - II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ - II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ - II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ - II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ - II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ - II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ - II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ - II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ - II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ - II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - -#if !APR_IS_BIGENDIAN - if (x == tmpbuf) -#endif - { - /* Zeroize sensitive information. */ - memset(tmpbuf, 0, sizeof(tmpbuf)); - } -} - -/* Encodes input (apr_uint32_t) into output (unsigned char). Assumes len is - * a multiple of 4. - */ -static void Encode(unsigned char *output, const apr_uint32_t *input, - unsigned int len) -{ - unsigned int i, j; - apr_uint32_t k; - - for (i = 0, j = 0; j < len; i++, j += 4) { - k = input[i]; - output[j] = (unsigned char)(k & 0xff); - output[j + 1] = (unsigned char)((k >> 8) & 0xff); - output[j + 2] = (unsigned char)((k >> 16) & 0xff); - output[j + 3] = (unsigned char)((k >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (apr_uint32_t). Assumes len is - * a multiple of 4. - */ -static void Decode(apr_uint32_t *output, const unsigned char *input, - unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((apr_uint32_t)input[j]) | - (((apr_uint32_t)input[j + 1]) << 8) | - (((apr_uint32_t)input[j + 2]) << 16) | - (((apr_uint32_t)input[j + 3]) << 24); -} - -#if APR_CHARSET_EBCDIC -APU_DECLARE(apr_status_t) apr_MD5InitEBCDIC(apr_xlate_t *xlate) -{ - xlate_ebcdic_to_ascii = xlate; - return APR_SUCCESS; -} -#endif - -/* - * Define the Magic String prefix that identifies a password as being - * hashed using our algorithm. - */ -static const char * const apr1_id = "$apr1$"; - -/* - * The following MD5 password encryption code was largely borrowed from - * the FreeBSD 3.0 /usr/src/lib/libcrypt/crypt.c file, which is - * licenced as stated at the top of this file. - */ - -static void to64(char *s, unsigned long v, int n) -{ - static unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */ - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - while (--n >= 0) { - *s++ = itoa64[v&0x3f]; - v >>= 6; - } -} - -APU_DECLARE(apr_status_t) apr_md5_encode(const char *pw, const char *salt, - char *result, apr_size_t nbytes) -{ - /* - * Minimum size is 8 bytes for salt, plus 1 for the trailing NUL, - * plus 4 for the '$' separators, plus the password hash itself. - * Let's leave a goodly amount of leeway. - */ - - char passwd[120], *p; - const char *sp, *ep; - unsigned char final[APR_MD5_DIGESTSIZE]; - apr_ssize_t sl, pl, i; - apr_md5_ctx_t ctx, ctx1; - unsigned long l; - - /* - * Refine the salt first. It's possible we were given an already-hashed - * string as the salt argument, so extract the actual salt value from it - * if so. Otherwise just use the string up to the first '$' as the salt. - */ - sp = salt; - - /* - * If it starts with the magic string, then skip that. - */ - if (!strncmp(sp, apr1_id, strlen(apr1_id))) { - sp += strlen(apr1_id); - } - - /* - * It stops at the first '$' or 8 chars, whichever comes first - */ - for (ep = sp; (*ep != '\0') && (*ep != '$') && (ep < (sp + 8)); ep++) { - continue; - } - - /* - * Get the length of the true salt - */ - sl = ep - sp; - - /* - * 'Time to make the doughnuts..' - */ - apr_md5_init(&ctx); -#if APR_CHARSET_EBCDIC - apr_md5_set_xlate(&ctx, xlate_ebcdic_to_ascii); -#endif - - /* - * The password first, since that is what is most unknown - */ - apr_md5_update(&ctx, pw, strlen(pw)); - - /* - * Then our magic string - */ - apr_md5_update(&ctx, apr1_id, strlen(apr1_id)); - - /* - * Then the raw salt - */ - apr_md5_update(&ctx, sp, sl); - - /* - * Then just as many characters of the MD5(pw, salt, pw) - */ - apr_md5_init(&ctx1); -#if APR_CHARSET_EBCDIC - apr_md5_set_xlate(&ctx1, xlate_ebcdic_to_ascii); -#endif - apr_md5_update(&ctx1, pw, strlen(pw)); - apr_md5_update(&ctx1, sp, sl); - apr_md5_update(&ctx1, pw, strlen(pw)); - apr_md5_final(final, &ctx1); - for (pl = strlen(pw); pl > 0; pl -= APR_MD5_DIGESTSIZE) { - md5_update_buffer(&ctx, final, - (pl > APR_MD5_DIGESTSIZE) ? APR_MD5_DIGESTSIZE : pl, SKIP_XLATE); - } - - /* - * Don't leave anything around in vm they could use. - */ - memset(final, 0, sizeof(final)); - - /* - * Then something really weird... - */ - for (i = strlen(pw); i != 0; i >>= 1) { - if (i & 1) { - md5_update_buffer(&ctx, final, 1, SKIP_XLATE); - } - else { - apr_md5_update(&ctx, pw, 1); - } - } - - /* - * Now make the output string. We know our limitations, so we - * can use the string routines without bounds checking. - */ - strcpy(passwd, apr1_id); - strncat(passwd, sp, sl); - strcat(passwd, "$"); - - apr_md5_final(final, &ctx); - - /* - * And now, just to make sure things don't run too fast.. - * On a 60 Mhz Pentium this takes 34 msec, so you would - * need 30 seconds to build a 1000 entry dictionary... - */ - for (i = 0; i < 1000; i++) { - apr_md5_init(&ctx1); - /* - * apr_md5_final clears out ctx1.xlate at the end of each loop, - * so need to to set it each time through - */ -#if APR_CHARSET_EBCDIC - apr_md5_set_xlate(&ctx1, xlate_ebcdic_to_ascii); -#endif - if (i & 1) { - apr_md5_update(&ctx1, pw, strlen(pw)); - } - else { - md5_update_buffer(&ctx1, final, APR_MD5_DIGESTSIZE, SKIP_XLATE); - } - if (i % 3) { - apr_md5_update(&ctx1, sp, sl); - } - - if (i % 7) { - apr_md5_update(&ctx1, pw, strlen(pw)); - } - - if (i & 1) { - md5_update_buffer(&ctx1, final, APR_MD5_DIGESTSIZE, SKIP_XLATE); - } - else { - apr_md5_update(&ctx1, pw, strlen(pw)); - } - apr_md5_final(final,&ctx1); - } - - p = passwd + strlen(passwd); - - l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p, l, 4); p += 4; - l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p, l, 4); p += 4; - l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p, l, 4); p += 4; - l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p, l, 4); p += 4; - l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(p, l, 4); p += 4; - l = final[11] ; to64(p, l, 2); p += 2; - *p = '\0'; - - /* - * Don't leave anything around in vm they could use. - */ - memset(final, 0, sizeof(final)); - - apr_cpystrn(result, passwd, nbytes - 1); - return APR_SUCCESS; -} Index: contrib/apr-util/crypto/apr_passwd.c =================================================================== --- contrib/apr-util/crypto/apr_passwd.c +++ /dev/null @@ -1,200 +0,0 @@ -/* 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 "apr_strings.h" -#include "apr_md5.h" -#include "apr_lib.h" -#include "apr_sha1.h" -#include "apu_config.h" -#include "crypt_blowfish.h" - -#if APR_HAVE_STRING_H -#include -#endif -#if APR_HAVE_CRYPT_H -#include -#endif -#if APR_HAVE_UNISTD_H -#include -#endif -#if APR_HAVE_PTHREAD_H -#include -#endif -#if APR_HAVE_STDLIB_H -#include -#endif - -static const char * const apr1_id = "$apr1$"; - -#if !defined(WIN32) && !defined(BEOS) && !defined(NETWARE) -#if defined(APU_CRYPT_THREADSAFE) || !APR_HAS_THREADS || \ - defined(CRYPT_R_CRYPTD) || defined(CRYPT_R_STRUCT_CRYPT_DATA) - -#define crypt_mutex_lock() -#define crypt_mutex_unlock() - -#elif APR_HAVE_PTHREAD_H && defined(PTHREAD_MUTEX_INITIALIZER) - -static pthread_mutex_t crypt_mutex = PTHREAD_MUTEX_INITIALIZER; -static void crypt_mutex_lock(void) -{ - pthread_mutex_lock(&crypt_mutex); -} - -static void crypt_mutex_unlock(void) -{ - pthread_mutex_unlock(&crypt_mutex); -} - -#else - -#error apr_password_validate() is not threadsafe. rebuild APR without thread support. - -#endif -#endif - -#if defined(WIN32) || defined(BEOS) || defined(NETWARE) || defined(__ANDROID__) -#define CRYPT_MISSING 1 -#else -#define CRYPT_MISSING 0 -#endif - -/* - * Validate a plaintext password against a smashed one. Uses either - * crypt() (if available) or apr_md5_encode() or apr_sha1_base64(), depending - * upon the format of the smashed input password. Returns APR_SUCCESS if - * they match, or APR_EMISMATCH if they don't. If the platform doesn't - * support crypt, then the default check is against a clear text string. - */ -APU_DECLARE(apr_status_t) apr_password_validate(const char *passwd, - const char *hash) -{ - char sample[200]; -#if !CRYPT_MISSING - char *crypt_pw; -#endif - if (hash[0] == '$' - && hash[1] == '2' - && (hash[2] == 'a' || hash[2] == 'y') - && hash[3] == '$') { - if (_crypt_blowfish_rn(passwd, hash, sample, sizeof(sample)) == NULL) - return APR_FROM_OS_ERROR(errno); - } - else if (!strncmp(hash, apr1_id, strlen(apr1_id))) { - /* - * The hash was created using our custom algorithm. - */ - apr_md5_encode(passwd, hash, sample, sizeof(sample)); - } - else if (!strncmp(hash, APR_SHA1PW_ID, APR_SHA1PW_IDLEN)) { - apr_sha1_base64(passwd, (int)strlen(passwd), sample); - } - else { - /* - * It's not our algorithm, so feed it to crypt() if possible. - */ -#if CRYPT_MISSING - return (strcmp(passwd, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH; -#elif defined(CRYPT_R_CRYPTD) - apr_status_t rv; - CRYPTD *buffer = malloc(sizeof(*buffer)); - - if (buffer == NULL) - return APR_ENOMEM; - crypt_pw = crypt_r(passwd, hash, buffer); - if (!crypt_pw) - rv = APR_EMISMATCH; - else - rv = (strcmp(crypt_pw, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH; - free(buffer); - return rv; -#elif defined(CRYPT_R_STRUCT_CRYPT_DATA) - apr_status_t rv; - struct crypt_data *buffer = malloc(sizeof(*buffer)); - - if (buffer == NULL) - return APR_ENOMEM; - -#ifdef __GLIBC_PREREQ - /* - * For not too old glibc (>= 2.3.2), it's enough to set - * buffer.initialized = 0. For < 2.3.2 and for other platforms, - * we need to zero the whole struct. - */ -#if __GLIBC_PREREQ(2,4) -#define USE_CRYPT_DATA_INITALIZED -#endif -#endif - -#ifdef USE_CRYPT_DATA_INITALIZED - buffer->initialized = 0; -#else - memset(buffer, 0, sizeof(*buffer)); -#endif - - crypt_pw = crypt_r(passwd, hash, buffer); - if (!crypt_pw) - rv = APR_EMISMATCH; - else - rv = (strcmp(crypt_pw, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH; - free(buffer); - return rv; -#else - /* Do a bit of sanity checking since we know that crypt_r() - * should always be used for threaded builds on AIX, and - * problems in configure logic can result in the wrong - * choice being made. - */ -#if defined(_AIX) && APR_HAS_THREADS -#error Configuration error! crypt_r() should have been selected! -#endif - { - apr_status_t rv; - - /* Handle thread safety issues by holding a mutex around the - * call to crypt(). - */ - crypt_mutex_lock(); - crypt_pw = crypt(passwd, hash); - if (!crypt_pw) { - rv = APR_EMISMATCH; - } - else { - rv = (strcmp(crypt_pw, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH; - } - crypt_mutex_unlock(); - return rv; - } -#endif - } - return (strcmp(sample, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH; -} - -static const char * const bcrypt_id = "$2y$"; -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) -{ - char setting[40]; - if (_crypt_gensalt_blowfish_rn(bcrypt_id, count, (const char *)salt, - salt_len, setting, sizeof(setting)) == NULL) - return APR_FROM_OS_ERROR(errno); - if (_crypt_blowfish_rn(pw, setting, out, out_len) == NULL) - return APR_FROM_OS_ERROR(errno); - return APR_SUCCESS; -} Index: contrib/apr-util/crypto/apr_sha1.c =================================================================== --- contrib/apr-util/crypto/apr_sha1.c +++ /dev/null @@ -1,368 +0,0 @@ -/* 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 exported function: - * - * apr_sha1_base64(const char *clear, int len, char *out); - * - * provides a means to SHA1 crypt/encode a plaintext password in - * a way which makes password files compatible with those commonly - * used in netscape web and ldap installations. It was put together - * by Clinton Wong , who also notes that: - * - * Note: SHA1 support is useful for migration purposes, but is less - * secure than Apache's password format, since Apache's (MD5) - * password format uses a random eight character salt to generate - * one of many possible hashes for the same password. Netscape - * uses plain SHA1 without a salt, so the same password - * will always generate the same hash, making it easier - * to break since the search space is smaller. - * - * See also the documentation in support/SHA1 as to hints on how to - * migrate an existing netscape installation and other supplied utitlites. - * - * This software also makes use of the following component: - * - * NIST Secure Hash Algorithm - * heavily modified by Uwe Hollerbach uh@alumni.caltech edu - * from Peter C. Gutmann's implementation as found in - * Applied Cryptography by Bruce Schneier - * This code is hereby placed in the public domain - */ - -#include "apr_sha1.h" -#include "apr_base64.h" -#include "apr_strings.h" -#include "apr_lib.h" -#if APR_CHARSET_EBCDIC -#include "apr_xlate.h" -#endif /*APR_CHARSET_EBCDIC*/ -#include - -/* a bit faster & bigger, if defined */ -#define UNROLL_LOOPS - -/* NIST's proposed modification to SHA, 7/11/94 */ -#define USE_MODIFIED_SHA - -/* SHA f()-functions */ -#define f1(x,y,z) ((x & y) | (~x & z)) -#define f2(x,y,z) (x ^ y ^ z) -#define f3(x,y,z) ((x & y) | (x & z) | (y & z)) -#define f4(x,y,z) (x ^ y ^ z) - -/* SHA constants */ -#define CONST1 0x5a827999L -#define CONST2 0x6ed9eba1L -#define CONST3 0x8f1bbcdcL -#define CONST4 0xca62c1d6L - -/* 32-bit rotate */ - -#define ROT32(x,n) ((x << n) | (x >> (32 - n))) - -#define FUNC(n,i) \ - temp = ROT32(A,5) + f##n(B,C,D) + E + W[i] + CONST##n; \ - E = D; D = C; C = ROT32(B,30); B = A; A = temp - -#define SHA_BLOCKSIZE 64 - -#if APR_CHARSET_EBCDIC -static apr_xlate_t *ebcdic2ascii_xlate; - -APU_DECLARE(apr_status_t) apr_SHA1InitEBCDIC(apr_xlate_t *x) -{ - apr_status_t rv; - int onoff; - - /* Only single-byte conversion is supported. - */ - rv = apr_xlate_sb_get(x, &onoff); - if (rv) { - return rv; - } - if (!onoff) { /* If conversion is not single-byte-only */ - return APR_EINVAL; - } - ebcdic2ascii_xlate = x; - return APR_SUCCESS; -} -#endif - -/* do SHA transformation */ -static void sha_transform(apr_sha1_ctx_t *sha_info) -{ - int i; - apr_uint32_t temp, A, B, C, D, E, W[80]; - - for (i = 0; i < 16; ++i) { - W[i] = sha_info->data[i]; - } - for (i = 16; i < 80; ++i) { - W[i] = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16]; -#ifdef USE_MODIFIED_SHA - W[i] = ROT32(W[i], 1); -#endif /* USE_MODIFIED_SHA */ - } - A = sha_info->digest[0]; - B = sha_info->digest[1]; - C = sha_info->digest[2]; - D = sha_info->digest[3]; - E = sha_info->digest[4]; -#ifdef UNROLL_LOOPS - FUNC(1, 0); FUNC(1, 1); FUNC(1, 2); FUNC(1, 3); FUNC(1, 4); - FUNC(1, 5); FUNC(1, 6); FUNC(1, 7); FUNC(1, 8); FUNC(1, 9); - FUNC(1,10); FUNC(1,11); FUNC(1,12); FUNC(1,13); FUNC(1,14); - FUNC(1,15); FUNC(1,16); FUNC(1,17); FUNC(1,18); FUNC(1,19); - - FUNC(2,20); FUNC(2,21); FUNC(2,22); FUNC(2,23); FUNC(2,24); - FUNC(2,25); FUNC(2,26); FUNC(2,27); FUNC(2,28); FUNC(2,29); - FUNC(2,30); FUNC(2,31); FUNC(2,32); FUNC(2,33); FUNC(2,34); - FUNC(2,35); FUNC(2,36); FUNC(2,37); FUNC(2,38); FUNC(2,39); - - FUNC(3,40); FUNC(3,41); FUNC(3,42); FUNC(3,43); FUNC(3,44); - FUNC(3,45); FUNC(3,46); FUNC(3,47); FUNC(3,48); FUNC(3,49); - FUNC(3,50); FUNC(3,51); FUNC(3,52); FUNC(3,53); FUNC(3,54); - FUNC(3,55); FUNC(3,56); FUNC(3,57); FUNC(3,58); FUNC(3,59); - - FUNC(4,60); FUNC(4,61); FUNC(4,62); FUNC(4,63); FUNC(4,64); - FUNC(4,65); FUNC(4,66); FUNC(4,67); FUNC(4,68); FUNC(4,69); - FUNC(4,70); FUNC(4,71); FUNC(4,72); FUNC(4,73); FUNC(4,74); - FUNC(4,75); FUNC(4,76); FUNC(4,77); FUNC(4,78); FUNC(4,79); -#else /* !UNROLL_LOOPS */ - for (i = 0; i < 20; ++i) { - FUNC(1,i); - } - for (i = 20; i < 40; ++i) { - FUNC(2,i); - } - for (i = 40; i < 60; ++i) { - FUNC(3,i); - } - for (i = 60; i < 80; ++i) { - FUNC(4,i); - } -#endif /* !UNROLL_LOOPS */ - sha_info->digest[0] += A; - sha_info->digest[1] += B; - sha_info->digest[2] += C; - sha_info->digest[3] += D; - sha_info->digest[4] += E; -} - -union endianTest { - long Long; - char Char[sizeof(long)]; -}; - -static char isLittleEndian(void) -{ - static union endianTest u; - u.Long = 1; - return (u.Char[0] == 1); -} - -/* change endianness of data */ - -/* count is the number of bytes to do an endian flip */ -static void maybe_byte_reverse(apr_uint32_t *buffer, int count) -{ - int i; - apr_byte_t ct[4], *cp; - - if (isLittleEndian()) { /* do the swap only if it is little endian */ - count /= sizeof(apr_uint32_t); - cp = (apr_byte_t *) buffer; - for (i = 0; i < count; ++i) { - ct[0] = cp[0]; - ct[1] = cp[1]; - ct[2] = cp[2]; - ct[3] = cp[3]; - cp[0] = ct[3]; - cp[1] = ct[2]; - cp[2] = ct[1]; - cp[3] = ct[0]; - cp += sizeof(apr_uint32_t); - } - } -} - -/* initialize the SHA digest */ - -APU_DECLARE(void) apr_sha1_init(apr_sha1_ctx_t *sha_info) -{ - sha_info->digest[0] = 0x67452301L; - sha_info->digest[1] = 0xefcdab89L; - sha_info->digest[2] = 0x98badcfeL; - sha_info->digest[3] = 0x10325476L; - sha_info->digest[4] = 0xc3d2e1f0L; - sha_info->count_lo = 0L; - sha_info->count_hi = 0L; - sha_info->local = 0; -} - -/* update the SHA digest */ - -APU_DECLARE(void) apr_sha1_update_binary(apr_sha1_ctx_t *sha_info, - const unsigned char *buffer, - unsigned int count) -{ - unsigned int i; - - if ((sha_info->count_lo + ((apr_uint32_t) count << 3)) < sha_info->count_lo) { - ++sha_info->count_hi; - } - sha_info->count_lo += (apr_uint32_t) count << 3; - sha_info->count_hi += (apr_uint32_t) count >> 29; - if (sha_info->local) { - i = SHA_BLOCKSIZE - sha_info->local; - if (i > count) { - i = count; - } - memcpy(((apr_byte_t *) sha_info->data) + sha_info->local, buffer, i); - count -= i; - buffer += i; - sha_info->local += i; - if (sha_info->local == SHA_BLOCKSIZE) { - maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE); - sha_transform(sha_info); - } - else { - return; - } - } - while (count >= SHA_BLOCKSIZE) { - memcpy(sha_info->data, buffer, SHA_BLOCKSIZE); - buffer += SHA_BLOCKSIZE; - count -= SHA_BLOCKSIZE; - maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE); - sha_transform(sha_info); - } - memcpy(sha_info->data, buffer, count); - sha_info->local = count; -} - -APU_DECLARE(void) apr_sha1_update(apr_sha1_ctx_t *sha_info, const char *buf, - unsigned int count) -{ -#if APR_CHARSET_EBCDIC - int i; - const apr_byte_t *buffer = (const apr_byte_t *) buf; - apr_size_t inbytes_left, outbytes_left; - - if ((sha_info->count_lo + ((apr_uint32_t) count << 3)) < sha_info->count_lo) { - ++sha_info->count_hi; - } - sha_info->count_lo += (apr_uint32_t) count << 3; - sha_info->count_hi += (apr_uint32_t) count >> 29; - /* Is there a remainder of the previous Update operation? */ - if (sha_info->local) { - i = SHA_BLOCKSIZE - sha_info->local; - if (i > count) { - i = count; - } - inbytes_left = outbytes_left = i; - apr_xlate_conv_buffer(ebcdic2ascii_xlate, buffer, &inbytes_left, - ((apr_byte_t *) sha_info->data) + sha_info->local, - &outbytes_left); - count -= i; - buffer += i; - sha_info->local += i; - if (sha_info->local == SHA_BLOCKSIZE) { - maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE); - sha_transform(sha_info); - } - else { - return; - } - } - while (count >= SHA_BLOCKSIZE) { - inbytes_left = outbytes_left = SHA_BLOCKSIZE; - apr_xlate_conv_buffer(ebcdic2ascii_xlate, buffer, &inbytes_left, - (apr_byte_t *) sha_info->data, &outbytes_left); - buffer += SHA_BLOCKSIZE; - count -= SHA_BLOCKSIZE; - maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE); - sha_transform(sha_info); - } - inbytes_left = outbytes_left = count; - apr_xlate_conv_buffer(ebcdic2ascii_xlate, buffer, &inbytes_left, - (apr_byte_t *) sha_info->data, &outbytes_left); - sha_info->local = count; -#else - apr_sha1_update_binary(sha_info, (const unsigned char *) buf, count); -#endif -} - -/* finish computing the SHA digest */ - -APU_DECLARE(void) apr_sha1_final(unsigned char digest[APR_SHA1_DIGESTSIZE], - apr_sha1_ctx_t *sha_info) -{ - int count, i, j; - apr_uint32_t lo_bit_count, hi_bit_count, k; - - lo_bit_count = sha_info->count_lo; - hi_bit_count = sha_info->count_hi; - count = (int) ((lo_bit_count >> 3) & 0x3f); - ((apr_byte_t *) sha_info->data)[count++] = 0x80; - if (count > SHA_BLOCKSIZE - 8) { - memset(((apr_byte_t *) sha_info->data) + count, 0, SHA_BLOCKSIZE - count); - maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE); - sha_transform(sha_info); - memset((apr_byte_t *) sha_info->data, 0, SHA_BLOCKSIZE - 8); - } - else { - memset(((apr_byte_t *) sha_info->data) + count, 0, - SHA_BLOCKSIZE - 8 - count); - } - maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE); - sha_info->data[14] = hi_bit_count; - sha_info->data[15] = lo_bit_count; - sha_transform(sha_info); - - for (i = 0, j = 0; j < APR_SHA1_DIGESTSIZE; i++) { - k = sha_info->digest[i]; - digest[j++] = (unsigned char) ((k >> 24) & 0xff); - digest[j++] = (unsigned char) ((k >> 16) & 0xff); - digest[j++] = (unsigned char) ((k >> 8) & 0xff); - digest[j++] = (unsigned char) (k & 0xff); - } -} - - -APU_DECLARE(void) apr_sha1_base64(const char *clear, int len, char *out) -{ - int l; - apr_sha1_ctx_t context; - apr_byte_t digest[APR_SHA1_DIGESTSIZE]; - - apr_sha1_init(&context); - apr_sha1_update(&context, clear, len); - apr_sha1_final(digest, &context); - - /* private marker. */ - apr_cpystrn(out, APR_SHA1PW_ID, APR_SHA1PW_IDLEN + 1); - - /* SHA1 hash is always 20 chars */ - l = apr_base64_encode_binary(out + APR_SHA1PW_IDLEN, digest, sizeof(digest)); - out[l + APR_SHA1PW_IDLEN] = '\0'; - - /* - * output of base64 encoded SHA1 is always 28 chars + APR_SHA1PW_IDLEN - */ -} Index: contrib/apr-util/crypto/apr_siphash.c =================================================================== --- contrib/apr-util/crypto/apr_siphash.c +++ /dev/null @@ -1,196 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * SipHash (C reference implementation, APR-ized), originating from: - * https://131002.net/siphash/siphash24.c. - */ - -#include "apr_siphash.h" - -#define ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) - -#define U8TO64_LE(p) \ - (((apr_uint64_t)((p)[0]) ) | \ - ((apr_uint64_t)((p)[1]) << 8) | \ - ((apr_uint64_t)((p)[2]) << 16) | \ - ((apr_uint64_t)((p)[3]) << 24) | \ - ((apr_uint64_t)((p)[4]) << 32) | \ - ((apr_uint64_t)((p)[5]) << 40) | \ - ((apr_uint64_t)((p)[6]) << 48) | \ - ((apr_uint64_t)((p)[7]) << 56)) - -#define U64TO8_LE(p, v) \ -do { \ - (p)[0] = (unsigned char)((v) ); \ - (p)[1] = (unsigned char)((v) >> 8); \ - (p)[2] = (unsigned char)((v) >> 16); \ - (p)[3] = (unsigned char)((v) >> 24); \ - (p)[4] = (unsigned char)((v) >> 32); \ - (p)[5] = (unsigned char)((v) >> 40); \ - (p)[6] = (unsigned char)((v) >> 48); \ - (p)[7] = (unsigned char)((v) >> 56); \ -} while (0) - -#define SIPROUND() \ -do { \ - v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \ - v2 += v3; v3=ROTL64(v3,16); v3 ^= v2; \ - v0 += v3; v3=ROTL64(v3,21); v3 ^= v0; \ - v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \ -} while(0) - -#define SIPHASH(r, s, n, k) \ -do { \ - const unsigned char *ptr, *end; \ - apr_uint64_t v0, v1, v2, v3, m; \ - apr_uint64_t k0, k1; \ - unsigned int rem; \ - \ - k0 = U8TO64_LE(k + 0); \ - k1 = U8TO64_LE(k + 8); \ - v3 = k1 ^ (apr_uint64_t)0x7465646279746573ULL; \ - v2 = k0 ^ (apr_uint64_t)0x6c7967656e657261ULL; \ - v1 = k1 ^ (apr_uint64_t)0x646f72616e646f6dULL; \ - v0 = k0 ^ (apr_uint64_t)0x736f6d6570736575ULL; \ - \ - rem = (unsigned int)(n & 0x7); \ - for (ptr = s, end = ptr + n - rem; ptr < end; ptr += 8) { \ - m = U8TO64_LE(ptr); \ - v3 ^= m; \ - cROUNDS \ - v0 ^= m; \ - } \ - m = (apr_uint64_t)(n & 0xff) << 56; \ - switch (rem) { \ - case 7: m |= (apr_uint64_t)ptr[6] << 48; \ - case 6: m |= (apr_uint64_t)ptr[5] << 40; \ - case 5: m |= (apr_uint64_t)ptr[4] << 32; \ - case 4: m |= (apr_uint64_t)ptr[3] << 24; \ - case 3: m |= (apr_uint64_t)ptr[2] << 16; \ - case 2: m |= (apr_uint64_t)ptr[1] << 8; \ - case 1: m |= (apr_uint64_t)ptr[0]; \ - case 0: break; \ - } \ - v3 ^= m; \ - cROUNDS \ - v0 ^= m; \ - \ - v2 ^= 0xff; \ - dROUNDS \ - \ - r = v0 ^ v1 ^ v2 ^ v3; \ -} while (0) - -APU_DECLARE(apr_uint64_t) apr_siphash(const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE], - unsigned int c, unsigned int d) -{ - apr_uint64_t h; - unsigned int i; - -#undef cROUNDS -#define cROUNDS \ - for (i = 0; i < c; ++i) { \ - SIPROUND(); \ - } - -#undef dROUNDS -#define dROUNDS \ - for (i = 0; i < d; ++i) { \ - SIPROUND(); \ - } - - SIPHASH(h, src, len, key); - return h; -} - -APU_DECLARE(void) apr_siphash_auth(unsigned char out[APR_SIPHASH_DSIZE], - const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE], - unsigned int c, unsigned int d) -{ - apr_uint64_t h; - h = apr_siphash(src, len, key, c, d); - U64TO8_LE(out, h); -} - -APU_DECLARE(apr_uint64_t) apr_siphash24(const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]) -{ - apr_uint64_t h; - -#undef cROUNDS -#define cROUNDS \ - SIPROUND(); \ - SIPROUND(); - -#undef dROUNDS -#define dROUNDS \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); - - SIPHASH(h, src, len, key); - return h; -} - -APU_DECLARE(void) apr_siphash24_auth(unsigned char out[APR_SIPHASH_DSIZE], - const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]) -{ - apr_uint64_t h; - h = apr_siphash24(src, len, key); - U64TO8_LE(out, h); -} - -APU_DECLARE(apr_uint64_t) apr_siphash48(const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]) -{ - apr_uint64_t h; - -#undef cROUNDS -#define cROUNDS \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); - -#undef dROUNDS -#define dROUNDS \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); \ - SIPROUND(); - - SIPHASH(h, src, len, key); - return h; -} - -APU_DECLARE(void) apr_siphash48_auth(unsigned char out[APR_SIPHASH_DSIZE], - const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]) -{ - apr_uint64_t h; - h = apr_siphash48(src, len, key); - U64TO8_LE(out, h); -} - Index: contrib/apr-util/crypto/crypt_blowfish.h =================================================================== --- contrib/apr-util/crypto/crypt_blowfish.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Written by Solar Designer in 2000-2011. - * No copyright is claimed, and the software is hereby placed in the public - * domain. In case this attempt to disclaim copyright and place the software - * in the public domain is deemed null and void, then the software is - * Copyright (c) 2000-2011 Solar Designer and it is hereby released to the - * general public under the following terms: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted. - * - * There's ABSOLUTELY NO WARRANTY, express or implied. - * - * See crypt_blowfish.c for more information. - */ - -#ifndef _CRYPT_BLOWFISH_H -#define _CRYPT_BLOWFISH_H - -extern int _crypt_output_magic(const char *setting, char *output, int size); -extern char *_crypt_blowfish_rn(const char *key, const char *setting, - char *output, int size); -extern char *_crypt_gensalt_blowfish_rn(const char *prefix, - unsigned long count, - const char *input, int size, char *output, int output_size); - -#endif Index: contrib/apr-util/crypto/crypt_blowfish.c =================================================================== --- contrib/apr-util/crypto/crypt_blowfish.c +++ /dev/null @@ -1,902 +0,0 @@ -/* - * The crypt_blowfish homepage is: - * - * http://www.openwall.com/crypt/ - * - * This code comes from John the Ripper password cracker, with reentrant - * and crypt(3) interfaces added, but optimizations specific to password - * cracking removed. - * - * Written by Solar Designer in 1998-2011. - * No copyright is claimed, and the software is hereby placed in the public - * domain. In case this attempt to disclaim copyright and place the software - * in the public domain is deemed null and void, then the software is - * Copyright (c) 1998-2011 Solar Designer and it is hereby released to the - * general public under the following terms: - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted. - * - * There's ABSOLUTELY NO WARRANTY, express or implied. - * - * It is my intent that you should be able to use this on your system, - * as part of a software package, or anywhere else to improve security, - * ensure compatibility, or for any other purpose. I would appreciate - * it if you give credit where it is due and keep your modifications in - * the public domain as well, but I don't require that in order to let - * you place this code and any modifications you make under a license - * of your choice. - * - * This implementation is mostly compatible with OpenBSD's bcrypt.c (prefix - * "$2a$") by Niels Provos , and uses some of his - * ideas. The password hashing algorithm was designed by David Mazieres - * . For more information on the level of compatibility, - * prefer refer to the comments in BF_set_key() below and to the included - * crypt(3) man page. - * - * There's a paper on the algorithm that explains its design decisions: - * - * http://www.usenix.org/events/usenix99/provos.html - * - * Some of the tricks in BF_ROUND might be inspired by Eric Young's - * Blowfish library (I can't be sure if I would think of something if I - * hadn't seen his code). - */ - -#include - -#include -#ifndef __set_errno -#define __set_errno(val) errno = (val) -#endif - -/* Just to make sure the prototypes match the actual definitions */ -#include "crypt_blowfish.h" - -#ifdef __i386__ -#define BF_ASM 0 -#define BF_SCALE 1 -#elif defined(__x86_64__) || defined(__alpha__) || defined(__hppa__) -#define BF_ASM 0 -#define BF_SCALE 1 -#else -#define BF_ASM 0 -#define BF_SCALE 0 -#endif - -typedef unsigned int BF_word; -typedef signed int BF_word_signed; - -/* Number of Blowfish rounds, this is also hardcoded into a few places */ -#define BF_N 16 - -typedef BF_word BF_key[BF_N + 2]; - -typedef struct { - BF_word S[4][0x100]; - BF_key P; -} BF_ctx; - -/* - * Magic IV for 64 Blowfish encryptions that we do at the end. - * The string is "OrpheanBeholderScryDoubt" on big-endian. - */ -static BF_word BF_magic_w[6] = { - 0x4F727068, 0x65616E42, 0x65686F6C, - 0x64657253, 0x63727944, 0x6F756274 -}; - -/* - * P-box and S-box tables initialized with digits of Pi. - */ -static BF_ctx BF_init_state = { - { - { - 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, - 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, - 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, - 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, - 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, - 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, - 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, - 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, - 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, - 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, - 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, - 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, - 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, - 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, - 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, - 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, - 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, - 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, - 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, - 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, - 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, - 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, - 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, - 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, - 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, - 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, - 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, - 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, - 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, - 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, - 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, - 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, - 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, - 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, - 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, - 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, - 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, - 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, - 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, - 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, - 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, - 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, - 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, - 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, - 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, - 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, - 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, - 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, - 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, - 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, - 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, - 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, - 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, - 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, - 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, - 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, - 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, - 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, - 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, - 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, - 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, - 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, - 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, - 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a - }, { - 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, - 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, - 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, - 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, - 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, - 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, - 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, - 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, - 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, - 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, - 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, - 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, - 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, - 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, - 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, - 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, - 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, - 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, - 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, - 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, - 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, - 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, - 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, - 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, - 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, - 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, - 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, - 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, - 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, - 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, - 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, - 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, - 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, - 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, - 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, - 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, - 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, - 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, - 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, - 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, - 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, - 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, - 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, - 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, - 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, - 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, - 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, - 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, - 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, - 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, - 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, - 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, - 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, - 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, - 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, - 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, - 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, - 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, - 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, - 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, - 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, - 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, - 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, - 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7 - }, { - 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, - 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, - 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, - 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, - 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, - 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, - 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, - 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, - 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, - 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, - 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, - 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, - 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, - 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, - 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, - 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, - 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, - 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, - 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, - 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, - 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, - 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, - 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, - 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, - 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, - 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, - 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, - 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, - 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, - 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, - 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, - 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, - 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, - 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, - 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, - 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, - 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, - 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, - 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, - 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, - 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, - 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, - 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, - 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, - 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, - 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, - 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, - 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, - 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, - 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, - 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, - 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, - 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, - 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, - 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, - 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, - 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, - 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, - 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, - 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, - 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, - 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, - 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, - 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0 - }, { - 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, - 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, - 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, - 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, - 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, - 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, - 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, - 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, - 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, - 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, - 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, - 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, - 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, - 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, - 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, - 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, - 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, - 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, - 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, - 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, - 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, - 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, - 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, - 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, - 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, - 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, - 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, - 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, - 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, - 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, - 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, - 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, - 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, - 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, - 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, - 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, - 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, - 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, - 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, - 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, - 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, - 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, - 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, - 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, - 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, - 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, - 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, - 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, - 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, - 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, - 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, - 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, - 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, - 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, - 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, - 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, - 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, - 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, - 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, - 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, - 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, - 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, - 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, - 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 - } - }, { - 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, - 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, - 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, - 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, - 0x9216d5d9, 0x8979fb1b - } -}; - -static unsigned char BF_itoa64[64 + 1] = - "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - -static unsigned char BF_atoi64[0x60] = { - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 1, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 64, 64, 64, 64, 64, - 64, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 64, 64, 64, 64, 64, - 64, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 64, 64, 64, 64, 64 -}; - -#define BF_safe_atoi64(dst, src) \ -{ \ - tmp = (unsigned char)(src); \ - if ((unsigned int)(tmp -= 0x20) >= 0x60) return -1; \ - tmp = BF_atoi64[tmp]; \ - if (tmp > 63) return -1; \ - (dst) = tmp; \ -} - -static int BF_decode(BF_word *dst, const char *src, int size) -{ - unsigned char *dptr = (unsigned char *)dst; - unsigned char *end = dptr + size; - const unsigned char *sptr = (const unsigned char *)src; - unsigned int tmp, c1, c2, c3, c4; - - do { - BF_safe_atoi64(c1, *sptr++); - BF_safe_atoi64(c2, *sptr++); - *dptr++ = (c1 << 2) | ((c2 & 0x30) >> 4); - if (dptr >= end) break; - - BF_safe_atoi64(c3, *sptr++); - *dptr++ = ((c2 & 0x0F) << 4) | ((c3 & 0x3C) >> 2); - if (dptr >= end) break; - - BF_safe_atoi64(c4, *sptr++); - *dptr++ = ((c3 & 0x03) << 6) | c4; - } while (dptr < end); - - return 0; -} - -static void BF_encode(char *dst, const BF_word *src, int size) -{ - const unsigned char *sptr = (const unsigned char *)src; - const unsigned char *end = sptr + size; - unsigned char *dptr = (unsigned char *)dst; - unsigned int c1, c2; - - do { - c1 = *sptr++; - *dptr++ = BF_itoa64[c1 >> 2]; - c1 = (c1 & 0x03) << 4; - if (sptr >= end) { - *dptr++ = BF_itoa64[c1]; - break; - } - - c2 = *sptr++; - c1 |= c2 >> 4; - *dptr++ = BF_itoa64[c1]; - c1 = (c2 & 0x0f) << 2; - if (sptr >= end) { - *dptr++ = BF_itoa64[c1]; - break; - } - - c2 = *sptr++; - c1 |= c2 >> 6; - *dptr++ = BF_itoa64[c1]; - *dptr++ = BF_itoa64[c2 & 0x3f]; - } while (sptr < end); -} - -static void BF_swap(BF_word *x, int count) -{ - static int endianness_check = 1; - char *is_little_endian = (char *)&endianness_check; - BF_word tmp; - - if (*is_little_endian) - do { - tmp = *x; - tmp = (tmp << 16) | (tmp >> 16); - *x++ = ((tmp & 0x00FF00FF) << 8) | ((tmp >> 8) & 0x00FF00FF); - } while (--count); -} - -#if BF_SCALE -/* Architectures which can shift addresses left by 2 bits with no extra cost */ -#define BF_ROUND(L, R, N) \ - tmp1 = L & 0xFF; \ - tmp2 = L >> 8; \ - tmp2 &= 0xFF; \ - tmp3 = L >> 16; \ - tmp3 &= 0xFF; \ - tmp4 = L >> 24; \ - tmp1 = data.ctx.S[3][tmp1]; \ - tmp2 = data.ctx.S[2][tmp2]; \ - tmp3 = data.ctx.S[1][tmp3]; \ - tmp3 += data.ctx.S[0][tmp4]; \ - tmp3 ^= tmp2; \ - R ^= data.ctx.P[N + 1]; \ - tmp3 += tmp1; \ - R ^= tmp3; -#else -/* Architectures with no complicated addressing modes supported */ -#define BF_INDEX(S, i) \ - (*((BF_word *)(((unsigned char *)S) + (i)))) -#define BF_ROUND(L, R, N) \ - tmp1 = L & 0xFF; \ - tmp1 <<= 2; \ - tmp2 = L >> 6; \ - tmp2 &= 0x3FC; \ - tmp3 = L >> 14; \ - tmp3 &= 0x3FC; \ - tmp4 = L >> 22; \ - tmp4 &= 0x3FC; \ - tmp1 = BF_INDEX(data.ctx.S[3], tmp1); \ - tmp2 = BF_INDEX(data.ctx.S[2], tmp2); \ - tmp3 = BF_INDEX(data.ctx.S[1], tmp3); \ - tmp3 += BF_INDEX(data.ctx.S[0], tmp4); \ - tmp3 ^= tmp2; \ - R ^= data.ctx.P[N + 1]; \ - tmp3 += tmp1; \ - R ^= tmp3; -#endif - -/* - * Encrypt one block, BF_N is hardcoded here. - */ -#define BF_ENCRYPT \ - L ^= data.ctx.P[0]; \ - BF_ROUND(L, R, 0); \ - BF_ROUND(R, L, 1); \ - BF_ROUND(L, R, 2); \ - BF_ROUND(R, L, 3); \ - BF_ROUND(L, R, 4); \ - BF_ROUND(R, L, 5); \ - BF_ROUND(L, R, 6); \ - BF_ROUND(R, L, 7); \ - BF_ROUND(L, R, 8); \ - BF_ROUND(R, L, 9); \ - BF_ROUND(L, R, 10); \ - BF_ROUND(R, L, 11); \ - BF_ROUND(L, R, 12); \ - BF_ROUND(R, L, 13); \ - BF_ROUND(L, R, 14); \ - BF_ROUND(R, L, 15); \ - tmp4 = R; \ - R = L; \ - L = tmp4 ^ data.ctx.P[BF_N + 1]; - -#if BF_ASM -#define BF_body() \ - _BF_body_r(&data.ctx); -#else -#define BF_body() \ - L = R = 0; \ - ptr = data.ctx.P; \ - do { \ - ptr += 2; \ - BF_ENCRYPT; \ - *(ptr - 2) = L; \ - *(ptr - 1) = R; \ - } while (ptr < &data.ctx.P[BF_N + 2]); \ -\ - ptr = data.ctx.S[0]; \ - do { \ - ptr += 2; \ - BF_ENCRYPT; \ - *(ptr - 2) = L; \ - *(ptr - 1) = R; \ - } while (ptr < &data.ctx.S[3][0xFF]); -#endif - -static void BF_set_key(const char *key, BF_key expanded, BF_key initial, - unsigned char flags) -{ - const char *ptr = key; - unsigned int bug, i, j; - BF_word safety, sign, diff, tmp[2]; - -/* - * There was a sign extension bug in older revisions of this function. While - * we would have liked to simply fix the bug and move on, we have to provide - * a backwards compatibility feature (essentially the bug) for some systems and - * a safety measure for some others. The latter is needed because for certain - * multiple inputs to the buggy algorithm there exist easily found inputs to - * the correct algorithm that produce the same hash. Thus, we optionally - * deviate from the correct algorithm just enough to avoid such collisions. - * While the bug itself affected the majority of passwords containing - * characters with the 8th bit set (although only a percentage of those in a - * collision-producing way), the anti-collision safety measure affects - * only a subset of passwords containing the '\xff' character (not even all of - * those passwords, just some of them). This character is not found in valid - * UTF-8 sequences and is rarely used in popular 8-bit character encodings. - * Thus, the safety measure is unlikely to cause much annoyance, and is a - * reasonable tradeoff to use when authenticating against existing hashes that - * are not reliably known to have been computed with the correct algorithm. - * - * We use an approach that tries to minimize side-channel leaks of password - * information - that is, we mostly use fixed-cost bitwise operations instead - * of branches or table lookups. (One conditional branch based on password - * length remains. It is not part of the bug aftermath, though, and is - * difficult and possibly unreasonable to avoid given the use of C strings by - * the caller, which results in similar timing leaks anyway.) - * - * For actual implementation, we set an array index in the variable "bug" - * (0 means no bug, 1 means sign extension bug emulation) and a flag in the - * variable "safety" (bit 16 is set when the safety measure is requested). - * Valid combinations of settings are: - * - * Prefix "$2a$": bug = 0, safety = 0x10000 - * Prefix "$2x$": bug = 1, safety = 0 - * Prefix "$2y$": bug = 0, safety = 0 - */ - bug = (unsigned int)flags & 1; - safety = ((BF_word)flags & 2) << 15; - - sign = diff = 0; - - for (i = 0; i < BF_N + 2; i++) { - tmp[0] = tmp[1] = 0; - for (j = 0; j < 4; j++) { - tmp[0] <<= 8; - tmp[0] |= (unsigned char)*ptr; /* correct */ - tmp[1] <<= 8; - tmp[1] |= (BF_word_signed)(signed char)*ptr; /* bug */ -/* - * Sign extension in the first char has no effect - nothing to overwrite yet, - * and those extra 24 bits will be fully shifted out of the 32-bit word. For - * chars 2, 3, 4 in each four-char block, we set bit 7 of "sign" if sign - * extension in tmp[1] occurs. Once this flag is set, it remains set. - */ - if (j) - sign |= tmp[1] & 0x80; - if (!*ptr) - ptr = key; - else - ptr++; - } - diff |= tmp[0] ^ tmp[1]; /* Non-zero on any differences */ - - expanded[i] = tmp[bug]; - initial[i] = BF_init_state.P[i] ^ tmp[bug]; - } - -/* - * At this point, "diff" is zero iff the correct and buggy algorithms produced - * exactly the same result. If so and if "sign" is non-zero, which indicates - * that there was a non-benign sign extension, this means that we have a - * collision between the correctly computed hash for this password and a set of - * passwords that could be supplied to the buggy algorithm. Our safety measure - * is meant to protect from such many-buggy to one-correct collisions, by - * deviating from the correct algorithm in such cases. Let's check for this. - */ - diff |= diff >> 16; /* still zero iff exact match */ - diff &= 0xffff; /* ditto */ - diff += 0xffff; /* bit 16 set iff "diff" was non-zero (on non-match) */ - sign <<= 9; /* move the non-benign sign extension flag to bit 16 */ - sign &= ~diff & safety; /* action needed? */ - -/* - * If we have determined that we need to deviate from the correct algorithm, - * flip bit 16 in initial expanded key. (The choice of 16 is arbitrary, but - * let's stick to it now. It came out of the approach we used above, and it's - * not any worse than any other choice we could make.) - * - * It is crucial that we don't do the same to the expanded key used in the main - * Eksblowfish loop. By doing it to only one of these two, we deviate from a - * state that could be directly specified by a password to the buggy algorithm - * (and to the fully correct one as well, but that's a side-effect). - */ - initial[0] ^= sign; -} - -static char *BF_crypt(const char *key, const char *setting, - char *output, int size, - BF_word min) -{ -#if BF_ASM - extern void _BF_body_r(BF_ctx *ctx); -#endif - static const unsigned char flags_by_subtype[26] = - {2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0}; - struct { - BF_ctx ctx; - BF_key expanded_key; - union { - BF_word salt[4]; - BF_word output[6]; - } binary; - } data; - BF_word L, R; - BF_word tmp1, tmp2, tmp3, tmp4; - BF_word *ptr; - BF_word count; - int i; - - if (size < 7 + 22 + 31 + 1) { - __set_errno(ERANGE); - return NULL; - } - - if (setting[0] != '$' || - setting[1] != '2' || - setting[2] < 'a' || setting[2] > 'z' || - !flags_by_subtype[(unsigned int)(unsigned char)setting[2] - 'a'] || - setting[3] != '$' || - setting[4] < '0' || setting[4] > '1' || - setting[5] < '0' || setting[5] > '9' || - (setting[4] == '1' && setting[5] > '7') || - setting[6] != '$') { - __set_errno(EINVAL); - return NULL; - } - - count = (BF_word)1 << ((setting[4] - '0') * 10 + (setting[5] - '0')); - if (count < min || BF_decode(data.binary.salt, &setting[7], 16)) { - __set_errno(EINVAL); - return NULL; - } - BF_swap(data.binary.salt, 4); - - BF_set_key(key, data.expanded_key, data.ctx.P, - flags_by_subtype[(unsigned int)(unsigned char)setting[2] - 'a']); - - memcpy(data.ctx.S, BF_init_state.S, sizeof(data.ctx.S)); - - L = R = 0; - for (i = 0; i < BF_N + 2; i += 2) { - L ^= data.binary.salt[i & 2]; - R ^= data.binary.salt[(i & 2) + 1]; - BF_ENCRYPT; - data.ctx.P[i] = L; - data.ctx.P[i + 1] = R; - } - - ptr = data.ctx.S[0]; - do { - ptr += 4; - L ^= data.binary.salt[(BF_N + 2) & 3]; - R ^= data.binary.salt[(BF_N + 3) & 3]; - BF_ENCRYPT; - *(ptr - 4) = L; - *(ptr - 3) = R; - - L ^= data.binary.salt[(BF_N + 4) & 3]; - R ^= data.binary.salt[(BF_N + 5) & 3]; - BF_ENCRYPT; - *(ptr - 2) = L; - *(ptr - 1) = R; - } while (ptr < &data.ctx.S[3][0xFF]); - - do { - int done; - - for (i = 0; i < BF_N + 2; i += 2) { - data.ctx.P[i] ^= data.expanded_key[i]; - data.ctx.P[i + 1] ^= data.expanded_key[i + 1]; - } - - done = 0; - do { - BF_body(); - if (done) - break; - done = 1; - - tmp1 = data.binary.salt[0]; - tmp2 = data.binary.salt[1]; - tmp3 = data.binary.salt[2]; - tmp4 = data.binary.salt[3]; - for (i = 0; i < BF_N; i += 4) { - data.ctx.P[i] ^= tmp1; - data.ctx.P[i + 1] ^= tmp2; - data.ctx.P[i + 2] ^= tmp3; - data.ctx.P[i + 3] ^= tmp4; - } - data.ctx.P[16] ^= tmp1; - data.ctx.P[17] ^= tmp2; - } while (1); - } while (--count); - - for (i = 0; i < 6; i += 2) { - L = BF_magic_w[i]; - R = BF_magic_w[i + 1]; - - count = 64; - do { - BF_ENCRYPT; - } while (--count); - - data.binary.output[i] = L; - data.binary.output[i + 1] = R; - } - - memcpy(output, setting, 7 + 22 - 1); - output[7 + 22 - 1] = BF_itoa64[(int) - BF_atoi64[(int)setting[7 + 22 - 1] - 0x20] & 0x30]; - -/* This has to be bug-compatible with the original implementation, so - * only encode 23 of the 24 bytes. :-) */ - BF_swap(data.binary.output, 6); - BF_encode(&output[7 + 22], data.binary.output, 23); - output[7 + 22 + 31] = '\0'; - - return output; -} - -int _crypt_output_magic(const char *setting, char *output, int size) -{ - if (size < 3) - return -1; - - output[0] = '*'; - output[1] = '0'; - output[2] = '\0'; - - if (setting[0] == '*' && setting[1] == '0') - output[1] = '1'; - - return 0; -} - -/* - * Please preserve the runtime self-test. It serves two purposes at once: - * - * 1. We really can't afford the risk of producing incompatible hashes e.g. - * when there's something like gcc bug 26587 again, whereas an application or - * library integrating this code might not also integrate our external tests or - * it might not run them after every build. Even if it does, the miscompile - * might only occur on the production build, but not on a testing build (such - * as because of different optimization settings). It is painful to recover - * from incorrectly-computed hashes - merely fixing whatever broke is not - * enough. Thus, a proactive measure like this self-test is needed. - * - * 2. We don't want to leave sensitive data from our actual password hash - * computation on the stack or in registers. Previous revisions of the code - * would do explicit cleanups, but simply running the self-test after hash - * computation is more reliable. - * - * The performance cost of this quick self-test is around 0.6% at the "$2a$08" - * setting. - */ -char *_crypt_blowfish_rn(const char *key, const char *setting, - char *output, int size) -{ - const char *test_key = "8b \xd0\xc1\xd2\xcf\xcc\xd8"; - const char *test_setting = "$2a$00$abcdefghijklmnopqrstuu"; - static const char * const test_hash[2] = - {"VUrPmXD6q/nVSSp7pNDhCR9071IfIRe\0\x55", /* $2x$ */ - "i1D709vfamulimlGcq0qq3UvuUasvEa\0\x55"}; /* $2a$, $2y$ */ - char *retval; - const char *p; - int save_errno, ok; - struct { - char s[7 + 22 + 1]; - char o[7 + 22 + 31 + 1 + 1 + 1]; - } buf; - -/* Hash the supplied password */ - _crypt_output_magic(setting, output, size); - retval = BF_crypt(key, setting, output, size, 16); - save_errno = errno; - -/* - * Do a quick self-test. It is important that we make both calls to BF_crypt() - * from the same scope such that they likely use the same stack locations, - * which makes the second call overwrite the first call's sensitive data on the - * stack and makes it more likely that any alignment related issues would be - * detected by the self-test. - */ - memcpy(buf.s, test_setting, sizeof(buf.s)); - if (retval) - buf.s[2] = setting[2]; - memset(buf.o, 0x55, sizeof(buf.o)); - buf.o[sizeof(buf.o) - 1] = 0; - p = BF_crypt(test_key, buf.s, buf.o, sizeof(buf.o) - (1 + 1), 1); - - ok = (p == buf.o && - !memcmp(p, buf.s, 7 + 22) && - !memcmp(p + (7 + 22), - test_hash[(unsigned int)(unsigned char)buf.s[2] & 1], - 31 + 1 + 1 + 1)); - - { - const char *k = "\xff\xa3" "34" "\xff\xff\xff\xa3" "345"; - BF_key ae, ai, ye, yi; - BF_set_key(k, ae, ai, 2); /* $2a$ */ - BF_set_key(k, ye, yi, 4); /* $2y$ */ - ai[0] ^= 0x10000; /* undo the safety (for comparison) */ - ok = ok && ai[0] == 0xdb9c59bc && ye[17] == 0x33343500 && - !memcmp(ae, ye, sizeof(ae)) && - !memcmp(ai, yi, sizeof(ai)); - } - - __set_errno(save_errno); - if (ok) - return retval; - -/* Should not happen */ - _crypt_output_magic(setting, output, size); - __set_errno(EINVAL); /* pretend we don't support this hash type */ - return NULL; -} - -char *_crypt_gensalt_blowfish_rn(const char *prefix, unsigned long count, - const char *input, int size, char *output, int output_size) -{ - if (size < 16 || output_size < 7 + 22 + 1 || - (count && (count < 4 || count > 17)) || - prefix[0] != '$' || prefix[1] != '2' || - (prefix[2] != 'a' && prefix[2] != 'y')) { - if (output_size > 0) output[0] = '\0'; - __set_errno((output_size < 7 + 22 + 1) ? ERANGE : EINVAL); - return NULL; - } - - if (!count) count = 5; - - output[0] = '$'; - output[1] = '2'; - output[2] = prefix[2]; - output[3] = '$'; - output[4] = '0' + count / 10; - output[5] = '0' + count % 10; - output[6] = '$'; - - BF_encode(&output[7], (const BF_word *)input, 16); - output[7 + 22] = '\0'; - - return output; -} Index: contrib/apr-util/crypto/getuuid.c =================================================================== --- contrib/apr-util/crypto/getuuid.c +++ /dev/null @@ -1,208 +0,0 @@ -/* 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 attempts to generate V1 UUIDs according to the Internet Draft - * located at http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt - */ -#include "apr.h" -#include "apr_uuid.h" -#include "apr_md5.h" -#include "apr_general.h" -#include "apr_portable.h" - - -#if APR_HAVE_UNISTD_H -#include /* for getpid, gethostname */ -#endif -#if APR_HAVE_STDLIB_H -#include /* for rand, srand */ -#endif - - -#if APR_HAVE_STRING_H -#include -#endif -#if APR_HAVE_STRINGS_H -#include -#endif -#if APR_HAVE_NETDB_H -#include -#endif -#if APR_HAVE_SYS_TIME_H -#include /* for gettimeofday */ -#endif - -#define NODE_LENGTH 6 - -static int uuid_state_seqnum; -static unsigned char uuid_state_node[NODE_LENGTH] = { 0 }; - - -static void get_random_info(unsigned char node[NODE_LENGTH]) -{ -#if APR_HAS_RANDOM - - (void) apr_generate_random_bytes(node, NODE_LENGTH); - -#else - - unsigned char seed[APR_MD5_DIGESTSIZE]; - apr_md5_ctx_t c; - - /* ### probably should revise some of this to be a bit more portable */ - - /* Leach & Salz use Linux-specific struct sysinfo; - * replace with pid/tid for portability (in the spirit of mod_unique_id) */ - struct { - /* Add thread id here, if applicable, when we get to pthread or apr */ - pid_t pid; -#ifdef NETWARE - apr_uint64_t t; -#else - struct timeval t; -#endif - char hostname[257]; - - } r; - - apr_md5_init(&c); -#ifdef NETWARE - r.pid = NXThreadGetId(); - NXGetTime(NX_SINCE_BOOT, NX_USECONDS, &(r.t)); -#else - r.pid = getpid(); - gettimeofday(&r.t, (struct timezone *)0); -#endif - gethostname(r.hostname, 256); - apr_md5_update(&c, (const unsigned char *)&r, sizeof(r)); - apr_md5_final(seed, &c); - - memcpy(node, seed, NODE_LENGTH); /* use a subset of the seed bytes */ -#endif -} - -/* This implementation generates a random node ID instead of a - system-dependent call to get IEEE node ID. This is also more secure: - we aren't passing out our MAC address. -*/ -static void get_pseudo_node_identifier(unsigned char *node) -{ - get_random_info(node); - node[0] |= 0x01; /* this designates a random multicast node ID */ -} - -static void get_system_time(apr_uint64_t *uuid_time) -{ - /* ### fix this call to be more portable? */ - *uuid_time = apr_time_now(); - - /* Offset between UUID formatted times and Unix formatted times. - UUID UTC base time is October 15, 1582. - Unix base time is January 1, 1970. */ - *uuid_time = (*uuid_time * 10) + APR_TIME_C(0x01B21DD213814000); -} - -/* true_random -- generate a crypto-quality random number. */ -static int true_random(void) -{ - apr_uint64_t time_now; - -#if APR_HAS_RANDOM - unsigned char buf[2]; - - if (apr_generate_random_bytes(buf, 2) == APR_SUCCESS) { - return (buf[0] << 8) | buf[1]; - } -#endif - - /* crap. this isn't crypto quality, but it will be Good Enough */ - - time_now = apr_time_now(); - srand((unsigned int)(((time_now >> 32) ^ time_now) & 0xffffffff)); - - return rand() & 0x0FFFF; -} - -static void init_state(void) -{ - uuid_state_seqnum = true_random(); - get_pseudo_node_identifier(uuid_state_node); -} - -static void get_current_time(apr_uint64_t *timestamp) -{ - /* ### this needs to be made thread-safe! */ - - apr_uint64_t time_now; - static apr_uint64_t time_last = 0; - static apr_uint64_t fudge = 0; - - get_system_time(&time_now); - - /* if clock reading changed since last UUID generated... */ - if (time_last != time_now) { - /* The clock reading has changed since the last UUID was generated. - Reset the fudge factor. if we are generating them too fast, then - the fudge may need to be reset to something greater than zero. */ - if (time_last + fudge > time_now) - fudge = time_last + fudge - time_now + 1; - else - fudge = 0; - time_last = time_now; - } - else { - /* We generated two really fast. Bump the fudge factor. */ - ++fudge; - } - - *timestamp = time_now + fudge; -} - -APU_DECLARE(void) apr_uuid_get(apr_uuid_t *uuid) -{ - apr_uint64_t timestamp; - unsigned char *d = uuid->data; - -#if APR_HAS_OS_UUID - if (apr_os_uuid_get(d) == APR_SUCCESS) { - return; - } -#endif /* !APR_HAS_OS_UUID */ - - if (!uuid_state_node[0]) - init_state(); - - get_current_time(×tamp); - - /* time_low, uint32 */ - d[3] = (unsigned char)timestamp; - d[2] = (unsigned char)(timestamp >> 8); - d[1] = (unsigned char)(timestamp >> 16); - d[0] = (unsigned char)(timestamp >> 24); - /* time_mid, uint16 */ - d[5] = (unsigned char)(timestamp >> 32); - d[4] = (unsigned char)(timestamp >> 40); - /* time_hi_and_version, uint16 */ - d[7] = (unsigned char)(timestamp >> 48); - d[6] = (unsigned char)(((timestamp >> 56) & 0x0F) | 0x10); - /* clock_seq_hi_and_reserved, uint8 */ - d[8] = (unsigned char)(((uuid_state_seqnum >> 8) & 0x3F) | 0x80); - /* clock_seq_low, uint8 */ - d[9] = (unsigned char)uuid_state_seqnum; - /* node, byte[6] */ - memcpy(&d[10], uuid_state_node, NODE_LENGTH); -} Index: contrib/apr-util/crypto/uuid.c =================================================================== --- contrib/apr-util/crypto/uuid.c +++ /dev/null @@ -1,130 +0,0 @@ -/* 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 /* for sprintf */ - -#include "apr.h" -#include "apr_uuid.h" -#include "apr_errno.h" -#include "apr_lib.h" - - -APU_DECLARE(void) apr_uuid_format(char *buffer, const apr_uuid_t *uuid) -{ - const unsigned char *d = uuid->data; - - sprintf(buffer, - "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", - d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], - d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]); -} - -/* convert a pair of hex digits to an integer value [0,255] */ -#if 'A' == 65 -static unsigned char parse_hexpair(const char *s) -{ - int result; - int temp; - - result = s[0] - '0'; - if (result > 48) - result = (result - 39) << 4; - else if (result > 16) - result = (result - 7) << 4; - else - result = result << 4; - - temp = s[1] - '0'; - if (temp > 48) - result |= temp - 39; - else if (temp > 16) - result |= temp - 7; - else - result |= temp; - - return (unsigned char)result; -} -#else -static unsigned char parse_hexpair(const char *s) -{ - int result; - - if (isdigit(*s)) { - result = (*s - '0') << 4; - } - else { - if (isupper(*s)) { - result = (*s - 'A' + 10) << 4; - } - else { - result = (*s - 'a' + 10) << 4; - } - } - - ++s; - if (isdigit(*s)) { - result |= (*s - '0'); - } - else { - if (isupper(*s)) { - result |= (*s - 'A' + 10); - } - else { - result |= (*s - 'a' + 10); - } - } - - return (unsigned char)result; -} -#endif - -APU_DECLARE(apr_status_t) apr_uuid_parse(apr_uuid_t *uuid, - const char *uuid_str) -{ - int i; - unsigned char *d = uuid->data; - - for (i = 0; i < 36; ++i) { - char c = uuid_str[i]; - if (!apr_isxdigit(c) && - !(c == '-' && (i == 8 || i == 13 || i == 18 || i == 23))) - /* ### need a better value */ - return APR_BADARG; - } - if (uuid_str[36] != '\0') { - /* ### need a better value */ - return APR_BADARG; - } - - d[0] = parse_hexpair(&uuid_str[0]); - d[1] = parse_hexpair(&uuid_str[2]); - d[2] = parse_hexpair(&uuid_str[4]); - d[3] = parse_hexpair(&uuid_str[6]); - - d[4] = parse_hexpair(&uuid_str[9]); - d[5] = parse_hexpair(&uuid_str[11]); - - d[6] = parse_hexpair(&uuid_str[14]); - d[7] = parse_hexpair(&uuid_str[16]); - - d[8] = parse_hexpair(&uuid_str[19]); - d[9] = parse_hexpair(&uuid_str[21]); - - for (i = 6; i--;) - d[10 + i] = parse_hexpair(&uuid_str[i*2+24]); - - return APR_SUCCESS; -} Index: contrib/apr-util/dbd/NWGNUdbdmysql =================================================================== --- contrib/apr-util/dbd/NWGNUdbdmysql +++ /dev/null @@ -1,295 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -ifndef EnvironmentDefined -include $(APR_WORK)/build/NWGNUhead.inc -endif - -#include $(APR)\build\NWGNUcustom.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# LINK_STATIC = 1 - -# for now defined here - should finally go into build/NWGNUenvironment.inc -MYSQL_INC = $(MYSQLSDK)/include -MYSQL_IMP = libmysql.imp -MYSQL_LIB = libmysqlclient_r.lib libz.lib -MYSQL_NLM = libmysql -ifneq "$(wildcard $(MYSQL_INC)/mysql.h)" "$(MYSQL_INC)/mysql.h" -$(error MYSQLSDK does not point to a valid MySQL SDK) -endif - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include/arch/netware \ - $(APR)/include \ - $(APU)/include \ - $(APU)/include/private \ - $(APR) \ - $(MYSQL_INC) \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - -DAPU_DSO_MODULE_BUILD \ - -DAPU_HAVE_MYSQL=1 \ - -DHAVE_MYSQL_H \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - -l $(MYSQLSDK)/lib \ - $(EOLIST) - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = dbdmysql - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBD MySQL Driver Module - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = dbdmysql - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = 8192 - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(OBJDIR)/$(NLM_NAME).nlm \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(OBJDIR)/apr_dbd_mysql.o \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(PRELUDE) \ - $(EOLIST) - -ifeq ($(LINK_STATIC),1) -FILES_nlm_libs += \ - $(MYSQL_LIB) \ - $(EOLIST) -endif - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - aprlib \ - libc \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_modules += \ - $(MYSQL_NLM) \ - $(EOLIST) -endif - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - @aprlib.imp \ - @libc.imp \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_Ximports += \ - @$(MYSQL_IMP) \ - $(EOLIST) -endif - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - apr_dbd_mysql_driver \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - - Index: contrib/apr-util/dbd/NWGNUdbdpgsql =================================================================== --- contrib/apr-util/dbd/NWGNUdbdpgsql +++ /dev/null @@ -1,301 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -ifndef EnvironmentDefined -include $(APR_WORK)/build/NWGNUhead.inc -endif - -#include $(APR)\build\NWGNUcustom.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# LINK_STATIC = 1 - -# for now defined here - should finally go into build/NWGNUenvironment.inc -PGSQL_INC = $(PGSQLSDK)/inc -PGSQL_IMP = libpq.imp -PGSQL_LIB = libpq.lib -PGSQL_NLM = libpq - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include/arch/netware \ - $(APR)/include \ - $(APU)/include \ - $(APU)/include/private \ - $(APR) \ - $(PGSQL_INC) \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - -DAPU_DSO_MODULE_BUILD \ - -DAPU_HAVE_PGSQL=1 \ - -DHAVE_LIBPQ_FE_H \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -ifdef LINK_STATIC -XLFLAGS += \ - -l $(PGSQLSDK)/lib \ - $(EOLIST) -else -XLFLAGS += \ - -l $(PGSQLSDK)/imp \ - $(EOLIST) -endif - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = dbdpgsql - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBD PostgreSQL Driver Module - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = dbdpgsql - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = 8192 - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(OBJDIR)/$(NLM_NAME).nlm \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(OBJDIR)/apr_dbd_pgsql.o \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(PRELUDE) \ - $(EOLIST) - -ifeq ($(LINK_STATIC),1) -FILES_nlm_libs += \ - $(PGSQL_LIB) \ - $(EOLIST) -endif - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - aprlib \ - libc \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_modules += \ - $(PGSQL_NLM) \ - $(EOLIST) -endif - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - @aprlib.imp \ - @libc.imp \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_Ximports += \ - @$(PGSQL_IMP) \ - $(EOLIST) -endif - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - apr_dbd_pgsql_driver \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - - Index: contrib/apr-util/dbd/NWGNUdbdsqli2 =================================================================== --- contrib/apr-util/dbd/NWGNUdbdsqli2 +++ /dev/null @@ -1,296 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -ifndef EnvironmentDefined -include $(APR_WORK)/build/NWGNUhead.inc -endif - -#include $(APR)\build\NWGNUcustom.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# LINK_STATIC = 1 - -# for now defined here - should finally go into build/NWGNUenvironment.inc -SQLITE2_INC = $(SQLITE2SDK)/src -SQLITE2_IMP = $(SQLITE2SDK)/lsqlite2.imp -SQLITE2_LIB = $(SQLITE2SDK)/lsqlite2.lib -SQLITE2_NLM = lsqlite2 - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include/arch/netware \ - $(APR)/include \ - $(APU)/include \ - $(APU)/include/private \ - $(APR) \ - $(SQLITE2_INC) \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - -DAPU_DSO_MODULE_BUILD \ - -DAPU_HAVE_SQLITE2=1 \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -ifdef LINK_STATIC -XLFLAGS += \ - -l $(SQLITE2SDK) \ - $(EOLIST) -endif - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = dbdsqli2 - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBD SQLite2 Driver Module - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = dbdsqli2 - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = 8192 - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(OBJDIR)\$(NLM_NAME).nlm \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(OBJDIR)/apr_dbd_sqlite2.o \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(PRELUDE) \ - $(EOLIST) - -ifeq ($(LINK_STATIC),1) -FILES_nlm_libs += \ - $(SQLITE2_LIB) \ - $(EOLIST) -endif - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - aprlib \ - libc \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_modules += \ - $(SQLITE2_NLM) \ - $(EOLIST) -endif - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - @$(APR)/aprlib.imp \ - @libc.imp \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_Ximports += \ - @$(SQLITE2_IMP) \ - $(EOLIST) -endif - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - apr_dbd_sqlite2_driver \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - - Index: contrib/apr-util/dbd/NWGNUdbdsqli3 =================================================================== --- contrib/apr-util/dbd/NWGNUdbdsqli3 +++ /dev/null @@ -1,298 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -ifndef EnvironmentDefined -include $(APR_WORK)/build/NWGNUhead.inc -endif - -#include $(APR)\build\NWGNUcustom.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# LINK_STATIC = 1 - -# for now defined here - should finally go into build/NWGNUenvironment.inc -SQLITE3_INC = $(SQLITE3SDK)/src -SQLITE3_IMP = $(SQLITE3SDK)/lsqlite3.imp -SQLITE3_LIB = $(SQLITE3SDK)/lsqlite3.lib -SQLITE3_NLM = lsqlite3 - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include/arch/netware \ - $(APR)/include \ - $(APU)/include \ - $(APU)/include/private \ - $(APR) \ - $(SQLITE3_INC) \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - -DAPU_DSO_MODULE_BUILD \ - -DAPU_HAVE_SQLITE3=1 \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -ifdef LINK_STATIC -XLFLAGS += \ - -l $(SQLITE3SDK) \ - $(EOLIST) -endif - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = dbdsqli3 - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBD SQLite3 Driver Module - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = dbdsqli3 - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = 8192 - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(OBJDIR)\$(NLM_NAME).nlm \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(OBJDIR)/apr_dbd_sqlite3.o \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(PRELUDE) \ - $(EOLIST) - -ifeq ($(LINK_STATIC),1) -FILES_nlm_libs += \ - $(SQLITE3_LIB) \ - $(EOLIST) -endif - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - aprlib \ - libc \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_modules += \ - $(SQLITE3_NLM) \ - $(EOLIST) -endif - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - @$(APR)/aprlib.imp \ - @libc.imp \ - apr_dbd_mutex_lock \ - apr_dbd_mutex_unlock \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_Ximports += \ - @$(SQLITE3_IMP) \ - $(EOLIST) -endif - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - apr_dbd_sqlite3_driver \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - - Index: contrib/apr-util/dbd/NWGNUmakefile =================================================================== --- contrib/apr-util/dbd/NWGNUmakefile +++ /dev/null @@ -1,259 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -include $(APR_WORK)/build/NWGNUhead.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(EOLIST) - -ifeq "$(APU_HAVE_MYSQL)" "1" -ifeq "$(wildcard apr_dbd_mysql.c)" "apr_dbd_mysql.c" -TARGET_nlm += $(OBJDIR)/dbdmysql.nlm $(OBJDIR)/dbdmysql.nlm $(EOLIST) -endif -endif -ifeq "$(APU_HAVE_PGSQL)" "1" -TARGET_nlm += $(OBJDIR)/dbdpgsql.nlm $(OBJDIR)/dbdpgsql.nlm $(EOLIST) -endif -ifeq "$(APU_HAVE_SQLITE2)" "1" -TARGET_nlm += $(OBJDIR)/dbdsqli2.nlm $(OBJDIR)/dbdsqli2.nlm $(EOLIST) -endif -ifeq "$(APU_HAVE_SQLITE3)" "1" -TARGET_nlm += $(OBJDIR)/dbdsqli3.nlm $(OBJDIR)/dbdsqli3.nlm $(EOLIST) -endif - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(EOLIST) - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - $(EOLIST) - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - $(EOLIST) - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms $(INSTDIRS) FORCE - $(call COPY,$(OBJDIR)/*.nlm,$(INSTALLBASE)) - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - Index: contrib/apr-util/dbd/apr_dbd.c =================================================================== --- contrib/apr-util/dbd/apr_dbd.c +++ /dev/null @@ -1,573 +0,0 @@ -/* 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 -#include - -#include "apu_config.h" -#include "apu.h" - -#include "apr_pools.h" -#include "apr_dso.h" -#include "apr_strings.h" -#include "apr_hash.h" -#include "apr_thread_mutex.h" -#include "apr_lib.h" -#include "apr_atomic.h" - -#include "apu_internal.h" -#include "apr_dbd_internal.h" -#include "apr_dbd.h" -#include "apu_version.h" - -static apr_hash_t *drivers = NULL; -static apr_uint32_t initialised = 0, in_init = 1; - -#define CLEANUP_CAST (apr_status_t (*)(void*)) - -#if APR_HAS_THREADS -/* deprecated, but required for existing providers. Existing and new - * providers should be refactored to use a provider-specific mutex so - * that different providers do not block one another. - * In APR 1.3 this is no longer used for dso module loading, and - * apu_dso_mutex_[un]lock is used instead. - * In APR 2.0 this should become entirely local to libaprutil-2.so and - * no longer be exported. - */ -static apr_thread_mutex_t* mutex = NULL; -APU_DECLARE(apr_status_t) apr_dbd_mutex_lock() -{ - return apr_thread_mutex_lock(mutex); -} -APU_DECLARE(apr_status_t) apr_dbd_mutex_unlock() -{ - return apr_thread_mutex_unlock(mutex); -} -#else -APU_DECLARE(apr_status_t) apr_dbd_mutex_lock() { - return APR_SUCCESS; -} -APU_DECLARE(apr_status_t) apr_dbd_mutex_unlock() { - return APR_SUCCESS; -} -#endif - -#if !APU_DSO_BUILD -#define DRIVER_LOAD(name,driver,pool) \ - { \ - extern const apr_dbd_driver_t driver; \ - apr_hash_set(drivers,name,APR_HASH_KEY_STRING,&driver); \ - if (driver.init) { \ - driver.init(pool); \ - } \ - } -#endif - -static apr_status_t apr_dbd_term(void *ptr) -{ - /* set drivers to NULL so init can work again */ - drivers = NULL; - - /* Everything else we need is handled by cleanups registered - * when we created mutexes and loaded DSOs - */ - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_dbd_init(apr_pool_t *pool) -{ - apr_status_t ret = APR_SUCCESS; - apr_pool_t *parent; - - if (apr_atomic_inc32(&initialised)) { - apr_atomic_set32(&initialised, 1); /* prevent wrap-around */ - - while (apr_atomic_read32(&in_init)) /* wait until we get fully inited */ - ; - - return APR_SUCCESS; - } - - /* Top level pool scope, need process-scope lifetime */ - for (parent = apr_pool_parent_get(pool); - parent && parent != pool; - parent = apr_pool_parent_get(pool)) - pool = parent; -#if APU_DSO_BUILD - /* deprecate in 2.0 - permit implicit initialization */ - apu_dso_init(pool); -#endif - - drivers = apr_hash_make(pool); - -#if APR_HAS_THREADS - ret = apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, pool); - /* This already registers a pool cleanup */ -#endif - -#if !APU_DSO_BUILD - - /* Load statically-linked drivers: */ -#if APU_HAVE_MYSQL - DRIVER_LOAD("mysql", apr_dbd_mysql_driver, pool); -#endif -#if APU_HAVE_PGSQL - DRIVER_LOAD("pgsql", apr_dbd_pgsql_driver, pool); -#endif -#if APU_HAVE_SQLITE3 - DRIVER_LOAD("sqlite3", apr_dbd_sqlite3_driver, pool); -#endif -#if APU_HAVE_SQLITE2 - DRIVER_LOAD("sqlite2", apr_dbd_sqlite2_driver, pool); -#endif -#if APU_HAVE_ORACLE - DRIVER_LOAD("oracle", apr_dbd_oracle_driver, pool); -#endif -#if APU_HAVE_ODBC - DRIVER_LOAD("odbc", apr_dbd_odbc_driver, pool); -#endif -#if APU_HAVE_SOME_OTHER_BACKEND - DRIVER_LOAD("firebird", apr_dbd_other_driver, pool); -#endif -#endif /* APU_DSO_BUILD */ - - apr_pool_cleanup_register(pool, NULL, apr_dbd_term, - apr_pool_cleanup_null); - - apr_atomic_dec32(&in_init); - - return ret; -} - -APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name, - const apr_dbd_driver_t **driver) -{ -#if APU_DSO_BUILD - char modname[32]; - char symname[34]; - apr_dso_handle_sym_t symbol; -#endif - apr_status_t rv; - -#if APU_DSO_BUILD - rv = apu_dso_mutex_lock(); - if (rv) { - return rv; - } -#endif - *driver = apr_hash_get(drivers, name, APR_HASH_KEY_STRING); - if (*driver) { -#if APU_DSO_BUILD - apu_dso_mutex_unlock(); -#endif - return APR_SUCCESS; - } - -#if APU_DSO_BUILD - /* The driver DSO must have exactly the same lifetime as the - * drivers hash table; ignore the passed-in pool */ - pool = apr_hash_pool_get(drivers); - -#if defined(NETWARE) - apr_snprintf(modname, sizeof(modname), "dbd%s.nlm", name); -#elif defined(WIN32) || defined(__CYGWIN__) - apr_snprintf(modname, sizeof(modname), - "apr_dbd_%s-" APU_STRINGIFY(APU_MAJOR_VERSION) ".dll", name); -#else - apr_snprintf(modname, sizeof(modname), - "apr_dbd_%s-" APU_STRINGIFY(APU_MAJOR_VERSION) ".so", name); -#endif - apr_snprintf(symname, sizeof(symname), "apr_dbd_%s_driver", name); - rv = apu_dso_load(NULL, &symbol, modname, symname, pool); - if (rv == APR_SUCCESS || rv == APR_EINIT) { /* previously loaded?!? */ - *driver = symbol; - name = apr_pstrdup(pool, name); - apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver); - rv = APR_SUCCESS; - if ((*driver)->init) { - (*driver)->init(pool); - } - } - apu_dso_mutex_unlock(); - -#else /* not builtin and !APU_DSO_BUILD => not implemented */ - rv = APR_ENOTIMPL; -#endif - - return rv; -} - -APU_DECLARE(apr_status_t) apr_dbd_open_ex(const apr_dbd_driver_t *driver, - apr_pool_t *pool, const char *params, - apr_dbd_t **handle, - const char **error) -{ - apr_status_t rv; - *handle = (driver->open)(pool, params, error); - if (*handle == NULL) { - return APR_EGENERAL; - } - rv = apr_dbd_check_conn(driver, pool, *handle); - if ((rv != APR_SUCCESS) && (rv != APR_ENOTIMPL)) { - /* XXX: rv is APR error code, but apr_dbd_error() takes int! */ - if (error) { - *error = apr_dbd_error(driver, *handle, rv); - } - apr_dbd_close(driver, *handle); - return APR_EGENERAL; - } - return APR_SUCCESS; -} - -APU_DECLARE(apr_status_t) apr_dbd_open(const apr_dbd_driver_t *driver, - apr_pool_t *pool, const char *params, - apr_dbd_t **handle) -{ - return apr_dbd_open_ex(driver,pool,params,handle,NULL); -} - -APU_DECLARE(int) apr_dbd_transaction_start(const apr_dbd_driver_t *driver, - apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_transaction_t **trans) -{ - int ret = driver->start_transaction(pool, handle, trans); - if (*trans) { - apr_pool_cleanup_register(pool, *trans, - CLEANUP_CAST driver->end_transaction, - apr_pool_cleanup_null); - } - return ret; -} - -APU_DECLARE(int) apr_dbd_transaction_end(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_transaction_t *trans) -{ - apr_pool_cleanup_kill(pool, trans, CLEANUP_CAST driver->end_transaction); - return driver->end_transaction(trans); -} - -APU_DECLARE(int) apr_dbd_transaction_mode_get(const apr_dbd_driver_t *driver, - apr_dbd_transaction_t *trans) -{ - return driver->transaction_mode_get(trans); -} - -APU_DECLARE(int) apr_dbd_transaction_mode_set(const apr_dbd_driver_t *driver, - apr_dbd_transaction_t *trans, - int mode) -{ - return driver->transaction_mode_set(trans, mode); -} - -APU_DECLARE(apr_status_t) apr_dbd_close(const apr_dbd_driver_t *driver, - apr_dbd_t *handle) -{ - return driver->close(handle); -} - -APU_DECLARE(const char*) apr_dbd_name(const apr_dbd_driver_t *driver) -{ - return driver->name; -} - -APU_DECLARE(void*) apr_dbd_native_handle(const apr_dbd_driver_t *driver, - apr_dbd_t *handle) -{ - return driver->native_handle(handle); -} - -APU_DECLARE(int) apr_dbd_check_conn(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle) -{ - return driver->check_conn(pool, handle); -} - -APU_DECLARE(int) apr_dbd_set_dbname(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, const char *name) -{ - return driver->set_dbname(pool,handle,name); -} - -APU_DECLARE(int) apr_dbd_query(const apr_dbd_driver_t *driver, - apr_dbd_t *handle, - int *nrows, const char *statement) -{ - return driver->query(handle,nrows,statement); -} - -APU_DECLARE(int) apr_dbd_select(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, apr_dbd_results_t **res, - const char *statement, int random) -{ - return driver->select(pool,handle,res,statement,random); -} - -APU_DECLARE(int) apr_dbd_num_cols(const apr_dbd_driver_t *driver, - apr_dbd_results_t *res) -{ - return driver->num_cols(res); -} - -APU_DECLARE(int) apr_dbd_num_tuples(const apr_dbd_driver_t *driver, - apr_dbd_results_t *res) -{ - return driver->num_tuples(res); -} - -APU_DECLARE(int) apr_dbd_get_row(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_results_t *res, apr_dbd_row_t **row, - int rownum) -{ - return driver->get_row(pool,res,row,rownum); -} - -APU_DECLARE(const char*) apr_dbd_get_entry(const apr_dbd_driver_t *driver, - apr_dbd_row_t *row, int col) -{ - return driver->get_entry(row,col); -} - -APU_DECLARE(const char*) apr_dbd_get_name(const apr_dbd_driver_t *driver, - apr_dbd_results_t *res, int col) -{ - return driver->get_name(res,col); -} - -APU_DECLARE(const char*) apr_dbd_error(const apr_dbd_driver_t *driver, - apr_dbd_t *handle, int errnum) -{ - return driver->error(handle,errnum); -} - -APU_DECLARE(const char*) apr_dbd_escape(const apr_dbd_driver_t *driver, - apr_pool_t *pool, const char *string, - apr_dbd_t *handle) -{ - return driver->escape(pool,string,handle); -} - -APU_DECLARE(int) apr_dbd_prepare(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, const char *query, - const char *label, - apr_dbd_prepared_t **statement) -{ - size_t qlen; - int i, nargs = 0, nvals = 0; - char *p, *pq; - const char *q; - apr_dbd_type_e *t; - - if (!driver->pformat) { - return APR_ENOTIMPL; - } - - /* find the number of parameters in the query */ - for (q = query; *q; q++) { - if (q[0] == '%') { - if (apr_isalpha(q[1])) { - nargs++; - } else if (q[1] == '%') { - q++; - } - } - } - nvals = nargs; - - qlen = strlen(query) + - nargs * (strlen(driver->pformat) + sizeof(nargs) * 3 + 2) + 1; - pq = apr_palloc(pool, qlen); - t = apr_pcalloc(pool, sizeof(*t) * nargs); - - for (p = pq, q = query, i = 0; *q; q++) { - if (q[0] == '%') { - if (apr_isalpha(q[1])) { - switch (q[1]) { - case 'd': t[i] = APR_DBD_TYPE_INT; break; - case 'u': t[i] = APR_DBD_TYPE_UINT; break; - case 'f': t[i] = APR_DBD_TYPE_FLOAT; break; - case 'h': - switch (q[2]) { - case 'h': - switch (q[3]){ - case 'd': t[i] = APR_DBD_TYPE_TINY; q += 2; break; - case 'u': t[i] = APR_DBD_TYPE_UTINY; q += 2; break; - } - break; - case 'd': t[i] = APR_DBD_TYPE_SHORT; q++; break; - case 'u': t[i] = APR_DBD_TYPE_USHORT; q++; break; - } - break; - case 'l': - switch (q[2]) { - case 'l': - switch (q[3]){ - case 'd': t[i] = APR_DBD_TYPE_LONGLONG; q += 2; break; - case 'u': t[i] = APR_DBD_TYPE_ULONGLONG; q += 2; break; - } - break; - case 'd': t[i] = APR_DBD_TYPE_LONG; q++; break; - case 'u': t[i] = APR_DBD_TYPE_ULONG; q++; break; - case 'f': t[i] = APR_DBD_TYPE_DOUBLE; q++; break; - } - break; - case 'p': - if (q[2] == 'D') { - switch (q[3]) { - case 't': t[i] = APR_DBD_TYPE_TEXT; q += 2; break; - case 'i': t[i] = APR_DBD_TYPE_TIME; q += 2; break; - case 'd': t[i] = APR_DBD_TYPE_DATE; q += 2; break; - case 'a': t[i] = APR_DBD_TYPE_DATETIME; q += 2; break; - case 's': t[i] = APR_DBD_TYPE_TIMESTAMP; q += 2; break; - case 'z': t[i] = APR_DBD_TYPE_ZTIMESTAMP; q += 2; break; - case 'b': t[i] = APR_DBD_TYPE_BLOB; q += 2; break; - case 'c': t[i] = APR_DBD_TYPE_CLOB; q += 2; break; - case 'n': t[i] = APR_DBD_TYPE_NULL; q += 2; break; - } - } - break; - } - q++; - - switch (t[i]) { - case APR_DBD_TYPE_NONE: /* by default, we expect strings */ - t[i] = APR_DBD_TYPE_STRING; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: /* three (3) more values passed in */ - nvals += 3; - break; - default: - break; - } - - /* insert database specific parameter reference */ - p += apr_snprintf(p, qlen - (p - pq), driver->pformat, ++i); - } else if (q[1] == '%') { /* reduce %% to % */ - *p++ = *q++; - } else { - *p++ = *q; - } - } else { - *p++ = *q; - } - } - *p = '\0'; - - return driver->prepare(pool,handle,pq,label,nargs,nvals,t,statement); -} - -APU_DECLARE(int) apr_dbd_pquery(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, - int nargs, const char **args) -{ - return driver->pquery(pool,handle,nrows,statement,args); -} - -APU_DECLARE(int) apr_dbd_pselect(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - int nargs, const char **args) -{ - return driver->pselect(pool,handle,res,statement,random,args); -} - -APU_DECLARE_NONSTD(int) apr_dbd_pvquery(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, ...) -{ - int ret; - va_list args; - va_start(args, statement); - ret = driver->pvquery(pool,handle,nrows,statement,args); - va_end(args); - return ret; -} - -APU_DECLARE_NONSTD(int) apr_dbd_pvselect(const apr_dbd_driver_t *driver, - apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, - int random, ...) -{ - int ret; - va_list args; - va_start(args, random); - ret = driver->pvselect(pool,handle,res,statement,random,args); - va_end(args); - return ret; -} - -APU_DECLARE(int) apr_dbd_pbquery(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, - const void **args) -{ - return driver->pbquery(pool,handle,nrows,statement,args); -} - -APU_DECLARE(int) apr_dbd_pbselect(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - const void **args) -{ - return driver->pbselect(pool,handle,res,statement,random,args); -} - -APU_DECLARE_NONSTD(int) apr_dbd_pvbquery(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, ...) -{ - int ret; - va_list args; - va_start(args, statement); - ret = driver->pvbquery(pool,handle,nrows,statement,args); - va_end(args); - return ret; -} - -APU_DECLARE_NONSTD(int) apr_dbd_pvbselect(const apr_dbd_driver_t *driver, - apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, - int random, ...) -{ - int ret; - va_list args; - va_start(args, random); - ret = driver->pvbselect(pool,handle,res,statement,random,args); - va_end(args); - return ret; -} - -APU_DECLARE(apr_status_t) apr_dbd_datum_get(const apr_dbd_driver_t *driver, - apr_dbd_row_t *row, int col, - apr_dbd_type_e type, void *data) -{ - return driver->datum_get(row,col,type,data); -} Index: contrib/apr-util/dbd/apr_dbd_mysql.c =================================================================== --- contrib/apr-util/dbd/apr_dbd_mysql.c +++ /dev/null @@ -1,1305 +0,0 @@ -/* 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" - -#if APU_HAVE_MYSQL - -#include "apu_version.h" -#include "apu_config.h" - -#include -#include - -#if defined(HAVE_MYSQL_MYSQL_H) -#if defined(HAVE_MYSQL_MY_GLOBAL_H) -#include -#if defined(HAVE_MYSQL_MY_SYS_H) -#include -#endif -#endif -#include -#include -#else /* !defined(HAVE_MYSQL_MYSQL_H) */ -#if defined(HAVE_MY_GLOBAL_H) -#include -#if defined(HAVE_MY_SYS_H) -#include -#endif -#endif -#include -#include -#endif - -#include "apr_strings.h" -#include "apr_lib.h" -#include "apr_buckets.h" - -#include "apr_dbd_internal.h" - -/* default maximum field size 1 MB */ -#define FIELDSIZE 1048575 - -struct apr_dbd_prepared_t { - MYSQL_STMT* stmt; - int nargs; - int nvals; - apr_dbd_type_e *types; -}; - -struct apr_dbd_transaction_t { - int mode; - int errnum; - apr_dbd_t *handle; -}; - -struct apr_dbd_t { - MYSQL* conn ; - apr_dbd_transaction_t* trans ; - unsigned long fldsz; -}; - -struct apr_dbd_results_t { - int random; - MYSQL_RES *res; - MYSQL_STMT *statement; - MYSQL_BIND *bind; - apr_pool_t *pool; -}; -struct apr_dbd_row_t { - MYSQL_ROW row; - apr_dbd_results_t *res; - unsigned long *len; -}; - -/* MySQL specific bucket for BLOB types */ -typedef struct apr_bucket_lob apr_bucket_lob; -/** - * A bucket referring to a MySQL BLOB - */ -struct apr_bucket_lob { - /** Number of buckets using this memory */ - apr_bucket_refcount refcount; - /** The row this bucket refers to */ - const apr_dbd_row_t *row; - /** The column this bucket refers to */ - int col; - /** The pool into which any needed structures should - * be created while reading from this bucket */ - apr_pool_t *readpool; -}; - -static void lob_bucket_destroy(void *data); -static apr_status_t lob_bucket_read(apr_bucket *e, const char **str, - apr_size_t *len, apr_read_type_e block); -static apr_bucket *apr_bucket_lob_make(apr_bucket *b, - const apr_dbd_row_t *row, int col, - apr_off_t offset, apr_size_t len, - apr_pool_t *p); -static apr_bucket *apr_bucket_lob_create(const apr_dbd_row_t *row, int col, - apr_off_t offset, - apr_size_t len, apr_pool_t *p, - apr_bucket_alloc_t *list); -static int dbd_mysql_num_cols(apr_dbd_results_t *res); - -static const apr_bucket_type_t apr_bucket_type_lob = { - "LOB", 5, APR_BUCKET_DATA, - lob_bucket_destroy, - lob_bucket_read, - apr_bucket_setaside_notimpl, - apr_bucket_shared_split, - apr_bucket_shared_copy -}; - -static void lob_bucket_destroy(void *data) -{ - apr_bucket_lob *f = data; - - if (apr_bucket_shared_destroy(f)) { - /* no need to destroy database objects here; it will get - * done automatically when the pool gets cleaned up */ - apr_bucket_free(f); - } -} - -static apr_status_t lob_bucket_read(apr_bucket *e, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - apr_bucket_lob *a = e->data; - const apr_dbd_row_t *row = a->row; - apr_dbd_results_t *res = row->res; - int col = a->col; - apr_bucket *b = NULL; - int rv; - apr_size_t blength = e->length; /* bytes remaining in file past offset */ - apr_off_t boffset = e->start; - MYSQL_BIND *bind = &res->bind[col]; - - *str = NULL; /* in case we die prematurely */ - - /* fetch from offset if not at the beginning */ - if (boffset > 0) { - rv = mysql_stmt_fetch_column(res->statement, bind, col, - (unsigned long) boffset); - if (rv != 0) { - return APR_EGENERAL; - } - } - blength -= blength > bind->buffer_length ? bind->buffer_length : blength; - *len = e->length - blength; - *str = bind->buffer; - - /* allocate new buffer, since we used this one for the bucket */ - bind->buffer = apr_palloc(res->pool, bind->buffer_length); - - /* - * Change the current bucket to refer to what we read, - * even if we read nothing because we hit EOF. - */ - apr_bucket_pool_make(e, *str, *len, res->pool); - - /* If we have more to read from the field, then create another bucket */ - if (blength > 0) { - /* for efficiency, we can just build a new apr_bucket struct - * to wrap around the existing LOB bucket */ - b = apr_bucket_alloc(sizeof(*b), e->list); - b->start = boffset + *len; - b->length = blength; - b->data = a; - b->type = &apr_bucket_type_lob; - b->free = apr_bucket_free; - b->list = e->list; - APR_BUCKET_INSERT_AFTER(e, b); - } - else { - lob_bucket_destroy(a); - } - - return APR_SUCCESS; -} - -static apr_bucket *apr_bucket_lob_make(apr_bucket *b, - const apr_dbd_row_t *row, int col, - apr_off_t offset, apr_size_t len, - apr_pool_t *p) -{ - apr_bucket_lob *f; - - f = apr_bucket_alloc(sizeof(*f), b->list); - f->row = row; - f->col = col; - f->readpool = p; - - b = apr_bucket_shared_make(b, f, offset, len); - b->type = &apr_bucket_type_lob; - - return b; -} - -static apr_bucket *apr_bucket_lob_create(const apr_dbd_row_t *row, int col, - apr_off_t offset, - apr_size_t len, apr_pool_t *p, - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_lob_make(b, row, col, offset, len, p); -} - -static apr_status_t free_result(void *data) -{ - mysql_free_result(data); - return APR_SUCCESS; -} - -static int dbd_mysql_select(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - const char *query, int seek) -{ - int sz; - int ret; - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - ret = mysql_query(sql->conn, query); - if (!ret) { - if (sz = mysql_field_count(sql->conn), sz > 0) { - if (!*results) { - *results = apr_palloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->random = seek; - (*results)->statement = NULL; - (*results)->pool = pool; - if (seek) { - (*results)->res = mysql_store_result(sql->conn); - } - else { - (*results)->res = mysql_use_result(sql->conn); - } - apr_pool_cleanup_register(pool, (*results)->res, - free_result,apr_pool_cleanup_null); - } - } else { - ret = mysql_errno(sql->conn); - } - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static const char *dbd_mysql_get_name(const apr_dbd_results_t *res, int n) -{ - if ((n < 0) || (n >= (int) mysql_num_fields(res->res))) { - return NULL; - } - - return mysql_fetch_fields(res->res)[n].name; -} - -static int dbd_mysql_get_row(apr_pool_t *pool, apr_dbd_results_t *res, - apr_dbd_row_t **row, int rownum) -{ - MYSQL_ROW r = NULL; - int ret = 0; - - if (res->statement) { - if (res->random) { - if (rownum > 0) { - mysql_stmt_data_seek(res->statement, (my_ulonglong) --rownum); - } - else { - return -1; /* invalid row */ - } - } - ret = mysql_stmt_fetch(res->statement); - switch (ret) { - case 1: - ret = mysql_stmt_errno(res->statement); - break; - case MYSQL_NO_DATA: - ret = -1; - break; - default: - ret = 0; /* bad luck - get_entry will deal with this */ - break; - } - } - else { - if (res->random) { - if (rownum > 0) { - mysql_data_seek(res->res, (my_ulonglong) --rownum); - } - else { - return -1; /* invalid row */ - } - } - r = mysql_fetch_row(res->res); - if (r == NULL) { - ret = -1; - } - } - if (ret == 0) { - if (!*row) { - *row = apr_palloc(pool, sizeof(apr_dbd_row_t)); - } - (*row)->row = r; - (*row)->res = res; - (*row)->len = mysql_fetch_lengths(res->res); - } - else { - apr_pool_cleanup_run(res->pool, res->res, free_result); - } - return ret; -} -#if 0 -/* An improved API that was proposed but not followed up */ -static int dbd_mysql_get_entry(const apr_dbd_row_t *row, int n, - apr_dbd_datum_t *val) -{ - MYSQL_BIND *bind; - if (dbd_mysql_num_cols(row->res) <= n) { - return NULL; - } - if (row->res->statement) { - bind = &row->res->bind[n]; - if (mysql_stmt_fetch_column(row->res->statement, bind, n, 0) != 0) { - val->type = APR_DBD_VALUE_NULL; - return -1; - } - if (*bind->is_null) { - val->type = APR_DBD_VALUE_NULL; - return -1; - } - else { - val->type = APR_DBD_VALUE_STRING; - val->value.stringval = bind->buffer; - } - } - else { - val->type = APR_DBD_VALUE_STRING; - val->value.stringval = row->row[n]; - } - return 0; -} -#else - -static const char *dbd_mysql_get_entry(const apr_dbd_row_t *row, int n) -{ - MYSQL_BIND *bind; - if (dbd_mysql_num_cols(row->res) <= n) { - return NULL; - } - if (row->res->statement) { - bind = &row->res->bind[n]; - if (mysql_stmt_fetch_column(row->res->statement, bind, n, 0) != 0) { - return NULL; - } - if (*bind->is_null) { - return NULL; - } - else { - return bind->buffer; - } - } - else { - return row->row[n]; - } - return NULL; -} -#endif - -static apr_status_t dbd_mysql_datum_get(const apr_dbd_row_t *row, int n, - apr_dbd_type_e type, void *data) -{ - if (row->res->statement) { - MYSQL_BIND *bind = &row->res->bind[n]; - unsigned long len = *bind->length; - - if (mysql_stmt_fetch_column(row->res->statement, bind, n, 0) != 0) { - return APR_EGENERAL; - } - - if (*bind->is_null) { - return APR_ENOENT; - } - - switch (type) { - case APR_DBD_TYPE_TINY: - *(char*)data = atoi(bind->buffer); - break; - case APR_DBD_TYPE_UTINY: - *(unsigned char*)data = atoi(bind->buffer); - break; - case APR_DBD_TYPE_SHORT: - *(short*)data = atoi(bind->buffer); - break; - case APR_DBD_TYPE_USHORT: - *(unsigned short*)data = atoi(bind->buffer); - break; - case APR_DBD_TYPE_INT: - *(int*)data = atoi(bind->buffer); - break; - case APR_DBD_TYPE_UINT: - *(unsigned int*)data = atoi(bind->buffer); - break; - case APR_DBD_TYPE_LONG: - *(long*)data = atol(bind->buffer); - break; - case APR_DBD_TYPE_ULONG: - *(unsigned long*)data = atol(bind->buffer); - break; - case APR_DBD_TYPE_LONGLONG: - *(apr_int64_t*)data = apr_atoi64(bind->buffer); - break; - case APR_DBD_TYPE_ULONGLONG: - *(apr_uint64_t*)data = apr_atoi64(bind->buffer); - break; - case APR_DBD_TYPE_FLOAT: - *(float*)data = (float) atof(bind->buffer); - break; - case APR_DBD_TYPE_DOUBLE: - *(double*)data = atof(bind->buffer); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - *((char*)bind->buffer+bind->buffer_length-1) = '\0'; - *(char**)data = bind->buffer; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - apr_bucket *e; - apr_bucket_brigade *b = (apr_bucket_brigade*)data; - - e = apr_bucket_lob_create(row, n, 0, len, - row->res->pool, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - } - break; - case APR_DBD_TYPE_NULL: - *(void**)data = NULL; - break; - default: - return APR_EGENERAL; - } - } - else { - if (row->row[n] == NULL) { - return APR_ENOENT; - } - - switch (type) { - case APR_DBD_TYPE_TINY: - *(char*)data = atoi(row->row[n]); - break; - case APR_DBD_TYPE_UTINY: - *(unsigned char*)data = atoi(row->row[n]); - break; - case APR_DBD_TYPE_SHORT: - *(short*)data = atoi(row->row[n]); - break; - case APR_DBD_TYPE_USHORT: - *(unsigned short*)data = atoi(row->row[n]); - break; - case APR_DBD_TYPE_INT: - *(int*)data = atoi(row->row[n]); - break; - case APR_DBD_TYPE_UINT: - *(unsigned int*)data = atoi(row->row[n]); - break; - case APR_DBD_TYPE_LONG: - *(long*)data = atol(row->row[n]); - break; - case APR_DBD_TYPE_ULONG: - *(unsigned long*)data = atol(row->row[n]); - break; - case APR_DBD_TYPE_LONGLONG: - *(apr_int64_t*)data = apr_atoi64(row->row[n]); - break; - case APR_DBD_TYPE_ULONGLONG: - *(apr_uint64_t*)data = apr_atoi64(row->row[n]); - break; - case APR_DBD_TYPE_FLOAT: - *(float*)data = (float) atof(row->row[n]); - break; - case APR_DBD_TYPE_DOUBLE: - *(double*)data = atof(row->row[n]); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - *(char**)data = row->row[n]; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - apr_bucket *e; - apr_bucket_brigade *b = (apr_bucket_brigade*)data; - - e = apr_bucket_pool_create(row->row[n], row->len[n], - row->res->pool, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - } - break; - case APR_DBD_TYPE_NULL: - *(void**)data = NULL; - break; - default: - return APR_EGENERAL; - } - } - return 0; -} - -static const char *dbd_mysql_error(apr_dbd_t *sql, int n) -{ - return mysql_error(sql->conn); -} - -static int dbd_mysql_query(apr_dbd_t *sql, int *nrows, const char *query) -{ - int ret; - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - ret = mysql_query(sql->conn, query); - if (ret != 0) { - ret = mysql_errno(sql->conn); - } - *nrows = (int) mysql_affected_rows(sql->conn); - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static const char *dbd_mysql_escape(apr_pool_t *pool, const char *arg, - apr_dbd_t *sql) -{ - unsigned long len = strlen(arg); - char *ret = apr_palloc(pool, 2*len + 1); - mysql_real_escape_string(sql->conn, ret, arg, len); - return ret; -} - -static apr_status_t stmt_close(void *data) -{ - mysql_stmt_close(data); - return APR_SUCCESS; -} - -static int dbd_mysql_prepare(apr_pool_t *pool, apr_dbd_t *sql, - const char *query, const char *label, - int nargs, int nvals, apr_dbd_type_e *types, - apr_dbd_prepared_t **statement) -{ - /* Translate from apr_dbd to native query format */ - int ret; - - if (!*statement) { - *statement = apr_palloc(pool, sizeof(apr_dbd_prepared_t)); - } - (*statement)->stmt = mysql_stmt_init(sql->conn); - - if ((*statement)->stmt) { - apr_pool_cleanup_register(pool, (*statement)->stmt, - stmt_close, apr_pool_cleanup_null); - ret = mysql_stmt_prepare((*statement)->stmt, query, strlen(query)); - - if (ret != 0) { - ret = mysql_stmt_errno((*statement)->stmt); - } - - (*statement)->nargs = nargs; - (*statement)->nvals = nvals; - (*statement)->types = types; - - return ret; - } - - return CR_OUT_OF_MEMORY; -} - -static void dbd_mysql_bind(apr_dbd_prepared_t *statement, - const char **values, MYSQL_BIND *bind) -{ - int i, j; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - bind[i].length = &bind[i].buffer_length; - bind[i].is_unsigned = 0; - bind[i].is_null = NULL; - - if (values[j] == NULL) { - bind[i].buffer_type = MYSQL_TYPE_NULL; - } - else { - switch (statement->types[i]) { - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - bind[i].buffer_type = MYSQL_TYPE_LONG_BLOB; - bind[i].buffer = (void*)values[j]; - bind[i].buffer_length = atol(values[++j]); - - /* skip table and column */ - j += 2; - break; - default: - bind[i].buffer_type = MYSQL_TYPE_VAR_STRING; - bind[i].buffer = (void*)values[j]; - bind[i].buffer_length = strlen(values[j]); - break; - } - } - } - - return; -} - -static int dbd_mysql_pquery_internal(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - MYSQL_BIND *bind) -{ - int ret; - - ret = mysql_stmt_bind_param(statement->stmt, bind); - if (ret != 0) { - *nrows = 0; - ret = mysql_stmt_errno(statement->stmt); - } - else { - ret = mysql_stmt_execute(statement->stmt); - if (ret != 0) { - ret = mysql_stmt_errno(statement->stmt); - } - *nrows = (int) mysql_stmt_affected_rows(statement->stmt); - } - - return ret; -} - -static int dbd_mysql_pquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const char **values) -{ - MYSQL_BIND *bind; - int ret; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - bind = apr_palloc(pool, statement->nargs * sizeof(MYSQL_BIND)); - - dbd_mysql_bind(statement, values, bind); - - ret = dbd_mysql_pquery_internal(pool, sql, nrows, statement, bind); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_mysql_pvquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows, - apr_dbd_prepared_t *statement, va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_mysql_pquery(pool, sql, nrows, statement, values); -} - -static int dbd_mysql_pselect_internal(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, - int random, MYSQL_BIND *bind) -{ - int nfields, i; - my_bool *is_nullr; -#if MYSQL_VERSION_ID >= 50000 - my_bool *error; -#endif - int ret; - unsigned long *length, maxlen; - - ret = mysql_stmt_bind_param(statement->stmt, bind); - if (ret == 0) { - ret = mysql_stmt_execute(statement->stmt); - if (!ret) { - if (!*res) { - *res = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - (*res)->random = random; - (*res)->statement = statement->stmt; - (*res)->res = mysql_stmt_result_metadata(statement->stmt); - (*res)->pool = pool; - apr_pool_cleanup_register(pool, (*res)->res, - free_result, apr_pool_cleanup_null); - nfields = mysql_num_fields((*res)->res); - if (!(*res)->bind) { - (*res)->bind = apr_palloc(pool, nfields*sizeof(MYSQL_BIND)); - length = apr_pcalloc(pool, nfields*sizeof(unsigned long)); -#if MYSQL_VERSION_ID >= 50000 - error = apr_palloc(pool, nfields*sizeof(my_bool)); -#endif - is_nullr = apr_pcalloc(pool, nfields*sizeof(my_bool)); - for ( i = 0; i < nfields; ++i ) { - maxlen = ((*res)->res->fields[i].length < sql->fldsz ? - (*res)->res->fields[i].length : sql->fldsz) + 1; - if ((*res)->res->fields[i].type == MYSQL_TYPE_BLOB) { - (*res)->bind[i].buffer_type = MYSQL_TYPE_LONG_BLOB; - } - else { - (*res)->bind[i].buffer_type = MYSQL_TYPE_VAR_STRING; - } - (*res)->bind[i].buffer_length = maxlen; - (*res)->bind[i].length = &length[i]; - (*res)->bind[i].buffer = apr_palloc(pool, maxlen); - (*res)->bind[i].is_null = is_nullr+i; -#if MYSQL_VERSION_ID >= 50000 - (*res)->bind[i].error = error+i; -#endif - } - } - ret = mysql_stmt_bind_result(statement->stmt, (*res)->bind); - if (!ret) { - ret = mysql_stmt_store_result(statement->stmt); - } - } - } - if (ret != 0) { - ret = mysql_stmt_errno(statement->stmt); - } - - return ret; -} - -static int dbd_mysql_pselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - const char **args) -{ - int ret; - MYSQL_BIND *bind; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - bind = apr_palloc(pool, statement->nargs * sizeof(MYSQL_BIND)); - - dbd_mysql_bind(statement, args, bind); - - ret = dbd_mysql_pselect_internal(pool, sql, res, statement, random, bind); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_mysql_pvselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_mysql_pselect(pool, sql, res, statement, random, values); -} - -static void dbd_mysql_bbind(apr_pool_t *pool, apr_dbd_prepared_t *statement, - const void **values, MYSQL_BIND *bind) -{ - void *arg; - int i, j; - apr_dbd_type_e type; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - arg = (void *)values[j]; - - bind[i].length = &bind[i].buffer_length; - bind[i].is_null = NULL; - - type = (arg == NULL ? APR_DBD_TYPE_NULL : statement->types[i]); - switch (type) { - case APR_DBD_TYPE_TINY: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_TINY; - bind[i].is_unsigned = 0; - break; - case APR_DBD_TYPE_UTINY: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_TINY; - bind[i].is_unsigned = 1; - break; - case APR_DBD_TYPE_SHORT: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_SHORT; - bind[i].is_unsigned = 0; - break; - case APR_DBD_TYPE_USHORT: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_SHORT; - bind[i].is_unsigned = 1; - break; - case APR_DBD_TYPE_INT: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_LONG; - bind[i].is_unsigned = 0; - break; - case APR_DBD_TYPE_UINT: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_LONG; - bind[i].is_unsigned = 1; - break; - case APR_DBD_TYPE_LONG: - if (sizeof(int) == sizeof(long)) { - bind[i].buffer = arg; - } - else { - bind[i].buffer = apr_palloc(pool, sizeof(int)); - *(int*)bind[i].buffer = *(long*)arg; - } - bind[i].buffer_type = MYSQL_TYPE_LONG; - bind[i].is_unsigned = 0; - break; - case APR_DBD_TYPE_ULONG: - if (sizeof(unsigned int) == sizeof(unsigned long)) { - bind[i].buffer = arg; - } - else { - bind[i].buffer = apr_palloc(pool, sizeof(unsigned int)); - *(unsigned int*)bind[i].buffer = *(unsigned long*)arg; - } - bind[i].buffer_type = MYSQL_TYPE_LONG; - bind[i].is_unsigned = 1; - break; - case APR_DBD_TYPE_LONGLONG: - if (sizeof(my_ulonglong) == sizeof(apr_int64_t)) { - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_LONGLONG; - } - else { /* have to downsize, long long is not portable */ - bind[i].buffer = apr_palloc(pool, sizeof(long)); - *(long*)bind[i].buffer = (long) *(apr_int64_t*)arg; - bind[i].buffer_type = MYSQL_TYPE_LONG; - } - bind[i].is_unsigned = 0; - break; - case APR_DBD_TYPE_ULONGLONG: - if (sizeof(my_ulonglong) == sizeof(apr_uint64_t)) { - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_LONGLONG; - } - else { /* have to downsize, long long is not portable */ - bind[i].buffer = apr_palloc(pool, sizeof(long)); - *(unsigned long*)bind[i].buffer = - (unsigned long) *(apr_uint64_t*)arg; - bind[i].buffer_type = MYSQL_TYPE_LONG; - } - bind[i].is_unsigned = 1; - break; - case APR_DBD_TYPE_FLOAT: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_FLOAT; - bind[i].is_unsigned = 0; - break; - case APR_DBD_TYPE_DOUBLE: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_DOUBLE; - bind[i].is_unsigned = 0; - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - bind[i].buffer = arg; - bind[i].buffer_type = MYSQL_TYPE_VAR_STRING; - bind[i].is_unsigned = 0; - bind[i].buffer_length = strlen((const char *)arg); - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - bind[i].buffer = (void *)arg; - bind[i].buffer_type = MYSQL_TYPE_LONG_BLOB; - bind[i].is_unsigned = 0; - bind[i].buffer_length = *(apr_size_t*)values[++j]; - - /* skip table and column */ - j += 2; - break; - case APR_DBD_TYPE_NULL: - default: - bind[i].buffer_type = MYSQL_TYPE_NULL; - break; - } - } - - return; -} - -static int dbd_mysql_pbquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const void **values) -{ - MYSQL_BIND *bind; - int ret; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - bind = apr_palloc(pool, statement->nargs * sizeof(MYSQL_BIND)); - - dbd_mysql_bbind(pool, statement, values, bind); - - ret = dbd_mysql_pquery_internal(pool, sql, nrows, statement, bind); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_mysql_pvbquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows, - apr_dbd_prepared_t *statement, va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_mysql_pbquery(pool, sql, nrows, statement, values); -} - -static int dbd_mysql_pbselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - const void **args) -{ - int ret; - MYSQL_BIND *bind; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - bind = apr_palloc(pool, statement->nargs * sizeof(MYSQL_BIND)); - - dbd_mysql_bbind(pool, statement, args, bind); - - ret = dbd_mysql_pselect_internal(pool, sql, res, statement, random, bind); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_mysql_pvbselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_mysql_pbselect(pool, sql, res, statement, random, values); -} - -static int dbd_mysql_end_transaction(apr_dbd_transaction_t *trans) -{ - int ret = -1; - if (trans) { - /* rollback on error or explicit rollback request */ - if (trans->errnum || TXN_DO_ROLLBACK(trans)) { - trans->errnum = 0; - ret = mysql_rollback(trans->handle->conn); - } - else { - ret = mysql_commit(trans->handle->conn); - } - ret |= mysql_autocommit(trans->handle->conn, 1); - trans->handle->trans = NULL; - } - return ret; -} -/* Whether or not transactions work depends on whether the - * underlying DB supports them within MySQL. Unfortunately - * it fails silently with the default InnoDB. - */ - -static int dbd_mysql_transaction(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_transaction_t **trans) -{ - /* Don't try recursive transactions here */ - if (handle->trans) { - dbd_mysql_end_transaction(handle->trans) ; - } - if (!*trans) { - *trans = apr_pcalloc(pool, sizeof(apr_dbd_transaction_t)); - } - (*trans)->errnum = mysql_autocommit(handle->conn, 0); - (*trans)->handle = handle; - handle->trans = *trans; - return (*trans)->errnum; -} - -static int dbd_mysql_transaction_mode_get(apr_dbd_transaction_t *trans) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode; -} - -static int dbd_mysql_transaction_mode_set(apr_dbd_transaction_t *trans, - int mode) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode = (mode & TXN_MODE_BITS); -} - -static apr_dbd_t *dbd_mysql_open(apr_pool_t *pool, const char *params, - const char **error) -{ - static const char *const delims = " \r\n\t;|,"; - const char *ptr; - int i; - const char *key; - size_t klen; - const char *value; - size_t vlen; -#if MYSQL_VERSION_ID >= 50013 - my_bool do_reconnect = 1; -#endif - MYSQL *real_conn; - unsigned long flags = 0; - - struct { - const char *field; - const char *value; - } fields[] = { - {"host", NULL}, - {"user", NULL}, - {"pass", NULL}, - {"dbname", NULL}, - {"port", NULL}, - {"sock", NULL}, - {"flags", NULL}, - {"fldsz", NULL}, - {"group", NULL}, - {"reconnect", NULL}, - {NULL, NULL} - }; - unsigned int port = 0; - apr_dbd_t *sql = apr_pcalloc(pool, sizeof(apr_dbd_t)); - sql->fldsz = FIELDSIZE; - sql->conn = mysql_init(sql->conn); - if ( sql->conn == NULL ) { - return NULL; - } - for (ptr = strchr(params, '='); ptr; ptr = strchr(ptr, '=')) { - /* don't dereference memory that may not belong to us */ - if (ptr == params) { - ++ptr; - continue; - } - for (key = ptr-1; apr_isspace(*key); --key); - klen = 0; - while (apr_isalpha(*key)) { - /* don't parse backwards off the start of the string */ - if (key == params) { - --key; - ++klen; - break; - } - --key; - ++klen; - } - ++key; - for (value = ptr+1; apr_isspace(*value); ++value); - vlen = strcspn(value, delims); - for (i = 0; fields[i].field != NULL; i++) { - if (!strncasecmp(fields[i].field, key, klen)) { - fields[i].value = apr_pstrndup(pool, value, vlen); - break; - } - } - ptr = value+vlen; - } - if (fields[4].value != NULL) { - port = atoi(fields[4].value); - } - if (fields[6].value != NULL && - !strcmp(fields[6].value, "CLIENT_FOUND_ROWS")) { - flags |= CLIENT_FOUND_ROWS; /* only option we know */ - } - if (fields[7].value != NULL) { - sql->fldsz = atol(fields[7].value); - } - if (fields[8].value != NULL) { - mysql_options(sql->conn, MYSQL_READ_DEFAULT_GROUP, fields[8].value); - } -#if MYSQL_VERSION_ID >= 50013 - if (fields[9].value != NULL) { - do_reconnect = atoi(fields[9].value) ? 1 : 0; - } -#endif - -#if MYSQL_VERSION_ID >= 50013 - /* the MySQL manual says this should be BEFORE mysql_real_connect */ - mysql_options(sql->conn, MYSQL_OPT_RECONNECT, &do_reconnect); -#endif - - real_conn = mysql_real_connect(sql->conn, fields[0].value, - fields[1].value, fields[2].value, - fields[3].value, port, - fields[5].value, flags); - - if(real_conn == NULL) { - if (error) { - *error = apr_pstrdup(pool, mysql_error(sql->conn)); - } - mysql_close(sql->conn); - return NULL; - } - -#if MYSQL_VERSION_ID >= 50013 - /* Some say this should be AFTER mysql_real_connect */ - mysql_options(sql->conn, MYSQL_OPT_RECONNECT, &do_reconnect); -#endif - - return sql; -} - -static apr_status_t dbd_mysql_close(apr_dbd_t *handle) -{ - mysql_close(handle->conn); - return APR_SUCCESS; -} - -static apr_status_t dbd_mysql_check_conn(apr_pool_t *pool, - apr_dbd_t *handle) -{ - return mysql_ping(handle->conn) ? APR_EGENERAL : APR_SUCCESS; -} - -static int dbd_mysql_select_db(apr_pool_t *pool, apr_dbd_t* handle, - const char* name) -{ - return mysql_select_db(handle->conn, name); -} - -static void *dbd_mysql_native(apr_dbd_t *handle) -{ - return handle->conn; -} - -static int dbd_mysql_num_cols(apr_dbd_results_t *res) -{ - if (res->statement) { - return mysql_stmt_field_count(res->statement); - } - else { - return mysql_num_fields(res->res); - } -} - -static int dbd_mysql_num_tuples(apr_dbd_results_t *res) -{ - if (res->random) { - if (res->statement) { - return (int) mysql_stmt_num_rows(res->statement); - } - else { - return (int) mysql_num_rows(res->res); - } - } - else { - return -1; - } -} - -static apr_status_t thread_end(void *data) -{ - mysql_thread_end(); - return APR_SUCCESS; -} - -static void dbd_mysql_init(apr_pool_t *pool) -{ - my_init(); - mysql_thread_init(); - - /* FIXME: this is a guess; find out what it really does */ - apr_pool_cleanup_register(pool, NULL, thread_end, apr_pool_cleanup_null); -} -APU_MODULE_DECLARE_DATA const apr_dbd_driver_t apr_dbd_mysql_driver = { - "mysql", - dbd_mysql_init, - dbd_mysql_native, - dbd_mysql_open, - dbd_mysql_check_conn, - dbd_mysql_close, - dbd_mysql_select_db, - dbd_mysql_transaction, - dbd_mysql_end_transaction, - dbd_mysql_query, - dbd_mysql_select, - dbd_mysql_num_cols, - dbd_mysql_num_tuples, - dbd_mysql_get_row, - dbd_mysql_get_entry, - dbd_mysql_error, - dbd_mysql_escape, - dbd_mysql_prepare, - dbd_mysql_pvquery, - dbd_mysql_pvselect, - dbd_mysql_pquery, - dbd_mysql_pselect, - dbd_mysql_get_name, - dbd_mysql_transaction_mode_get, - dbd_mysql_transaction_mode_set, - "?", - dbd_mysql_pvbquery, - dbd_mysql_pvbselect, - dbd_mysql_pbquery, - dbd_mysql_pbselect, - dbd_mysql_datum_get -}; - -#endif Index: contrib/apr-util/dbd/apr_dbd_odbc.c =================================================================== --- contrib/apr-util/dbd/apr_dbd_odbc.c +++ /dev/null @@ -1,1750 +0,0 @@ -/* 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" -#if APU_HAVE_ODBC - -#include "apr.h" -#include "apr_strings.h" -#include "apr_buckets.h" -#include "apr_env.h" -#include "apr_file_io.h" -#include "apr_file_info.h" -#include "apr_dbd_internal.h" -#include "apr_thread_proc.h" -#include "apu_version.h" -#include "apu_config.h" - -#include - -/* If library is ODBC-V2, use macros for limited ODBC-V2 support - * No random access in V2. - */ -#ifdef ODBCV2 -#define ODBCVER 0x0200 -#include "apr_dbd_odbc_v2.h" -#endif - -/* standard ODBC include files */ -#ifdef HAVE_SQL_H -#include -#include -#elif defined(HAVE_ODBC_SQL_H) -#include -#include -#endif - -/* -* MSVC6 does not support intptr_t (C99) -* APR does not have a signed inptr type until 2.0 (r1557720) -*/ -#if defined(_MSC_VER) && _MSC_VER < 1400 -#if APR_SIZEOF_VOIDP == 8 -#define ODBC_INTPTR_T apr_int64_t -#else -#define ODBC_INTPTR_T apr_int32_t -#endif -#else -#define ODBC_INTPTR_T intptr_t -#endif - - -/* Driver name is "odbc" and the entry point is 'apr_dbd_odbc_driver' - * unless ODBC_DRIVER_NAME is defined and it is linked with another db library which - * is ODBC source-compatible. e.g. DB2, Informix, TimesTen, mysql. - */ -#ifndef ODBC_DRIVER_NAME -#define ODBC_DRIVER_NAME odbc -#endif -#define STRINGIFY(x) #x -#define NAMIFY2(n) apr_dbd_##n##_driver -#define NAMIFY1(n) NAMIFY2(n) -#define ODBC_DRIVER_STRING STRINGIFY(ODBC_DRIVER_NAME) -#define ODBC_DRIVER_ENTRY NAMIFY1(ODBC_DRIVER_NAME) - -/* Required APR version for this driver */ -#define DRIVER_APU_VERSION_MAJOR APU_MAJOR_VERSION -#define DRIVER_APU_VERSION_MINOR APU_MINOR_VERSION - -static SQLHANDLE henv = NULL; /* ODBC ENV handle is process-wide */ - -/* Use a CHECK_ERROR macro so we can grab the source line numbers - * for error reports - */ -static void check_error(apr_dbd_t *a, const char *step, SQLRETURN rc, - SQLSMALLINT type, SQLHANDLE h, int line); -#define CHECK_ERROR(a,s,r,t,h) check_error(a,s,r,t,h, __LINE__) - -#define SOURCE_FILE __FILE__ /* source file for error messages */ -#define MAX_ERROR_STRING 1024 /* max length of message in dbc */ -#define MAX_COLUMN_NAME 256 /* longest column name recognized */ -#define DEFAULT_BUFFER_SIZE 1024 /* value for defaultBufferSize */ - -#define MAX_PARAMS 20 -#define DEFAULTSEPS " \t\r\n,=" -#define CSINGLEQUOTE '\'' -#define SSINGLEQUOTE "\'" - -#define TEXTMODE 1 /* used for text (APR 1.2) mode params */ -#define BINARYMODE 0 /* used for binary (APR 1.3+) mode params */ - -/* Identify datatypes which are LOBs - * - DB2 DRDA driver uses undefined types -98 and -99 for CLOB & BLOB - */ -#define IS_LOB(t) (t == SQL_LONGVARCHAR \ - || t == SQL_LONGVARBINARY || t == SQL_VARBINARY \ - || t == -98 || t == -99) - -/* These types are CLOBs - * - DB2 DRDA driver uses undefined type -98 for CLOB - */ -#define IS_CLOB(t) \ - (t == SQL_LONGVARCHAR || t == -98) - -/* Convert a SQL result to an APR result */ -#define APR_FROM_SQL_RESULT(rc) \ - (SQL_SUCCEEDED(rc) ? APR_SUCCESS : APR_EGENERAL) - -/* DBD opaque structures */ -struct apr_dbd_t -{ - SQLHANDLE dbc; /* SQL connection handle - NULL after close */ - apr_pool_t *pool; /* connection lifetime pool */ - char *dbname; /* ODBC datasource */ - int lasterrorcode; - int lineNumber; - char lastError[MAX_ERROR_STRING]; - int defaultBufferSize; /* used for CLOBs in text mode, - * and when fld size is indeterminate */ - ODBC_INTPTR_T transaction_mode; - ODBC_INTPTR_T dboptions; /* driver options re SQLGetData */ - ODBC_INTPTR_T default_transaction_mode; - int can_commit; /* controls end_trans behavior */ -}; - -struct apr_dbd_results_t -{ - SQLHANDLE stmt; /* parent sql statement handle */ - SQLHANDLE dbc; /* parent sql connection handle */ - apr_pool_t *pool; /* pool from query or select */ - apr_dbd_t *apr_dbd; /* parent DBD connection handle */ - int random; /* random access requested */ - int ncols; /* number of columns */ - int isclosed; /* cursor has been closed */ - char **colnames; /* array of column names (NULL until used) */ - SQLPOINTER *colptrs; /* pointers to column data */ - SQLINTEGER *colsizes; /* sizes for columns (enough for txt or bin) */ - SQLINTEGER *coltextsizes; /* max-sizes if converted to text */ - SQLSMALLINT *coltypes; /* array of SQL data types for columns */ - SQLLEN *colinds; /* array of SQL data indicator/strlens */ - int *colstate; /* array of column states - * - avail, bound, present, unavail - */ - int *all_data_fetched; /* flags data as all fetched, for LOBs */ - void *data; /* buffer for all data for one row */ -}; - -enum /* results column states */ -{ - COL_AVAIL, /* data may be retrieved with SQLGetData */ - COL_PRESENT, /* data has been retrieved with SQLGetData */ - COL_BOUND, /* column is bound to colptr */ - COL_RETRIEVED, /* all data from column has been returned */ - COL_UNAVAIL /* column is unavailable because ODBC driver - * requires that columns be retrieved - * in ascending order and a higher col - * was accessed - */ -}; - -struct apr_dbd_row_t { - SQLHANDLE stmt; /* parent ODBC statement handle */ - SQLHANDLE dbc; /* parent ODBC connection handle */ - apr_pool_t *pool; /* pool from get_row */ - apr_dbd_results_t *res; -}; - -struct apr_dbd_transaction_t { - SQLHANDLE dbc; /* parent ODBC connection handle */ - apr_dbd_t *apr_dbd; /* parent DBD connection handle */ -}; - -struct apr_dbd_prepared_t { - SQLHANDLE stmt; /* ODBC statement handle */ - SQLHANDLE dbc; /* parent ODBC connection handle */ - apr_dbd_t *apr_dbd; - int nargs; - int nvals; - int *types; /* array of DBD data types */ -}; - -static void odbc_lob_bucket_destroy(void *data); -static apr_status_t odbc_lob_bucket_setaside(apr_bucket *e, apr_pool_t *pool); -static apr_status_t odbc_lob_bucket_read(apr_bucket *e, const char **str, - apr_size_t *len, apr_read_type_e block); - -/* the ODBC LOB bucket type */ -static const apr_bucket_type_t odbc_bucket_type = { - "ODBC_LOB", 5, APR_BUCKET_DATA, - odbc_lob_bucket_destroy, - odbc_lob_bucket_read, - odbc_lob_bucket_setaside, - apr_bucket_shared_split, - apr_bucket_shared_copy -}; - -/* ODBC LOB bucket data */ -typedef struct { - /** Ref count for shared bucket */ - apr_bucket_refcount refcount; - const apr_dbd_row_t *row; - int col; - SQLSMALLINT type; -} odbc_bucket; - -/* SQL datatype mappings to DBD datatypes - * These tables must correspond *exactly* to the apr_dbd_type_e enum - * in apr_dbd.h - */ - -/* ODBC "C" types to DBD datatypes */ -static SQLSMALLINT const sqlCtype[] = { - SQL_C_DEFAULT, /* APR_DBD_TYPE_NONE */ - SQL_C_STINYINT, /* APR_DBD_TYPE_TINY, \%hhd */ - SQL_C_UTINYINT, /* APR_DBD_TYPE_UTINY, \%hhu */ - SQL_C_SSHORT, /* APR_DBD_TYPE_SHORT, \%hd */ - SQL_C_USHORT, /* APR_DBD_TYPE_USHORT, \%hu */ - SQL_C_SLONG, /* APR_DBD_TYPE_INT, \%d */ - SQL_C_ULONG, /* APR_DBD_TYPE_UINT, \%u */ - SQL_C_SLONG, /* APR_DBD_TYPE_LONG, \%ld */ - SQL_C_ULONG, /* APR_DBD_TYPE_ULONG, \%lu */ - SQL_C_SBIGINT, /* APR_DBD_TYPE_LONGLONG, \%lld */ - SQL_C_UBIGINT, /* APR_DBD_TYPE_ULONGLONG, \%llu */ - SQL_C_FLOAT, /* APR_DBD_TYPE_FLOAT, \%f */ - SQL_C_DOUBLE, /* APR_DBD_TYPE_DOUBLE, \%lf */ - SQL_C_CHAR, /* APR_DBD_TYPE_STRING, \%s */ - SQL_C_CHAR, /* APR_DBD_TYPE_TEXT, \%pDt */ - SQL_C_CHAR, /*SQL_C_TYPE_TIME, APR_DBD_TYPE_TIME, \%pDi */ - SQL_C_CHAR, /*SQL_C_TYPE_DATE, APR_DBD_TYPE_DATE, \%pDd */ - SQL_C_CHAR, /*SQL_C_TYPE_TIMESTAMP, APR_DBD_TYPE_DATETIME, \%pDa */ - SQL_C_CHAR, /*SQL_C_TYPE_TIMESTAMP, APR_DBD_TYPE_TIMESTAMP, \%pDs */ - SQL_C_CHAR, /*SQL_C_TYPE_TIMESTAMP, APR_DBD_TYPE_ZTIMESTAMP, \%pDz */ - SQL_LONGVARBINARY, /* APR_DBD_TYPE_BLOB, \%pDb */ - SQL_LONGVARCHAR, /* APR_DBD_TYPE_CLOB, \%pDc */ - SQL_TYPE_NULL /* APR_DBD_TYPE_NULL \%pDn */ -}; -#define NUM_APR_DBD_TYPES (sizeof(sqlCtype) / sizeof(sqlCtype[0])) - -/* ODBC Base types to DBD datatypes */ -static SQLSMALLINT const sqlBaseType[] = { - SQL_C_DEFAULT, /* APR_DBD_TYPE_NONE */ - SQL_TINYINT, /* APR_DBD_TYPE_TINY, \%hhd */ - SQL_TINYINT, /* APR_DBD_TYPE_UTINY, \%hhu */ - SQL_SMALLINT, /* APR_DBD_TYPE_SHORT, \%hd */ - SQL_SMALLINT, /* APR_DBD_TYPE_USHORT, \%hu */ - SQL_INTEGER, /* APR_DBD_TYPE_INT, \%d */ - SQL_INTEGER, /* APR_DBD_TYPE_UINT, \%u */ - SQL_INTEGER, /* APR_DBD_TYPE_LONG, \%ld */ - SQL_INTEGER, /* APR_DBD_TYPE_ULONG, \%lu */ - SQL_BIGINT, /* APR_DBD_TYPE_LONGLONG, \%lld */ - SQL_BIGINT, /* APR_DBD_TYPE_ULONGLONG, \%llu */ - SQL_FLOAT, /* APR_DBD_TYPE_FLOAT, \%f */ - SQL_DOUBLE, /* APR_DBD_TYPE_DOUBLE, \%lf */ - SQL_CHAR, /* APR_DBD_TYPE_STRING, \%s */ - SQL_CHAR, /* APR_DBD_TYPE_TEXT, \%pDt */ - SQL_CHAR, /*SQL_TIME, APR_DBD_TYPE_TIME, \%pDi */ - SQL_CHAR, /*SQL_DATE, APR_DBD_TYPE_DATE, \%pDd */ - SQL_CHAR, /*SQL_TIMESTAMP, APR_DBD_TYPE_DATETIME, \%pDa */ - SQL_CHAR, /*SQL_TIMESTAMP, APR_DBD_TYPE_TIMESTAMP, \%pDs */ - SQL_CHAR, /*SQL_TIMESTAMP, APR_DBD_TYPE_ZTIMESTAMP, \%pDz */ - SQL_LONGVARBINARY, /* APR_DBD_TYPE_BLOB, \%pDb */ - SQL_LONGVARCHAR, /* APR_DBD_TYPE_CLOB, \%pDc */ - SQL_TYPE_NULL /* APR_DBD_TYPE_NULL \%pDn */ -}; - -/* result sizes for DBD datatypes (-1 for null-terminated) */ -static int const sqlSizes[] = { - 0, - sizeof(char), /**< \%hhd out: char* */ - sizeof(unsigned char), /**< \%hhu out: unsigned char* */ - sizeof(short), /**< \%hd out: short* */ - sizeof(unsigned short), /**< \%hu out: unsigned short* */ - sizeof(int), /**< \%d out: int* */ - sizeof(unsigned int), /**< \%u out: unsigned int* */ - sizeof(long), /**< \%ld out: long* */ - sizeof(unsigned long), /**< \%lu out: unsigned long* */ - sizeof(apr_int64_t), /**< \%lld out: apr_int64_t* */ - sizeof(apr_uint64_t), /**< \%llu out: apr_uint64_t* */ - sizeof(float), /**< \%f out: float* */ - sizeof(double), /**< \%lf out: double* */ - -1, /**< \%s out: char** */ - -1, /**< \%pDt out: char** */ - -1, /**< \%pDi out: char** */ - -1, /**< \%pDd out: char** */ - -1, /**< \%pDa out: char** */ - -1, /**< \%pDs out: char** */ - -1, /**< \%pDz out: char** */ - sizeof(apr_bucket_brigade), /**< \%pDb out: apr_bucket_brigade* */ - sizeof(apr_bucket_brigade), /**< \%pDc out: apr_bucket_brigade* */ - 0 /**< \%pDn : in: void*, out: void** */ -}; - -/* - * local functions - */ - -/* close any open results for the connection */ -static apr_status_t odbc_close_results(void *d) -{ - apr_dbd_results_t *dbr = (apr_dbd_results_t *)d; - SQLRETURN rc = SQL_SUCCESS; - - if (dbr && dbr->apr_dbd && dbr->apr_dbd->dbc) { - if (!dbr->isclosed) - rc = SQLCloseCursor(dbr->stmt); - dbr->isclosed = 1; - } - return APR_FROM_SQL_RESULT(rc); -} - -/* close the ODBC statement handle from a prepare */ -static apr_status_t odbc_close_pstmt(void *s) -{ - SQLRETURN rc = APR_SUCCESS; - apr_dbd_prepared_t *statement = s; - - /* stmt is closed if connection has already been closed */ - if (statement) { - SQLHANDLE hstmt = statement->stmt; - - if (hstmt && statement->apr_dbd && statement->apr_dbd->dbc) { - rc = SQLFreeHandle(SQL_HANDLE_STMT, hstmt); - } - statement->stmt = NULL; - } - return APR_FROM_SQL_RESULT(rc); -} - -/* close: close/release a connection obtained from open() */ -static apr_status_t odbc_close(apr_dbd_t *handle) -{ - SQLRETURN rc = SQL_SUCCESS; - - if (handle->dbc) { - rc = SQLDisconnect(handle->dbc); - CHECK_ERROR(handle, "SQLDisconnect", rc, SQL_HANDLE_DBC, handle->dbc); - rc = SQLFreeHandle(SQL_HANDLE_DBC, handle->dbc); - CHECK_ERROR(handle, "SQLFreeHandle (DBC)", rc, SQL_HANDLE_ENV, henv); - handle->dbc = NULL; - } - return APR_FROM_SQL_RESULT(rc); -} - -/* odbc_close re-defined for passing to pool cleanup */ -static apr_status_t odbc_close_cleanup(void *handle) -{ - return odbc_close((apr_dbd_t *)handle); -} - -/* close the ODBC environment handle at process termination */ -static apr_status_t odbc_close_env(SQLHANDLE henv) -{ - SQLRETURN rc; - - rc = SQLFreeHandle(SQL_HANDLE_ENV, henv); - henv = NULL; - return APR_FROM_SQL_RESULT(rc); -} - -/* setup the arrays in results for all the returned columns */ -static SQLRETURN odbc_set_result_column(int icol, apr_dbd_results_t *res, - SQLHANDLE stmt) -{ - SQLRETURN rc; - ODBC_INTPTR_T maxsize, textsize, realsize, type, isunsigned = 1; - - /* discover the sql type */ - rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_UNSIGNED, NULL, 0, NULL, - (SQLPOINTER)&isunsigned); - isunsigned = (isunsigned == SQL_TRUE); - - rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_TYPE, NULL, 0, NULL, - (SQLPOINTER)&type); - if (!SQL_SUCCEEDED(rc) || type == SQL_UNKNOWN_TYPE) { - /* MANY ODBC v2 datasources only supply CONCISE_TYPE */ - rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_CONCISE_TYPE, NULL, - 0, NULL, (SQLPOINTER)&type); - } - - if (!SQL_SUCCEEDED(rc)) { - /* if still unknown make it CHAR */ - type = SQL_C_CHAR; - } - - switch (type) { - case SQL_INTEGER: - case SQL_SMALLINT: - case SQL_TINYINT: - case SQL_BIGINT: - /* fix these numeric binary types up as signed/unsigned for C types */ - type += (isunsigned) ? SQL_UNSIGNED_OFFSET : SQL_SIGNED_OFFSET; - break; - /* LOB types are not changed to C types */ - case SQL_LONGVARCHAR: - type = SQL_LONGVARCHAR; - break; - case SQL_LONGVARBINARY: - type = SQL_LONGVARBINARY; - break; - case SQL_FLOAT : - type = SQL_C_FLOAT; - break; - case SQL_DOUBLE : - type = SQL_C_DOUBLE; - break; - - /* DBD wants times as strings */ - case SQL_TIMESTAMP: - case SQL_DATE: - case SQL_TIME: - default: - type = SQL_C_CHAR; - } - - res->coltypes[icol] = (SQLSMALLINT)type; - - /* size if retrieved as text */ - rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_DISPLAY_SIZE, NULL, 0, - NULL, (SQLPOINTER)&textsize); - if (!SQL_SUCCEEDED(rc) || textsize < 0) { - textsize = res->apr_dbd->defaultBufferSize; - } - /* for null-term, which sometimes isn't included */ - textsize++; - - /* real size */ - rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_OCTET_LENGTH, NULL, 0, - NULL, (SQLPOINTER)&realsize); - if (!SQL_SUCCEEDED(rc)) { - realsize = textsize; - } - - maxsize = (textsize > realsize) ? textsize : realsize; - if (IS_LOB(type) || maxsize <= 0) { - /* LOB types are never bound and have a NULL colptr for binary. - * Ingore their real (1-2gb) length & use a default - the larger - * of defaultBufferSize or APR_BUCKET_BUFF_SIZE. - * If not a LOB, but simply unknown length - always use defaultBufferSize. - */ - maxsize = res->apr_dbd->defaultBufferSize; - if (IS_LOB(type) && maxsize < APR_BUCKET_BUFF_SIZE) { - maxsize = APR_BUCKET_BUFF_SIZE; - } - - res->colptrs[icol] = NULL; - res->colstate[icol] = COL_AVAIL; - res->colsizes[icol] = (SQLINTEGER)maxsize; - rc = SQL_SUCCESS; - } - else { - res->colptrs[icol] = apr_pcalloc(res->pool, maxsize); - res->colsizes[icol] = (SQLINTEGER)maxsize; - if (res->apr_dbd->dboptions & SQL_GD_BOUND) { - /* we are allowed to call SQLGetData if we need to */ - rc = SQLBindCol(stmt, icol + 1, res->coltypes[icol], - res->colptrs[icol], maxsize, - &(res->colinds[icol])); - CHECK_ERROR(res->apr_dbd, "SQLBindCol", rc, SQL_HANDLE_STMT, - stmt); - res->colstate[icol] = SQL_SUCCEEDED(rc) ? COL_BOUND : COL_AVAIL; - } - else { - /* this driver won't allow us to call SQLGetData on bound - * columns - so don't bind any - */ - res->colstate[icol] = COL_AVAIL; - rc = SQL_SUCCESS; - } - } - return rc; -} - -/* create and populate an apr_dbd_results_t for a select */ -static SQLRETURN odbc_create_results(apr_dbd_t *handle, SQLHANDLE hstmt, - apr_pool_t *pool, const int random, - apr_dbd_results_t **res) -{ - SQLRETURN rc; - SQLSMALLINT ncols; - - *res = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - (*res)->stmt = hstmt; - (*res)->dbc = handle->dbc; - (*res)->pool = pool; - (*res)->random = random; - (*res)->apr_dbd = handle; - rc = SQLNumResultCols(hstmt, &ncols); - CHECK_ERROR(handle, "SQLNumResultCols", rc, SQL_HANDLE_STMT, hstmt); - (*res)->ncols = ncols; - - if (SQL_SUCCEEDED(rc)) { - int i; - - (*res)->colnames = apr_pcalloc(pool, ncols * sizeof(char *)); - (*res)->colptrs = apr_pcalloc(pool, ncols * sizeof(void *)); - (*res)->colsizes = apr_pcalloc(pool, ncols * sizeof(SQLINTEGER)); - (*res)->coltypes = apr_pcalloc(pool, ncols * sizeof(SQLSMALLINT)); - (*res)->colinds = apr_pcalloc(pool, ncols * sizeof(SQLLEN)); - (*res)->colstate = apr_pcalloc(pool, ncols * sizeof(int)); - (*res)->ncols = ncols; - - for (i = 0; i < ncols; i++) { - odbc_set_result_column(i, (*res), hstmt); - } - } - return rc; -} - - -/* bind a parameter - input params only, does not support output parameters */ -static SQLRETURN odbc_bind_param(apr_pool_t *pool, - apr_dbd_prepared_t *statement, const int narg, - const SQLSMALLINT type, int *argp, - const void **args, const int textmode) -{ - SQLRETURN rc; - SQLSMALLINT baseType, cType; - void *ptr; - SQLULEN len; - SQLLEN *indicator; - static SQLLEN nullValue = SQL_NULL_DATA; - static SQLSMALLINT inOut = SQL_PARAM_INPUT; /* only input params */ - - /* bind a NULL data value */ - if (args[*argp] == NULL || type == APR_DBD_TYPE_NULL) { - baseType = SQL_CHAR; - cType = SQL_C_CHAR; - ptr = &nullValue; - len = sizeof(SQLINTEGER); - indicator = &nullValue; - (*argp)++; - } - /* bind a non-NULL data value */ - else { - if (type < 0 || type >= NUM_APR_DBD_TYPES) { - return APR_EGENERAL; - } - - baseType = sqlBaseType[type]; - cType = sqlCtype[type]; - indicator = NULL; - /* LOBs */ - if (IS_LOB(cType)) { - ptr = (void *)args[*argp]; - len = (SQLULEN) * (apr_size_t *)args[*argp + 1]; - cType = (IS_CLOB(cType)) ? SQL_C_CHAR : SQL_C_DEFAULT; - (*argp) += 4; /* LOBs consume 4 args (last two are unused) */ - } - /* non-LOBs */ - else { - switch (baseType) { - case SQL_CHAR: - case SQL_DATE: - case SQL_TIME: - case SQL_TIMESTAMP: - ptr = (void *)args[*argp]; - len = (SQLULEN)strlen(ptr); - break; - case SQL_TINYINT: - ptr = apr_palloc(pool, sizeof(unsigned char)); - len = sizeof(unsigned char); - *(unsigned char *)ptr = - (textmode ? - atoi(args[*argp]) : *(unsigned char *)args[*argp]); - break; - case SQL_SMALLINT: - ptr = apr_palloc(pool, sizeof(short)); - len = sizeof(short); - *(short *)ptr = - (textmode ? atoi(args[*argp]) : *(short *)args[*argp]); - break; - case SQL_INTEGER: - ptr = apr_palloc(pool, sizeof(int)); - len = sizeof(int); - *(long *)ptr = - (textmode ? atol(args[*argp]) : *(long *)args[*argp]); - break; - case SQL_FLOAT: - ptr = apr_palloc(pool, sizeof(float)); - len = sizeof(float); - *(float *)ptr = - (textmode ? - (float)atof(args[*argp]) : *(float *)args[*argp]); - break; - case SQL_DOUBLE: - ptr = apr_palloc(pool, sizeof(double)); - len = sizeof(double); - *(double *)ptr = - (textmode ? atof(args[*argp]) : *(double *) - args[*argp]); - break; - case SQL_BIGINT: - ptr = apr_palloc(pool, sizeof(apr_int64_t)); - len = sizeof(apr_int64_t); - *(apr_int64_t *)ptr = - (textmode ? - apr_atoi64(args[*argp]) : *(apr_int64_t *)args[*argp]); - break; - default: - return APR_EGENERAL; - } - (*argp)++; /* non LOBs consume one argument */ - } - } - rc = SQLBindParameter(statement->stmt, narg, inOut, cType, - baseType, len, 0, ptr, len, indicator); - CHECK_ERROR(statement->apr_dbd, "SQLBindParameter", rc, SQL_HANDLE_STMT, - statement->stmt); - return rc; -} - -/* LOB / Bucket Brigade functions */ - -/* bucket type specific destroy */ -static void odbc_lob_bucket_destroy(void *data) -{ - odbc_bucket *bd = data; - - if (apr_bucket_shared_destroy(bd)) - apr_bucket_free(bd); -} - -/* set aside a bucket if possible */ -static apr_status_t odbc_lob_bucket_setaside(apr_bucket *e, apr_pool_t *pool) -{ - odbc_bucket *bd = (odbc_bucket *)e->data; - - /* Unlikely - but if the row pool is ancestor of this pool then it is OK */ - if (apr_pool_is_ancestor(bd->row->pool, pool)) - return APR_SUCCESS; - - return apr_bucket_setaside_notimpl(e, pool); -} - -/* split a bucket into a heap bucket followed by a LOB bkt w/remaining data */ -static apr_status_t odbc_lob_bucket_read(apr_bucket *e, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - SQLRETURN rc; - SQLLEN len_indicator; - SQLSMALLINT type; - odbc_bucket *bd = (odbc_bucket *)e->data; - apr_bucket *nxt; - void *buf; - int bufsize = bd->row->res->apr_dbd->defaultBufferSize; - int eos; - - /* C type is CHAR for CLOBs, DEFAULT for BLOBs */ - type = bd->row->res->coltypes[bd->col]; - type = (type == SQL_LONGVARCHAR) ? SQL_C_CHAR : SQL_C_DEFAULT; - - /* LOB buffers are always at least APR_BUCKET_BUFF_SIZE, - * but they may be much bigger per the BUFSIZE parameter. - */ - if (bufsize < APR_BUCKET_BUFF_SIZE) - bufsize = APR_BUCKET_BUFF_SIZE; - - buf = apr_bucket_alloc(bufsize, e->list); - *str = NULL; - *len = 0; - - rc = SQLGetData(bd->row->res->stmt, bd->col + 1, - type, buf, bufsize, - &len_indicator); - - CHECK_ERROR(bd->row->res->apr_dbd, "SQLGetData", rc, - SQL_HANDLE_STMT, bd->row->res->stmt); - - if (rc == SQL_NO_DATA || len_indicator == SQL_NULL_DATA || len_indicator < 0) - len_indicator = 0; - - if (SQL_SUCCEEDED(rc) || rc == SQL_NO_DATA) { - - if (rc == SQL_SUCCESS_WITH_INFO - && (len_indicator == SQL_NO_TOTAL || len_indicator >= bufsize)) { - /* not the last read = a full buffer. CLOBs have a null terminator */ - *len = bufsize - (IS_CLOB(bd->type) ? 1 : 0 ); - - eos = 0; - } - else { - /* the last read - len_indicator is supposed to be the length, - * but some driver get this wrong and return the total length. - * We try to handle both interpretations. - */ - *len = (len_indicator > bufsize - && len_indicator >= (SQLLEN)e->start) - ? (len_indicator - (SQLLEN)e->start) : len_indicator; - - eos = 1; - } - - if (!eos) { - /* Create a new LOB bucket to append and append it */ - nxt = apr_bucket_alloc(sizeof(apr_bucket *), e->list); - APR_BUCKET_INIT(nxt); - nxt->length = -1; - nxt->data = e->data; - nxt->type = &odbc_bucket_type; - nxt->free = apr_bucket_free; - nxt->list = e->list; - nxt->start = e->start + *len; - APR_BUCKET_INSERT_AFTER(e, nxt); - } - else { - odbc_lob_bucket_destroy(e->data); - } - /* make current bucket into a heap bucket */ - apr_bucket_heap_make(e, buf, *len, apr_bucket_free); - *str = buf; - - /* No data is success in this context */ - rc = SQL_SUCCESS; - } - return APR_FROM_SQL_RESULT(rc); -} - -/* Create a bucket brigade on the row pool for a LOB column */ -static apr_status_t odbc_create_bucket(const apr_dbd_row_t *row, const int col, - SQLSMALLINT type, apr_bucket_brigade *bb) -{ - apr_bucket_alloc_t *list = bb->bucket_alloc; - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - odbc_bucket *bd = apr_bucket_alloc(sizeof(odbc_bucket), list); - apr_bucket *eos = apr_bucket_eos_create(list); - - bd->row = row; - bd->col = col; - bd->type = type; - - APR_BUCKET_INIT(b); - b->type = &odbc_bucket_type; - b->free = apr_bucket_free; - b->list = list; - /* LOB lengths are unknown in ODBC */ - b = apr_bucket_shared_make(b, bd, 0, -1); - - APR_BRIGADE_INSERT_TAIL(bb, b); - APR_BRIGADE_INSERT_TAIL(bb, eos); - - return APR_SUCCESS; -} - -/* returns a data pointer for a column, returns NULL for NULL value, - * return -1 if data not available - */ -static void *odbc_get(const apr_dbd_row_t *row, const int col, - const SQLSMALLINT sqltype) -{ - SQLRETURN rc; - SQLLEN indicator; - int state = row->res->colstate[col]; - ODBC_INTPTR_T options = row->res->apr_dbd->dboptions; - - switch (state) { - case (COL_UNAVAIL): - return (void *)-1; - case (COL_RETRIEVED): - return NULL; - - case (COL_BOUND): - case (COL_PRESENT): - if (sqltype == row->res->coltypes[col]) { - /* same type and we already have the data */ - row->res->colstate[col] = COL_RETRIEVED; - return (row->res->colinds[col] == SQL_NULL_DATA) ? - NULL : row->res->colptrs[col]; - } - } - - /* we need to get the data now */ - if (!(options & SQL_GD_ANY_ORDER)) { - /* this ODBC driver requires columns to be retrieved in order, - * so we attempt to get every prior un-gotten non-LOB column - */ - int i; - for (i = 0; i < col; i++) { - if (row->res->colstate[i] == COL_AVAIL) { - if (IS_LOB(row->res->coltypes[i])) - row->res->colstate[i] = COL_UNAVAIL; - else { - odbc_get(row, i, row->res->coltypes[i]); - row->res->colstate[i] = COL_PRESENT; - } - } - } - } - - if ((state == COL_BOUND && !(options & SQL_GD_BOUND))) - /* this driver won't let us re-get bound columns */ - return (void *)-1; - - /* a LOB might not have a buffer allocated yet - so create one */ - if (!row->res->colptrs[col]) - row->res->colptrs[col] = apr_pcalloc(row->pool, row->res->colsizes[col]); - - rc = SQLGetData(row->res->stmt, col + 1, sqltype, row->res->colptrs[col], - row->res->colsizes[col], &indicator); - CHECK_ERROR(row->res->apr_dbd, "SQLGetData", rc, SQL_HANDLE_STMT, - row->res->stmt); - if (indicator == SQL_NULL_DATA || rc == SQL_NO_DATA) - return NULL; - - if (SQL_SUCCEEDED(rc)) { - /* whatever it was originally, it is now this sqltype */ - row->res->coltypes[col] = sqltype; - /* this allows getting CLOBs in text mode by calling get_entry - * until it returns NULL - */ - row->res->colstate[col] = - (rc == SQL_SUCCESS_WITH_INFO) ? COL_AVAIL : COL_RETRIEVED; - return row->res->colptrs[col]; - } - else - return (void *)-1; -} - -/* Parse the parameter string for open */ -static apr_status_t odbc_parse_params(apr_pool_t *pool, const char *params, - int *connect, SQLCHAR **datasource, - SQLCHAR **user, SQLCHAR **password, - int *defaultBufferSize, int *nattrs, - int **attrs, ODBC_INTPTR_T **attrvals) -{ - char *seps, *last, *next, *name[MAX_PARAMS], *val[MAX_PARAMS]; - int nparams = 0, i, j; - - *attrs = apr_pcalloc(pool, MAX_PARAMS * sizeof(char *)); - *attrvals = apr_pcalloc(pool, MAX_PARAMS * sizeof(ODBC_INTPTR_T)); - *nattrs = 0; - seps = DEFAULTSEPS; - name[nparams] = apr_strtok(apr_pstrdup(pool, params), seps, &last); - - /* no params is OK here - let connect return a more useful error msg */ - if (!name[nparams]) - return SQL_SUCCESS; - - do { - if (last[strspn(last, seps)] == CSINGLEQUOTE) { - last += strspn(last, seps); - seps=SSINGLEQUOTE; - } - val[nparams] = apr_strtok(NULL, seps, &last); - seps = DEFAULTSEPS; - - ++nparams; - next = apr_strtok(NULL, seps, &last); - if (!next) { - break; - } - if (nparams >= MAX_PARAMS) { - /* too many parameters, no place to store */ - return APR_EGENERAL; - } - name[nparams] = next; - } while (1); - - for (j = i = 0; i < nparams; i++) { - if (!apr_strnatcasecmp(name[i], "CONNECT")) { - *datasource = (SQLCHAR *)apr_pstrdup(pool, val[i]); - *connect = 1; - } - else if (!apr_strnatcasecmp(name[i], "DATASOURCE")) { - *datasource = (SQLCHAR *)apr_pstrdup(pool, val[i]); - *connect = 0; - } - else if (!apr_strnatcasecmp(name[i], "USER")) { - *user = (SQLCHAR *)apr_pstrdup(pool, val[i]); - } - else if (!apr_strnatcasecmp(name[i], "PASSWORD")) { - *password = (SQLCHAR *)apr_pstrdup(pool, val[i]); - } - else if (!apr_strnatcasecmp(name[i], "BUFSIZE")) { - *defaultBufferSize = atoi(val[i]); - } - else if (!apr_strnatcasecmp(name[i], "ACCESS")) { - if (!apr_strnatcasecmp(val[i], "READ_ONLY")) - (*attrvals)[j] = SQL_MODE_READ_ONLY; - else if (!apr_strnatcasecmp(val[i], "READ_WRITE")) - (*attrvals)[j] = SQL_MODE_READ_WRITE; - else - return SQL_ERROR; - (*attrs)[j++] = SQL_ATTR_ACCESS_MODE; - } - else if (!apr_strnatcasecmp(name[i], "CTIMEOUT")) { - (*attrvals)[j] = atoi(val[i]); - (*attrs)[j++] = SQL_ATTR_LOGIN_TIMEOUT; - } - else if (!apr_strnatcasecmp(name[i], "STIMEOUT")) { - (*attrvals)[j] = atoi(val[i]); - (*attrs)[j++] = SQL_ATTR_CONNECTION_TIMEOUT; - } - else if (!apr_strnatcasecmp(name[i], "TXMODE")) { - if (!apr_strnatcasecmp(val[i], "READ_UNCOMMITTED")) - (*attrvals)[j] = SQL_TXN_READ_UNCOMMITTED; - else if (!apr_strnatcasecmp(val[i], "READ_COMMITTED")) - (*attrvals)[j] = SQL_TXN_READ_COMMITTED; - else if (!apr_strnatcasecmp(val[i], "REPEATABLE_READ")) - (*attrvals)[j] = SQL_TXN_REPEATABLE_READ; - else if (!apr_strnatcasecmp(val[i], "SERIALIZABLE")) - (*attrvals)[j] = SQL_TXN_SERIALIZABLE; - else if (!apr_strnatcasecmp(val[i], "DEFAULT")) - continue; - else - return SQL_ERROR; - (*attrs)[j++] = SQL_ATTR_TXN_ISOLATION; - } - else - return SQL_ERROR; - } - *nattrs = j; - return (*datasource && *defaultBufferSize) ? APR_SUCCESS : SQL_ERROR; -} - -/* common handling after ODBC calls - save error info (code and text) in dbc */ -static void check_error(apr_dbd_t *dbc, const char *step, SQLRETURN rc, - SQLSMALLINT type, SQLHANDLE h, int line) -{ - SQLCHAR buffer[512]; - SQLCHAR sqlstate[128]; - SQLINTEGER native; - SQLSMALLINT reslength; - char *res, *p, *end, *logval = NULL; - int i; - - /* set info about last error in dbc - fast return for SQL_SUCCESS */ - if (rc == SQL_SUCCESS) { - char successMsg[] = "[dbd_odbc] SQL_SUCCESS "; - apr_size_t successMsgLen = sizeof successMsg - 1; - - dbc->lasterrorcode = SQL_SUCCESS; - apr_cpystrn(dbc->lastError, successMsg, sizeof dbc->lastError); - apr_cpystrn(dbc->lastError + successMsgLen, step, - sizeof dbc->lastError - successMsgLen); - return; - } - switch (rc) { - case SQL_INVALID_HANDLE: - res = "SQL_INVALID_HANDLE"; - break; - case SQL_ERROR: - res = "SQL_ERROR"; - break; - case SQL_SUCCESS_WITH_INFO: - res = "SQL_SUCCESS_WITH_INFO"; - break; - case SQL_STILL_EXECUTING: - res = "SQL_STILL_EXECUTING"; - break; - case SQL_NEED_DATA: - res = "SQL_NEED_DATA"; - break; - case SQL_NO_DATA: - res = "SQL_NO_DATA"; - break; - default: - res = "unrecognized SQL return code"; - } - /* these two returns are expected during normal execution */ - if (rc != SQL_SUCCESS_WITH_INFO && rc != SQL_NO_DATA - && dbc->can_commit != APR_DBD_TRANSACTION_IGNORE_ERRORS) { - dbc->can_commit = APR_DBD_TRANSACTION_ROLLBACK; - } - p = dbc->lastError; - end = p + sizeof(dbc->lastError); - dbc->lasterrorcode = rc; - p += sprintf(p, "[dbd_odbc] %.64s returned %.30s (%d) at %.24s:%d ", - step, res, rc, SOURCE_FILE, line - 1); - for (i = 1, rc = 0; rc == 0; i++) { - rc = SQLGetDiagRec(type, h, i, sqlstate, &native, buffer, - sizeof(buffer), &reslength); - if (SQL_SUCCEEDED(rc) && (p < (end - 280))) - p += sprintf(p, "%.256s %.20s ", buffer, sqlstate); - } - apr_env_get(&logval, "apr_dbd_odbc_log", dbc->pool); - /* if env var was set or call was init/open (no dbname) - log to stderr */ - if (logval || !dbc->dbname ) { - char timestamp[APR_CTIME_LEN]; - - apr_file_t *se; - apr_ctime(timestamp, apr_time_now()); - apr_file_open_stderr(&se, dbc->pool); - apr_file_printf(se, "[%s] %s\n", timestamp, dbc->lastError); - } -} - -static APR_INLINE int odbc_check_rollback(apr_dbd_t *handle) -{ - if (handle->can_commit == APR_DBD_TRANSACTION_ROLLBACK) { - handle->lasterrorcode = SQL_ERROR; - apr_cpystrn(handle->lastError, "[dbd_odbc] Rollback pending ", - sizeof handle->lastError); - return 1; - } - return 0; -} - -/* - * public functions per DBD driver API - */ - -/** init: allow driver to perform once-only initialisation. **/ -static void odbc_init(apr_pool_t *pool) -{ - SQLRETURN rc; - char *step; - apr_version_t apuver; - - apu_version(&apuver); - if (apuver.major != DRIVER_APU_VERSION_MAJOR - || apuver.minor != DRIVER_APU_VERSION_MINOR) { - apr_file_t *se; - - apr_file_open_stderr(&se, pool); - apr_file_printf(se, "Incorrect " ODBC_DRIVER_STRING " dbd driver version\n" - "Attempt to load APU version %d.%d driver with APU version %d.%d\n", - DRIVER_APU_VERSION_MAJOR, DRIVER_APU_VERSION_MINOR, - apuver.major, apuver.minor); - abort(); - } - - if (henv) - return; - - step = "SQLAllocHandle (SQL_HANDLE_ENV)"; - rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); - apr_pool_cleanup_register(pool, henv, odbc_close_env, apr_pool_cleanup_null); - if (SQL_SUCCEEDED(rc)) { - step = "SQLSetEnvAttr"; - rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, - (SQLPOINTER)SQL_OV_ODBC3, 0); - } - else { - apr_dbd_t tmp_dbc; - SQLHANDLE err_h = henv; - - tmp_dbc.pool = pool; - tmp_dbc.dbname = NULL; - CHECK_ERROR(&tmp_dbc, step, rc, SQL_HANDLE_ENV, err_h); - } -} - -/** native_handle: return the native database handle of the underlying db **/ -static void *odbc_native_handle(apr_dbd_t *handle) -{ - return handle->dbc; -} - -/** open: obtain a database connection from the server rec. **/ - -/* It would be more efficient to allocate a single statement handle - * here - but SQL_ATTR_CURSOR_SCROLLABLE must be set before - * SQLPrepare, and we don't know whether random-access is - * specified until SQLExecute so we cannot. - */ - -static apr_dbd_t *odbc_open(apr_pool_t *pool, const char *params, const char **error) -{ - SQLRETURN rc; - SQLHANDLE hdbc = NULL; - apr_dbd_t *handle; - char *err_step; - int err_htype, i; - int defaultBufferSize = DEFAULT_BUFFER_SIZE; - SQLHANDLE err_h = NULL; - SQLCHAR *datasource = (SQLCHAR *)"", *user = (SQLCHAR *)"", - *password = (SQLCHAR *)""; - int nattrs = 0, *attrs = NULL, connect = 0; - ODBC_INTPTR_T *attrvals = NULL; - - err_step = "SQLAllocHandle (SQL_HANDLE_DBC)"; - err_htype = SQL_HANDLE_ENV; - err_h = henv; - rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); - if (SQL_SUCCEEDED(rc)) { - err_step = "Invalid DBD Parameters - open"; - err_htype = SQL_HANDLE_DBC; - err_h = hdbc; - rc = odbc_parse_params(pool, params, &connect, &datasource, &user, - &password, &defaultBufferSize, &nattrs, &attrs, - &attrvals); - } - if (SQL_SUCCEEDED(rc)) { - for (i = 0; i < nattrs && SQL_SUCCEEDED(rc); i++) { - err_step = "SQLSetConnectAttr (from DBD Parameters)"; - err_htype = SQL_HANDLE_DBC; - err_h = hdbc; - rc = SQLSetConnectAttr(hdbc, attrs[i], (SQLPOINTER)attrvals[i], 0); - } - } - if (SQL_SUCCEEDED(rc)) { - if (connect) { - SQLCHAR out[1024]; - SQLSMALLINT outlen; - - err_step = "SQLDriverConnect"; - err_htype = SQL_HANDLE_DBC; - err_h = hdbc; - rc = SQLDriverConnect(hdbc, NULL, datasource, - (SQLSMALLINT)strlen((char *)datasource), - out, sizeof(out), &outlen, SQL_DRIVER_NOPROMPT); - } - else { - err_step = "SQLConnect"; - err_htype = SQL_HANDLE_DBC; - err_h = hdbc; - rc = SQLConnect(hdbc, datasource, - (SQLSMALLINT)strlen((char *)datasource), - user, (SQLSMALLINT)strlen((char *)user), - password, (SQLSMALLINT)strlen((char *)password)); - } - } - if (SQL_SUCCEEDED(rc)) { - handle = apr_pcalloc(pool, sizeof(apr_dbd_t)); - handle->dbname = apr_pstrdup(pool, (char *)datasource); - handle->dbc = hdbc; - handle->pool = pool; - handle->defaultBufferSize = defaultBufferSize; - CHECK_ERROR(handle, "SQLConnect", rc, SQL_HANDLE_DBC, handle->dbc); - handle->default_transaction_mode = 0; - handle->can_commit = APR_DBD_TRANSACTION_IGNORE_ERRORS; - SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION, - &(handle->default_transaction_mode), sizeof(ODBC_INTPTR_T), NULL); - handle->transaction_mode = handle->default_transaction_mode; - SQLGetInfo(hdbc, SQL_GETDATA_EXTENSIONS ,&(handle->dboptions), - sizeof(ODBC_INTPTR_T), NULL); - apr_pool_cleanup_register(pool, handle, odbc_close_cleanup, apr_pool_cleanup_null); - return handle; - } - else { - apr_dbd_t tmp_dbc; - - tmp_dbc.pool = pool; - tmp_dbc.dbname = NULL; - CHECK_ERROR(&tmp_dbc, err_step, rc, err_htype, err_h); - if (error) - *error = apr_pstrdup(pool, tmp_dbc.lastError); - if (hdbc) - SQLFreeHandle(SQL_HANDLE_DBC, hdbc); - return NULL; - } -} - -/** check_conn: check status of a database connection **/ -static apr_status_t odbc_check_conn(apr_pool_t *pool, apr_dbd_t *handle) -{ - SQLUINTEGER isDead; - SQLRETURN rc; - - rc = SQLGetConnectAttr(handle->dbc, SQL_ATTR_CONNECTION_DEAD, &isDead, - sizeof(SQLUINTEGER), NULL); - CHECK_ERROR(handle, "SQLGetConnectAttr (SQL_ATTR_CONNECTION_DEAD)", rc, - SQL_HANDLE_DBC, handle->dbc); - /* if driver cannot check connection, say so */ - if (rc != SQL_SUCCESS) - return APR_ENOTIMPL; - - return (isDead == SQL_CD_FALSE) ? APR_SUCCESS : APR_EGENERAL; -} - -/** set_dbname: select database name. May be a no-op if not supported. **/ -static int odbc_set_dbname(apr_pool_t*pool, apr_dbd_t *handle, - const char *name) -{ - if (apr_strnatcmp(name, handle->dbname)) { - return APR_EGENERAL; /* It's illegal to change dbname in ODBC */ - } - CHECK_ERROR(handle, "set_dbname (no-op)", SQL_SUCCESS, SQL_HANDLE_DBC, - handle->dbc); - return APR_SUCCESS; /* OK if it's the same name */ -} - -/** transaction: start a transaction. May be a no-op. **/ -static int odbc_start_transaction(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_transaction_t **trans) -{ - SQLRETURN rc = SQL_SUCCESS; - - if (handle->transaction_mode) { - rc = SQLSetConnectAttr(handle->dbc, SQL_ATTR_TXN_ISOLATION, - (SQLPOINTER)handle->transaction_mode, 0); - CHECK_ERROR(handle, "SQLSetConnectAttr (SQL_ATTR_TXN_ISOLATION)", rc, - SQL_HANDLE_DBC, handle->dbc); - } - if (SQL_SUCCEEDED(rc)) { - /* turn off autocommit for transactions */ - rc = SQLSetConnectAttr(handle->dbc, SQL_ATTR_AUTOCOMMIT, - SQL_AUTOCOMMIT_OFF, 0); - CHECK_ERROR(handle, "SQLSetConnectAttr (SQL_ATTR_AUTOCOMMIT)", rc, - SQL_HANDLE_DBC, handle->dbc); - } - if (SQL_SUCCEEDED(rc)) { - *trans = apr_palloc(pool, sizeof(apr_dbd_transaction_t)); - (*trans)->dbc = handle->dbc; - (*trans)->apr_dbd = handle; - } - handle->can_commit = APR_DBD_TRANSACTION_COMMIT; - return APR_FROM_SQL_RESULT(rc); -} - -/** end_transaction: end a transaction **/ -static int odbc_end_transaction(apr_dbd_transaction_t *trans) -{ - SQLRETURN rc; - int action = (trans->apr_dbd->can_commit != APR_DBD_TRANSACTION_ROLLBACK) - ? SQL_COMMIT : SQL_ROLLBACK; - - rc = SQLEndTran(SQL_HANDLE_DBC, trans->dbc, action); - CHECK_ERROR(trans->apr_dbd, "SQLEndTran", rc, SQL_HANDLE_DBC, trans->dbc); - if (SQL_SUCCEEDED(rc)) { - rc = SQLSetConnectAttr(trans->dbc, SQL_ATTR_AUTOCOMMIT, - (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0); - CHECK_ERROR(trans->apr_dbd, "SQLSetConnectAttr (SQL_ATTR_AUTOCOMMIT)", - rc, SQL_HANDLE_DBC, trans->dbc); - } - trans->apr_dbd->can_commit = APR_DBD_TRANSACTION_IGNORE_ERRORS; - return APR_FROM_SQL_RESULT(rc); -} - -/** query: execute an SQL statement which doesn't return a result set **/ -static int odbc_query(apr_dbd_t *handle, int *nrows, const char *statement) -{ - SQLRETURN rc; - SQLHANDLE hstmt = NULL; - size_t len = strlen(statement); - - if (odbc_check_rollback(handle)) - return APR_EGENERAL; - - rc = SQLAllocHandle(SQL_HANDLE_STMT, handle->dbc, &hstmt); - CHECK_ERROR(handle, "SQLAllocHandle (STMT)", rc, SQL_HANDLE_DBC, - handle->dbc); - if (!SQL_SUCCEEDED(rc)) - return APR_FROM_SQL_RESULT(rc); - - rc = SQLExecDirect(hstmt, (SQLCHAR *)statement, (SQLINTEGER)len); - CHECK_ERROR(handle, "SQLExecDirect", rc, SQL_HANDLE_STMT, hstmt); - - if (SQL_SUCCEEDED(rc)) { - SQLLEN rowcount; - - rc = SQLRowCount(hstmt, &rowcount); - *nrows = (int)rowcount; - CHECK_ERROR(handle, "SQLRowCount", rc, SQL_HANDLE_STMT, hstmt); - } - - SQLFreeHandle(SQL_HANDLE_STMT, hstmt); - return APR_FROM_SQL_RESULT(rc); -} - -/** select: execute an SQL statement which returns a result set **/ -static int odbc_select(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, const char *statement, - int random) -{ - SQLRETURN rc; - SQLHANDLE hstmt; - apr_dbd_prepared_t *stmt; - size_t len = strlen(statement); - - if (odbc_check_rollback(handle)) - return APR_EGENERAL; - - rc = SQLAllocHandle(SQL_HANDLE_STMT, handle->dbc, &hstmt); - CHECK_ERROR(handle, "SQLAllocHandle (STMT)", rc, SQL_HANDLE_DBC, - handle->dbc); - if (!SQL_SUCCEEDED(rc)) - return APR_FROM_SQL_RESULT(rc); - /* Prepare an apr_dbd_prepared_t for pool cleanup, even though this - * is not a prepared statement. We want the same cleanup mechanism. - */ - stmt = apr_pcalloc(pool, sizeof(apr_dbd_prepared_t)); - stmt->apr_dbd = handle; - stmt->dbc = handle->dbc; - stmt->stmt = hstmt; - apr_pool_cleanup_register(pool, stmt, odbc_close_pstmt, apr_pool_cleanup_null); - if (random) { - rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_SCROLLABLE, - (SQLPOINTER)SQL_SCROLLABLE, 0); - CHECK_ERROR(handle, "SQLSetStmtAttr (SQL_ATTR_CURSOR_SCROLLABLE)", rc, - SQL_HANDLE_STMT, hstmt); - } - if (SQL_SUCCEEDED(rc)) { - rc = SQLExecDirect(hstmt, (SQLCHAR *)statement, (SQLINTEGER)len); - CHECK_ERROR(handle, "SQLExecDirect", rc, SQL_HANDLE_STMT, hstmt); - } - if (SQL_SUCCEEDED(rc)) { - rc = odbc_create_results(handle, hstmt, pool, random, res); - apr_pool_cleanup_register(pool, *res, - odbc_close_results, apr_pool_cleanup_null); - } - return APR_FROM_SQL_RESULT(rc); -} - -/** num_cols: get the number of columns in a results set **/ -static int odbc_num_cols(apr_dbd_results_t *res) -{ - return res->ncols; -} - -/** num_tuples: get the number of rows in a results set **/ -static int odbc_num_tuples(apr_dbd_results_t *res) -{ - SQLRETURN rc; - SQLLEN nrows; - - rc = SQLRowCount(res->stmt, &nrows); - CHECK_ERROR(res->apr_dbd, "SQLRowCount", rc, SQL_HANDLE_STMT, res->stmt); - return SQL_SUCCEEDED(rc) ? (int)nrows : -1; -} - -/** get_row: get a row from a result set **/ -static int odbc_get_row(apr_pool_t *pool, apr_dbd_results_t *res, - apr_dbd_row_t **row, int rownum) -{ - SQLRETURN rc; - char *fetchtype; - int c; - - *row = apr_pcalloc(pool, sizeof(apr_dbd_row_t)); - (*row)->stmt = res->stmt; - (*row)->dbc = res->dbc; - (*row)->res = res; - (*row)->pool = res->pool; - - /* mark all the columns as needing SQLGetData unless they are bound */ - for (c = 0; c < res->ncols; c++) { - if (res->colstate[c] != COL_BOUND) { - res->colstate[c] = COL_AVAIL; - } - /* some drivers do not null-term zero-len CHAR data */ - if (res->colptrs[c]) - *(char *)res->colptrs[c] = 0; - } - - if (res->random && (rownum > 0)) { - fetchtype = "SQLFetchScroll"; - rc = SQLFetchScroll(res->stmt, SQL_FETCH_ABSOLUTE, rownum); - } - else { - fetchtype = "SQLFetch"; - rc = SQLFetch(res->stmt); - } - CHECK_ERROR(res->apr_dbd, fetchtype, rc, SQL_HANDLE_STMT, res->stmt); - (*row)->stmt = res->stmt; - if (!SQL_SUCCEEDED(rc) && !res->random) { - /* early close on any error (usually SQL_NO_DATA) if fetching - * sequentially to release resources ASAP - */ - odbc_close_results(res); - return -1; - } - return SQL_SUCCEEDED(rc) ? 0 : -1; -} - -/** datum_get: get a binary entry from a row **/ -static apr_status_t odbc_datum_get(const apr_dbd_row_t *row, int col, - apr_dbd_type_e dbdtype, void *data) -{ - SQLSMALLINT sqltype; - void *p; - int len; - - if (col >= row->res->ncols) - return APR_EGENERAL; - - if (dbdtype < 0 || dbdtype >= NUM_APR_DBD_TYPES) { - data = NULL; /* invalid type */ - return APR_EGENERAL; - } - - len = sqlSizes[dbdtype]; - sqltype = sqlCtype[dbdtype]; - - /* must not memcpy a brigade, sentinals are relative to orig loc */ - if (IS_LOB(sqltype)) - return odbc_create_bucket(row, col, sqltype, data); - - p = odbc_get(row, col, sqltype); - if (p == (void *)-1) - return APR_EGENERAL; - - if (p == NULL) - return APR_ENOENT; /* SQL NULL value */ - - if (len < 0) - *(char**)data = (char *)p; - else - memcpy(data, p, len); - - return APR_SUCCESS; - -} - -/** get_entry: get an entry from a row (string data) **/ -static const char *odbc_get_entry(const apr_dbd_row_t *row, int col) -{ - void *p; - - if (col >= row->res->ncols) - return NULL; - - p = odbc_get(row, col, SQL_C_CHAR); - - /* NULL or invalid (-1) */ - if (p == NULL || p == (void *)-1) - return p; - else - return apr_pstrdup(row->pool, p); -} - -/** error: get current error message (if any) **/ -static const char *odbc_error(apr_dbd_t *handle, int errnum) -{ - return (handle) ? handle->lastError : "[dbd_odbc]No error message available"; -} - -/** escape: escape a string so it is safe for use in query/select **/ -static const char *odbc_escape(apr_pool_t *pool, const char *s, - apr_dbd_t *handle) -{ - char *newstr, *src, *dst, *sq; - int qcount; - - /* return the original if there are no single-quotes */ - if (!(sq = strchr(s, '\''))) - return (char *)s; - /* count the single-quotes and allocate a new buffer */ - for (qcount = 1; (sq = strchr(sq + 1, '\'')); ) - qcount++; - newstr = apr_palloc(pool, strlen(s) + qcount + 1); - - /* move chars, doubling all single-quotes */ - src = (char *)s; - for (dst = newstr; *src; src++) { - if ((*dst++ = *src) == '\'') - *dst++ = '\''; - } - *dst = 0; - return newstr; -} - -/** prepare: prepare a statement **/ -static int odbc_prepare(apr_pool_t *pool, apr_dbd_t *handle, - const char *query, const char *label, int nargs, - int nvals, apr_dbd_type_e *types, - apr_dbd_prepared_t **statement) -{ - SQLRETURN rc; - size_t len = strlen(query); - - if (odbc_check_rollback(handle)) - return APR_EGENERAL; - - *statement = apr_pcalloc(pool, sizeof(apr_dbd_prepared_t)); - (*statement)->dbc = handle->dbc; - (*statement)->apr_dbd = handle; - (*statement)->nargs = nargs; - (*statement)->nvals = nvals; - (*statement)->types = - apr_pmemdup(pool, types, nargs * sizeof(apr_dbd_type_e)); - rc = SQLAllocHandle(SQL_HANDLE_STMT, handle->dbc, &((*statement)->stmt)); - apr_pool_cleanup_register(pool, *statement, - odbc_close_pstmt, apr_pool_cleanup_null); - CHECK_ERROR(handle, "SQLAllocHandle (STMT)", rc, - SQL_HANDLE_DBC, handle->dbc); - rc = SQLPrepare((*statement)->stmt, (SQLCHAR *)query, (SQLINTEGER)len); - CHECK_ERROR(handle, "SQLPrepare", rc, SQL_HANDLE_STMT, - (*statement)->stmt); - return APR_FROM_SQL_RESULT(rc); -} - -/** pquery: query using a prepared statement + args **/ -static int odbc_pquery(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, const char **args) -{ - SQLRETURN rc = SQL_SUCCESS; - int i, argp; - - if (odbc_check_rollback(handle)) - return APR_EGENERAL; - - for (i = argp = 0; i < statement->nargs && SQL_SUCCEEDED(rc); i++) { - rc = odbc_bind_param(pool, statement, i + 1, statement->types[i], - &argp, (const void **)args, TEXTMODE); - } - if (SQL_SUCCEEDED(rc)) { - rc = SQLExecute(statement->stmt); - CHECK_ERROR(handle, "SQLExecute", rc, SQL_HANDLE_STMT, - statement->stmt); - } - if (SQL_SUCCEEDED(rc)) { - SQLLEN rowcount; - - rc = SQLRowCount(statement->stmt, &rowcount); - *nrows = (int)rowcount; - CHECK_ERROR(handle, "SQLRowCount", rc, SQL_HANDLE_STMT, - statement->stmt); - } - return APR_FROM_SQL_RESULT(rc); -} - -/** pvquery: query using a prepared statement + args **/ -static int odbc_pvquery(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, va_list args) -{ - const char **values; - int i; - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - for (i = 0; i < statement->nvals; i++) - values[i] = va_arg(args, const char *); - return odbc_pquery(pool, handle, nrows, statement, values); -} - -/** pselect: select using a prepared statement + args **/ -static int odbc_pselect(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, apr_dbd_prepared_t *statement, - int random, const char **args) -{ - SQLRETURN rc = SQL_SUCCESS; - int i, argp; - - if (odbc_check_rollback(handle)) - return APR_EGENERAL; - - if (random) { - rc = SQLSetStmtAttr(statement->stmt, SQL_ATTR_CURSOR_SCROLLABLE, - (SQLPOINTER)SQL_SCROLLABLE, 0); - CHECK_ERROR(handle, "SQLSetStmtAttr (SQL_ATTR_CURSOR_SCROLLABLE)", - rc, SQL_HANDLE_STMT, statement->stmt); - } - if (SQL_SUCCEEDED(rc)) { - for (i = argp = 0; i < statement->nargs && SQL_SUCCEEDED(rc); i++) { - rc = odbc_bind_param(pool, statement, i + 1, statement->types[i], - &argp, (const void **)args, TEXTMODE); - } - } - if (SQL_SUCCEEDED(rc)) { - rc = SQLExecute(statement->stmt); - CHECK_ERROR(handle, "SQLExecute", rc, SQL_HANDLE_STMT, - statement->stmt); - } - if (SQL_SUCCEEDED(rc)) { - rc = odbc_create_results(handle, statement->stmt, pool, random, res); - apr_pool_cleanup_register(pool, *res, - odbc_close_results, apr_pool_cleanup_null); - } - return APR_FROM_SQL_RESULT(rc); -} - -/** pvselect: select using a prepared statement + args **/ -static int odbc_pvselect(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - va_list args) -{ - const char **values; - int i; - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - for (i = 0; i < statement->nvals; i++) - values[i] = va_arg(args, const char *); - return odbc_pselect(pool, handle, res, statement, random, values); -} - -/** get_name: get a column title from a result set **/ -static const char *odbc_get_name(const apr_dbd_results_t *res, int col) -{ - SQLRETURN rc; - char buffer[MAX_COLUMN_NAME]; - SQLSMALLINT colnamelength, coltype, coldecimal, colnullable; - SQLULEN colsize; - - if (col >= res->ncols) - return NULL; /* bogus column number */ - if (res->colnames[col] != NULL) - return res->colnames[col]; /* we already retrieved it */ - rc = SQLDescribeCol(res->stmt, col + 1, - (SQLCHAR *)buffer, sizeof(buffer), &colnamelength, - &coltype, &colsize, &coldecimal, &colnullable); - CHECK_ERROR(res->apr_dbd, "SQLDescribeCol", rc, - SQL_HANDLE_STMT, res->stmt); - res->colnames[col] = apr_pstrdup(res->pool, buffer); - return res->colnames[col]; -} - -/** transaction_mode_get: get the mode of transaction **/ -static int odbc_transaction_mode_get(apr_dbd_transaction_t *trans) -{ - return (int)trans->apr_dbd->can_commit; -} - -/** transaction_mode_set: set the mode of transaction **/ -static int odbc_transaction_mode_set(apr_dbd_transaction_t *trans, int mode) -{ - int legal = ( APR_DBD_TRANSACTION_IGNORE_ERRORS - | APR_DBD_TRANSACTION_COMMIT - | APR_DBD_TRANSACTION_ROLLBACK); - - if ((mode & legal) != mode) - return APR_EGENERAL; - - trans->apr_dbd->can_commit = mode; - return APR_SUCCESS; -} - -/** pbquery: query using a prepared statement + binary args **/ -static int odbc_pbquery(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, const void **args) -{ - SQLRETURN rc = SQL_SUCCESS; - int i, argp; - - if (odbc_check_rollback(handle)) - return APR_EGENERAL; - - for (i = argp = 0; i < statement->nargs && SQL_SUCCEEDED(rc); i++) - rc = odbc_bind_param(pool, statement, i + 1, statement->types[i], - &argp, args, BINARYMODE); - - if (SQL_SUCCEEDED(rc)) { - rc = SQLExecute(statement->stmt); - CHECK_ERROR(handle, "SQLExecute", rc, SQL_HANDLE_STMT, - statement->stmt); - } - if (SQL_SUCCEEDED(rc)) { - SQLLEN rowcount; - - rc = SQLRowCount(statement->stmt, &rowcount); - *nrows = (int)rowcount; - CHECK_ERROR(handle, "SQLRowCount", rc, SQL_HANDLE_STMT, - statement->stmt); - } - return APR_FROM_SQL_RESULT(rc); -} - -/** pbselect: select using a prepared statement + binary args **/ -static int odbc_pbselect(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, - int random, const void **args) -{ - SQLRETURN rc = SQL_SUCCESS; - int i, argp; - - if (odbc_check_rollback(handle)) - return APR_EGENERAL; - - if (random) { - rc = SQLSetStmtAttr(statement->stmt, SQL_ATTR_CURSOR_SCROLLABLE, - (SQLPOINTER)SQL_SCROLLABLE, 0); - CHECK_ERROR(handle, "SQLSetStmtAttr (SQL_ATTR_CURSOR_SCROLLABLE)", - rc, SQL_HANDLE_STMT, statement->stmt); - } - if (SQL_SUCCEEDED(rc)) { - for (i = argp = 0; i < statement->nargs && SQL_SUCCEEDED(rc); i++) { - rc = odbc_bind_param(pool, statement, i + 1, statement->types[i], - &argp, args, BINARYMODE); - } - } - if (SQL_SUCCEEDED(rc)) { - rc = SQLExecute(statement->stmt); - CHECK_ERROR(handle, "SQLExecute", rc, SQL_HANDLE_STMT, - statement->stmt); - } - if (SQL_SUCCEEDED(rc)) { - rc = odbc_create_results(handle, statement->stmt, pool, random, res); - apr_pool_cleanup_register(pool, *res, - odbc_close_results, apr_pool_cleanup_null); - } - - return APR_FROM_SQL_RESULT(rc); -} - -/** pvbquery: query using a prepared statement + binary args **/ -static int odbc_pvbquery(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, va_list args) -{ - const char **values; - int i; - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - for (i = 0; i < statement->nvals; i++) - values[i] = va_arg(args, const char *); - return odbc_pbquery(pool, handle, nrows, statement, (const void **)values); -} - -/** pvbselect: select using a prepared statement + binary args **/ -static int odbc_pvbselect(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, - int random, va_list args) -{ - const char **values; - int i; - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - for (i = 0; i < statement->nvals; i++) - values[i] = va_arg(args, const char *); - return odbc_pbselect(pool, handle, res, statement, random, (const void **)values); -} - -APU_MODULE_DECLARE_DATA const apr_dbd_driver_t ODBC_DRIVER_ENTRY = { - ODBC_DRIVER_STRING, - odbc_init, - odbc_native_handle, - odbc_open, - odbc_check_conn, - odbc_close, - odbc_set_dbname, - odbc_start_transaction, - odbc_end_transaction, - odbc_query, - odbc_select, - odbc_num_cols, - odbc_num_tuples, - odbc_get_row, - odbc_get_entry, - odbc_error, - odbc_escape, - odbc_prepare, - odbc_pvquery, - odbc_pvselect, - odbc_pquery, - odbc_pselect, - odbc_get_name, - odbc_transaction_mode_get, - odbc_transaction_mode_set, - "?", - odbc_pvbquery, - odbc_pvbselect, - odbc_pbquery, - odbc_pbselect, - odbc_datum_get -}; - -#endif Index: contrib/apr-util/dbd/apr_dbd_oracle.c =================================================================== --- contrib/apr-util/dbd/apr_dbd_oracle.c +++ /dev/null @@ -1,2220 +0,0 @@ -/* 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. - */ - -/* Developed initially by Nick Kew and Chris Darroch. - * Contributed to the APR project by kind permission of - * Pearson Education Core Technology Group (CTG), - * formerly Central Media Group (CMG). - */ - -/* apr_dbd_oracle - a painful attempt - * - * Based first on the documentation at - * http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96584/toc.htm - * - * Those docs have a lot of internal inconsistencies, contradictions, etc - * So I've snarfed the demo programs (from Oracle 8, not included in - * the current downloadable oracle), and used code from them. - * - * Why do cdemo81.c and cdemo82.c do the same thing in very different ways? - * e.g. cdemo82 releases all its handle on shutdown; cdemo81 doesn't - * - * All the ORA* functions return a "sword". Some of them are documented; - * others aren't. So I've adopted a policy of using switch statements - * everywhere, even when we're not doing anything with the return values. - * - * This makes no attempt at performance tuning, such as setting - * prefetch cache size. We need some actual performance data - * to make that meaningful. Input from someone with experience - * as a sysop using oracle would be a good start. - */ - -/* shut compiler up */ -#ifdef DEBUG -#define int_errorcode int errorcode -#else -#define int_errorcode -#endif - -#include "apu.h" - -#if APU_HAVE_ORACLE - -#include -#include -#include - -#include - -#include "apr_strings.h" -#include "apr_lib.h" -#include "apr_time.h" -#include "apr_hash.h" -#include "apr_buckets.h" - -#define TRANS_TIMEOUT 30 -#define MAX_ARG_LEN 256 /* in line with other apr_dbd drivers. We alloc this - * lots of times, so a large value gets hungry. - * Should really make it configurable - */ -#define DEFAULT_LONG_SIZE 4096 -#define DBD_ORACLE_MAX_COLUMNS 256 -#define NUMERIC_FIELD_SIZE 32 - -#define CHECK_CONN_QUERY "SELECT 1 FROM dual" - -#define ERR_BUF_SIZE 200 - -#ifdef DEBUG -#include -#endif - -#include "apr_dbd_internal.h" - -/* declarations */ -static const char *dbd_oracle_error(apr_dbd_t *sql, int n); -static int dbd_oracle_prepare(apr_pool_t *pool, apr_dbd_t *sql, - const char *query, const char *label, - int nargs, int nvals, apr_dbd_type_e *types, - apr_dbd_prepared_t **statement); -static int outputParams(apr_dbd_t*, apr_dbd_prepared_t*); -static int dbd_oracle_pselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, const char **values); -static int dbd_oracle_pquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const char **values); -static int dbd_oracle_start_transaction(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_transaction_t **trans); -static int dbd_oracle_end_transaction(apr_dbd_transaction_t *trans); - -struct apr_dbd_transaction_t { - int mode; - enum { TRANS_NONE, TRANS_ERROR, TRANS_1, TRANS_2 } status; - apr_dbd_t *handle; - OCITrans *trans; - OCISnapshot *snapshot1; - OCISnapshot *snapshot2; -}; - -struct apr_dbd_results_t { - apr_pool_t *pool; - apr_dbd_t* handle; - unsigned int rownum; - int seek; - int nrows; - apr_dbd_prepared_t *statement; -}; - -struct apr_dbd_t { - sword status; - OCIError *err; - OCIServer *svr; - OCISvcCtx *svc; - OCISession *auth; - apr_dbd_transaction_t* trans; - apr_pool_t *pool; - char buf[ERR_BUF_SIZE]; /* for error messages */ - apr_size_t long_size; - apr_dbd_prepared_t *check_conn_stmt; -}; - -struct apr_dbd_row_t { - int n; - apr_dbd_results_t *res; - apr_pool_t *pool; -}; - -typedef struct { - apr_dbd_type_e type; - sb2 ind; - sb4 len; - OCIBind *bind; - union { - void *raw; - char *sval; - int ival; - unsigned int uval; - double fval; - OCILobLocator *lobval; - } value; -} bind_arg; - -typedef struct { - int type; - sb2 ind; - ub2 len; /* length of actual output */ - OCIDefine *defn; - apr_size_t sz; /* length of buf for output */ - union { - void *raw; - char *sval; - OCILobLocator *lobval; - } buf; - const char *name; -} define_arg; - -struct apr_dbd_prepared_t { - OCIStmt *stmt; - int nargs; - int nvals; - bind_arg *args; - int nout; - define_arg *out; - apr_dbd_t *handle; - apr_pool_t *pool; - ub2 type; -}; - -/* AFAICT from the docs, the OCIEnv thingey can be used async - * across threads, so lets have a global one. - * - * We'll need shorter-lived envs to deal with requests and connections - * - * Hmmm, that doesn't work: we don't have a usermem framework. - * OK, forget about using APR pools here, until we figure out - * the right way to do it (if such a thing exists). - */ -static OCIEnv *dbd_oracle_env = NULL; - -/* Oracle specific bucket for BLOB/CLOB types */ -typedef struct apr_bucket_lob apr_bucket_lob; -/** - * A bucket referring to a Oracle BLOB/CLOB - */ -struct apr_bucket_lob { - /** Number of buckets using this memory */ - apr_bucket_refcount refcount; - /** The row this bucket refers to */ - const apr_dbd_row_t *row; - /** The column this bucket refers to */ - int col; - /** The pool into which any needed structures should - * be created while reading from this bucket */ - apr_pool_t *readpool; -}; - -static void lob_bucket_destroy(void *data); -static apr_status_t lob_bucket_read(apr_bucket *e, const char **str, - apr_size_t *len, apr_read_type_e block); -static apr_bucket *apr_bucket_lob_make(apr_bucket *b, - const apr_dbd_row_t *row, int col, - apr_off_t offset, apr_size_t len, - apr_pool_t *p); -static apr_bucket *apr_bucket_lob_create(const apr_dbd_row_t *row, int col, - apr_off_t offset, - apr_size_t len, apr_pool_t *p, - apr_bucket_alloc_t *list); - -static const apr_bucket_type_t apr_bucket_type_lob = { - "LOB", 5, APR_BUCKET_DATA, - lob_bucket_destroy, - lob_bucket_read, - apr_bucket_setaside_notimpl, - apr_bucket_shared_split, - apr_bucket_shared_copy -}; - -static void lob_bucket_destroy(void *data) -{ - apr_bucket_lob *f = data; - - if (apr_bucket_shared_destroy(f)) { - /* no need to destroy database objects here; it will get - * done automatically when the pool gets cleaned up */ - apr_bucket_free(f); - } -} - -static apr_status_t lob_bucket_read(apr_bucket *e, const char **str, - apr_size_t *len, apr_read_type_e block) -{ - apr_bucket_lob *a = e->data; - const apr_dbd_row_t *row = a->row; - apr_dbd_results_t *res = row->res; - int col = a->col; - apr_bucket *b = NULL; - apr_size_t blength = e->length; /* bytes remaining in file past offset */ - apr_off_t boffset = e->start; - define_arg *val = &res->statement->out[col]; - apr_dbd_t *sql = res->handle; -/* Only with 10g, unfortunately - oraub8 length = APR_BUCKET_BUFF_SIZE; -*/ - ub4 length = APR_BUCKET_BUFF_SIZE; - char *buf = NULL; - - *str = NULL; /* in case we die prematurely */ - - /* fetch from offset if not at the beginning */ - buf = apr_palloc(row->pool, APR_BUCKET_BUFF_SIZE); - sql->status = OCILobRead(sql->svc, sql->err, val->buf.lobval, - &length, 1 + (size_t)boffset, - (dvoid*) buf, APR_BUCKET_BUFF_SIZE, - NULL, NULL, 0, SQLCS_IMPLICIT); -/* Only with 10g, unfortunately - sql->status = OCILobRead2(sql->svc, sql->err, val->buf.lobval, - &length, NULL, 1 + boffset, - (dvoid*) buf, APR_BUCKET_BUFF_SIZE, - OCI_ONE_PIECE, NULL, NULL, 0, SQLCS_IMPLICIT); -*/ - if (sql->status != OCI_SUCCESS) { - return APR_EGENERAL; - } - blength -= length; - *len = length; - *str = buf; - - /* - * Change the current bucket to refer to what we read, - * even if we read nothing because we hit EOF. - */ - apr_bucket_pool_make(e, *str, *len, res->pool); - - /* If we have more to read from the field, then create another bucket */ - if (blength > 0) { - /* for efficiency, we can just build a new apr_bucket struct - * to wrap around the existing LOB bucket */ - b = apr_bucket_alloc(sizeof(*b), e->list); - b->start = boffset + *len; - b->length = blength; - b->data = a; - b->type = &apr_bucket_type_lob; - b->free = apr_bucket_free; - b->list = e->list; - APR_BUCKET_INSERT_AFTER(e, b); - } - else { - lob_bucket_destroy(a); - } - - return APR_SUCCESS; -} - -static apr_bucket *apr_bucket_lob_make(apr_bucket *b, - const apr_dbd_row_t *row, int col, - apr_off_t offset, apr_size_t len, - apr_pool_t *p) -{ - apr_bucket_lob *f; - - f = apr_bucket_alloc(sizeof(*f), b->list); - f->row = row; - f->col = col; - f->readpool = p; - - b = apr_bucket_shared_make(b, f, offset, len); - b->type = &apr_bucket_type_lob; - - return b; -} - -static apr_bucket *apr_bucket_lob_create(const apr_dbd_row_t *row, int col, - apr_off_t offset, - apr_size_t len, apr_pool_t *p, - apr_bucket_alloc_t *list) -{ - apr_bucket *b = apr_bucket_alloc(sizeof(*b), list); - - APR_BUCKET_INIT(b); - b->free = apr_bucket_free; - b->list = list; - return apr_bucket_lob_make(b, row, col, offset, len, p); -} - -static apr_status_t dbd_free_lobdesc(void *lob) -{ - switch (OCIDescriptorFree(lob, OCI_DTYPE_LOB)) { - case OCI_SUCCESS: - return APR_SUCCESS; - default: - return APR_EGENERAL; - } -} - -static apr_status_t dbd_free_snapshot(void *snap) -{ - switch (OCIDescriptorFree(snap, OCI_DTYPE_SNAP)) { - case OCI_SUCCESS: - return APR_SUCCESS; - default: - return APR_EGENERAL; - } -} - -static void dbd_oracle_init(apr_pool_t *pool) -{ - if (dbd_oracle_env == NULL) { - /* Sadly, OCI_SHARED seems to be impossible to use, due to - * various Oracle bugs. See, for example, Oracle MetaLink bug 2972890 - * and PHP bug http://bugs.php.net/bug.php?id=23733 - */ -#ifdef OCI_NEW_LENGTH_SEMANTICS - OCIEnvCreate(&dbd_oracle_env, OCI_THREADED|OCI_NEW_LENGTH_SEMANTICS, - NULL, NULL, NULL, NULL, 0, NULL); -#else - OCIEnvCreate(&dbd_oracle_env, OCI_THREADED, - NULL, NULL, NULL, NULL, 0, NULL); -#endif - } -} - -static apr_dbd_t *dbd_oracle_open(apr_pool_t *pool, const char *params, - const char **error) -{ - apr_dbd_t *ret = apr_pcalloc(pool, sizeof(apr_dbd_t)); - int errorcode; - - char *BLANK = ""; - struct { - const char *field; - char *value; - } fields[] = { - {"user", BLANK}, - {"pass", BLANK}, - {"dbname", BLANK}, - {"server", BLANK}, - {NULL, NULL} - }; - int i; - const char *ptr; - const char *key; - size_t klen; - const char *value; - size_t vlen; - static const char *const delims = " \r\n\t;|,"; - - ret->pool = pool; - ret->long_size = DEFAULT_LONG_SIZE; - - /* snitch parsing from the MySQL driver */ - for (ptr = strchr(params, '='); ptr; ptr = strchr(ptr, '=')) { - /* don't dereference memory that may not belong to us */ - if (ptr == params) { - ++ptr; - continue; - } - for (key = ptr-1; apr_isspace(*key); --key); - klen = 0; - while (apr_isalpha(*key)) { - if (key == params) { - /* Don't parse off the front of the params */ - --key; - ++klen; - break; - } - --key; - ++klen; - } - ++key; - for (value = ptr+1; apr_isspace(*value); ++value); - vlen = strcspn(value, delims); - for (i=0; fields[i].field != NULL; ++i) { - if (!strncasecmp(fields[i].field, key, klen)) { - fields[i].value = apr_pstrndup(pool, value, vlen); - break; - } - } - ptr = value+vlen; - } - - ret->status = OCIHandleAlloc(dbd_oracle_env, (dvoid**)&ret->err, - OCI_HTYPE_ERROR, 0, NULL); - switch (ret->status) { - default: -#ifdef DEBUG - printf("ret->status is %d\n", ret->status); - break; -#else - return NULL; -#endif - case OCI_SUCCESS: - break; - } - - ret->status = OCIHandleAlloc(dbd_oracle_env, (dvoid**)&ret->svr, - OCI_HTYPE_SERVER, 0, NULL); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (alloc svr): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - - ret->status = OCIHandleAlloc(dbd_oracle_env, (dvoid**)&ret->svc, - OCI_HTYPE_SVCCTX, 0, NULL); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (alloc svc): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - -/* All the examples use the #else */ -#if CAN_DO_LOGIN - ret->status = OCILogon(dbd_oracle_env, ret->err, &ret->svc, fields[0].value, - strlen(fields[0].value), fields[1].value, - strlen(fields[1].value), fields[2].value, - strlen(fields[2].value)); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR: %s\n", ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } -#else - ret->status = OCIServerAttach(ret->svr, ret->err, (text*) fields[3].value, - strlen(fields[3].value), OCI_DEFAULT); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (server attach): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - ret->status = OCIAttrSet(ret->svc, OCI_HTYPE_SVCCTX, ret->svr, 0, - OCI_ATTR_SERVER, ret->err); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (attr set): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - ret->status = OCIHandleAlloc(dbd_oracle_env, (dvoid**)&ret->auth, - OCI_HTYPE_SESSION, 0, NULL); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (alloc auth): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - ret->status = OCIAttrSet(ret->auth, OCI_HTYPE_SESSION, fields[0].value, - strlen(fields[0].value), OCI_ATTR_USERNAME, ret->err); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (attr username): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - ret->status = OCIAttrSet(ret->auth, OCI_HTYPE_SESSION, fields[1].value, - strlen(fields[1].value), OCI_ATTR_PASSWORD, ret->err); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (attr password): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - ret->status = OCISessionBegin(ret->svc, ret->err, ret->auth, - OCI_CRED_RDBMS, OCI_DEFAULT); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (session begin): %s\n", ret->status, ret->buf); - break; -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - case OCI_SUCCESS: - break; - } - ret->status = OCIAttrSet(ret->svc, OCI_HTYPE_SVCCTX, ret->auth, 0, - OCI_ATTR_SESSION, ret->err); - switch (ret->status) { - default: -#ifdef DEBUG - OCIErrorGet(ret->err, 1, NULL, &errorcode, ret->buf, - sizeof(ret->buf), OCI_HTYPE_ERROR); - printf("OPEN ERROR %d (attr session): %s\n", ret->status, ret->buf); -#else - if (error) { - *error = apr_pcalloc(pool, ERR_BUF_SIZE); - OCIErrorGet(ret->err, 1, NULL, &errorcode, (unsigned char*)(*error), - ERR_BUF_SIZE, OCI_HTYPE_ERROR); - } - return NULL; -#endif - break; - case OCI_SUCCESS: - break; - } -#endif - - if(dbd_oracle_prepare(pool, ret, CHECK_CONN_QUERY, NULL, 0, 0, NULL, - &ret->check_conn_stmt) != 0) { - return NULL; - } - - return ret; -} - -#ifdef EXPORT_NATIVE_FUNCS -static apr_size_t dbd_oracle_long_size_set(apr_dbd_t *sql, - apr_size_t long_size) -{ - apr_size_t old_size = sql->long_size; - sql->long_size = long_size; - return old_size; -} -#endif - -static const char *dbd_oracle_get_name(const apr_dbd_results_t *res, int n) -{ - define_arg *val = &res->statement->out[n]; - - if ((n < 0) || (n >= res->statement->nout)) { - return NULL; - } - return val->name; -} - -static int dbd_oracle_get_row(apr_pool_t *pool, apr_dbd_results_t *res, - apr_dbd_row_t **rowp, int rownum) -{ - apr_dbd_row_t *row = *rowp; - apr_dbd_t *sql = res->handle; - int_errorcode; - - if (row == NULL) { - row = apr_palloc(pool, sizeof(apr_dbd_row_t)); - *rowp = row; - row->res = res; - /* Oracle starts counting at 1 according to the docs */ - row->n = res->seek ? rownum : 1; - row->pool = pool; - } - else { - if (res->seek) { - row->n = rownum; - } - else { - ++row->n; - } - } - - if (res->seek) { - sql->status = OCIStmtFetch2(res->statement->stmt, res->handle->err, 1, - OCI_FETCH_ABSOLUTE, row->n, OCI_DEFAULT); - } - else { - sql->status = OCIStmtFetch2(res->statement->stmt, res->handle->err, 1, - OCI_FETCH_NEXT, 0, OCI_DEFAULT); - } - switch (sql->status) { - case OCI_SUCCESS: - (*rowp)->res = res; - return 0; - case OCI_NO_DATA: - return -1; - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Execute error %d: %s\n", sql->status, sql->buf); -#endif - /* fallthrough */ - default: - return 1; - } - return 0; -} - -static const char *dbd_oracle_error(apr_dbd_t *sql, int n) -{ - /* This is ugly. Needs us to pass in a buffer of unknown size. - * Either we put it on the handle, or we have to keep allocing/copying - */ - sb4 errorcode; - - switch (sql->status) { - case OCI_SUCCESS: - return "OCI_SUCCESS"; - case OCI_SUCCESS_WITH_INFO: - return "OCI_SUCCESS_WITH_INFO"; - case OCI_NEED_DATA: - return "OCI_NEED_DATA"; - case OCI_NO_DATA: - return "OCI_NO_DATA"; - case OCI_INVALID_HANDLE: - return "OCI_INVALID_HANDLE"; - case OCI_STILL_EXECUTING: - return "OCI_STILL_EXECUTING"; - case OCI_CONTINUE: - return "OCI_CONTINUE"; - } - - switch (OCIErrorGet(sql->err, 1, NULL, &errorcode, - (text*) sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR)) { - case OCI_SUCCESS: - return sql->buf; - default: - return "internal error: OCIErrorGet failed"; - } -} - -static apr_status_t freeStatement(void *statement) -{ - int rv = APR_SUCCESS; - OCIStmt *stmt = ((apr_dbd_prepared_t*)statement)->stmt; - -#ifdef PREPARE2 - OCIError *err; - - if (OCIHandleAlloc(dbd_oracle_env, (dvoid**)&err, OCI_HTYPE_ERROR, - 0, NULL) != OCI_SUCCESS) { - return APR_EGENERAL; - } - if (OCIStmtRelease(stmt, err, NULL, 0, OCI_DEFAULT) != OCI_SUCCESS) { - rv = APR_EGENERAL; - } - if (OCIHandleFree(err, OCI_HTYPE_ERROR) != OCI_SUCCESS) { - rv = APR_EGENERAL; - } -#else - if (OCIHandleFree(stmt, OCI_HTYPE_STMT) != OCI_SUCCESS) { - rv = APR_EGENERAL; - } -#endif - - return rv; -} - -static int dbd_oracle_select(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - const char *query, int seek) -{ - int ret = 0; - apr_dbd_prepared_t *statement = NULL; - - ret = dbd_oracle_prepare(pool, sql, query, NULL, 0, 0, NULL, &statement); - if (ret != 0) { - return ret; - } - - ret = dbd_oracle_pselect(pool, sql, results, statement, seek, NULL); - if (ret != 0) { - return ret; - } - - return ret; -} - -static int dbd_oracle_query(apr_dbd_t *sql, int *nrows, const char *query) -{ - int ret = 0; - apr_pool_t *pool; - apr_dbd_prepared_t *statement = NULL; - - if (sql->trans && sql->trans->status == TRANS_ERROR) { - return 1; - } - - /* make our own pool so that APR allocations don't linger and so that - * both Stmt and LOB handles are cleaned up (LOB handles may be - * allocated when preparing APR_DBD_TYPE_CLOB/BLOBs) - */ - apr_pool_create(&pool, sql->pool); - - ret = dbd_oracle_prepare(pool, sql, query, NULL, 0, 0, NULL, &statement); - if (ret == 0) { - ret = dbd_oracle_pquery(pool, sql, nrows, statement, NULL); - if (ret == 0) { - sql->status = OCIAttrGet(statement->stmt, OCI_HTYPE_STMT, - nrows, 0, OCI_ATTR_ROW_COUNT, - sql->err); - } - } - - apr_pool_destroy(pool); - - return ret; -} - -static const char *dbd_oracle_escape(apr_pool_t *pool, const char *arg, - apr_dbd_t *sql) -{ - return arg; /* OCI has no concept of string escape */ -} - -static int dbd_oracle_prepare(apr_pool_t *pool, apr_dbd_t *sql, - const char *query, const char *label, - int nargs, int nvals, apr_dbd_type_e *types, - apr_dbd_prepared_t **statement) -{ - int ret = 0; - int i; - apr_dbd_prepared_t *stmt ; - - if (*statement == NULL) { - *statement = apr_pcalloc(pool, sizeof(apr_dbd_prepared_t)); - } - stmt = *statement; - stmt->handle = sql; - stmt->pool = pool; - stmt->nargs = nargs; - stmt->nvals = nvals; - - /* populate our own args, if any */ - if (nargs > 0) { - stmt->args = apr_pcalloc(pool, nargs*sizeof(bind_arg)); - for (i = 0; i < nargs; i++) { - stmt->args[i].type = types[i]; - } - } - - sql->status = OCIHandleAlloc(dbd_oracle_env, (dvoid**) &stmt->stmt, - OCI_HTYPE_STMT, 0, NULL); - if (sql->status != OCI_SUCCESS) { - return 1; - } - - sql->status = OCIStmtPrepare(stmt->stmt, sql->err, (text*) query, - strlen(query), OCI_NTV_SYNTAX, OCI_DEFAULT); - if (sql->status != OCI_SUCCESS) { - OCIHandleFree(stmt->stmt, OCI_HTYPE_STMT); - return 1; - } - - apr_pool_cleanup_register(pool, stmt, freeStatement, - apr_pool_cleanup_null); - - /* Perl gets statement type here */ - sql->status = OCIAttrGet(stmt->stmt, OCI_HTYPE_STMT, &stmt->type, 0, - OCI_ATTR_STMT_TYPE, sql->err); - if (sql->status != OCI_SUCCESS) { - return 1; - } - -/* Perl sets PREFETCH_MEMORY here, but the docs say there's a working default */ -#if 0 - sql->status = OCIAttrSet(stmt->stmt, OCI_HTYPE_STMT, &prefetch_size, - sizeof(prefetch_size), OCI_ATTR_PREFETCH_MEMORY, - sql->err); - if (sql->status != OCI_SUCCESS) { - return 1; - } -#endif - - if (stmt->type == OCI_STMT_SELECT) { - ret = outputParams(sql, stmt); - } - return ret; -} - -static void dbd_oracle_bind(apr_dbd_prepared_t *statement, const char **values) -{ - OCIStmt *stmt = statement->stmt; - apr_dbd_t *sql = statement->handle; - int i, j; - sb2 null_ind = -1; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - if (values[j] == NULL) { - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - NULL, 0, SQLT_STR, - &null_ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - } - else { - switch (statement->args[i].type) { - case APR_DBD_TYPE_BLOB: - { - char *data = (char *)values[j]; - int size = atoi((char*)values[++j]); - - /* skip table and column for now */ - j += 2; - - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - data, size, SQLT_LBI, - &statement->args[i].ind, - NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - } - break; - case APR_DBD_TYPE_CLOB: - { - char *data = (char *)values[j]; - int size = atoi((char*)values[++j]); - - /* skip table and column for now */ - j += 2; - - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - data, size, SQLT_LNG, - &statement->args[i].ind, - NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - } - break; - default: - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - (dvoid*) values[j], - strlen(values[j]) + 1, - SQLT_STR, - &statement->args[i].ind, - NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - } - } - - if (sql->status != OCI_SUCCESS) { - return; - } - } - - return; -} - -static int outputParams(apr_dbd_t *sql, apr_dbd_prepared_t *stmt) -{ - OCIParam *parms; - int i; - ub2 paramtype[DBD_ORACLE_MAX_COLUMNS]; - ub2 paramsize[DBD_ORACLE_MAX_COLUMNS]; - char *paramname[DBD_ORACLE_MAX_COLUMNS]; - ub4 paramnamelen[DBD_ORACLE_MAX_COLUMNS]; - int_errorcode; - - /* Perl uses 0 where we used 1 */ - sql->status = OCIStmtExecute(sql->svc, stmt->stmt, sql->err, 0, 0, - NULL, NULL, OCI_DESCRIBE_ONLY); - switch (sql->status) { - case OCI_SUCCESS: - case OCI_SUCCESS_WITH_INFO: - break; - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Describing prepared statement: %s\n", sql->buf); -#endif - default: - return 1; - } - while (sql->status == OCI_SUCCESS) { - sql->status = OCIParamGet(stmt->stmt, OCI_HTYPE_STMT, - sql->err, (dvoid**)&parms, stmt->nout+1); - switch (sql->status) { - case OCI_SUCCESS: - sql->status = OCIAttrGet(parms, OCI_DTYPE_PARAM, - ¶mtype[stmt->nout], - 0, OCI_ATTR_DATA_TYPE, sql->err); - sql->status = OCIAttrGet(parms, OCI_DTYPE_PARAM, - ¶msize[stmt->nout], - 0, OCI_ATTR_DATA_SIZE, sql->err); - sql->status = OCIAttrGet(parms, OCI_DTYPE_PARAM, - ¶mname[stmt->nout], - ¶mnamelen[stmt->nout], - OCI_ATTR_NAME, sql->err); - ++stmt->nout; - } - } - switch (sql->status) { - case OCI_SUCCESS: - break; - case OCI_ERROR: - break; /* this is what we expect at end-of-loop */ - default: - return 1; - } - - /* OK, the above works. We have the params; now OCIDefine them */ - stmt->out = apr_palloc(stmt->pool, stmt->nout*sizeof(define_arg)); - for (i=0; inout; ++i) { - stmt->out[i].type = paramtype[i]; - stmt->out[i].len = stmt->out[i].sz = paramsize[i]; - stmt->out[i].name = apr_pstrmemdup(stmt->pool, - paramname[i], paramnamelen[i]); - switch (stmt->out[i].type) { - default: - switch (stmt->out[i].type) { - case SQLT_NUM: /* 2: numeric, Perl worst case=130+38+3 */ - stmt->out[i].sz = 171; - break; - case SQLT_CHR: /* 1: char */ - case SQLT_AFC: /* 96: ANSI fixed char */ - stmt->out[i].sz *= 4; /* ugh, wasteful UCS-4 handling */ - break; - case SQLT_DAT: /* 12: date, depends on NLS date format */ - stmt->out[i].sz = 75; - break; - case SQLT_BIN: /* 23: raw binary, perhaps UTF-16? */ - stmt->out[i].sz *= 2; - break; - case SQLT_RID: /* 11: rowid */ - case SQLT_RDD: /* 104: rowid descriptor */ - stmt->out[i].sz = 20; - break; - case SQLT_TIMESTAMP: /* 187: timestamp */ - case SQLT_TIMESTAMP_TZ: /* 188: timestamp with time zone */ - case SQLT_INTERVAL_YM: /* 189: interval year-to-month */ - case SQLT_INTERVAL_DS: /* 190: interval day-to-second */ - case SQLT_TIMESTAMP_LTZ: /* 232: timestamp with local time zone */ - stmt->out[i].sz = 75; - break; - default: -#ifdef DEBUG - printf("Unsupported data type: %d\n", stmt->out[i].type); -#endif - break; - } - ++stmt->out[i].sz; - stmt->out[i].buf.raw = apr_palloc(stmt->pool, stmt->out[i].sz); - sql->status = OCIDefineByPos(stmt->stmt, &stmt->out[i].defn, - sql->err, i+1, - stmt->out[i].buf.sval, - stmt->out[i].sz, SQLT_STR, - &stmt->out[i].ind, &stmt->out[i].len, - 0, OCI_DEFAULT); - break; - case SQLT_LNG: /* 8: long */ - stmt->out[i].sz = sql->long_size * 4 + 4; /* ugh, UCS-4 handling */ - stmt->out[i].buf.raw = apr_palloc(stmt->pool, stmt->out[i].sz); - sql->status = OCIDefineByPos(stmt->stmt, &stmt->out[i].defn, - sql->err, i+1, - stmt->out[i].buf.raw, - stmt->out[i].sz, SQLT_LVC, - &stmt->out[i].ind, NULL, - 0, OCI_DEFAULT); - break; - case SQLT_LBI: /* 24: long binary, perhaps UTF-16? */ - stmt->out[i].sz = sql->long_size * 2 + 4; /* room for int prefix */ - stmt->out[i].buf.raw = apr_palloc(stmt->pool, stmt->out[i].sz); - sql->status = OCIDefineByPos(stmt->stmt, &stmt->out[i].defn, - sql->err, i+1, - stmt->out[i].buf.raw, - stmt->out[i].sz, SQLT_LVB, - &stmt->out[i].ind, NULL, - 0, OCI_DEFAULT); - break; - case SQLT_BLOB: /* 113 */ - case SQLT_CLOB: /* 112 */ -/*http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96584/oci05bnd.htm#434937*/ - sql->status = OCIDescriptorAlloc(dbd_oracle_env, - (dvoid**)&stmt->out[i].buf.lobval, - OCI_DTYPE_LOB, 0, NULL); - apr_pool_cleanup_register(stmt->pool, stmt->out[i].buf.lobval, - dbd_free_lobdesc, - apr_pool_cleanup_null); - sql->status = OCIDefineByPos(stmt->stmt, &stmt->out[i].defn, - sql->err, i+1, - (dvoid*) &stmt->out[i].buf.lobval, - -1, stmt->out[i].type, - &stmt->out[i].ind, &stmt->out[i].len, - 0, OCI_DEFAULT); - break; - } - switch (sql->status) { - case OCI_SUCCESS: - break; - default: - return 1; - } - } - return 0; -} - -static int dbd_oracle_pquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const char **values) -{ - OCISnapshot *oldsnapshot = NULL; - OCISnapshot *newsnapshot = NULL; - apr_dbd_transaction_t* trans = sql->trans; - int exec_mode; - int_errorcode; - - if (trans) { - switch (trans->status) { - case TRANS_ERROR: - return -1; - case TRANS_NONE: - trans = NULL; - break; - case TRANS_1: - oldsnapshot = trans->snapshot1; - newsnapshot = trans->snapshot2; - trans->status = TRANS_2; - break; - case TRANS_2: - oldsnapshot = trans->snapshot2; - newsnapshot = trans->snapshot1; - trans->status = TRANS_1; - break; - } - exec_mode = OCI_DEFAULT; - } - else { - exec_mode = OCI_COMMIT_ON_SUCCESS; - } - - dbd_oracle_bind(statement, values); - - sql->status = OCIStmtExecute(sql->svc, statement->stmt, sql->err, 1, 0, - oldsnapshot, newsnapshot, exec_mode); - switch (sql->status) { - case OCI_SUCCESS: - break; - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Execute error %d: %s\n", sql->status, sql->buf); -#endif - /* fallthrough */ - default: - if (TXN_NOTICE_ERRORS(trans)) { - trans->status = TRANS_ERROR; - } - return 1; - } - - sql->status = OCIAttrGet(statement->stmt, OCI_HTYPE_STMT, nrows, 0, - OCI_ATTR_ROW_COUNT, sql->err); - return 0; -} - -static int dbd_oracle_pvquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->status == TRANS_ERROR) { - return -1; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_oracle_pquery(pool, sql, nrows, statement, values); -} - -static int dbd_oracle_pselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, const char **values) -{ - int exec_mode = seek ? OCI_STMT_SCROLLABLE_READONLY : OCI_DEFAULT; - OCISnapshot *oldsnapshot = NULL; - OCISnapshot *newsnapshot = NULL; - apr_dbd_transaction_t* trans = sql->trans; - int_errorcode; - - if (trans) { - switch (trans->status) { - case TRANS_ERROR: - return 1; - case TRANS_NONE: - trans = NULL; - break; - case TRANS_1: - oldsnapshot = trans->snapshot1; - newsnapshot = trans->snapshot2; - trans->status = TRANS_2; - break; - case TRANS_2: - oldsnapshot = trans->snapshot2; - newsnapshot = trans->snapshot1; - trans->status = TRANS_1; - break; - } - } - - dbd_oracle_bind(statement, values); - - sql->status = OCIStmtExecute(sql->svc, statement->stmt, sql->err, 0, 0, - oldsnapshot, newsnapshot, exec_mode); - switch (sql->status) { - case OCI_SUCCESS: - break; - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Executing prepared statement: %s\n", sql->buf); -#endif - /* fallthrough */ - default: - if (TXN_NOTICE_ERRORS(trans)) { - trans->status = TRANS_ERROR; - } - return 1; - } - - if (!*results) { - *results = apr_palloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->handle = sql; - (*results)->statement = statement; - (*results)->seek = seek; - (*results)->rownum = seek ? 0 : -1; - (*results)->pool = pool; - - return 0; -} - -static int dbd_oracle_pvselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->status == TRANS_ERROR) { - return -1; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_oracle_pselect(pool, sql, results, statement, seek, values); -} - -static void dbd_oracle_bbind(apr_dbd_prepared_t * statement, - const void **values) -{ - OCIStmt *stmt = statement->stmt; - apr_dbd_t *sql = statement->handle; - int i, j; - sb2 null_ind = -1; - apr_dbd_type_e type; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - type = (values[j] == NULL ? APR_DBD_TYPE_NULL - : statement->args[i].type); - - switch (type) { - case APR_DBD_TYPE_TINY: - statement->args[i].value.ival = *(char*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.ival, - sizeof(statement->args[i].value.ival), - SQLT_INT, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_UTINY: - statement->args[i].value.uval = *(unsigned char*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.uval, - sizeof(statement->args[i].value.uval), - SQLT_UIN, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_SHORT: - statement->args[i].value.ival = *(short*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.ival, - sizeof(statement->args[i].value.ival), - SQLT_INT, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_USHORT: - statement->args[i].value.uval = *(unsigned short*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.uval, - sizeof(statement->args[i].value.uval), - SQLT_UIN, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_INT: - statement->args[i].value.ival = *(int*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.ival, - sizeof(statement->args[i].value.ival), - SQLT_INT, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_UINT: - statement->args[i].value.uval = *(unsigned int*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.uval, - sizeof(statement->args[i].value.uval), - SQLT_UIN, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_LONG: - statement->args[i].value.sval = - apr_psprintf(statement->pool, "%ld", *(long*)values[j]); - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - statement->args[i].value.sval, - strlen(statement->args[i].value.sval)+1, - SQLT_STR, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_ULONG: - statement->args[i].value.sval = - apr_psprintf(statement->pool, "%lu", - *(unsigned long*)values[j]); - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - statement->args[i].value.sval, - strlen(statement->args[i].value.sval)+1, - SQLT_STR, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_LONGLONG: - statement->args[i].value.sval = - apr_psprintf(statement->pool, "%" APR_INT64_T_FMT, - *(apr_int64_t*)values[j]); - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - statement->args[i].value.sval, - strlen(statement->args[i].value.sval)+1, - SQLT_STR, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_ULONGLONG: - statement->args[i].value.sval = - apr_psprintf(statement->pool, "%" APR_UINT64_T_FMT, - *(apr_uint64_t*)values[j]); - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - statement->args[i].value.sval, - strlen(statement->args[i].value.sval)+1, - SQLT_UIN, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_FLOAT: - statement->args[i].value.fval = *(float*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.fval, - sizeof(statement->args[i].value.fval), - SQLT_FLT, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_DOUBLE: - statement->args[i].value.fval = *(double*)values[j]; - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - &statement->args[i].value.fval, - sizeof(statement->args[i].value.fval), - SQLT_FLT, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - (dvoid*) values[j], - strlen(values[j]) + 1, - SQLT_STR, - &statement->args[i].ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - case APR_DBD_TYPE_BLOB: - { - char *data = (char *)values[j]; - apr_size_t size = *(apr_size_t*)values[++j]; - - /* skip table and column for now */ - j += 2; - - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - data, size, SQLT_LBI, - &statement->args[i].ind, - NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - } - break; - case APR_DBD_TYPE_CLOB: - { - char *data = (char *)values[j]; - apr_size_t size = *(apr_size_t*)values[++j]; - - /* skip table and column for now */ - j += 2; - - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - data, size, SQLT_LNG, - &statement->args[i].ind, - NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - } - break; - case APR_DBD_TYPE_NULL: - default: - sql->status = OCIBindByPos(stmt, &statement->args[i].bind, - sql->err, i + 1, - NULL, 0, SQLT_STR, - &null_ind, NULL, - (ub2) 0, (ub4) 0, - (ub4 *) 0, OCI_DEFAULT); - break; - } - - if (sql->status != OCI_SUCCESS) { - return; - } - } - - return; -} - -static int dbd_oracle_pbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - const void **values) -{ - OCISnapshot *oldsnapshot = NULL; - OCISnapshot *newsnapshot = NULL; - apr_dbd_transaction_t* trans = sql->trans; - int exec_mode; - int_errorcode; - - if (trans) { - switch (trans->status) { - case TRANS_ERROR: - return -1; - case TRANS_NONE: - trans = NULL; - break; - case TRANS_1: - oldsnapshot = trans->snapshot1; - newsnapshot = trans->snapshot2; - trans->status = TRANS_2; - break; - case TRANS_2: - oldsnapshot = trans->snapshot2; - newsnapshot = trans->snapshot1; - trans->status = TRANS_1; - break; - } - exec_mode = OCI_DEFAULT; - } - else { - exec_mode = OCI_COMMIT_ON_SUCCESS; - } - - dbd_oracle_bbind(statement, values); - - sql->status = OCIStmtExecute(sql->svc, statement->stmt, sql->err, 1, 0, - oldsnapshot, newsnapshot, exec_mode); - switch (sql->status) { - case OCI_SUCCESS: - break; - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Execute error %d: %s\n", sql->status, sql->buf); -#endif - /* fallthrough */ - default: - if (TXN_NOTICE_ERRORS(trans)) { - trans->status = TRANS_ERROR; - } - return 1; - } - - sql->status = OCIAttrGet(statement->stmt, OCI_HTYPE_STMT, nrows, 0, - OCI_ATTR_ROW_COUNT, sql->err); - return 0; -} - -static int dbd_oracle_pvbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->status == TRANS_ERROR) { - return -1; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_oracle_pbquery(pool, sql, nrows, statement, values); -} - -static int dbd_oracle_pbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, - int seek, const void **values) -{ - int exec_mode = seek ? OCI_STMT_SCROLLABLE_READONLY : OCI_DEFAULT; - OCISnapshot *oldsnapshot = NULL; - OCISnapshot *newsnapshot = NULL; - apr_dbd_transaction_t* trans = sql->trans; - int_errorcode; - - if (trans) { - switch (trans->status) { - case TRANS_ERROR: - return 1; - case TRANS_NONE: - trans = NULL; - break; - case TRANS_1: - oldsnapshot = trans->snapshot1; - newsnapshot = trans->snapshot2; - trans->status = TRANS_2; - break; - case TRANS_2: - oldsnapshot = trans->snapshot2; - newsnapshot = trans->snapshot1; - trans->status = TRANS_1; - break; - } - } - - dbd_oracle_bbind(statement, values); - - sql->status = OCIStmtExecute(sql->svc, statement->stmt, sql->err, 0, 0, - oldsnapshot, newsnapshot, exec_mode); - switch (sql->status) { - case OCI_SUCCESS: - break; - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Executing prepared statement: %s\n", sql->buf); -#endif - /* fallthrough */ - default: - if (TXN_NOTICE_ERRORS(trans)) { - trans->status = TRANS_ERROR; - } - return 1; - } - - if (!*results) { - *results = apr_palloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->handle = sql; - (*results)->statement = statement; - (*results)->seek = seek; - (*results)->rownum = seek ? 0 : -1; - (*results)->pool = pool; - - return 0; -} - -static int dbd_oracle_pvbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, int seek, - va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->status == TRANS_ERROR) { - return -1; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_oracle_pbselect(pool, sql, results, statement, seek, values); -} - -static int dbd_oracle_start_transaction(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_transaction_t **trans) -{ - int ret = 0; - int_errorcode; - if (*trans) { - dbd_oracle_end_transaction(*trans); - } - else { - *trans = apr_pcalloc(pool, sizeof(apr_dbd_transaction_t)); - OCIHandleAlloc(dbd_oracle_env, (dvoid**)&(*trans)->trans, - OCI_HTYPE_TRANS, 0, 0); - OCIAttrSet(sql->svc, OCI_HTYPE_SVCCTX, (*trans)->trans, 0, - OCI_ATTR_TRANS, sql->err); - } - - - sql->status = OCITransStart(sql->svc, sql->err, TRANS_TIMEOUT, - OCI_TRANS_NEW); - switch (sql->status) { - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, sql->buf, - sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Transaction: %s\n", sql->buf); -#endif - ret = 1; - break; - case OCI_SUCCESS: - (*trans)->handle = sql; - (*trans)->status = TRANS_1; - sql->trans = *trans; - switch (OCIDescriptorAlloc(dbd_oracle_env, - (dvoid**)&(*trans)->snapshot1, - OCI_DTYPE_SNAP, 0, NULL)) { - case OCI_SUCCESS: - apr_pool_cleanup_register(pool, (*trans)->snapshot1, - dbd_free_snapshot, apr_pool_cleanup_null); - break; - case OCI_INVALID_HANDLE: - ret = 1; - break; - } - switch (OCIDescriptorAlloc(dbd_oracle_env, - (dvoid**)&(*trans)->snapshot2, - OCI_DTYPE_SNAP, 0, NULL)) { - case OCI_SUCCESS: - apr_pool_cleanup_register(pool, (*trans)->snapshot2, - dbd_free_snapshot, apr_pool_cleanup_null); - break; - case OCI_INVALID_HANDLE: - ret = 1; - break; - } - break; - default: - ret = 1; - break; - } - return ret; -} - -static int dbd_oracle_end_transaction(apr_dbd_transaction_t *trans) -{ - int ret = 1; /* no transaction is an error cond */ - sword status; - apr_dbd_t *handle = trans->handle; - if (trans) { - switch (trans->status) { - case TRANS_NONE: /* No trans is an error here */ - status = OCI_ERROR; - break; - case TRANS_ERROR: - status = OCITransRollback(handle->svc, handle->err, OCI_DEFAULT); - break; - default: - /* rollback on explicit rollback request */ - if (TXN_DO_ROLLBACK(trans)) { - status = OCITransRollback(handle->svc, handle->err, OCI_DEFAULT); - } else { - status = OCITransCommit(handle->svc, handle->err, OCI_DEFAULT); - } - break; - } - - handle->trans = NULL; - - switch (status) { - case OCI_SUCCESS: - ret = 0; - break; - default: - ret = 3; - break; - } - } - return ret; -} - -static int dbd_oracle_transaction_mode_get(apr_dbd_transaction_t *trans) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode; -} - -static int dbd_oracle_transaction_mode_set(apr_dbd_transaction_t *trans, - int mode) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode = (mode & TXN_MODE_BITS); -} - -/* This doesn't work for BLOB because of NULLs, but it can fake it - * if the BLOB is really a string - */ -static const char *dbd_oracle_get_entry(const apr_dbd_row_t *row, int n) -{ - ub4 len = 0; - ub1 csform = 0; - ub2 csid = 0; - apr_size_t buflen = 0; - char *buf = NULL; - define_arg *val = &row->res->statement->out[n]; - apr_dbd_t *sql = row->res->handle; - int_errorcode; - - if ((n < 0) || (n >= row->res->statement->nout) || (val->ind == -1)) { - return NULL; - } - - switch (val->type) { - case SQLT_BLOB: - case SQLT_CLOB: - sql->status = OCILobGetLength(sql->svc, sql->err, val->buf.lobval, - &len); - switch (sql->status) { - case OCI_SUCCESS: - case OCI_SUCCESS_WITH_INFO: - if (len == 0) { - buf = ""; - } - break; - case OCI_ERROR: -#ifdef DEBUG - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Finding LOB length: %s\n", sql->buf); - break; -#endif - default: - break; - } - - if (len == 0) { - break; - } - - if (val->type == APR_DBD_TYPE_CLOB) { -#if 1 - /* Is this necessary, or can it be defaulted? */ - sql->status = OCILobCharSetForm(dbd_oracle_env, sql->err, - val->buf.lobval, &csform); - if (sql->status == OCI_SUCCESS) { - sql->status = OCILobCharSetId(dbd_oracle_env, sql->err, - val->buf.lobval, &csid); - } - switch (sql->status) { - case OCI_SUCCESS: - case OCI_SUCCESS_WITH_INFO: - buflen = (len+1) * 4; /* ugh, wasteful UCS-4 handling */ - /* zeroise all - where the string ends depends on charset */ - buf = apr_pcalloc(row->pool, buflen); - break; -#ifdef DEBUG - case OCI_ERROR: - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Reading LOB character set: %s\n", sql->buf); - break; /*** XXX?? ***/ -#endif - default: - break; /*** XXX?? ***/ - } -#else /* ignore charset */ - buflen = (len+1) * 4; /* ugh, wasteful UCS-4 handling */ - /* zeroise all - where the string ends depends on charset */ - buf = apr_pcalloc(row->pool, buflen); -#endif - } else { - /* BUG: this'll only work if the BLOB looks like a string */ - buflen = len; - buf = apr_palloc(row->pool, buflen+1); - buf[buflen] = 0; - } - - if (!buf) { - break; - } - - sql->status = OCILobRead(sql->svc, sql->err, val->buf.lobval, - &len, 1, (dvoid*) buf, buflen, - NULL, NULL, csid, csform); - switch (sql->status) { - case OCI_SUCCESS: - case OCI_SUCCESS_WITH_INFO: - break; -#ifdef DEBUG - case OCI_ERROR: - OCIErrorGet(sql->err, 1, NULL, &errorcode, - sql->buf, sizeof(sql->buf), OCI_HTYPE_ERROR); - printf("Reading LOB: %s\n", sql->buf); - buf = NULL; /*** XXX?? ***/ - break; -#endif - default: - buf = NULL; /*** XXX?? ***/ - break; - } - - break; - case SQLT_LNG: - case SQLT_LBI: - /* raw is struct { ub4 len; char *buf; } */ - len = *(ub4*) val->buf.raw; - buf = apr_pstrndup(row->pool, val->buf.sval + sizeof(ub4), len); - break; - default: - buf = apr_pstrndup(row->pool, val->buf.sval, val->len); - break; - } - return (const char*) buf; -} - -/* XXX Should this use Oracle proper API instead of calling get_entry()? */ -static apr_status_t dbd_oracle_datum_get(const apr_dbd_row_t *row, int n, - apr_dbd_type_e type, void *data) -{ - define_arg *val = &row->res->statement->out[n]; - const char *entry; - - if ((n < 0) || (n >= row->res->statement->nout)) { - return APR_EGENERAL; - } - - if(val->ind == -1) { - return APR_ENOENT; - } - - switch (type) { - case APR_DBD_TYPE_TINY: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(char*)data = atoi(entry); - break; - case APR_DBD_TYPE_UTINY: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(unsigned char*)data = atoi(entry); - break; - case APR_DBD_TYPE_SHORT: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(short*)data = atoi(entry); - break; - case APR_DBD_TYPE_USHORT: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(unsigned short*)data = atoi(entry); - break; - case APR_DBD_TYPE_INT: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(int*)data = atoi(entry); - break; - case APR_DBD_TYPE_UINT: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(unsigned int*)data = atoi(entry); - break; - case APR_DBD_TYPE_LONG: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(long*)data = atol(entry); - break; - case APR_DBD_TYPE_ULONG: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(unsigned long*)data = atol(entry); - break; - case APR_DBD_TYPE_LONGLONG: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(apr_int64_t*)data = apr_atoi64(entry); - break; - case APR_DBD_TYPE_ULONGLONG: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(apr_uint64_t*)data = apr_atoi64(entry); - break; - case APR_DBD_TYPE_FLOAT: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(float*)data = (float)atof(entry); - break; - case APR_DBD_TYPE_DOUBLE: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(double*)data = atof(entry); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - *(char**)data = (char*)entry; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - apr_bucket *e; - apr_bucket_brigade *b = (apr_bucket_brigade*)data; - apr_dbd_t *sql = row->res->handle; - ub4 len = 0; - - switch (val->type) { - case SQLT_BLOB: - case SQLT_CLOB: - sql->status = OCILobGetLength(sql->svc, sql->err, - val->buf.lobval, &len); - switch(sql->status) { - case OCI_SUCCESS: - case OCI_SUCCESS_WITH_INFO: - if (len == 0) { - e = apr_bucket_eos_create(b->bucket_alloc); - } - else { - e = apr_bucket_lob_create(row, n, 0, len, - row->pool, b->bucket_alloc); - } - break; - default: - return APR_ENOENT; - } - break; - default: - entry = dbd_oracle_get_entry(row, n); - if (entry == NULL) { - return APR_ENOENT; - } - e = apr_bucket_pool_create(entry, strlen(entry), - row->pool, b->bucket_alloc); - break; - } - APR_BRIGADE_INSERT_TAIL(b, e); - } - break; - case APR_DBD_TYPE_NULL: - *(void**)data = NULL; - break; - default: - return APR_EGENERAL; - } - - return APR_SUCCESS; -} - -static apr_status_t dbd_oracle_close(apr_dbd_t *handle) -{ - /* FIXME: none of the oracle docs/examples say anything about - * closing/releasing handles. Which seems unlikely ... - */ - - /* OK, let's grab from cdemo again. - * cdemo81 does nothing; cdemo82 does OCIHandleFree on the handles - */ - switch (OCISessionEnd(handle->svc, handle->err, handle->auth, - (ub4)OCI_DEFAULT)) { - default: - break; - } - switch (OCIServerDetach(handle->svr, handle->err, (ub4) OCI_DEFAULT )) { - default: - break; - } - /* does OCISessionEnd imply this? */ - switch (OCIHandleFree((dvoid *) handle->auth, (ub4) OCI_HTYPE_SESSION)) { - default: - break; - } - switch (OCIHandleFree((dvoid *) handle->svr, (ub4) OCI_HTYPE_SERVER)) { - default: - break; - } - switch (OCIHandleFree((dvoid *) handle->svc, (ub4) OCI_HTYPE_SVCCTX)) { - default: - break; - } - switch (OCIHandleFree((dvoid *) handle->err, (ub4) OCI_HTYPE_ERROR)) { - default: - break; - } - return APR_SUCCESS; -} - -static apr_status_t dbd_oracle_check_conn(apr_pool_t *pool, apr_dbd_t *sql) -{ - apr_dbd_results_t *res = NULL; - apr_dbd_row_t *row = NULL; - - if(dbd_oracle_pselect(pool, sql, &res, sql->check_conn_stmt, - 0, NULL) != 0) { - return APR_EGENERAL; - } - - if(dbd_oracle_get_row(pool, res, &row, -1) != 0) { - return APR_EGENERAL; - } - - if(dbd_oracle_get_row(pool, res, &row, -1) != -1) { - return APR_EGENERAL; - } - - return APR_SUCCESS; -} - -static int dbd_oracle_select_db(apr_pool_t *pool, apr_dbd_t *handle, - const char *name) -{ - /* FIXME: need to find this in the docs */ - return APR_ENOTIMPL; -} - -static void *dbd_oracle_native(apr_dbd_t *handle) -{ - /* FIXME: can we do anything better? Oracle doesn't seem to have - * a concept of a handle in the sense we use it. - */ - return dbd_oracle_env; -} - -static int dbd_oracle_num_cols(apr_dbd_results_t* res) -{ - return res->statement->nout; -} - -static int dbd_oracle_num_tuples(apr_dbd_results_t* res) -{ - if (!res->seek) { - return -1; - } - if (res->nrows >= 0) { - return res->nrows; - } - res->handle->status = OCIAttrGet(res->statement->stmt, OCI_HTYPE_STMT, - &res->nrows, 0, OCI_ATTR_ROW_COUNT, - res->handle->err); - return res->nrows; -} - -APU_MODULE_DECLARE_DATA const apr_dbd_driver_t apr_dbd_oracle_driver = { - "oracle", - dbd_oracle_init, - dbd_oracle_native, - dbd_oracle_open, - dbd_oracle_check_conn, - dbd_oracle_close, - dbd_oracle_select_db, - dbd_oracle_start_transaction, - dbd_oracle_end_transaction, - dbd_oracle_query, - dbd_oracle_select, - dbd_oracle_num_cols, - dbd_oracle_num_tuples, - dbd_oracle_get_row, - dbd_oracle_get_entry, - dbd_oracle_error, - dbd_oracle_escape, - dbd_oracle_prepare, - dbd_oracle_pvquery, - dbd_oracle_pvselect, - dbd_oracle_pquery, - dbd_oracle_pselect, - dbd_oracle_get_name, - dbd_oracle_transaction_mode_get, - dbd_oracle_transaction_mode_set, - ":apr%d", - dbd_oracle_pvbquery, - dbd_oracle_pvbselect, - dbd_oracle_pbquery, - dbd_oracle_pbselect, - dbd_oracle_datum_get -}; -#endif Index: contrib/apr-util/dbd/apr_dbd_pgsql.c =================================================================== --- contrib/apr-util/dbd/apr_dbd_pgsql.c +++ /dev/null @@ -1,1315 +0,0 @@ -/* 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" - -#if APU_HAVE_PGSQL - -#include "apu_config.h" - -#include -#include - -#ifdef HAVE_LIBPQ_FE_H -#include -#elif defined(HAVE_POSTGRESQL_LIBPQ_FE_H) -#include -#endif - -#include "apr_strings.h" -#include "apr_time.h" -#include "apr_buckets.h" - -#include "apr_dbd_internal.h" - -struct apr_dbd_transaction_t { - int mode; - int errnum; - apr_dbd_t *handle; -}; - -struct apr_dbd_t { - PGconn *conn; - apr_dbd_transaction_t *trans; -}; - -struct apr_dbd_results_t { - int random; - PGconn *handle; - PGresult *res; - size_t ntuples; - size_t sz; - size_t index; - apr_pool_t *pool; -}; - -struct apr_dbd_row_t { - int n; - apr_dbd_results_t *res; -}; - -struct apr_dbd_prepared_t { - const char *name; - int prepared; - int nargs; - int nvals; - apr_dbd_type_e *types; -}; - -#define dbd_pgsql_is_success(x) (((x) == PGRES_EMPTY_QUERY) \ - || ((x) == PGRES_COMMAND_OK) \ - || ((x) == PGRES_TUPLES_OK)) - -static apr_status_t clear_result(void *data) -{ - PQclear(data); - return APR_SUCCESS; -} - -static int dbd_pgsql_select(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - const char *query, int seek) -{ - PGresult *res; - int ret; - if ( sql->trans && sql->trans->errnum ) { - return sql->trans->errnum; - } - if (seek) { /* synchronous query */ - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, "SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } - res = PQexec(sql->conn, query); - if (res) { - ret = PQresultStatus(res); - if (dbd_pgsql_is_success(ret)) { - ret = 0; - } else { - PQclear(res); - } - } else { - ret = PGRES_FATAL_ERROR; - } - if (ret != 0) { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "ROLLBACK TO SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } else if (TXN_NOTICE_ERRORS(sql->trans)){ - sql->trans->errnum = ret; - } - return ret; - } else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "RELEASE SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } - } - if (!*results) { - *results = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->res = res; - (*results)->ntuples = PQntuples(res); - (*results)->sz = PQnfields(res); - (*results)->random = seek; - (*results)->pool = pool; - apr_pool_cleanup_register(pool, res, clear_result, - apr_pool_cleanup_null); - } - else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, "SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } - if (PQsendQuery(sql->conn, query) == 0) { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "ROLLBACK TO SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } else if (TXN_NOTICE_ERRORS(sql->trans)){ - sql->trans->errnum = 1; - } - return 1; - } else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "RELEASE SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } - } - if (*results == NULL) { - *results = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->random = seek; - (*results)->handle = sql->conn; - (*results)->pool = pool; - } - return 0; -} - -static const char *dbd_pgsql_get_name(const apr_dbd_results_t *res, int n) -{ - if (res->res) { - if ((n>=0) && (PQnfields(res->res) > n)) { - return PQfname(res->res,n); - } - } - return NULL; -} - -static int dbd_pgsql_get_row(apr_pool_t *pool, apr_dbd_results_t *res, - apr_dbd_row_t **rowp, int rownum) -{ - apr_dbd_row_t *row = *rowp; - int sequential = ((rownum >= 0) && res->random) ? 0 : 1; - - if (row == NULL) { - row = apr_palloc(pool, sizeof(apr_dbd_row_t)); - *rowp = row; - row->res = res; - if ( sequential ) { - row->n = 0; - } - else { - if (rownum > 0) { - row->n = --rownum; - } - else { - return -1; /* invalid row */ - } - } - } - else { - if ( sequential ) { - ++row->n; - } - else { - if (rownum > 0) { - row->n = --rownum; - } - else { - return -1; /* invalid row */ - } - } - } - - if (res->random) { - if ((row->n >= 0) && (size_t)row->n >= res->ntuples) { - *rowp = NULL; - apr_pool_cleanup_run(res->pool, res->res, clear_result); - res->res = NULL; - return -1; - } - } - else { - if ((row->n >= 0) && (size_t)row->n >= res->ntuples) { - /* no data; we have to fetch some */ - row->n -= res->ntuples; - if (res->res != NULL) { - PQclear(res->res); - } - res->res = PQgetResult(res->handle); - if (res->res) { - res->ntuples = PQntuples(res->res); - while (res->ntuples == 0) { - /* if we got an empty result, clear it, wait a mo, try - * again */ - PQclear(res->res); - apr_sleep(100000); /* 0.1 secs */ - res->res = PQgetResult(res->handle); - if (res->res) { - res->ntuples = PQntuples(res->res); - } - else { - return -1; - } - } - if (res->sz == 0) { - res->sz = PQnfields(res->res); - } - } - else { - return -1; - } - } - } - return 0; -} - -static const char *dbd_pgsql_get_entry(const apr_dbd_row_t *row, int n) -{ - return PQgetvalue(row->res->res, row->n, n); -} - -static apr_status_t dbd_pgsql_datum_get(const apr_dbd_row_t *row, int n, - apr_dbd_type_e type, void *data) -{ - if (PQgetisnull(row->res->res, row->n, n)) { - return APR_ENOENT; - } - - switch (type) { - case APR_DBD_TYPE_TINY: - *(char*)data = atoi(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_UTINY: - *(unsigned char*)data = atoi(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_SHORT: - *(short*)data = atoi(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_USHORT: - *(unsigned short*)data = atoi(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_INT: - *(int*)data = atoi(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_UINT: - *(unsigned int*)data = atoi(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_LONG: - *(long*)data = atol(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_ULONG: - *(unsigned long*)data = atol(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_LONGLONG: - *(apr_int64_t*)data = apr_atoi64(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_ULONGLONG: - *(apr_uint64_t*)data = apr_atoi64(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_FLOAT: - *(float*)data = (float)atof(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_DOUBLE: - *(double*)data = atof(PQgetvalue(row->res->res, row->n, n)); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - *(char**)data = PQgetvalue(row->res->res, row->n, n); - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - apr_bucket *e; - apr_bucket_brigade *b = (apr_bucket_brigade*)data; - - e = apr_bucket_pool_create(PQgetvalue(row->res->res, row->n, n), - PQgetlength(row->res->res, row->n, n), - row->res->pool, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - } - break; - case APR_DBD_TYPE_NULL: - *(void**)data = NULL; - break; - default: - return APR_EGENERAL; - } - - return APR_SUCCESS; -} - -static const char *dbd_pgsql_error(apr_dbd_t *sql, int n) -{ - return PQerrorMessage(sql->conn); -} - -static int dbd_pgsql_query(apr_dbd_t *sql, int *nrows, const char *query) -{ - PGresult *res; - int ret; - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, "SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } - - res = PQexec(sql->conn, query); - if (res) { - ret = PQresultStatus(res); - if (dbd_pgsql_is_success(ret)) { - /* ugh, making 0 return-success doesn't fit */ - ret = 0; - } - *nrows = atoi(PQcmdTuples(res)); - PQclear(res); - } - else { - ret = PGRES_FATAL_ERROR; - } - - if (ret != 0){ - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "ROLLBACK TO SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else if (TXN_NOTICE_ERRORS(sql->trans)){ - sql->trans->errnum = ret; - } - } else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "RELEASE SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } - } - - return ret; -} - -static const char *dbd_pgsql_escape(apr_pool_t *pool, const char *arg, - apr_dbd_t *sql) -{ - size_t len = strlen(arg); - char *ret = apr_palloc(pool, 2*len + 2); - PQescapeStringConn(sql->conn, ret, arg, len, NULL); - return ret; -} - -static int dbd_pgsql_prepare(apr_pool_t *pool, apr_dbd_t *sql, - const char *query, const char *label, - int nargs, int nvals, apr_dbd_type_e *types, - apr_dbd_prepared_t **statement) -{ - char *sqlcmd; - char *sqlptr; - size_t length, qlen; - int i = 0; - const char **args; - size_t alen; - int ret; - PGresult *res; - - if (!*statement) { - *statement = apr_palloc(pool, sizeof(apr_dbd_prepared_t)); - } - (*statement)->nargs = nargs; - (*statement)->nvals = nvals; - (*statement)->types = types; - - args = apr_palloc(pool, nargs * sizeof(*args)); - - qlen = strlen(query); - length = qlen + 1; - - for (i = 0; i < nargs; i++) { - switch (types[i]) { - case APR_DBD_TYPE_TINY: - case APR_DBD_TYPE_UTINY: - case APR_DBD_TYPE_SHORT: - case APR_DBD_TYPE_USHORT: - args[i] = "smallint"; - break; - case APR_DBD_TYPE_INT: - case APR_DBD_TYPE_UINT: - args[i] = "integer"; - break; - case APR_DBD_TYPE_LONG: - case APR_DBD_TYPE_ULONG: - case APR_DBD_TYPE_LONGLONG: - case APR_DBD_TYPE_ULONGLONG: - args[i] = "bigint"; - break; - case APR_DBD_TYPE_FLOAT: - args[i] = "real"; - break; - case APR_DBD_TYPE_DOUBLE: - args[i] = "double precision"; - break; - case APR_DBD_TYPE_TEXT: - args[i] = "text"; - break; - case APR_DBD_TYPE_TIME: - args[i] = "time"; - break; - case APR_DBD_TYPE_DATE: - args[i] = "date"; - break; - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - args[i] = "timestamp"; - break; - case APR_DBD_TYPE_ZTIMESTAMP: - args[i] = "timestamp with time zone"; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - args[i] = "bytea"; - break; - case APR_DBD_TYPE_NULL: - args[i] = "varchar"; /* XXX Eh? */ - break; - default: - args[i] = "varchar"; - break; - } - length += 1 + strlen(args[i]); - } - - if (!label) { - /* don't really prepare; use in execParams instead */ - (*statement)->prepared = 0; - (*statement)->name = apr_pstrdup(pool, query); - return 0; - } - (*statement)->name = apr_pstrdup(pool, label); - - /* length of SQL query that prepares this statement */ - length = 8 + strlen(label) + 2 + 4 + length + 1; - sqlcmd = apr_palloc(pool, length); - sqlptr = sqlcmd; - memcpy(sqlptr, "PREPARE ", 8); - sqlptr += 8; - length = strlen(label); - memcpy(sqlptr, label, length); - sqlptr += length; - if (nargs > 0) { - memcpy(sqlptr, " (",2); - sqlptr += 2; - for (i=0; i < nargs; ++i) { - alen = strlen(args[i]); - memcpy(sqlptr, args[i], alen); - sqlptr += alen; - *sqlptr++ = ','; - } - sqlptr[-1] = ')'; - } - memcpy(sqlptr, " AS ", 4); - sqlptr += 4; - memcpy(sqlptr, query, qlen); - sqlptr += qlen; - *sqlptr = 0; - - res = PQexec(sql->conn, sqlcmd); - if ( res ) { - ret = PQresultStatus(res); - if (dbd_pgsql_is_success(ret)) { - ret = 0; - } - /* Hmmm, do we do this here or register it on the pool? */ - PQclear(res); - } - else { - ret = PGRES_FATAL_ERROR; - } - (*statement)->prepared = 1; - - return ret; -} - -static int dbd_pgsql_pquery_internal(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const char **values, - const int *len, const int *fmt) -{ - int ret; - PGresult *res; - - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, "SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - return sql->trans->errnum = PGRES_FATAL_ERROR; - } - } - - if (statement->prepared) { - res = PQexecPrepared(sql->conn, statement->name, statement->nargs, - values, len, fmt, 0); - } - else { - res = PQexecParams(sql->conn, statement->name, statement->nargs, 0, - values, len, fmt, 0); - } - if (res) { - ret = PQresultStatus(res); - if (dbd_pgsql_is_success(ret)) { - ret = 0; - } - *nrows = atoi(PQcmdTuples(res)); - PQclear(res); - } - else { - ret = PGRES_FATAL_ERROR; - } - - if (ret != 0){ - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "ROLLBACK TO SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else if (TXN_NOTICE_ERRORS(sql->trans)){ - sql->trans->errnum = ret; - } - } else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "RELEASE SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } - } - - return ret; -} - -static void dbd_pgsql_bind(apr_dbd_prepared_t *statement, - const char **values, - const char **val, int *len, int *fmt) -{ - int i, j; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - if (values[j] == NULL) { - val[i] = NULL; - } - else { - switch (statement->types[i]) { - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - val[i] = (char *)values[j]; - len[i] = atoi(values[++j]); - fmt[i] = 1; - - /* skip table and column */ - j += 2; - break; - default: - val[i] = values[j]; - break; - } - } - } - - return; -} - -static int dbd_pgsql_pquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const char **values) -{ - int *len, *fmt; - const char **val; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - val = apr_palloc(pool, sizeof(*val) * statement->nargs); - len = apr_pcalloc(pool, sizeof(*len) * statement->nargs); - fmt = apr_pcalloc(pool, sizeof(*fmt) * statement->nargs); - - dbd_pgsql_bind(statement, values, val, len, fmt); - - return dbd_pgsql_pquery_internal(pool, sql, nrows, statement, - val, len, fmt); -} - -static int dbd_pgsql_pvquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_pgsql_pquery(pool, sql, nrows, statement, values); -} - -static int dbd_pgsql_pselect_internal(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, const char **values, - const int *len, const int *fmt) -{ - PGresult *res; - int rv; - int ret = 0; - - if (seek) { /* synchronous query */ - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, "SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } - if (statement->prepared) { - res = PQexecPrepared(sql->conn, statement->name, statement->nargs, - values, len, fmt, 0); - } - else { - res = PQexecParams(sql->conn, statement->name, statement->nargs, 0, - values, len, fmt, 0); - } - if (res) { - ret = PQresultStatus(res); - if (dbd_pgsql_is_success(ret)) { - ret = 0; - } - else { - PQclear(res); - } - } - else { - ret = PGRES_FATAL_ERROR; - } - if (ret != 0) { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "ROLLBACK TO SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else if (TXN_NOTICE_ERRORS(sql->trans)){ - sql->trans->errnum = ret; - } - return ret; - } else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "RELEASE SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } - } - if (!*results) { - *results = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->res = res; - (*results)->ntuples = PQntuples(res); - (*results)->sz = PQnfields(res); - (*results)->random = seek; - (*results)->pool = pool; - apr_pool_cleanup_register(pool, res, clear_result, - apr_pool_cleanup_null); - } - else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, "SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } - if (statement->prepared) { - rv = PQsendQueryPrepared(sql->conn, statement->name, - statement->nargs, values, len, fmt, 0); - } - else { - rv = PQsendQueryParams(sql->conn, statement->name, - statement->nargs, 0, values, len, fmt, 0); - } - if (rv == 0) { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "ROLLBACK TO SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else if (TXN_NOTICE_ERRORS(sql->trans)){ - sql->trans->errnum = 1; - } - return 1; - } else { - if (TXN_IGNORE_ERRORS(sql->trans)) { - PGresult *res = PQexec(sql->conn, - "RELEASE SAVEPOINT APR_DBD_TXN_SP"); - if (res) { - int ret = PQresultStatus(res); - PQclear(res); - if (!dbd_pgsql_is_success(ret)) { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } else { - sql->trans->errnum = ret; - return PGRES_FATAL_ERROR; - } - } - } - if (!*results) { - *results = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->random = seek; - (*results)->handle = sql->conn; - (*results)->pool = pool; - } - - return ret; -} - -static int dbd_pgsql_pselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, const char **values) -{ - int *len, *fmt; - const char **val; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - val = apr_palloc(pool, sizeof(*val) * statement->nargs); - len = apr_pcalloc(pool, sizeof(*len) * statement->nargs); - fmt = apr_pcalloc(pool, sizeof(*fmt) * statement->nargs); - - dbd_pgsql_bind(statement, values, val, len, fmt); - - return dbd_pgsql_pselect_internal(pool, sql, results, statement, - seek, val, len, fmt); -} - -static int dbd_pgsql_pvselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_pgsql_pselect(pool, sql, results, statement, seek, values); -} - -static void dbd_pgsql_bbind(apr_pool_t *pool, apr_dbd_prepared_t * statement, - const void **values, - const char **val, int *len, int *fmt) -{ - int i, j; - apr_dbd_type_e type; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - type = (values[j] == NULL ? APR_DBD_TYPE_NULL : statement->types[i]); - - switch (type) { - case APR_DBD_TYPE_TINY: - val[i] = apr_itoa(pool, *(char*)values[j]); - break; - case APR_DBD_TYPE_UTINY: - val[i] = apr_itoa(pool, *(unsigned char*)values[j]); - break; - case APR_DBD_TYPE_SHORT: - val[i] = apr_itoa(pool, *(short*)values[j]); - break; - case APR_DBD_TYPE_USHORT: - val[i] = apr_itoa(pool, *(unsigned short*)values[j]); - break; - case APR_DBD_TYPE_INT: - val[i] = apr_itoa(pool, *(int*)values[j]); - break; - case APR_DBD_TYPE_UINT: - val[i] = apr_itoa(pool, *(unsigned int*)values[j]); - break; - case APR_DBD_TYPE_LONG: - val[i] = apr_ltoa(pool, *(long*)values[j]); - break; - case APR_DBD_TYPE_ULONG: - val[i] = apr_ltoa(pool, *(unsigned long*)values[j]); - break; - case APR_DBD_TYPE_LONGLONG: - val[i] = apr_psprintf(pool, "%" APR_INT64_T_FMT, - *(apr_int64_t*)values[j]); - break; - case APR_DBD_TYPE_ULONGLONG: - val[i] = apr_psprintf(pool, "%" APR_UINT64_T_FMT, - *(apr_uint64_t*)values[j]); - break; - case APR_DBD_TYPE_FLOAT: - val[i] = apr_psprintf(pool, "%f", *(float*)values[j]); - break; - case APR_DBD_TYPE_DOUBLE: - val[i] = apr_psprintf(pool, "%lf", *(double*)values[j]); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - val[i] = values[j]; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - val[i] = (char*)values[j]; - len[i] = *(apr_size_t*)values[++j]; - fmt[i] = 1; - - /* skip table and column */ - j += 2; - break; - case APR_DBD_TYPE_NULL: - default: - val[i] = NULL; - break; - } - } - - return; -} - -static int dbd_pgsql_pbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - const void **values) -{ - int *len, *fmt; - const char **val; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - val = apr_palloc(pool, sizeof(*val) * statement->nargs); - len = apr_pcalloc(pool, sizeof(*len) * statement->nargs); - fmt = apr_pcalloc(pool, sizeof(*fmt) * statement->nargs); - - dbd_pgsql_bbind(pool, statement, values, val, len, fmt); - - return dbd_pgsql_pquery_internal(pool, sql, nrows, statement, - val, len, fmt); -} - -static int dbd_pgsql_pvbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_pgsql_pbquery(pool, sql, nrows, statement, values); -} - -static int dbd_pgsql_pbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, - int seek, const void **values) -{ - int *len, *fmt; - const char **val; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - val = apr_palloc(pool, sizeof(*val) * statement->nargs); - len = apr_pcalloc(pool, sizeof(*len) * statement->nargs); - fmt = apr_pcalloc(pool, sizeof(*fmt) * statement->nargs); - - dbd_pgsql_bbind(pool, statement, values, val, len, fmt); - - return dbd_pgsql_pselect_internal(pool, sql, results, statement, - seek, val, len, fmt); -} - -static int dbd_pgsql_pvbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, int seek, - va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_pgsql_pbselect(pool, sql, results, statement, seek, values); -} - -static int dbd_pgsql_start_transaction(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_transaction_t **trans) -{ - int ret = 0; - PGresult *res; - - /* XXX handle recursive transactions here */ - - res = PQexec(handle->conn, "BEGIN TRANSACTION"); - if (res) { - ret = PQresultStatus(res); - if (dbd_pgsql_is_success(ret)) { - ret = 0; - if (!*trans) { - *trans = apr_pcalloc(pool, sizeof(apr_dbd_transaction_t)); - } - } - PQclear(res); - (*trans)->handle = handle; - handle->trans = *trans; - } - else { - ret = PGRES_FATAL_ERROR; - } - return ret; -} - -static int dbd_pgsql_end_transaction(apr_dbd_transaction_t *trans) -{ - PGresult *res; - int ret = -1; /* no transaction is an error cond */ - if (trans) { - /* rollback on error or explicit rollback request */ - if (trans->errnum || TXN_DO_ROLLBACK(trans)) { - trans->errnum = 0; - res = PQexec(trans->handle->conn, "ROLLBACK"); - } - else { - res = PQexec(trans->handle->conn, "COMMIT"); - } - if (res) { - ret = PQresultStatus(res); - if (dbd_pgsql_is_success(ret)) { - ret = 0; - } - PQclear(res); - } - else { - ret = PGRES_FATAL_ERROR; - } - trans->handle->trans = NULL; - } - return ret; -} - -static int dbd_pgsql_transaction_mode_get(apr_dbd_transaction_t *trans) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode; -} - -static int dbd_pgsql_transaction_mode_set(apr_dbd_transaction_t *trans, - int mode) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode = (mode & TXN_MODE_BITS); -} - -static void null_notice_receiver(void *arg, const PGresult *res) -{ - /* nothing */ -} - -static void null_notice_processor(void *arg, const char *message) -{ - /* nothing */ -} - -static apr_dbd_t *dbd_pgsql_open(apr_pool_t *pool, const char *params, - const char **error) -{ - apr_dbd_t *sql; - - PGconn *conn = PQconnectdb(params); - - /* if there's an error in the connect string or something we get - * back a * bogus connection object, and things like PQreset are - * liable to segfault, so just close it out now. it would be nice - * if we could give an indication of why we failed to connect... */ - if (PQstatus(conn) != CONNECTION_OK) { - if (error) { - *error = apr_pstrdup(pool, PQerrorMessage(conn)); - } - PQfinish(conn); - return NULL; - } - - PQsetNoticeReceiver(conn, null_notice_receiver, NULL); - PQsetNoticeProcessor(conn, null_notice_processor, NULL); - - sql = apr_pcalloc (pool, sizeof (*sql)); - - sql->conn = conn; - - return sql; -} - -static apr_status_t dbd_pgsql_close(apr_dbd_t *handle) -{ - PQfinish(handle->conn); - return APR_SUCCESS; -} - -static apr_status_t dbd_pgsql_check_conn(apr_pool_t *pool, - apr_dbd_t *handle) -{ - if (PQstatus(handle->conn) != CONNECTION_OK) { - PQreset(handle->conn); - if (PQstatus(handle->conn) != CONNECTION_OK) { - return APR_EGENERAL; - } - } - return APR_SUCCESS; -} - -static int dbd_pgsql_select_db(apr_pool_t *pool, apr_dbd_t *handle, - const char *name) -{ - return APR_ENOTIMPL; -} - -static void *dbd_pgsql_native(apr_dbd_t *handle) -{ - return handle->conn; -} - -static int dbd_pgsql_num_cols(apr_dbd_results_t* res) -{ - return res->sz; -} - -static int dbd_pgsql_num_tuples(apr_dbd_results_t* res) -{ - if (res->random) { - return res->ntuples; - } - else { - return -1; - } -} - -APU_MODULE_DECLARE_DATA const apr_dbd_driver_t apr_dbd_pgsql_driver = { - "pgsql", - NULL, - dbd_pgsql_native, - dbd_pgsql_open, - dbd_pgsql_check_conn, - dbd_pgsql_close, - dbd_pgsql_select_db, - dbd_pgsql_start_transaction, - dbd_pgsql_end_transaction, - dbd_pgsql_query, - dbd_pgsql_select, - dbd_pgsql_num_cols, - dbd_pgsql_num_tuples, - dbd_pgsql_get_row, - dbd_pgsql_get_entry, - dbd_pgsql_error, - dbd_pgsql_escape, - dbd_pgsql_prepare, - dbd_pgsql_pvquery, - dbd_pgsql_pvselect, - dbd_pgsql_pquery, - dbd_pgsql_pselect, - dbd_pgsql_get_name, - dbd_pgsql_transaction_mode_get, - dbd_pgsql_transaction_mode_set, - "$%d", - dbd_pgsql_pvbquery, - dbd_pgsql_pvbselect, - dbd_pgsql_pbquery, - dbd_pgsql_pbselect, - dbd_pgsql_datum_get -}; -#endif Index: contrib/apr-util/dbd/apr_dbd_sqlite2.c =================================================================== --- contrib/apr-util/dbd/apr_dbd_sqlite2.c +++ /dev/null @@ -1,566 +0,0 @@ -/* 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" - -#if APU_HAVE_SQLITE2 - -#include -#include - -#include - -#include "apr_strings.h" -#include "apr_time.h" -#include "apr_buckets.h" - -#include "apr_dbd_internal.h" - -struct apr_dbd_transaction_t { - int mode; - int errnum; - apr_dbd_t *handle; -}; - -struct apr_dbd_t { - sqlite *conn; - char *errmsg; - apr_dbd_transaction_t *trans; -}; - -struct apr_dbd_results_t { - int random; - sqlite *handle; - char **res; - size_t ntuples; - size_t sz; - size_t index; - apr_pool_t *pool; -}; - -struct apr_dbd_row_t { - int n; - char **data; - apr_dbd_results_t *res; -}; - -struct apr_dbd_prepared_t { - const char *name; - int prepared; -}; - -#define FREE_ERROR_MSG(dbd) \ - do { \ - if(dbd && dbd->errmsg) { \ - free(dbd->errmsg); \ - dbd->errmsg = NULL; \ - } \ - } while(0); - -static apr_status_t free_table(void *data) -{ - sqlite_free_table(data); - return APR_SUCCESS; -} - -static int dbd_sqlite_select(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, const char *query, - int seek) -{ - char **result; - int ret = 0; - int tuples = 0; - int fields = 0; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - FREE_ERROR_MSG(sql); - - ret = sqlite_get_table(sql->conn, query, &result, &tuples, &fields, - &sql->errmsg); - - if (ret == SQLITE_OK) { - if (!*results) { - *results = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - - (*results)->res = result; - (*results)->ntuples = tuples; - (*results)->sz = fields; - (*results)->random = seek; - (*results)->pool = pool; - - if (tuples > 0) - apr_pool_cleanup_register(pool, result, free_table, - apr_pool_cleanup_null); - - ret = 0; - } - else { - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - } - - return ret; -} - -static const char *dbd_sqlite_get_name(const apr_dbd_results_t *res, int n) -{ - if ((n < 0) || (n >= res->sz)) { - return NULL; - } - - return res->res[n]; -} - -static int dbd_sqlite_get_row(apr_pool_t * pool, apr_dbd_results_t * res, - apr_dbd_row_t ** rowp, int rownum) -{ - apr_dbd_row_t *row = *rowp; - int sequential = ((rownum >= 0) && res->random) ? 0 : 1; - - if (row == NULL) { - row = apr_palloc(pool, sizeof(apr_dbd_row_t)); - *rowp = row; - row->res = res; - row->n = sequential ? 0 : rownum - 1; - } - else { - if (sequential) { - ++row->n; - } - else { - row->n = rownum - 1; - } - } - - if (row->n >= res->ntuples) { - *rowp = NULL; - apr_pool_cleanup_run(res->pool, res->res, free_table); - res->res = NULL; - return -1; - } - - /* Pointer magic explanation: - * The sqlite result is an array such that the first res->sz elements are - * the column names and each tuple follows afterwards - * ex: (from the sqlite2 documentation) - SELECT employee_name, login, host FROM users WHERE login LIKE * 'd%'; - - nrow = 2 - ncolumn = 3 - result[0] = "employee_name" - result[1] = "login" - result[2] = "host" - result[3] = "dummy" - result[4] = "No such user" - result[5] = 0 - result[6] = "D. Richard Hipp" - result[7] = "drh" - result[8] = "zadok" - */ - - row->data = res->res + res->sz + (res->sz * row->n); - - return 0; -} - -static const char *dbd_sqlite_get_entry(const apr_dbd_row_t * row, int n) -{ - if ((n < 0) || (n >= row->res->sz)) { - return NULL; - } - - return row->data[n]; -} - -static apr_status_t dbd_sqlite_datum_get(const apr_dbd_row_t *row, int n, - apr_dbd_type_e type, void *data) -{ - if ((n < 0) || (n >= row->res->sz)) { - return APR_EGENERAL; - } - - if (row->data[n] == NULL) { - return APR_ENOENT; - } - - switch (type) { - case APR_DBD_TYPE_TINY: - *(char*)data = atoi(row->data[n]); - break; - case APR_DBD_TYPE_UTINY: - *(unsigned char*)data = atoi(row->data[n]); - break; - case APR_DBD_TYPE_SHORT: - *(short*)data = atoi(row->data[n]); - break; - case APR_DBD_TYPE_USHORT: - *(unsigned short*)data = atoi(row->data[n]); - break; - case APR_DBD_TYPE_INT: - *(int*)data = atoi(row->data[n]); - break; - case APR_DBD_TYPE_UINT: - *(unsigned int*)data = atoi(row->data[n]); - break; - case APR_DBD_TYPE_LONG: - *(long*)data = atol(row->data[n]); - break; - case APR_DBD_TYPE_ULONG: - *(unsigned long*)data = atol(row->data[n]); - break; - case APR_DBD_TYPE_LONGLONG: - *(apr_int64_t*)data = apr_atoi64(row->data[n]); - break; - case APR_DBD_TYPE_ULONGLONG: - *(apr_uint64_t*)data = apr_atoi64(row->data[n]); - break; - case APR_DBD_TYPE_FLOAT: - *(float*)data = atof(row->data[n]); - break; - case APR_DBD_TYPE_DOUBLE: - *(double*)data = atof(row->data[n]); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - *(char**)data = row->data[n]; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - apr_bucket *e; - apr_bucket_brigade *b = (apr_bucket_brigade*)data; - - e = apr_bucket_pool_create(row->data[n],strlen(row->data[n]), - row->res->pool, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - } - break; - case APR_DBD_TYPE_NULL: - *(void**)data = NULL; - break; - default: - return APR_EGENERAL; - } - - return APR_SUCCESS; -} - -static const char *dbd_sqlite_error(apr_dbd_t * sql, int n) -{ - return sql->errmsg; -} - -static int dbd_sqlite_query(apr_dbd_t * sql, int *nrows, const char *query) -{ - char **result; - int ret; - int tuples = 0; - int fields = 0; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - FREE_ERROR_MSG(sql); - - ret = - sqlite_get_table(sql->conn, query, &result, &tuples, &fields, - &sql->errmsg); - if (ret == SQLITE_OK) { - *nrows = sqlite_changes(sql->conn); - - if (tuples > 0) - free(result); - - ret = 0; - } - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - - return ret; -} - -static apr_status_t free_mem(void *data) -{ - sqlite_freemem(data); - return APR_SUCCESS; -} - -static const char *dbd_sqlite_escape(apr_pool_t * pool, const char *arg, - apr_dbd_t * sql) -{ - char *ret = sqlite_mprintf("%q", arg); - apr_pool_cleanup_register(pool, ret, free_mem, apr_pool_cleanup_null); - return ret; -} - -static int dbd_sqlite_prepare(apr_pool_t * pool, apr_dbd_t * sql, - const char *query, const char *label, - int nargs, int nvals, apr_dbd_type_e *types, - apr_dbd_prepared_t ** statement) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - const char **values) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pvquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - va_list args) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, - int seek, const char **values) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pvselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, int seek, - va_list args) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - const void **values) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pvbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - va_list args) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, - int seek, const void **values) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_pvbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, int seek, - va_list args) -{ - return APR_ENOTIMPL; -} - -static int dbd_sqlite_start_transaction(apr_pool_t * pool, apr_dbd_t * handle, - apr_dbd_transaction_t ** trans) -{ - int ret, rows; - - ret = dbd_sqlite_query(handle, &rows, "BEGIN TRANSACTION"); - if (ret == 0) { - if (!*trans) { - *trans = apr_pcalloc(pool, sizeof(apr_dbd_transaction_t)); - } - (*trans)->handle = handle; - handle->trans = *trans; - } - else { - ret = -1; - } - return ret; -} - -static int dbd_sqlite_end_transaction(apr_dbd_transaction_t * trans) -{ - int rows; - int ret = -1; /* no transaction is an error cond */ - - if (trans) { - /* rollback on error or explicit rollback request */ - if (trans->errnum || TXN_DO_ROLLBACK(trans)) { - trans->errnum = 0; - ret = - dbd_sqlite_query(trans->handle, &rows, - "ROLLBACK TRANSACTION"); - } - else { - ret = - dbd_sqlite_query(trans->handle, &rows, "COMMIT TRANSACTION"); - } - trans->handle->trans = NULL; - } - - return ret; -} - -static int dbd_sqlite_transaction_mode_get(apr_dbd_transaction_t *trans) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode; -} - -static int dbd_sqlite_transaction_mode_set(apr_dbd_transaction_t *trans, - int mode) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode = (mode & TXN_MODE_BITS); -} - -static apr_status_t error_free(void *data) -{ - free(data); - return APR_SUCCESS; -} - -static apr_dbd_t *dbd_sqlite_open(apr_pool_t * pool, const char *params_, - const char **error) -{ - apr_dbd_t *sql; - sqlite *conn = NULL; - char *perm; - int iperms = 600; - char* params = apr_pstrdup(pool, params_); - /* params = "[filename]:[permissions]" - * example: "shopping.db:600" - */ - - perm = strstr(params, ":"); - if (perm) { - *(perm++) = '\x00'; /* split the filename and permissions */ - - if (strlen(perm) > 0) - iperms = atoi(perm); - } - - if (error) { - *error = NULL; - - conn = sqlite_open(params, iperms, (char **)error); - - if (*error) { - apr_pool_cleanup_register(pool, *error, error_free, - apr_pool_cleanup_null); - } - } - else { - conn = sqlite_open(params, iperms, NULL); - } - - sql = apr_pcalloc(pool, sizeof(*sql)); - sql->conn = conn; - - return sql; -} - -static apr_status_t dbd_sqlite_close(apr_dbd_t * handle) -{ - if (handle->conn) { - sqlite_close(handle->conn); - handle->conn = NULL; - } - return APR_SUCCESS; -} - -static apr_status_t dbd_sqlite_check_conn(apr_pool_t * pool, - apr_dbd_t * handle) -{ - if (handle->conn == NULL) - return -1; - return APR_SUCCESS; -} - -static int dbd_sqlite_select_db(apr_pool_t * pool, apr_dbd_t * handle, - const char *name) -{ - return APR_ENOTIMPL; -} - -static void *dbd_sqlite_native(apr_dbd_t * handle) -{ - return handle->conn; -} - -static int dbd_sqlite_num_cols(apr_dbd_results_t * res) -{ - return res->sz; -} - -static int dbd_sqlite_num_tuples(apr_dbd_results_t * res) -{ - return res->ntuples; -} - -APU_MODULE_DECLARE_DATA const apr_dbd_driver_t apr_dbd_sqlite2_driver = { - "sqlite2", - NULL, - dbd_sqlite_native, - dbd_sqlite_open, - dbd_sqlite_check_conn, - dbd_sqlite_close, - dbd_sqlite_select_db, - dbd_sqlite_start_transaction, - dbd_sqlite_end_transaction, - dbd_sqlite_query, - dbd_sqlite_select, - dbd_sqlite_num_cols, - dbd_sqlite_num_tuples, - dbd_sqlite_get_row, - dbd_sqlite_get_entry, - dbd_sqlite_error, - dbd_sqlite_escape, - dbd_sqlite_prepare, - dbd_sqlite_pvquery, - dbd_sqlite_pvselect, - dbd_sqlite_pquery, - dbd_sqlite_pselect, - dbd_sqlite_get_name, - dbd_sqlite_transaction_mode_get, - dbd_sqlite_transaction_mode_set, - NULL, - dbd_sqlite_pvbquery, - dbd_sqlite_pvbselect, - dbd_sqlite_pbquery, - dbd_sqlite_pbselect, - dbd_sqlite_datum_get -}; -#endif Index: contrib/apr-util/dbd/apr_dbd_sqlite3.c =================================================================== --- contrib/apr-util/dbd/apr_dbd_sqlite3.c +++ /dev/null @@ -1,914 +0,0 @@ -/* 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" - -#if APU_HAVE_SQLITE3 - -#include -#include - -#include - -#include "apr_strings.h" -#include "apr_time.h" -#include "apr_buckets.h" - -#include "apr_dbd_internal.h" - -#define MAX_RETRY_COUNT 15 -#define MAX_RETRY_SLEEP 100000 - -struct apr_dbd_transaction_t { - int mode; - int errnum; - apr_dbd_t *handle; -}; - -struct apr_dbd_t { - sqlite3 *conn; - apr_dbd_transaction_t *trans; - apr_pool_t *pool; - apr_dbd_prepared_t *prep; -}; - -typedef struct { - char *name; - char *value; - int size; - int type; -} apr_dbd_column_t; - -struct apr_dbd_row_t { - apr_dbd_results_t *res; - apr_dbd_column_t **columns; - apr_dbd_row_t *next_row; - int columnCount; - int rownum; -}; - -struct apr_dbd_results_t { - int random; - sqlite3 *handle; - sqlite3_stmt *stmt; - apr_dbd_row_t *next_row; - size_t sz; - int tuples; - char **col_names; - apr_pool_t *pool; -}; - -struct apr_dbd_prepared_t { - sqlite3_stmt *stmt; - apr_dbd_prepared_t *next; - int nargs; - int nvals; - apr_dbd_type_e *types; -}; - -#define dbd_sqlite3_is_success(x) (((x) == SQLITE_DONE) || ((x) == SQLITE_OK)) - -static int dbd_sqlite3_select_internal(apr_pool_t *pool, - apr_dbd_t *sql, - apr_dbd_results_t **results, - sqlite3_stmt *stmt, int seek) -{ - int ret, retry_count = 0, column_count; - size_t i, num_tuples = 0; - int increment = 0; - apr_dbd_row_t *row = NULL; - apr_dbd_row_t *lastrow = NULL; - apr_dbd_column_t *column; - char *hold = NULL; - - column_count = sqlite3_column_count(stmt); - if (!*results) { - *results = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - (*results)->stmt = stmt; - (*results)->sz = column_count; - (*results)->random = seek; - (*results)->next_row = 0; - (*results)->tuples = 0; - (*results)->col_names = apr_pcalloc(pool, column_count * sizeof(char *)); - (*results)->pool = pool; - do { - ret = sqlite3_step(stmt); - if (ret == SQLITE_BUSY) { - if (retry_count++ > MAX_RETRY_COUNT) { - ret = SQLITE_ERROR; - } else { - apr_dbd_mutex_unlock(); - apr_sleep(MAX_RETRY_SLEEP); - apr_dbd_mutex_lock(); - } - } else if (ret == SQLITE_ROW) { - int length; - row = apr_palloc(pool, sizeof(apr_dbd_row_t)); - row->res = *results; - increment = sizeof(apr_dbd_column_t *); - length = increment * (*results)->sz; - row->columns = apr_palloc(pool, length); - row->columnCount = column_count; - for (i = 0; i < (*results)->sz; i++) { - column = apr_palloc(pool, sizeof(apr_dbd_column_t)); - row->columns[i] = column; - /* copy column name once only */ - if ((*results)->col_names[i] == NULL) { - (*results)->col_names[i] = - apr_pstrdup(pool, sqlite3_column_name(stmt, i)); - } - column->name = (*results)->col_names[i]; - column->size = sqlite3_column_bytes(stmt, i); - column->type = sqlite3_column_type(stmt, i); - column->value = NULL; - switch (column->type) { - case SQLITE_FLOAT: - case SQLITE_INTEGER: - case SQLITE_TEXT: - hold = (char *) sqlite3_column_text(stmt, i); - if (hold) { - column->value = apr_pstrmemdup(pool, hold, - column->size); - } - break; - case SQLITE_BLOB: - hold = (char *) sqlite3_column_blob(stmt, i); - if (hold) { - column->value = apr_pstrmemdup(pool, hold, - column->size); - } - break; - case SQLITE_NULL: - break; - } - } - row->rownum = num_tuples++; - row->next_row = 0; - (*results)->tuples = num_tuples; - if ((*results)->next_row == 0) { - (*results)->next_row = row; - } - if (lastrow != 0) { - lastrow->next_row = row; - } - lastrow = row; - } - } while (ret == SQLITE_ROW || ret == SQLITE_BUSY); - - if (dbd_sqlite3_is_success(ret)) { - ret = 0; - } - return ret; -} - -static int dbd_sqlite3_select(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, const char *query, - int seek) -{ - sqlite3_stmt *stmt = NULL; - const char *tail = NULL; - int ret; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - apr_dbd_mutex_lock(); - - ret = sqlite3_prepare(sql->conn, query, strlen(query), &stmt, &tail); - if (dbd_sqlite3_is_success(ret)) { - ret = dbd_sqlite3_select_internal(pool, sql, results, stmt, seek); - } - sqlite3_finalize(stmt); - - apr_dbd_mutex_unlock(); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static const char *dbd_sqlite3_get_name(const apr_dbd_results_t *res, int n) -{ - if ((n < 0) || ((size_t)n >= res->sz)) { - return NULL; - } - - return res->col_names[n]; -} - -static int dbd_sqlite3_get_row(apr_pool_t *pool, apr_dbd_results_t *res, - apr_dbd_row_t **rowp, int rownum) -{ - int i = 0; - - if (rownum == -1) { - *rowp = res->next_row; - if (*rowp == 0) - return -1; - res->next_row = (*rowp)->next_row; - return 0; - } - if (rownum > res->tuples) { - return -1; - } - rownum--; - *rowp = res->next_row; - for (; *rowp != 0; i++, *rowp = (*rowp)->next_row) { - if (i == rownum) { - return 0; - } - } - - return -1; - -} - -static const char *dbd_sqlite3_get_entry(const apr_dbd_row_t *row, int n) -{ - apr_dbd_column_t *column; - const char *value; - if ((n < 0) || (n >= row->columnCount)) { - return NULL; - } - column = row->columns[n]; - value = column->value; - return value; -} - -static apr_status_t dbd_sqlite3_datum_get(const apr_dbd_row_t *row, int n, - apr_dbd_type_e type, void *data) -{ - if ((n < 0) || ((size_t)n >= row->res->sz)) { - return APR_EGENERAL; - } - - if (row->columns[n]->type == SQLITE_NULL) { - return APR_ENOENT; - } - - switch (type) { - case APR_DBD_TYPE_TINY: - *(char*)data = atoi(row->columns[n]->value); - break; - case APR_DBD_TYPE_UTINY: - *(unsigned char*)data = atoi(row->columns[n]->value); - break; - case APR_DBD_TYPE_SHORT: - *(short*)data = atoi(row->columns[n]->value); - break; - case APR_DBD_TYPE_USHORT: - *(unsigned short*)data = atoi(row->columns[n]->value); - break; - case APR_DBD_TYPE_INT: - *(int*)data = atoi(row->columns[n]->value); - break; - case APR_DBD_TYPE_UINT: - *(unsigned int*)data = atoi(row->columns[n]->value); - break; - case APR_DBD_TYPE_LONG: - *(long*)data = atol(row->columns[n]->value); - break; - case APR_DBD_TYPE_ULONG: - *(unsigned long*)data = atol(row->columns[n]->value); - break; - case APR_DBD_TYPE_LONGLONG: - *(apr_int64_t*)data = apr_atoi64(row->columns[n]->value); - break; - case APR_DBD_TYPE_ULONGLONG: - *(apr_uint64_t*)data = apr_atoi64(row->columns[n]->value); - break; - case APR_DBD_TYPE_FLOAT: - *(float*)data = (float)atof(row->columns[n]->value); - break; - case APR_DBD_TYPE_DOUBLE: - *(double*)data = atof(row->columns[n]->value); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - *(char**)data = row->columns[n]->value; - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - apr_bucket *e; - apr_bucket_brigade *b = (apr_bucket_brigade*)data; - - e = apr_bucket_pool_create(row->columns[n]->value, - row->columns[n]->size, - row->res->pool, b->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(b, e); - } - break; - case APR_DBD_TYPE_NULL: - *(void**)data = NULL; - break; - default: - return APR_EGENERAL; - } - - return APR_SUCCESS; -} - -static const char *dbd_sqlite3_error(apr_dbd_t *sql, int n) -{ - return sqlite3_errmsg(sql->conn); -} - -static int dbd_sqlite3_query_internal(apr_dbd_t *sql, sqlite3_stmt *stmt, - int *nrows) -{ - int ret = -1, retry_count = 0; - - while(retry_count++ <= MAX_RETRY_COUNT) { - ret = sqlite3_step(stmt); - if (ret != SQLITE_BUSY) - break; - - apr_dbd_mutex_unlock(); - apr_sleep(MAX_RETRY_SLEEP); - apr_dbd_mutex_lock(); - } - - *nrows = sqlite3_changes(sql->conn); - - if (dbd_sqlite3_is_success(ret)) { - ret = 0; - } - return ret; -} - -static int dbd_sqlite3_query(apr_dbd_t *sql, int *nrows, const char *query) -{ - sqlite3_stmt *stmt = NULL; - const char *tail = NULL; - int ret = -1, length = 0; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - length = strlen(query); - apr_dbd_mutex_lock(); - - do { - ret = sqlite3_prepare(sql->conn, query, length, &stmt, &tail); - if (ret != SQLITE_OK) { - sqlite3_finalize(stmt); - break; - } - - ret = dbd_sqlite3_query_internal(sql, stmt, nrows); - - sqlite3_finalize(stmt); - length -= (tail - query); - query = tail; - } while (length > 0); - - apr_dbd_mutex_unlock(); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static apr_status_t free_mem(void *data) -{ - sqlite3_free(data); - return APR_SUCCESS; -} - -static const char *dbd_sqlite3_escape(apr_pool_t *pool, const char *arg, - apr_dbd_t *sql) -{ - char *ret = sqlite3_mprintf("%q", arg); - apr_pool_cleanup_register(pool, ret, free_mem, - apr_pool_cleanup_null); - return ret; -} - -static int dbd_sqlite3_prepare(apr_pool_t *pool, apr_dbd_t *sql, - const char *query, const char *label, - int nargs, int nvals, apr_dbd_type_e *types, - apr_dbd_prepared_t **statement) -{ - sqlite3_stmt *stmt; - const char *tail = NULL; - int ret; - - apr_dbd_mutex_lock(); - - ret = sqlite3_prepare(sql->conn, query, strlen(query), &stmt, &tail); - if (ret == SQLITE_OK) { - apr_dbd_prepared_t *prep; - - prep = apr_pcalloc(sql->pool, sizeof(*prep)); - prep->stmt = stmt; - prep->next = sql->prep; - prep->nargs = nargs; - prep->nvals = nvals; - prep->types = types; - - /* link new statement to the handle */ - sql->prep = prep; - - *statement = prep; - } else { - sqlite3_finalize(stmt); - } - - apr_dbd_mutex_unlock(); - - return ret; -} - -static void dbd_sqlite3_bind(apr_dbd_prepared_t *statement, const char **values) -{ - sqlite3_stmt *stmt = statement->stmt; - int i, j; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - if (values[j] == NULL) { - sqlite3_bind_null(stmt, i + 1); - } - else { - switch (statement->types[i]) { - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - char *data = (char *)values[j]; - int size = atoi((char*)values[++j]); - - /* skip table and column */ - j += 2; - - sqlite3_bind_blob(stmt, i + 1, data, size, SQLITE_STATIC); - } - break; - default: - sqlite3_bind_text(stmt, i + 1, values[j], - strlen(values[j]), SQLITE_STATIC); - break; - } - } - } - - return; -} - -static int dbd_sqlite3_pquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const char **values) -{ - sqlite3_stmt *stmt = statement->stmt; - int ret = -1; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - apr_dbd_mutex_lock(); - - ret = sqlite3_reset(stmt); - if (ret == SQLITE_OK) { - dbd_sqlite3_bind(statement, values); - - ret = dbd_sqlite3_query_internal(sql, stmt, nrows); - - sqlite3_reset(stmt); - } - - apr_dbd_mutex_unlock(); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_sqlite3_pvquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows, - apr_dbd_prepared_t *statement, va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_sqlite3_pquery(pool, sql, nrows, statement, values); -} - -static int dbd_sqlite3_pselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, int seek, - const char **values) -{ - sqlite3_stmt *stmt = statement->stmt; - int ret; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - apr_dbd_mutex_lock(); - - ret = sqlite3_reset(stmt); - if (ret == SQLITE_OK) { - dbd_sqlite3_bind(statement, values); - - ret = dbd_sqlite3_select_internal(pool, sql, results, stmt, seek); - - sqlite3_reset(stmt); - } - - apr_dbd_mutex_unlock(); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_sqlite3_pvselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, int seek, - va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_sqlite3_pselect(pool, sql, results, statement, seek, values); -} - -static void dbd_sqlite3_bbind(apr_dbd_prepared_t * statement, - const void **values) -{ - sqlite3_stmt *stmt = statement->stmt; - int i, j; - apr_dbd_type_e type; - - for (i = 0, j = 0; i < statement->nargs; i++, j++) { - type = (values[j] == NULL ? APR_DBD_TYPE_NULL : statement->types[i]); - - switch (type) { - case APR_DBD_TYPE_TINY: - sqlite3_bind_int(stmt, i + 1, *(char*)values[j]); - break; - case APR_DBD_TYPE_UTINY: - sqlite3_bind_int(stmt, i + 1, *(unsigned char*)values[j]); - break; - case APR_DBD_TYPE_SHORT: - sqlite3_bind_int(stmt, i + 1, *(short*)values[j]); - break; - case APR_DBD_TYPE_USHORT: - sqlite3_bind_int(stmt, i + 1, *(unsigned short*)values[j]); - break; - case APR_DBD_TYPE_INT: - sqlite3_bind_int(stmt, i + 1, *(int*)values[j]); - break; - case APR_DBD_TYPE_UINT: - sqlite3_bind_int(stmt, i + 1, *(unsigned int*)values[j]); - break; - case APR_DBD_TYPE_LONG: - sqlite3_bind_int64(stmt, i + 1, *(long*)values[j]); - break; - case APR_DBD_TYPE_ULONG: - sqlite3_bind_int64(stmt, i + 1, *(unsigned long*)values[j]); - break; - case APR_DBD_TYPE_LONGLONG: - sqlite3_bind_int64(stmt, i + 1, *(apr_int64_t*)values[j]); - break; - case APR_DBD_TYPE_ULONGLONG: - sqlite3_bind_int64(stmt, i + 1, *(apr_uint64_t*)values[j]); - break; - case APR_DBD_TYPE_FLOAT: - sqlite3_bind_double(stmt, i + 1, *(float*)values[j]); - break; - case APR_DBD_TYPE_DOUBLE: - sqlite3_bind_double(stmt, i + 1, *(double*)values[j]); - break; - case APR_DBD_TYPE_STRING: - case APR_DBD_TYPE_TEXT: - case APR_DBD_TYPE_TIME: - case APR_DBD_TYPE_DATE: - case APR_DBD_TYPE_DATETIME: - case APR_DBD_TYPE_TIMESTAMP: - case APR_DBD_TYPE_ZTIMESTAMP: - sqlite3_bind_text(stmt, i + 1, values[j], strlen(values[j]), - SQLITE_STATIC); - break; - case APR_DBD_TYPE_BLOB: - case APR_DBD_TYPE_CLOB: - { - char *data = (char*)values[j]; - apr_size_t size = *(apr_size_t*)values[++j]; - - sqlite3_bind_blob(stmt, i + 1, data, size, SQLITE_STATIC); - - /* skip table and column */ - j += 2; - } - break; - case APR_DBD_TYPE_NULL: - default: - sqlite3_bind_null(stmt, i + 1); - break; - } - } - - return; -} - -static int dbd_sqlite3_pbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - const void **values) -{ - sqlite3_stmt *stmt = statement->stmt; - int ret = -1; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - apr_dbd_mutex_lock(); - - ret = sqlite3_reset(stmt); - if (ret == SQLITE_OK) { - dbd_sqlite3_bbind(statement, values); - - ret = dbd_sqlite3_query_internal(sql, stmt, nrows); - - sqlite3_reset(stmt); - } - - apr_dbd_mutex_unlock(); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_sqlite3_pvbquery(apr_pool_t * pool, apr_dbd_t * sql, - int *nrows, apr_dbd_prepared_t * statement, - va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_sqlite3_pbquery(pool, sql, nrows, statement, values); -} - -static int dbd_sqlite3_pbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, - int seek, const void **values) -{ - sqlite3_stmt *stmt = statement->stmt; - int ret; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - apr_dbd_mutex_lock(); - - ret = sqlite3_reset(stmt); - if (ret == SQLITE_OK) { - dbd_sqlite3_bbind(statement, values); - - ret = dbd_sqlite3_select_internal(pool, sql, results, stmt, seek); - - sqlite3_reset(stmt); - } - - apr_dbd_mutex_unlock(); - - if (TXN_NOTICE_ERRORS(sql->trans)) { - sql->trans->errnum = ret; - } - return ret; -} - -static int dbd_sqlite3_pvbselect(apr_pool_t * pool, apr_dbd_t * sql, - apr_dbd_results_t ** results, - apr_dbd_prepared_t * statement, int seek, - va_list args) -{ - const void **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nvals); - - for (i = 0; i < statement->nvals; i++) { - values[i] = va_arg(args, const void*); - } - - return dbd_sqlite3_pbselect(pool, sql, results, statement, seek, values); -} - -static int dbd_sqlite3_start_transaction(apr_pool_t *pool, - apr_dbd_t *handle, - apr_dbd_transaction_t **trans) -{ - int ret = 0; - int nrows = 0; - - ret = dbd_sqlite3_query(handle, &nrows, "BEGIN IMMEDIATE"); - if (!*trans) { - *trans = apr_pcalloc(pool, sizeof(apr_dbd_transaction_t)); - (*trans)->handle = handle; - handle->trans = *trans; - } - - return ret; -} - -static int dbd_sqlite3_end_transaction(apr_dbd_transaction_t *trans) -{ - int ret = -1; /* ending transaction that was never started is an error */ - int nrows = 0; - - if (trans) { - /* rollback on error or explicit rollback request */ - if (trans->errnum || TXN_DO_ROLLBACK(trans)) { - trans->errnum = 0; - ret = dbd_sqlite3_query(trans->handle, &nrows, "ROLLBACK"); - } else { - ret = dbd_sqlite3_query(trans->handle, &nrows, "COMMIT"); - } - trans->handle->trans = NULL; - } - - return ret; -} - -static int dbd_sqlite3_transaction_mode_get(apr_dbd_transaction_t *trans) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode; -} - -static int dbd_sqlite3_transaction_mode_set(apr_dbd_transaction_t *trans, - int mode) -{ - if (!trans) - return APR_DBD_TRANSACTION_COMMIT; - - return trans->mode = (mode & TXN_MODE_BITS); -} - -static apr_dbd_t *dbd_sqlite3_open(apr_pool_t *pool, const char *params, - const char **error) -{ - apr_dbd_t *sql = NULL; - sqlite3 *conn = NULL; - int sqlres; - if (!params) - return NULL; - sqlres = sqlite3_open(params, &conn); - if (sqlres != SQLITE_OK) { - if (error) { - *error = apr_pstrdup(pool, sqlite3_errmsg(conn)); - } - sqlite3_close(conn); - return NULL; - } - /* should we register rand or power functions to the sqlite VM? */ - sql = apr_pcalloc(pool, sizeof(*sql)); - sql->conn = conn; - sql->pool = pool; - sql->trans = NULL; - - return sql; -} - -static apr_status_t dbd_sqlite3_close(apr_dbd_t *handle) -{ - apr_dbd_prepared_t *prep = handle->prep; - - /* finalize all prepared statements, or we'll get SQLITE_BUSY on close */ - while (prep) { - sqlite3_finalize(prep->stmt); - prep = prep->next; - } - - sqlite3_close(handle->conn); - return APR_SUCCESS; -} - -static apr_status_t dbd_sqlite3_check_conn(apr_pool_t *pool, - apr_dbd_t *handle) -{ - return (handle->conn != NULL) ? APR_SUCCESS : APR_EGENERAL; -} - -static int dbd_sqlite3_select_db(apr_pool_t *pool, apr_dbd_t *handle, - const char *name) -{ - return APR_ENOTIMPL; -} - -static void *dbd_sqlite3_native(apr_dbd_t *handle) -{ - return handle->conn; -} - -static int dbd_sqlite3_num_cols(apr_dbd_results_t *res) -{ - return res->sz; -} - -static int dbd_sqlite3_num_tuples(apr_dbd_results_t *res) -{ - return res->tuples; -} - -APU_MODULE_DECLARE_DATA const apr_dbd_driver_t apr_dbd_sqlite3_driver = { - "sqlite3", - NULL, - dbd_sqlite3_native, - dbd_sqlite3_open, - dbd_sqlite3_check_conn, - dbd_sqlite3_close, - dbd_sqlite3_select_db, - dbd_sqlite3_start_transaction, - dbd_sqlite3_end_transaction, - dbd_sqlite3_query, - dbd_sqlite3_select, - dbd_sqlite3_num_cols, - dbd_sqlite3_num_tuples, - dbd_sqlite3_get_row, - dbd_sqlite3_get_entry, - dbd_sqlite3_error, - dbd_sqlite3_escape, - dbd_sqlite3_prepare, - dbd_sqlite3_pvquery, - dbd_sqlite3_pvselect, - dbd_sqlite3_pquery, - dbd_sqlite3_pselect, - dbd_sqlite3_get_name, - dbd_sqlite3_transaction_mode_get, - dbd_sqlite3_transaction_mode_set, - "?", - dbd_sqlite3_pvbquery, - dbd_sqlite3_pvbselect, - dbd_sqlite3_pbquery, - dbd_sqlite3_pbselect, - dbd_sqlite3_datum_get -}; -#endif Index: contrib/apr-util/dbd/unsupported/NWGNUdbdfreetds =================================================================== --- contrib/apr-util/dbd/unsupported/NWGNUdbdfreetds +++ /dev/null @@ -1,296 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -ifndef EnvironmentDefined -include $(APR_WORK)/build/NWGNUhead.inc -endif - -#include $(APR)\build\NWGNUcustom.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# LINK_STATIC = 1 - -# for now defined here - should finally go into build/NWGNUenvironment.inc -FREETDS_INC = $(FREETDSSDK)/include -FREETDS_IMP = $(FREETDSSDK)/lib/libfreetds.imp -FREETDS_LIB = $(FREETDSSDK)/lib/libfreetds.lib -FREETDS_NLM = libfreetds - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include/arch/netware \ - $(APR)/include \ - $(APU)/include \ - $(APU)/include/private \ - $(APR) \ - $(FREETDS_INC) \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - -DAPU_HAVE_FREETDS=1 \ - -DAPU_DSO_MODULE_BUILD \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -ifdef LINK_STATIC -XLFLAGS += \ - -l $(FREETDSSDK)/lib \ - $(EOLIST) -endif - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = dbdfreetds - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBD FreeTDS Driver Module - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = dbdfreetds - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = 8192 - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(OBJDIR)\$(NLM_NAME).nlm \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(OBJDIR)/apr_dbd_freetds.o \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(PRELUDE) \ - $(EOLIST) - -ifeq ($(LINK_STATIC),1) -FILES_nlm_libs += \ - $(FREETDS_LIB) \ - $(EOLIST) -endif - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - aprlib \ - libc \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_modules += \ - $(FREETDS_NLM) \ - $(EOLIST) -endif - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - @$(APR)/aprlib.imp \ - @libc.imp \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_Ximports += \ - @$(FREETDS_IMP) \ - $(EOLIST) -endif - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - apr_dbd_freetds_driver \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - - Index: contrib/apr-util/dbd/unsupported/apr_dbd_freetds.c =================================================================== --- contrib/apr-util/dbd/unsupported/apr_dbd_freetds.c +++ /dev/null @@ -1,809 +0,0 @@ -/* 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. - */ - -#ifdef I_CAN_DEAL_WITH_THIS_PARTIAL_DRIVER_AND_UNMAINTAINED_CODE_FOR_FREETDS - -#include "apu.h" -#include "apu_config.h" - -/* COMPILE_STUBS: compile stubs for unimplemented functions. - * - * This is required to compile in /trunk/, but can be - * undefined to compile a driver for httpd-2.2 and other - * APR-1.2 applications - */ -#define COMPILE_STUBS - -#if APU_HAVE_FREETDS - -#include -#include - -#include "apr_strings.h" -#include "apr_lib.h" - -#include "apr_pools.h" -#include "apr_dbd_internal.h" - -#ifdef HAVE_FREETDS_SYBDB_H -#include -#endif -#ifdef HAVE_SYBDB_H -#include -#endif - -#include -#include -#include - -/* This probably needs to change for different applications */ -#define MAX_COL_LEN 256 - -typedef struct freetds_cell_t { - int type; - DBINT len; - BYTE *data; -} freetds_cell_t; - -struct apr_dbd_transaction_t { - int mode; - int errnum; - apr_dbd_t *handle; -}; - -struct apr_dbd_t { - DBPROCESS *proc; - apr_dbd_transaction_t *trans; - apr_pool_t *pool; - const char *params; - RETCODE err; -}; - -struct apr_dbd_results_t { - int random; - size_t ntuples; - size_t sz; - apr_pool_t *pool; - DBPROCESS *proc; -}; - -struct apr_dbd_row_t { - apr_dbd_results_t *res; - BYTE buf[MAX_COL_LEN]; -}; - -struct apr_dbd_prepared_t { - int nargs; - regex_t **taint; - int *sz; - char *fmt; -}; - -#define dbd_freetds_is_success(x) (x == SUCCEED) - -static int labelnum = 0; /* FIXME */ -static regex_t dbd_freetds_find_arg; - -/* execute a query that doesn't return a result set, mop up, - * and return and APR-flavoured status - */ -static RETCODE freetds_exec(DBPROCESS *proc, const char *query, - int want_results, int *nrows) -{ - /* TBD */ - RETCODE rv = dbcmd(proc, query); - if (rv != SUCCEED) { - return rv; - } - rv = dbsqlexec(proc); - if (rv != SUCCEED) { - return rv; - } - if (!want_results) { - while (dbresults(proc) != NO_MORE_RESULTS) { - ++*nrows; - } - } - return SUCCEED; -} -static apr_status_t clear_result(void *data) -{ - /* clear cursor */ - return (dbcanquery((DBPROCESS*)data) == SUCCEED) - ? APR_SUCCESS - : APR_EGENERAL; -} - -static int dbd_freetds_select(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - const char *query, int seek) -{ - apr_dbd_results_t *res; - if (sql->trans && (sql->trans->errnum != SUCCEED)) { - return 1; - } - /* the core of this is - * dbcmd(proc, query); - * dbsqlexec(proc); - * while (dbnextrow(dbproc) != NO_MORE_ROWS) { - * do things - * } - * - * Ignore seek - */ - - sql->err = freetds_exec(sql->proc, query, 1, NULL); - if (!dbd_freetds_is_success(sql->err)) { - if (sql->trans) { - sql->trans->errnum = sql->err; - } - return 1; - } - - sql->err = dbresults(sql->proc); - if (sql->err != SUCCEED) { - if (sql->trans) { - sql->trans->errnum = sql->err; - } - return 1; - } - - if (!*results) { - *results = apr_pcalloc(pool, sizeof(apr_dbd_results_t)); - } - res = *results; - res->proc = sql->proc; - res->random = seek; - res->pool = pool; - res->ntuples = dblastrow(sql->proc); - res->sz = dbnumcols(sql->proc); - apr_pool_cleanup_register(pool, sql->proc, clear_result, - apr_pool_cleanup_null); - -#if 0 - /* Now we have a result set. We need to bind to its vars */ - res->vars = apr_palloc(pool, res->sz * sizeof(freetds_cell_t*)); - for (i=1; i <= res->sz; ++i) { - freetds_cell_t *cell = &res->vars[i-1]; - cell->type = dbcoltype(sql->proc, i); - cell->len = dbcollen(sql->proc, i); - cell->data = apr_palloc(pool, cell->len); - sql->err = dbbind(sql->proc, i, /*cell->type */ STRINGBIND, cell->len, cell->data); - if (sql->err != SUCCEED) { - fprintf(stderr, "dbbind error: %d, %d, %d", i, cell->type, cell->len); - } - if ((sql->err != SUCCEED) && (sql->trans != NULL)) { - sql->trans->errnum = sql->err; - } - } -#endif - return (sql->err == SUCCEED) ? 0 : 1; -} -static const char *dbd_untaint(apr_pool_t *pool, regex_t *rx, const char *val) -{ - regmatch_t match[1]; - if (rx == NULL) { - /* no untaint expression */ - return val; - } - if (regexec(rx, val, 1, match, 0) == 0) { - return apr_pstrndup(pool, val+match[0].rm_so, - match[0].rm_eo - match[0].rm_so); - } - return ""; -} -static const char *dbd_statement(apr_pool_t *pool, - apr_dbd_prepared_t *stmt, - int nargs, const char **args) -{ - int i; - int len; - const char *var; - char *ret; - const char *p_in; - char *p_out; - char *q; - - /* compute upper bound on length (since untaint shrinks) */ - len = strlen(stmt->fmt) +1; - for (i=0; ifmt; - p_out = ret = apr_palloc(pool, len); - /* FIXME silly bug - this'll catch %%s */ - while (q = strstr(p_in, "%s"), q != NULL) { - len = q-p_in; - strncpy(p_out, p_in, len); - p_in += len; - p_out += len; - var = dbd_untaint(pool, stmt->taint[i], args[i]); - len = strlen(var); - strncpy(p_out, var, len); - p_in += 2; - p_out += len; - ++i; - } - strcpy(p_out, p_in); - return ret; -} -static int dbd_freetds_pselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, const char **values) -{ - const char *query = dbd_statement(pool, statement, - statement->nargs, values); - return dbd_freetds_select(pool, sql, results, query, seek); -} -static int dbd_freetds_pvselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nargs); - - for (i = 0; i < statement->nargs; i++) { - values[i] = va_arg(args, const char*); - } - - return dbd_freetds_pselect(pool, sql, results, statement, seek, values); -} -static int dbd_freetds_query(apr_dbd_t *sql, int *nrows, const char *query); -static int dbd_freetds_pquery(apr_pool_t *pool, apr_dbd_t *sql, - int *nrows, apr_dbd_prepared_t *statement, - const char **values) -{ - const char *query = dbd_statement(pool, statement, - statement->nargs, values); - return dbd_freetds_query(sql, nrows, query); -} -static int dbd_freetds_pvquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows, - apr_dbd_prepared_t *statement, va_list args) -{ - const char **values; - int i; - - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - - values = apr_palloc(pool, sizeof(*values) * statement->nargs); - - for (i = 0; i < statement->nargs; i++) { - values[i] = va_arg(args, const char*); - } - return dbd_freetds_pquery(pool, sql, nrows, statement, values); -} - -static int dbd_freetds_get_row(apr_pool_t *pool, apr_dbd_results_t *res, - apr_dbd_row_t **rowp, int rownum) -{ - RETCODE rv = 0; - apr_dbd_row_t *row = *rowp; - int sequential = ((rownum >= 0) && res->random) ? 0 : 1; - - if (row == NULL) { - row = apr_palloc(pool, sizeof(apr_dbd_row_t)); - *rowp = row; - row->res = res; - } - /* - else { - if ( sequential ) { - ++row->n; - } - else { - row->n = rownum; - } - } - */ - if (sequential) { - rv = dbnextrow(res->proc); - } - else { - rv = (rownum >= 0) ? dbgetrow(res->proc, rownum) : NO_MORE_ROWS; - } - switch (rv) { - case SUCCEED: return 0; - case REG_ROW: return 0; - case NO_MORE_ROWS: - apr_pool_cleanup_run(res->pool, res->proc, clear_result); - *rowp = NULL; - return -1; - case FAIL: return 1; - case BUF_FULL: return 2; /* FIXME */ - default: return 3; - } - - return 0; -} - -static const char *dbd_freetds_get_entry(const apr_dbd_row_t *row, int n) -{ - /* FIXME: support different data types */ - /* this fails - bind gets some vars but not others - return (const char*)row->res->vars[n].data; - */ - DBPROCESS* proc = row->res->proc; - BYTE *ptr = dbdata(proc, n+1); - int t = dbcoltype(proc, n+1); - int l = dbcollen(proc, n+1); - if (dbwillconvert(t, SYBCHAR)) { - dbconvert(proc, t, ptr, l, SYBCHAR, (BYTE *)row->buf, -1); - return (const char*)row->buf; - } - return (char*)ptr; -} - -static const char *dbd_freetds_error(apr_dbd_t *sql, int n) -{ - /* XXX this doesn't seem to exist in the API ??? */ - return apr_psprintf(sql->pool, "Error %d", sql->err); -} - -static int dbd_freetds_query(apr_dbd_t *sql, int *nrows, const char *query) -{ - if (sql->trans && sql->trans->errnum) { - return sql->trans->errnum; - } - *nrows = 0; - sql->err = freetds_exec(sql->proc, query, 0, nrows); - - if (sql->err != SUCCEED) { - if (sql->trans) { - sql->trans->errnum = sql->err; - } - return 1; - } - return 0; -} - -static const char *dbd_freetds_escape(apr_pool_t *pool, const char *arg, - apr_dbd_t *sql) -{ - return arg; -} - -static apr_status_t freetds_regfree(void *rx) -{ - regfree((regex_t*)rx); - return APR_SUCCESS; -} -static int recurse_args(apr_pool_t *pool, int n, const char *query, - apr_dbd_prepared_t *stmt, int offs) -{ - - /* we only support %s arguments for now */ - int ret; - char arg[256]; - regmatch_t matches[3]; - if (regexec(&dbd_freetds_find_arg, query, 3, matches, 0) != 0) { - /* No more args */ - stmt->nargs = n; - stmt->taint = apr_palloc(pool, n*sizeof(regex_t*)); - stmt->sz = apr_palloc(pool, n*sizeof(int)); - ret = 0; - } - else { - int i; - int sz = 0; - int len = matches[1].rm_eo - matches[1].rm_so - 2; - if (len > 255) { - return 9999; - } - - ret = recurse_args(pool, n+1, query+matches[0].rm_eo, - stmt, offs+matches[0].rm_eo); - - memmove(stmt->fmt + offs + matches[1].rm_so, - stmt->fmt + offs + matches[0].rm_eo-1, - strlen(stmt->fmt+offs+matches[0].rm_eo)+2); - - /* compile untaint to a regex if found */ - if (matches[1].rm_so == -1) { - stmt->taint[n] = NULL; - } - else { - strncpy(arg, query+matches[1].rm_so+1, - matches[1].rm_eo - matches[1].rm_so - 2); - arg[matches[1].rm_eo - matches[1].rm_so - 2] = '\0'; - stmt->taint[n] = apr_palloc(pool, sizeof(regex_t)); - if (regcomp(stmt->taint[n], arg, REG_ICASE|REG_EXTENDED) != 0) { - ++ret; - } - else { - apr_pool_cleanup_register(pool, stmt->taint[n], freetds_regfree, - apr_pool_cleanup_null); - } - } - - /* record length if specified */ - for (i=matches[2].rm_so; ifmt = apr_pstrdup(pool, query); - stmt->fmt = recurse_args(pool, 0, query, stmt, stmt->fmt); - - /* overestimate by a byte or two to simplify */ - len = strlen("CREATE PROC apr.") - + strlen(label) - + stmt->nargs * strlen(" @arg1 varchar(len1),") - + strlen(" AS begin ") - + strlen(stmt->fmt) - + strlen(" end "); /* extra byte for terminator */ - - pquery = apr_pcalloc(pool, len); - sprintf(pquery, "CREATE PROC apr.%s", label); - for (i=0; inargs; ++i) { - sprintf(pquery+strlen(pquery), " @arg%d varchar(%d)", i, stmt->sz[i]); - if (i < stmt->nargs-1) { - pquery[strlen(pquery)] = ','; - } - } - strcat(pquery, " AS BEGIN "); - strcat(pquery, stmt->fmt); - strcat(pquery, " END"); - - return (freetds_exec(sql->proc, pquery, 0, &i) == SUCCEED) ? 0 : 1; -#else - stmt->fmt = apr_pstrdup(pool, query); - return recurse_args(pool, 0, query, stmt, 0); -#endif - -} - -static int dbd_freetds_start_transaction(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_transaction_t **trans) -{ - int dummy; - - /* XXX handle recursive transactions here */ - - handle->err = freetds_exec(handle->proc, "BEGIN TRANSACTION", 0, &dummy); - - if (dbd_freetds_is_success(handle->err)) { - if (!*trans) { - *trans = apr_pcalloc(pool, sizeof(apr_dbd_transaction_t)); - } - (*trans)->handle = handle; - handle->trans = *trans; - return 0; - } - - return 1; -} - -static int dbd_freetds_end_transaction(apr_dbd_transaction_t *trans) -{ - int dummy; - if (trans) { - /* rollback on error or explicit rollback request */ - if (trans->errnum) { - trans->errnum = 0; - trans->handle->err = freetds_exec(trans->handle->proc, - "ROLLBACK", 0, &dummy); - } - else { - trans->handle->err = freetds_exec(trans->handle->proc, - "COMMIT", 0, &dummy); - } - trans->handle->trans = NULL; - } - return (trans->handle->err == SUCCEED) ? 0 : 1; -} - -static DBPROCESS *freetds_open(apr_pool_t *pool, const char *params, - const char **error) -{ - char *server = NULL; - DBPROCESS *process; - LOGINREC *login; - static const char *delims = " \r\n\t;|,"; - char *ptr; - char *key; - char *value; - int vlen; - int klen; - char *buf; - char *databaseName = NULL; - - /* FIXME - this uses malloc */ - /* FIXME - pass error message back to the caller in case of failure */ - login = dblogin(); - if (login == NULL) { - return NULL; - } - /* now set login properties */ - for (ptr = strchr(params, '='); ptr; ptr = strchr(ptr, '=')) { - /* don't dereference memory that may not belong to us */ - if (ptr == params) { - ++ptr; - continue; - } - for (key = ptr-1; apr_isspace(*key); --key); - klen = 0; - while (apr_isalpha(*key)) { - --key; - ++klen; - } - ++key; - for (value = ptr+1; apr_isspace(*value); ++value); - - vlen = strcspn(value, delims); - buf = apr_pstrndup(pool, value, vlen); /* NULL-terminated copy */ - - if (!strncasecmp(key, "username", klen)) { - DBSETLUSER(login, buf); - } - else if (!strncasecmp(key, "password", klen)) { - DBSETLPWD(login, buf); - } - else if (!strncasecmp(key, "appname", klen)) { - DBSETLAPP(login, buf); - } - else if (!strncasecmp(key, "dbname", klen)) { - databaseName = buf; - } - else if (!strncasecmp(key, "host", klen)) { - DBSETLHOST(login, buf); - } - else if (!strncasecmp(key, "charset", klen)) { - DBSETLCHARSET(login, buf); - } - else if (!strncasecmp(key, "lang", klen)) { - DBSETLNATLANG(login, buf); - } - else if (!strncasecmp(key, "server", klen)) { - server = buf; - } - else { - /* unknown param */ - } - ptr = value+vlen; - } - - process = dbopen(login, server); - - if (process != NULL && databaseName != NULL) - { - dbuse(process, databaseName); - } - - dbloginfree(login); - if (process == NULL) { - return NULL; - } - - return process; -} -static apr_dbd_t *dbd_freetds_open(apr_pool_t *pool, const char *params, - const char **error) -{ - apr_dbd_t *sql; - /* FIXME - pass error message back to the caller in case of failure */ - DBPROCESS *process = freetds_open(pool, params, error); - if (process == NULL) { - return NULL; - } - sql = apr_pcalloc(pool, sizeof (apr_dbd_t)); - sql->pool = pool; - sql->proc = process; - sql->params = params; - return sql; -} - -static apr_status_t dbd_freetds_close(apr_dbd_t *handle) -{ - dbclose(handle->proc); - return APR_SUCCESS; -} - -static apr_status_t dbd_freetds_check_conn(apr_pool_t *pool, - apr_dbd_t *handle) -{ - if (dbdead(handle->proc)) { - /* try again */ - dbclose(handle->proc); - handle->proc = freetds_open(handle->pool, handle->params, NULL); - if (!handle->proc || dbdead(handle->proc)) { - return APR_EGENERAL; - } - } - /* clear it, in case this is called in error handling */ - dbcancel(handle->proc); - return APR_SUCCESS; -} - -static int dbd_freetds_select_db(apr_pool_t *pool, apr_dbd_t *handle, - const char *name) -{ - /* ouch, it's declared int. But we can use APR 0/nonzero */ - return (dbuse(handle->proc, (char*)name) == SUCCEED) ? APR_SUCCESS : APR_EGENERAL; -} - -static void *dbd_freetds_native(apr_dbd_t *handle) -{ - return handle->proc; -} - -static int dbd_freetds_num_cols(apr_dbd_results_t* res) -{ - return res->sz; -} - -static int dbd_freetds_num_tuples(apr_dbd_results_t* res) -{ - if (res->random) { - return res->ntuples; - } - else { - return -1; - } -} - -static apr_status_t freetds_term(void *dummy) -{ - dbexit(); - regfree(&dbd_freetds_find_arg); - return APR_SUCCESS; -} -static int freetds_err_handler(DBPROCESS *dbproc, int severity, int dberr, - int oserr, char *dberrstr, char *oserrstr) -{ - return INT_CANCEL; /* never exit */ -} -static void dbd_freetds_init(apr_pool_t *pool) -{ - int rv = regcomp(&dbd_freetds_find_arg, - "%(\\{[^}]*\\})?([0-9]*)[A-Za-z]", REG_EXTENDED); - if (rv != 0) { - char errmsg[256]; - regerror(rv, &dbd_freetds_find_arg, errmsg, 256); - fprintf(stderr, "regcomp failed: %s\n", errmsg); - } - dbinit(); - dberrhandle(freetds_err_handler); - apr_pool_cleanup_register(pool, NULL, freetds_term, apr_pool_cleanup_null); -} - -#ifdef COMPILE_STUBS -/* get_name is the only one of these that is implemented */ -static const char *dbd_freetds_get_name(const apr_dbd_results_t *res, int n) -{ - return (const char*) dbcolname(res->proc, n+1); /* numbering starts at 1 */ -} - -/* These are stubs: transaction modes not implemented here */ -#define DBD_NOTIMPL APR_ENOTIMPL; -static int dbd_freetds_transaction_mode_get(apr_dbd_transaction_t *trans) -{ - return trans ? trans->mode : APR_DBD_TRANSACTION_COMMIT; -} - -static int dbd_freetds_transaction_mode_set(apr_dbd_transaction_t *trans, - int mode) -{ - if (trans) { - trans->mode = mode & TXN_MODE_BITS; - return trans->mode; - } - return APR_DBD_TRANSACTION_COMMIT; -} -static int dbd_freetds_pvbquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows, - apr_dbd_prepared_t *statement, va_list args) -{ - return DBD_NOTIMPL; -} -static int dbd_freetds_pbquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows, - apr_dbd_prepared_t * statement, - const void **values) -{ - return DBD_NOTIMPL; -} - -static int dbd_freetds_pvbselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, va_list args) -{ - return DBD_NOTIMPL; -} -static int dbd_freetds_pbselect(apr_pool_t *pool, apr_dbd_t *sql, - apr_dbd_results_t **results, - apr_dbd_prepared_t *statement, - int seek, const void **values) -{ - return DBD_NOTIMPL; -} -static apr_status_t dbd_freetds_datum_get(const apr_dbd_row_t *row, int n, - apr_dbd_type_e type, void *data) -{ - return APR_ENOTIMPL; -} -#endif - -APU_MODULE_DECLARE_DATA const apr_dbd_driver_t apr_dbd_freetds_driver = { - "freetds", - dbd_freetds_init, - dbd_freetds_native, - dbd_freetds_open, - dbd_freetds_check_conn, - dbd_freetds_close, - dbd_freetds_select_db, - dbd_freetds_start_transaction, - dbd_freetds_end_transaction, - dbd_freetds_query, - dbd_freetds_select, - dbd_freetds_num_cols, - dbd_freetds_num_tuples, - dbd_freetds_get_row, - dbd_freetds_get_entry, - dbd_freetds_error, - dbd_freetds_escape, - dbd_freetds_prepare, - dbd_freetds_pvquery, - dbd_freetds_pvselect, - dbd_freetds_pquery, - dbd_freetds_pselect, - /* this is only implemented to support httpd/2.2 standard usage, - * as in the original DBD implementation. Everything else is NOTIMPL. - */ -#ifdef COMPILE_STUBS - dbd_freetds_get_name, - dbd_freetds_transaction_mode_get, - dbd_freetds_transaction_mode_set, - "", - dbd_freetds_pvbquery, - dbd_freetds_pvbselect, - dbd_freetds_pbquery, - dbd_freetds_pbselect, - dbd_freetds_datum_get -#endif -}; -#endif - -#endif Index: contrib/apr-util/dbm/NWGNUdbmdb =================================================================== --- contrib/apr-util/dbm/NWGNUdbmdb +++ /dev/null @@ -1,299 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -ifndef EnvironmentDefined -include $(APR_WORK)/build/NWGNUhead.inc -endif - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# LINK_STATIC = 1 - -# for now defined here - should finally go into build/NWGNUenvironment.inc -DB_INC = $(DBSDK)/inc -DB_IMP = libdb47.imp -DB_LIB = libdb47.lib -DB_NLM = libdb47 - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include/arch/netware \ - $(APR)/include \ - $(APU)/include \ - $(APU)/include/private \ - $(APR) \ - $(DB_INC) \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - -DAPU_DSO_MODULE_BUILD \ - -DAPU_HAVE_DB=1 \ - -DAPU_HAVE_DB_VERSION=4 \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -ifdef LINK_STATIC -XLFLAGS += \ - -l $(DBSDK)/lib \ - $(EOLIST) -else -XLFLAGS += \ - -l $(DBSDK)/imp \ - $(EOLIST) -endif - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = dbmdb - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBM Berkeley DB Driver Module - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = dbmdb - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = 8192 - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(OBJDIR)\$(NLM_NAME).nlm \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(OBJDIR)/apr_dbm_berkeleydb.o \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(PRELUDE) \ - $(EOLIST) - -ifeq ($(LINK_STATIC),1) -FILES_nlm_libs += \ - $(DB_LIB) \ - $(EOLIST) -endif - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - aprlib \ - libc \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_modules += \ - $(DB_NLM) \ - $(EOLIST) -endif - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - @aprlib.imp \ - @libc.imp \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_Ximports += \ - @$(DB_IMP) \ - $(EOLIST) -endif - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - apr_dbm_type_db \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - - Index: contrib/apr-util/dbm/NWGNUdbmgdbm =================================================================== --- contrib/apr-util/dbm/NWGNUdbmgdbm +++ /dev/null @@ -1,298 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -ifndef EnvironmentDefined -include $(APR_WORK)/build/NWGNUhead.inc -endif - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# LINK_STATIC = 1 - -# for now defined here - should finally go into build/NWGNUenvironment.inc -GDBM_INC = $(GDBMSDK)/inc -GDBM_IMP = libgdbm.imp -GDBM_LIB = libgdbm.lib -GDBM_NLM = libgdbm - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include/arch/netware \ - $(APR)/include \ - $(APU)/include \ - $(APU)/include/private \ - $(APR) \ - $(GDBM_INC) \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - -DAPU_DSO_MODULE_BUILD \ - -DAPU_HAVE_GDBM=1 \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -ifdef LINK_STATIC -XLFLAGS += \ - -l $(GDBMSDK)/lib \ - $(EOLIST) -else -XLFLAGS += \ - -l $(GDBMSDK)/imp \ - $(EOLIST) -endif - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = dbmgdbm - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) GDBM Driver Module - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = dbmgdbm - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = 8192 - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(OBJDIR)\$(NLM_NAME).nlm \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(OBJDIR)/apr_dbm_gdbm.o \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(PRELUDE) \ - $(EOLIST) - -ifeq ($(LINK_STATIC),1) -FILES_nlm_libs += \ - $(GDBM_LIB) \ - $(EOLIST) -endif - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - aprlib \ - libc \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_modules += \ - $(GDBM_NLM) \ - $(EOLIST) -endif - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - @aprlib.imp \ - @libc.imp \ - $(EOLIST) - -ifneq ($(LINK_STATIC),1) -FILES_nlm_Ximports += \ - @$(GDBM_IMP) \ - $(EOLIST) -endif - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - apr_dbm_type_gdbm \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - - Index: contrib/apr-util/dbm/NWGNUmakefile =================================================================== --- contrib/apr-util/dbm/NWGNUmakefile +++ /dev/null @@ -1,251 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -include $(APR_WORK)/build/NWGNUhead.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - $(EOLIST) - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = - -# -# If this is specified, it will override VERSION value in -# $(AP_WORK)\build\NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = - - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If these are specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled -# by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(EOLIST) - -ifeq "$(APU_HAVE_DB)" "1" -TARGET_nlm += $(OBJDIR)/dbmdb.nlm $(OBJDIR)/dbmdb.nlm $(EOLIST) -endif -ifeq "$(APU_HAVE_GDBM)" "1" -TARGET_nlm += $(OBJDIR)/dbmgdbm.nlm $(OBJDIR)/dbmgdbm.nlm $(EOLIST) -endif - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(EOLIST) - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - $(EOLIST) - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override $(NWOS)\copyright.txt. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - $(EOLIST) - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples) -# -install :: nlms $(INSTDIRS) FORCE - $(call COPY,$(OBJDIR)/*.nlm,$(INSTALLBASE)) - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - - Index: contrib/apr-util/dbm/apr_dbm.c =================================================================== --- contrib/apr-util/dbm/apr_dbm.c +++ /dev/null @@ -1,307 +0,0 @@ -/* 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 "apr.h" -#include "apr_dso.h" -#include "apr_hash.h" -#include "apr_errno.h" -#include "apr_pools.h" -#include "apr_strings.h" -#define APR_WANT_MEMFUNC -#define APR_WANT_STRFUNC -#include "apr_want.h" -#include "apr_general.h" -#include "apr_atomic.h" - -#include "apu_config.h" -#include "apu.h" -#include "apu_internal.h" -#include "apu_version.h" -#include "apr_dbm_private.h" -#include "apu_select_dbm.h" -#include "apr_dbm.h" -#include "apr_dbm_private.h" - -/* ### note: the setting of DBM_VTABLE will go away once we have multiple - ### DBMs in here. - ### Well, that day is here. So, do we remove DBM_VTABLE and the old - ### API entirely? Oh, what to do. We need an APU_DEFAULT_DBM #define. - ### Sounds like a job for autoconf. */ - -#if APU_USE_DB -#define DBM_VTABLE apr_dbm_type_db -#define DBM_NAME "db" -#elif APU_USE_GDBM -#define DBM_VTABLE apr_dbm_type_gdbm -#define DBM_NAME "gdbm" -#elif APU_USE_NDBM -#define DBM_VTABLE apr_dbm_type_ndbm -#define DBM_NAME "ndbm" -#elif APU_USE_SDBM -#define DBM_VTABLE apr_dbm_type_sdbm -#define DBM_NAME "sdbm" -#else /* Not in the USE_xDBM list above */ -#error a DBM implementation was not specified -#endif - -#if APU_DSO_BUILD - -static apr_hash_t *drivers = NULL; -static apr_uint32_t initialised = 0, in_init = 1; - -static apr_status_t dbm_term(void *ptr) -{ - /* set drivers to NULL so init can work again */ - drivers = NULL; - - /* Everything else we need is handled by cleanups registered - * when we created mutexes and loaded DSOs - */ - return APR_SUCCESS; -} - -#endif /* APU_DSO_BUILD */ - -static apr_status_t dbm_open_type(apr_dbm_type_t const* * vtable, - const char *type, - apr_pool_t *pool) -{ -#if !APU_DSO_BUILD - - *vtable = NULL; - if (!strcasecmp(type, "default")) *vtable = &DBM_VTABLE; -#if APU_HAVE_DB - else if (!strcasecmp(type, "db")) *vtable = &apr_dbm_type_db; -#endif - else if (*type && !strcasecmp(type + 1, "dbm")) { -#if APU_HAVE_GDBM - if (*type == 'G' || *type == 'g') *vtable = &apr_dbm_type_gdbm; -#endif -#if APU_HAVE_NDBM - if (*type == 'N' || *type == 'n') *vtable = &apr_dbm_type_ndbm; -#endif -#if APU_HAVE_SDBM - if (*type == 'S' || *type == 's') *vtable = &apr_dbm_type_sdbm; -#endif - /* avoid empty block */ ; - } - if (*vtable) - return APR_SUCCESS; - return APR_ENOTIMPL; - -#else /* APU_DSO_BUILD */ - - char modname[32]; - char symname[34]; - apr_dso_handle_sym_t symbol; - apr_status_t rv; - int usertype = 0; - - if (!strcasecmp(type, "default")) type = DBM_NAME; - else if (!strcasecmp(type, "db")) type = "db"; - else if (*type && !strcasecmp(type + 1, "dbm")) { - if (*type == 'G' || *type == 'g') type = "gdbm"; - else if (*type == 'N' || *type == 'n') type = "ndbm"; - else if (*type == 'S' || *type == 's') type = "sdbm"; - } - else usertype = 1; - - if (apr_atomic_inc32(&initialised)) { - apr_atomic_set32(&initialised, 1); /* prevent wrap-around */ - - while (apr_atomic_read32(&in_init)) /* wait until we get fully inited */ - ; - } - else { - apr_pool_t *parent; - - /* Top level pool scope, need process-scope lifetime */ - for (parent = apr_pool_parent_get(pool); - parent && parent != pool; - parent = apr_pool_parent_get(pool)) - pool = parent; - - /* deprecate in 2.0 - permit implicit initialization */ - apu_dso_init(pool); - - drivers = apr_hash_make(pool); - apr_hash_set(drivers, "sdbm", APR_HASH_KEY_STRING, &apr_dbm_type_sdbm); - - apr_pool_cleanup_register(pool, NULL, dbm_term, - apr_pool_cleanup_null); - - apr_atomic_dec32(&in_init); - } - - rv = apu_dso_mutex_lock(); - if (rv) { - *vtable = NULL; - return rv; - } - - *vtable = apr_hash_get(drivers, type, APR_HASH_KEY_STRING); - if (*vtable) { - apu_dso_mutex_unlock(); - return APR_SUCCESS; - } - - /* The driver DSO must have exactly the same lifetime as the - * drivers hash table; ignore the passed-in pool */ - pool = apr_hash_pool_get(drivers); - -#if defined(NETWARE) - apr_snprintf(modname, sizeof(modname), "dbm%s.nlm", type); -#elif defined(WIN32) || defined (__CYGWIN__) - apr_snprintf(modname, sizeof(modname), - "apr_dbm_%s-" APU_STRINGIFY(APU_MAJOR_VERSION) ".dll", type); -#else - apr_snprintf(modname, sizeof(modname), - "apr_dbm_%s-" APU_STRINGIFY(APU_MAJOR_VERSION) ".so", type); -#endif - apr_snprintf(symname, sizeof(symname), "apr_dbm_type_%s", type); - - rv = apu_dso_load(NULL, &symbol, modname, symname, pool); - if (rv == APR_SUCCESS || rv == APR_EINIT) { /* previously loaded?!? */ - *vtable = symbol; - if (usertype) - type = apr_pstrdup(pool, type); - apr_hash_set(drivers, type, APR_HASH_KEY_STRING, *vtable); - rv = APR_SUCCESS; - } - else - *vtable = NULL; - - apu_dso_mutex_unlock(); - return rv; - -#endif /* APU_DSO_BUILD */ -} - -APU_DECLARE(apr_status_t) apr_dbm_open_ex(apr_dbm_t **pdb, const char *type, - const char *pathname, - apr_int32_t mode, - apr_fileperms_t perm, - apr_pool_t *pool) -{ - apr_dbm_type_t const* vtable = NULL; - apr_status_t rv = dbm_open_type(&vtable, type, pool); - - if (rv == APR_SUCCESS) { - rv = (vtable->open)(pdb, pathname, mode, perm, pool); - } - return rv; -} - -APU_DECLARE(apr_status_t) apr_dbm_open(apr_dbm_t **pdb, const char *pathname, - apr_int32_t mode, apr_fileperms_t perm, - apr_pool_t *pool) -{ - return apr_dbm_open_ex(pdb, DBM_NAME, pathname, mode, perm, pool); -} - -APU_DECLARE(void) apr_dbm_close(apr_dbm_t *dbm) -{ - (*dbm->type->close)(dbm); -} - -APU_DECLARE(apr_status_t) apr_dbm_fetch(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t *pvalue) -{ - return (*dbm->type->fetch)(dbm, key, pvalue); -} - -APU_DECLARE(apr_status_t) apr_dbm_store(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t value) -{ - return (*dbm->type->store)(dbm, key, value); -} - -APU_DECLARE(apr_status_t) apr_dbm_delete(apr_dbm_t *dbm, apr_datum_t key) -{ - return (*dbm->type->del)(dbm, key); -} - -APU_DECLARE(int) apr_dbm_exists(apr_dbm_t *dbm, apr_datum_t key) -{ - return (*dbm->type->exists)(dbm, key); -} - -APU_DECLARE(apr_status_t) apr_dbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - return (*dbm->type->firstkey)(dbm, pkey); -} - -APU_DECLARE(apr_status_t) apr_dbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - return (*dbm->type->nextkey)(dbm, pkey); -} - -APU_DECLARE(void) apr_dbm_freedatum(apr_dbm_t *dbm, apr_datum_t data) -{ - (*dbm->type->freedatum)(dbm, data); -} - -APU_DECLARE(char *) apr_dbm_geterror(apr_dbm_t *dbm, int *errcode, - char *errbuf, apr_size_t errbufsize) -{ - if (errcode != NULL) - *errcode = dbm->errcode; - - /* assert: errbufsize > 0 */ - - if (dbm->errmsg == NULL) - *errbuf = '\0'; - else - (void) apr_cpystrn(errbuf, dbm->errmsg, errbufsize); - return errbuf; -} - -APU_DECLARE(apr_status_t) apr_dbm_get_usednames_ex(apr_pool_t *p, - const char *type, - const char *pathname, - const char **used1, - const char **used2) -{ - apr_dbm_type_t const* vtable; - apr_status_t rv = dbm_open_type(&vtable, type, p); - - if (rv == APR_SUCCESS) { - (vtable->getusednames)(p, pathname, used1, used2); - return APR_SUCCESS; - } - return rv; -} - -APU_DECLARE(void) apr_dbm_get_usednames(apr_pool_t *p, - const char *pathname, - const char **used1, - const char **used2) -{ - apr_dbm_get_usednames_ex(p, DBM_NAME, pathname, used1, used2); -} - -/* Most DBM libraries take a POSIX mode for creating files. Don't trust - * the mode_t type, some platforms may not support it, int is safe. - */ -APU_DECLARE(int) apr_posix_perms2mode(apr_fileperms_t perm) -{ - int mode = 0; - - mode |= 0700 & (perm >> 2); /* User is off-by-2 bits */ - mode |= 0070 & (perm >> 1); /* Group is off-by-1 bit */ - mode |= 0007 & (perm); /* World maps 1 for 1 */ - return mode; -} Index: contrib/apr-util/dbm/apr_dbm_berkeleydb.c =================================================================== --- contrib/apr-util/dbm/apr_dbm_berkeleydb.c +++ /dev/null @@ -1,404 +0,0 @@ -/* 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 "apr_strings.h" -#define APR_WANT_MEMFUNC -#include "apr_want.h" - -#define APU_WANT_DB -#include "apu_want.h" - -#if APR_HAVE_STDLIB_H -#include /* for abort() */ -#endif - -#include "apu_config.h" -#include "apu.h" - -#if APU_HAVE_DB -#include "apr_dbm_private.h" - -/* - * We pick up all varieties of Berkeley DB through db.h (included through - * apu_select_dbm.h). This code has been compiled/tested against DB1, - * DB_185, DB2, DB3, and DB4. - */ - -#if defined(DB_VERSION_MAJOR) && (DB_VERSION_MAJOR >= 4) -/* We will treat anything greater than 4.1 as DB4. - * We can treat 4.0 as DB3. - */ -#if DB_VERSION_MAJOR > 4 || (defined(DB_VERSION_MINOR) && (DB_VERSION_MINOR >= 1)) -#define DB_VER 4 -#elif DB_VERSION_MAJOR == 4 -#define DB_VER 3 -#endif -#elif defined(DB_VERSION_MAJOR) && (DB_VERSION_MAJOR == 3) -#define DB_VER 3 -#elif defined(DB_VERSION_MAJOR) && (DB_VERSION_MAJOR == 2) -#define DB_VER 2 -#else -#define DB_VER 1 -#endif - -typedef struct { - DB *bdb; -#if DB_VER != 1 - DBC *curs; -#endif -} real_file_t; - - -#if DB_VER == 1 -#define TXN_ARG -#else -#define TXN_ARG NULL, -#endif - -#define GET_BDB(f) (((real_file_t *)(f))->bdb) - -#define do_fetch(bdb, k, v) ((*(bdb)->get)(bdb, TXN_ARG &(k), &(v), 0)) - -#if DB_VER == 1 -#include -#define APR_DBM_DBMODE_RO O_RDONLY -#define APR_DBM_DBMODE_RW O_RDWR -#define APR_DBM_DBMODE_RWCREATE (O_CREAT | O_RDWR) -#define APR_DBM_DBMODE_RWTRUNC (O_CREAT | O_RDWR | O_TRUNC) -#else -#define APR_DBM_DBMODE_RO DB_RDONLY -#define APR_DBM_DBMODE_RW 0 -#define APR_DBM_DBMODE_RWCREATE DB_CREATE -#define APR_DBM_DBMODE_RWTRUNC DB_TRUNCATE -#endif /* DBVER == 1 */ - -/* -------------------------------------------------------------------------- -** -** UTILITY FUNCTIONS -*/ - -/* map a DB error to an apr_status_t */ -static apr_status_t db2s(int dberr) -{ - if (dberr != 0) { - /* ### need to fix this */ - return APR_OS_START_USEERR + dberr; - } - - return APR_SUCCESS; -} - - -static apr_status_t set_error(apr_dbm_t *dbm, apr_status_t dbm_said) -{ - apr_status_t rv = APR_SUCCESS; - - /* ### ignore whatever the DBM said (dbm_said); ask it explicitly */ - - if (dbm_said == APR_SUCCESS) { - dbm->errcode = 0; - dbm->errmsg = NULL; - } - else { - /* ### need to fix. dberr was tossed in db2s(). */ - /* ### use db_strerror() */ - dbm->errcode = dbm_said; -#if DB_VER == 1 || DB_VER == 2 - dbm->errmsg = NULL; -#else - dbm->errmsg = db_strerror(dbm_said - APR_OS_START_USEERR); -#endif - rv = dbm_said; - } - - return rv; -} - -/* -------------------------------------------------------------------------- -** -** DEFINE THE VTABLE FUNCTIONS FOR BERKELEY DB -** -** ### we may need three sets of these: db1, db2, db3 -*/ - -static apr_status_t vt_db_open(apr_dbm_t **pdb, const char *pathname, - apr_int32_t mode, apr_fileperms_t perm, - apr_pool_t *pool) -{ - real_file_t file; - int dbmode; - - *pdb = NULL; - - switch (mode) { - case APR_DBM_READONLY: - dbmode = APR_DBM_DBMODE_RO; - break; - case APR_DBM_READWRITE: - dbmode = APR_DBM_DBMODE_RW; - break; - case APR_DBM_RWCREATE: - dbmode = APR_DBM_DBMODE_RWCREATE; - break; - case APR_DBM_RWTRUNC: - dbmode = APR_DBM_DBMODE_RWTRUNC; - break; - default: - return APR_EINVAL; - } - - { - int dberr; - -#if DB_VER >= 3 - if ((dberr = db_create(&file.bdb, NULL, 0)) == 0) { - if ((dberr = (*file.bdb->open)(file.bdb, -#if DB_VER == 4 - NULL, -#endif - pathname, NULL, - DB_HASH, dbmode, - apr_posix_perms2mode(perm))) != 0) { - /* close the DB handler */ - (void) (*file.bdb->close)(file.bdb, 0); - } - } - file.curs = NULL; -#elif DB_VER == 2 - dberr = db_open(pathname, DB_HASH, dbmode, apr_posix_perms2mode(perm), - NULL, NULL, &file.bdb); - file.curs = NULL; -#else - file.bdb = dbopen(pathname, dbmode, apr_posix_perms2mode(perm), - DB_HASH, NULL); - if (file.bdb == NULL) - return APR_EGENERAL; /* ### need a better error */ - dberr = 0; -#endif - if (dberr != 0) - return db2s(dberr); - } - - /* we have an open database... return it */ - *pdb = apr_pcalloc(pool, sizeof(**pdb)); - (*pdb)->pool = pool; - (*pdb)->type = &apr_dbm_type_db; - (*pdb)->file = apr_pmemdup(pool, &file, sizeof(file)); - - /* ### register a cleanup to close the DBM? */ - - return APR_SUCCESS; -} - -static void vt_db_close(apr_dbm_t *dbm) -{ - (*GET_BDB(dbm->file)->close)(GET_BDB(dbm->file) -#if DB_VER != 1 - , 0 -#endif - ); -} - -static apr_status_t vt_db_fetch(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t * pvalue) -{ - DBT ckey = { 0 }; - DBT rd = { 0 }; - int dberr; - - ckey.data = key.dptr; - ckey.size = key.dsize; - - dberr = do_fetch(GET_BDB(dbm->file), ckey, rd); - - /* "not found" is not an error. return zero'd value. */ - if (dberr == -#if DB_VER == 1 - RET_SPECIAL -#else - DB_NOTFOUND -#endif - ) { - memset(&rd, 0, sizeof(rd)); - dberr = 0; - } - - pvalue->dptr = rd.data; - pvalue->dsize = rd.size; - - /* store the error info into DBM, and return a status code. Also, note - that *pvalue should have been cleared on error. */ - return set_error(dbm, db2s(dberr)); -} - -static apr_status_t vt_db_store(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t value) -{ - apr_status_t rv; - DBT ckey = { 0 }; - DBT cvalue = { 0 }; - - ckey.data = key.dptr; - ckey.size = key.dsize; - - cvalue.data = value.dptr; - cvalue.size = value.dsize; - - rv = db2s((*GET_BDB(dbm->file)->put)(GET_BDB(dbm->file), - TXN_ARG - &ckey, - &cvalue, - 0)); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, rv); -} - -static apr_status_t vt_db_del(apr_dbm_t *dbm, apr_datum_t key) -{ - apr_status_t rv; - DBT ckey = { 0 }; - - ckey.data = key.dptr; - ckey.size = key.dsize; - - rv = db2s((*GET_BDB(dbm->file)->del)(GET_BDB(dbm->file), - TXN_ARG - &ckey, - 0)); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, rv); -} - -static int vt_db_exists(apr_dbm_t *dbm, apr_datum_t key) -{ - DBT ckey = { 0 }; /* converted key */ - DBT data = { 0 }; - int dberr; - - ckey.data = key.dptr; - ckey.size = key.dsize; - - dberr = do_fetch(GET_BDB(dbm->file), ckey, data); - - /* note: the result data is "loaned" to us; we don't need to free it */ - - /* DB returns DB_NOTFOUND if it doesn't exist. but we want to say - that *any* error means it doesn't exist. */ - return dberr == 0; -} - -static apr_status_t vt_db_firstkey(apr_dbm_t *dbm, apr_datum_t * pkey) -{ - real_file_t *f = dbm->file; - DBT first = { 0 }; - DBT data = { 0 }; - int dberr; - -#if DB_VER == 1 - dberr = (*f->bdb->seq)(f->bdb, &first, &data, R_FIRST); -#else - if ((dberr = (*f->bdb->cursor)(f->bdb, NULL, &f->curs -#if DB_VER >= 3 || ((DB_VERSION_MAJOR == 2) && (DB_VERSION_MINOR > 5)) - , 0 -#endif - )) == 0) { - dberr = (*f->curs->c_get)(f->curs, &first, &data, DB_FIRST); - if (dberr == DB_NOTFOUND) { - memset(&first, 0, sizeof(first)); - (*f->curs->c_close)(f->curs); - f->curs = NULL; - dberr = 0; - } - } -#endif - - pkey->dptr = first.data; - pkey->dsize = first.size; - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, db2s(dberr)); -} - -static apr_status_t vt_db_nextkey(apr_dbm_t *dbm, apr_datum_t * pkey) -{ - real_file_t *f = dbm->file; - DBT ckey = { 0 }; - DBT data = { 0 }; - int dberr; - - ckey.data = pkey->dptr; - ckey.size = pkey->dsize; - -#if DB_VER == 1 - dberr = (*f->bdb->seq)(f->bdb, &ckey, &data, R_NEXT); - if (dberr == RET_SPECIAL) { - dberr = 0; - ckey.data = NULL; - ckey.size = 0; - } -#else - if (f->curs == NULL) - return APR_EINVAL; - - dberr = (*f->curs->c_get)(f->curs, &ckey, &data, DB_NEXT); - if (dberr == DB_NOTFOUND) { - (*f->curs->c_close)(f->curs); - f->curs = NULL; - dberr = 0; - ckey.data = NULL; - ckey.size = 0; - } -#endif - - pkey->dptr = ckey.data; - pkey->dsize = ckey.size; - - /* store any error info into DBM, and return a status code. */ - /* ### or use db2s(dberr) instead of APR_SUCCESS? */ - return set_error(dbm, APR_SUCCESS); -} - -static void vt_db_freedatum(apr_dbm_t *dbm, apr_datum_t data) -{ - /* nothing to do */ -} - -static void vt_db_usednames(apr_pool_t *pool, const char *pathname, - const char **used1, const char **used2) -{ - *used1 = apr_pstrdup(pool, pathname); - *used2 = NULL; -} - - -APU_MODULE_DECLARE_DATA const apr_dbm_type_t apr_dbm_type_db = { - "db", - - vt_db_open, - vt_db_close, - vt_db_fetch, - vt_db_store, - vt_db_del, - vt_db_exists, - vt_db_firstkey, - vt_db_nextkey, - vt_db_freedatum, - vt_db_usednames -}; - -#endif /* APU_HAVE_DB */ Index: contrib/apr-util/dbm/apr_dbm_gdbm.c =================================================================== --- contrib/apr-util/dbm/apr_dbm_gdbm.c +++ /dev/null @@ -1,255 +0,0 @@ -/* 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_config.h" -#include "apu.h" -#include "apr_strings.h" - -#if APR_HAVE_STDLIB_H -#include /* for free() */ -#endif - -#if APU_HAVE_GDBM -#include "apr_dbm_private.h" - -#include - -#define APR_DBM_DBMODE_RO GDBM_READER -#define APR_DBM_DBMODE_RW GDBM_WRITER -#define APR_DBM_DBMODE_RWCREATE GDBM_WRCREAT -#define APR_DBM_DBMODE_RWTRUNC GDBM_NEWDB - -/* map a GDBM error to an apr_status_t */ -static apr_status_t g2s(int gerr) -{ - if (gerr == -1) { - /* ### need to fix this */ - return APR_EGENERAL; - } - - return APR_SUCCESS; -} - -static apr_status_t datum_cleanup(void *dptr) -{ - if (dptr) - free(dptr); - - return APR_SUCCESS; -} - -static apr_status_t set_error(apr_dbm_t *dbm, apr_status_t dbm_said) -{ - apr_status_t rv = APR_SUCCESS; - - /* ### ignore whatever the DBM said (dbm_said); ask it explicitly */ - - if ((dbm->errcode = gdbm_errno) == GDBM_NO_ERROR) { - dbm->errmsg = NULL; - } - else { - dbm->errmsg = gdbm_strerror(gdbm_errno); - rv = APR_EGENERAL; /* ### need something better */ - } - - /* captured it. clear it now. */ - gdbm_errno = GDBM_NO_ERROR; - - return rv; -} - -/* -------------------------------------------------------------------------- -** -** DEFINE THE VTABLE FUNCTIONS FOR GDBM -*/ - -static apr_status_t vt_gdbm_open(apr_dbm_t **pdb, const char *pathname, - apr_int32_t mode, apr_fileperms_t perm, - apr_pool_t *pool) -{ - GDBM_FILE file; - int dbmode; - - *pdb = NULL; - - switch (mode) { - case APR_DBM_READONLY: - dbmode = APR_DBM_DBMODE_RO; - break; - case APR_DBM_READWRITE: - dbmode = APR_DBM_DBMODE_RW; - break; - case APR_DBM_RWCREATE: - dbmode = APR_DBM_DBMODE_RWCREATE; - break; - case APR_DBM_RWTRUNC: - dbmode = APR_DBM_DBMODE_RWTRUNC; - break; - default: - return APR_EINVAL; - } - - /* Note: stupid cast to get rid of "const" on the pathname */ - file = gdbm_open((char *) pathname, 0, dbmode, apr_posix_perms2mode(perm), - NULL); - - if (file == NULL) - return APR_EGENERAL; /* ### need a better error */ - - /* we have an open database... return it */ - *pdb = apr_pcalloc(pool, sizeof(**pdb)); - (*pdb)->pool = pool; - (*pdb)->type = &apr_dbm_type_gdbm; - (*pdb)->file = file; - - /* ### register a cleanup to close the DBM? */ - - return APR_SUCCESS; -} - -static void vt_gdbm_close(apr_dbm_t *dbm) -{ - gdbm_close(dbm->file); -} - -static apr_status_t vt_gdbm_fetch(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t *pvalue) -{ - datum kd, rd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - rd = gdbm_fetch(dbm->file, kd); - - pvalue->dptr = rd.dptr; - pvalue->dsize = rd.dsize; - - if (pvalue->dptr) - apr_pool_cleanup_register(dbm->pool, pvalue->dptr, datum_cleanup, - apr_pool_cleanup_null); - - /* store the error info into DBM, and return a status code. Also, note - that *pvalue should have been cleared on error. */ - return set_error(dbm, APR_SUCCESS); -} - -static apr_status_t vt_gdbm_store(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t value) -{ - int rc; - datum kd, vd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - vd.dptr = value.dptr; - vd.dsize = value.dsize; - - rc = gdbm_store(dbm->file, kd, vd, GDBM_REPLACE); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, g2s(rc)); -} - -static apr_status_t vt_gdbm_del(apr_dbm_t *dbm, apr_datum_t key) -{ - int rc; - datum kd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - rc = gdbm_delete(dbm->file, kd); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, g2s(rc)); -} - -static int vt_gdbm_exists(apr_dbm_t *dbm, apr_datum_t key) -{ - datum kd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - return gdbm_exists(dbm->file, kd) != 0; -} - -static apr_status_t vt_gdbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - datum rd; - - rd = gdbm_firstkey(dbm->file); - - pkey->dptr = rd.dptr; - pkey->dsize = rd.dsize; - - if (pkey->dptr) - apr_pool_cleanup_register(dbm->pool, pkey->dptr, datum_cleanup, - apr_pool_cleanup_null); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, APR_SUCCESS); -} - -static apr_status_t vt_gdbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - datum kd, rd; - - kd.dptr = pkey->dptr; - kd.dsize = pkey->dsize; - - rd = gdbm_nextkey(dbm->file, kd); - - pkey->dptr = rd.dptr; - pkey->dsize = rd.dsize; - - if (pkey->dptr) - apr_pool_cleanup_register(dbm->pool, pkey->dptr, datum_cleanup, - apr_pool_cleanup_null); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, APR_SUCCESS); -} - -static void vt_gdbm_freedatum(apr_dbm_t *dbm, apr_datum_t data) -{ - (void) apr_pool_cleanup_run(dbm->pool, data.dptr, datum_cleanup); -} - -static void vt_gdbm_usednames(apr_pool_t *pool, const char *pathname, - const char **used1, const char **used2) -{ - *used1 = apr_pstrdup(pool, pathname); - *used2 = NULL; -} - -APU_MODULE_DECLARE_DATA const apr_dbm_type_t apr_dbm_type_gdbm = { - "gdbm", - vt_gdbm_open, - vt_gdbm_close, - vt_gdbm_fetch, - vt_gdbm_store, - vt_gdbm_del, - vt_gdbm_exists, - vt_gdbm_firstkey, - vt_gdbm_nextkey, - vt_gdbm_freedatum, - vt_gdbm_usednames -}; - -#endif /* APU_HAVE_GDBM */ Index: contrib/apr-util/dbm/apr_dbm_ndbm.c =================================================================== --- contrib/apr-util/dbm/apr_dbm_ndbm.c +++ /dev/null @@ -1,238 +0,0 @@ -/* 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 "apr_strings.h" - -#if APR_HAVE_STDLIB_H -#include /* for free() */ -#endif - -#include "apu_config.h" -#include "apu.h" - -#if APU_HAVE_NDBM -#include "apr_dbm_private.h" - -#include -#include -#include -#include - -#define APR_DBM_DBMODE_RO O_RDONLY -#define APR_DBM_DBMODE_RW O_RDWR -#define APR_DBM_DBMODE_RWCREATE (O_RDWR|O_CREAT) -#define APR_DBM_DBMODE_RWTRUNC (O_RDWR|O_CREAT|O_TRUNC) - -/* map a NDBM error to an apr_status_t */ -static apr_status_t ndbm2s(int ndbmerr) -{ - if (ndbmerr == -1) { - /* ### need to fix this */ - return APR_EGENERAL; - } - - return APR_SUCCESS; -} - -static apr_status_t set_error(apr_dbm_t *dbm, apr_status_t dbm_said) -{ - apr_status_t rv = APR_SUCCESS; - - /* ### ignore whatever the DBM said (dbm_said); ask it explicitly */ - - dbm->errmsg = NULL; - if (dbm_error((DBM*)dbm->file)) { - dbm->errmsg = NULL; - rv = APR_EGENERAL; /* ### need something better */ - } - - /* captured it. clear it now. */ - dbm_clearerr((DBM*)dbm->file); - - return rv; -} - -/* -------------------------------------------------------------------------- -** -** DEFINE THE VTABLE FUNCTIONS FOR NDBM -*/ - -static apr_status_t vt_ndbm_open(apr_dbm_t **pdb, const char *pathname, - apr_int32_t mode, apr_fileperms_t perm, - apr_pool_t *pool) -{ - DBM *file; - int dbmode; - - *pdb = NULL; - - switch (mode) { - case APR_DBM_READONLY: - dbmode = APR_DBM_DBMODE_RO; - break; - case APR_DBM_READWRITE: - dbmode = APR_DBM_DBMODE_RW; - break; - case APR_DBM_RWCREATE: - dbmode = APR_DBM_DBMODE_RWCREATE; - break; - case APR_DBM_RWTRUNC: - dbmode = APR_DBM_DBMODE_RWTRUNC; - break; - default: - return APR_EINVAL; - } - - { - file = dbm_open(pathname, dbmode, apr_posix_perms2mode(perm)); - if (file == NULL) - return APR_EGENERAL; /* ### need a better error */ - } - - /* we have an open database... return it */ - *pdb = apr_pcalloc(pool, sizeof(**pdb)); - (*pdb)->pool = pool; - (*pdb)->type = &apr_dbm_type_ndbm; - (*pdb)->file = file; - - /* ### register a cleanup to close the DBM? */ - - return APR_SUCCESS; -} - -static void vt_ndbm_close(apr_dbm_t *dbm) -{ - dbm_close(dbm->file); -} - -static apr_status_t vt_ndbm_fetch(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t *pvalue) -{ - datum kd, rd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - rd = dbm_fetch(dbm->file, kd); - - pvalue->dptr = rd.dptr; - pvalue->dsize = rd.dsize; - - /* store the error info into DBM, and return a status code. Also, note - that *pvalue should have been cleared on error. */ - return set_error(dbm, APR_SUCCESS); -} - -static apr_status_t vt_ndbm_store(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t value) -{ - int rc; - datum kd, vd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - vd.dptr = value.dptr; - vd.dsize = value.dsize; - - rc = dbm_store(dbm->file, kd, vd, DBM_REPLACE); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, ndbm2s(rc)); -} - -static apr_status_t vt_ndbm_del(apr_dbm_t *dbm, apr_datum_t key) -{ - int rc; - datum kd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - rc = dbm_delete(dbm->file, kd); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, ndbm2s(rc)); -} - -static int vt_ndbm_exists(apr_dbm_t *dbm, apr_datum_t key) -{ - datum kd, rd; - - kd.dptr = key.dptr; - kd.dsize = key.dsize; - - rd = dbm_fetch(dbm->file, kd); - - return rd.dptr != NULL; -} - -static apr_status_t vt_ndbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - datum rd; - - rd = dbm_firstkey(dbm->file); - - pkey->dptr = rd.dptr; - pkey->dsize = rd.dsize; - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, APR_SUCCESS); -} - -static apr_status_t vt_ndbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - datum kd, rd; - - kd.dptr = pkey->dptr; - kd.dsize = pkey->dsize; - - rd = dbm_nextkey(dbm->file); - - pkey->dptr = rd.dptr; - pkey->dsize = rd.dsize; - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, APR_SUCCESS); -} - -static void vt_ndbm_freedatum(apr_dbm_t *dbm, apr_datum_t data) -{ - /* nothing to do */ -} - -static void vt_ndbm_usednames(apr_pool_t *pool, const char *pathname, - const char **used1, const char **used2) -{ - *used1 = apr_pstrdup(pool, pathname); - *used2 = NULL; -} - -APU_MODULE_DECLARE_DATA const apr_dbm_type_t apr_dbm_type_ndbm = { - "ndbm", - vt_ndbm_open, - vt_ndbm_close, - vt_ndbm_fetch, - vt_ndbm_store, - vt_ndbm_del, - vt_ndbm_exists, - vt_ndbm_firstkey, - vt_ndbm_nextkey, - vt_ndbm_freedatum, - vt_ndbm_usednames -}; - -#endif /* APU_HAVE_NDBM */ Index: contrib/apr-util/dbm/apr_dbm_sdbm.c =================================================================== --- contrib/apr-util/dbm/apr_dbm_sdbm.c +++ /dev/null @@ -1,223 +0,0 @@ -/* 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 "apr_strings.h" -#define APR_WANT_MEMFUNC -#define APR_WANT_STRFUNC -#include "apr_want.h" - -#include "apu_config.h" -#include "apu.h" - -#if APU_HAVE_SDBM - -#include "apr_dbm_private.h" -#include "apr_sdbm.h" - -#define APR_DBM_DBMODE_RO (APR_FOPEN_READ | APR_FOPEN_BUFFERED) -#define APR_DBM_DBMODE_RW (APR_FOPEN_READ | APR_FOPEN_WRITE) -#define APR_DBM_DBMODE_RWCREATE (APR_FOPEN_READ | APR_FOPEN_WRITE | APR_FOPEN_CREATE) -#define APR_DBM_DBMODE_RWTRUNC (APR_FOPEN_READ | APR_FOPEN_WRITE | APR_FOPEN_CREATE | \ - APR_FOPEN_TRUNCATE) - -static apr_status_t set_error(apr_dbm_t *dbm, apr_status_t dbm_said) -{ - dbm->errcode = dbm_said; - - if (dbm_said != APR_SUCCESS) { - dbm->errmsg = apr_psprintf(dbm->pool, "%pm", &dbm_said); - } else { - dbm->errmsg = NULL; - } - - return dbm_said; -} - -/* -------------------------------------------------------------------------- -** -** DEFINE THE VTABLE FUNCTIONS FOR SDBM -*/ - -static apr_status_t vt_sdbm_open(apr_dbm_t **pdb, const char *pathname, - apr_int32_t mode, apr_fileperms_t perm, - apr_pool_t *pool) -{ - apr_sdbm_t *file; - int dbmode; - - *pdb = NULL; - - switch (mode) { - case APR_DBM_READONLY: - dbmode = APR_DBM_DBMODE_RO; - break; - case APR_DBM_READWRITE: - dbmode = APR_DBM_DBMODE_RW; - break; - case APR_DBM_RWCREATE: - dbmode = APR_DBM_DBMODE_RWCREATE; - break; - case APR_DBM_RWTRUNC: - dbmode = APR_DBM_DBMODE_RWTRUNC; - break; - default: - return APR_EINVAL; - } - - { - apr_status_t rv; - - rv = apr_sdbm_open(&file, pathname, dbmode, perm, pool); - if (rv != APR_SUCCESS) - return rv; - } - - /* we have an open database... return it */ - *pdb = apr_pcalloc(pool, sizeof(**pdb)); - (*pdb)->pool = pool; - (*pdb)->type = &apr_dbm_type_sdbm; - (*pdb)->file = file; - - /* ### register a cleanup to close the DBM? */ - - return APR_SUCCESS; -} - -static void vt_sdbm_close(apr_dbm_t *dbm) -{ - apr_sdbm_close(dbm->file); -} - -static apr_status_t vt_sdbm_fetch(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t *pvalue) -{ - apr_status_t rv; - apr_sdbm_datum_t kd, rd; - - kd.dptr = key.dptr; - kd.dsize = (int)key.dsize; - - rv = apr_sdbm_fetch(dbm->file, &rd, kd); - - pvalue->dptr = rd.dptr; - pvalue->dsize = rd.dsize; - - /* store the error info into DBM, and return a status code. Also, note - that *pvalue should have been cleared on error. */ - return set_error(dbm, rv); -} - -static apr_status_t vt_sdbm_store(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t value) -{ - apr_status_t rv; - apr_sdbm_datum_t kd, vd; - - kd.dptr = key.dptr; - kd.dsize = (int)key.dsize; - - vd.dptr = value.dptr; - vd.dsize = (int)value.dsize; - - rv = apr_sdbm_store(dbm->file, kd, vd, APR_SDBM_REPLACE); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, rv); -} - -static apr_status_t vt_sdbm_del(apr_dbm_t *dbm, apr_datum_t key) -{ - apr_status_t rv; - apr_sdbm_datum_t kd; - - kd.dptr = key.dptr; - kd.dsize = (int)key.dsize; - - rv = apr_sdbm_delete(dbm->file, kd); - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, rv); -} - -static int vt_sdbm_exists(apr_dbm_t *dbm, apr_datum_t key) -{ - int exists; - apr_sdbm_datum_t vd, kd; - - kd.dptr = key.dptr; - kd.dsize = (int)key.dsize; - - if (apr_sdbm_fetch(dbm->file, &vd, kd) != APR_SUCCESS) - exists = 0; - else - exists = vd.dptr != NULL; - - return exists; -} - -static apr_status_t vt_sdbm_firstkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - apr_status_t rv; - apr_sdbm_datum_t rd; - - rv = apr_sdbm_firstkey(dbm->file, &rd); - - pkey->dptr = rd.dptr; - pkey->dsize = rd.dsize; - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, rv); -} - -static apr_status_t vt_sdbm_nextkey(apr_dbm_t *dbm, apr_datum_t *pkey) -{ - apr_sdbm_datum_t rd; - - (void)apr_sdbm_nextkey(dbm->file, &rd); - - pkey->dptr = rd.dptr; - pkey->dsize = rd.dsize; - - /* store any error info into DBM, and return a status code. */ - return set_error(dbm, APR_SUCCESS); -} - -static void vt_sdbm_freedatum(apr_dbm_t *dbm, apr_datum_t data) -{ -} - -static void vt_sdbm_usednames(apr_pool_t *pool, const char *pathname, - const char **used1, const char **used2) -{ - *used1 = apr_pstrcat(pool, pathname, APR_SDBM_DIRFEXT, NULL); - *used2 = apr_pstrcat(pool, pathname, APR_SDBM_PAGFEXT, NULL); -} - -APU_MODULE_DECLARE_DATA const apr_dbm_type_t apr_dbm_type_sdbm = { - "sdbm", - vt_sdbm_open, - vt_sdbm_close, - vt_sdbm_fetch, - vt_sdbm_store, - vt_sdbm_del, - vt_sdbm_exists, - vt_sdbm_firstkey, - vt_sdbm_nextkey, - vt_sdbm_freedatum, - vt_sdbm_usednames -}; - -#endif /* APU_HAVE_SDBM */ Index: contrib/apr-util/dbm/sdbm/sdbm.c =================================================================== --- contrib/apr-util/dbm/sdbm/sdbm.c +++ /dev/null @@ -1,584 +0,0 @@ -/* 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-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). - * author: oz@nexus.yorku.ca - * ex-public domain, ported to APR for Apache 2 - * core routines - */ - -#include "apr.h" -#include "apr_file_io.h" -#include "apr_strings.h" -#include "apr_errno.h" -#include "apr_sdbm.h" - -#include "sdbm_tune.h" -#include "sdbm_pair.h" -#include "sdbm_private.h" - -#include /* for memset() */ -#include /* for malloc() and free() */ - -/* - * forward - */ -static int getdbit (apr_sdbm_t *, long); -static apr_status_t setdbit(apr_sdbm_t *, long); -static apr_status_t getpage(apr_sdbm_t *db, long, int, int); -static apr_status_t getnext(apr_sdbm_datum_t *key, apr_sdbm_t *db); -static apr_status_t makroom(apr_sdbm_t *, long, int); - -/* - * useful macros - */ -#define bad(x) ((x).dptr == NULL || (x).dsize <= 0) -#define exhash(item) sdbm_hash((item).dptr, (item).dsize) - -#define OFF_PAG(off) (apr_off_t) (off) * PBLKSIZ -#define OFF_DIR(off) (apr_off_t) (off) * DBLKSIZ - -static const long masks[] = { - 000000000000, 000000000001, 000000000003, 000000000007, - 000000000017, 000000000037, 000000000077, 000000000177, - 000000000377, 000000000777, 000000001777, 000000003777, - 000000007777, 000000017777, 000000037777, 000000077777, - 000000177777, 000000377777, 000000777777, 000001777777, - 000003777777, 000007777777, 000017777777, 000037777777, - 000077777777, 000177777777, 000377777777, 000777777777, - 001777777777, 003777777777, 007777777777, 017777777777 -}; - -const apr_sdbm_datum_t sdbm_nullitem = { NULL, 0 }; - -static apr_status_t database_cleanup(void *data) -{ - apr_sdbm_t *db = data; - - /* - * Can't rely on apr_sdbm_unlock, since it will merely - * decrement the refcnt if several locks are held. - */ - if (db->flags & (SDBM_SHARED_LOCK | SDBM_EXCLUSIVE_LOCK)) - (void) apr_file_unlock(db->dirf); - (void) apr_file_close(db->dirf); - (void) apr_file_close(db->pagf); - free(db); - - return APR_SUCCESS; -} - -static apr_status_t prep(apr_sdbm_t **pdb, const char *dirname, const char *pagname, - apr_int32_t flags, apr_fileperms_t perms, apr_pool_t *p) -{ - apr_sdbm_t *db; - apr_status_t status; - - *pdb = NULL; - - db = malloc(sizeof(*db)); - memset(db, 0, sizeof(*db)); - db->pagbno = -1L; - - db->pool = p; - - /* - * adjust user flags so that WRONLY becomes RDWR, - * as required by this package. Also set our internal - * flag for RDONLY if needed. - */ - if (!(flags & APR_FOPEN_WRITE)) { - db->flags |= SDBM_RDONLY; - } - - /* - * adjust the file open flags so that we handle locking - * on our own (don't rely on any locking behavior within - * an apr_file_t, in case it's ever introduced, and set - * our own flag. - */ - if (flags & APR_FOPEN_SHARELOCK) { - db->flags |= SDBM_SHARED; - flags &= ~APR_FOPEN_SHARELOCK; - } - - flags |= APR_FOPEN_BINARY | APR_FOPEN_READ; - - /* - * open the files in sequence, and stat the dirfile. - * If we fail anywhere, undo everything, return NULL. - */ - - if ((status = apr_file_open(&db->dirf, dirname, flags, perms, p)) - != APR_SUCCESS) - goto error; - - if ((status = apr_file_open(&db->pagf, pagname, flags, perms, p)) - != APR_SUCCESS) - goto error; - - if ((status = apr_sdbm_lock(db, (db->flags & SDBM_RDONLY) - ? APR_FLOCK_SHARED - : APR_FLOCK_EXCLUSIVE)) - != APR_SUCCESS) - goto error; - - /* apr_pcalloc zeroed the buffers - * apr_sdbm_lock stated the dirf->size and invalidated the cache - */ - - /* - * if we are opened in SHARED mode, unlock ourself - */ - if (db->flags & SDBM_SHARED) - if ((status = apr_sdbm_unlock(db)) != APR_SUCCESS) - goto error; - - /* make sure that we close the database at some point */ - apr_pool_cleanup_register(p, db, database_cleanup, apr_pool_cleanup_null); - - /* Done! */ - *pdb = db; - return APR_SUCCESS; - -error: - if (db->dirf && db->pagf) - (void) apr_sdbm_unlock(db); - if (db->dirf != NULL) - (void) apr_file_close(db->dirf); - if (db->pagf != NULL) { - (void) apr_file_close(db->pagf); - } - free(db); - return status; -} - -APU_DECLARE(apr_status_t) apr_sdbm_open(apr_sdbm_t **db, const char *file, - apr_int32_t flags, - apr_fileperms_t perms, apr_pool_t *p) -{ - char *dirname = apr_pstrcat(p, file, APR_SDBM_DIRFEXT, NULL); - char *pagname = apr_pstrcat(p, file, APR_SDBM_PAGFEXT, NULL); - - return prep(db, dirname, pagname, flags, perms, p); -} - -APU_DECLARE(apr_status_t) apr_sdbm_close(apr_sdbm_t *db) -{ - return apr_pool_cleanup_run(db->pool, db, database_cleanup); -} - -APU_DECLARE(apr_status_t) apr_sdbm_fetch(apr_sdbm_t *db, apr_sdbm_datum_t *val, - apr_sdbm_datum_t key) -{ - apr_status_t status; - - if (db == NULL || bad(key)) - return APR_EINVAL; - - if ((status = apr_sdbm_lock(db, APR_FLOCK_SHARED)) != APR_SUCCESS) - return status; - - if ((status = getpage(db, exhash(key), 0, 1)) == APR_SUCCESS) { - *val = getpair(db->pagbuf, key); - /* ### do we want a not-found result? */ - } - - (void) apr_sdbm_unlock(db); - - return status; -} - -static apr_status_t write_page(apr_sdbm_t *db, const char *buf, long pagno) -{ - apr_status_t status; - apr_off_t off = OFF_PAG(pagno); - - if ((status = apr_file_seek(db->pagf, APR_SET, &off)) == APR_SUCCESS) - status = apr_file_write_full(db->pagf, buf, PBLKSIZ, NULL); - - return status; -} - -APU_DECLARE(apr_status_t) apr_sdbm_delete(apr_sdbm_t *db, - const apr_sdbm_datum_t key) -{ - apr_status_t status; - - if (db == NULL || bad(key)) - return APR_EINVAL; - if (apr_sdbm_rdonly(db)) - return APR_EINVAL; - - if ((status = apr_sdbm_lock(db, APR_FLOCK_EXCLUSIVE)) != APR_SUCCESS) - return status; - - if ((status = getpage(db, exhash(key), 0, 1)) == APR_SUCCESS) { - if (!delpair(db->pagbuf, key)) - /* ### should we define some APRUTIL codes? */ - status = APR_EGENERAL; - else - status = write_page(db, db->pagbuf, db->pagbno); - } - - (void) apr_sdbm_unlock(db); - - return status; -} - -APU_DECLARE(apr_status_t) apr_sdbm_store(apr_sdbm_t *db, apr_sdbm_datum_t key, - apr_sdbm_datum_t val, int flags) -{ - int need; - register long hash; - apr_status_t status; - - if (db == NULL || bad(key)) - return APR_EINVAL; - if (apr_sdbm_rdonly(db)) - return APR_EINVAL; - need = key.dsize + val.dsize; - /* - * is the pair too big (or too small) for this database ?? - */ - if (need < 0 || need > PAIRMAX) - return APR_EINVAL; - - if ((status = apr_sdbm_lock(db, APR_FLOCK_EXCLUSIVE)) != APR_SUCCESS) - return status; - - if ((status = getpage(db, (hash = exhash(key)), 0, 1)) == APR_SUCCESS) { - - /* - * if we need to replace, delete the key/data pair - * first. If it is not there, ignore. - */ - if (flags == APR_SDBM_REPLACE) - (void) delpair(db->pagbuf, key); - else if (!(flags & APR_SDBM_INSERTDUP) && duppair(db->pagbuf, key)) { - status = APR_EEXIST; - goto error; - } - /* - * if we do not have enough room, we have to split. - */ - if (!fitpair(db->pagbuf, need)) - if ((status = makroom(db, hash, need)) != APR_SUCCESS) - goto error; - /* - * we have enough room or split is successful. insert the key, - * and update the page file. - */ - (void) putpair(db->pagbuf, key, val); - - status = write_page(db, db->pagbuf, db->pagbno); - } - -error: - (void) apr_sdbm_unlock(db); - - return status; -} - -/* - * makroom - make room by splitting the overfull page - * this routine will attempt to make room for SPLTMAX times before - * giving up. - */ -static apr_status_t makroom(apr_sdbm_t *db, long hash, int need) -{ - long newp; - char twin[PBLKSIZ]; - char *pag = db->pagbuf; - char *new = twin; - register int smax = SPLTMAX; - apr_status_t status; - - do { - /* - * split the current page - */ - (void) splpage(pag, new, db->hmask + 1); - /* - * address of the new page - */ - newp = (hash & db->hmask) | (db->hmask + 1); - - /* - * write delay, read avoidence/cache shuffle: - * select the page for incoming pair: if key is to go to the new page, - * write out the previous one, and copy the new one over, thus making - * it the current page. If not, simply write the new page, and we are - * still looking at the page of interest. current page is not updated - * here, as sdbm_store will do so, after it inserts the incoming pair. - */ - if (hash & (db->hmask + 1)) { - if ((status = write_page(db, db->pagbuf, db->pagbno)) - != APR_SUCCESS) - return status; - - db->pagbno = newp; - (void) memcpy(pag, new, PBLKSIZ); - } - else { - if ((status = write_page(db, new, newp)) != APR_SUCCESS) - return status; - } - - if ((status = setdbit(db, db->curbit)) != APR_SUCCESS) - return status; - /* - * see if we have enough room now - */ - if (fitpair(pag, need)) - return APR_SUCCESS; - /* - * try again... update curbit and hmask as getpage would have - * done. because of our update of the current page, we do not - * need to read in anything. BUT we have to write the current - * [deferred] page out, as the window of failure is too great. - */ - db->curbit = 2 * db->curbit - + ((hash & (db->hmask + 1)) ? 2 : 1); - db->hmask |= db->hmask + 1; - - if ((status = write_page(db, db->pagbuf, db->pagbno)) - != APR_SUCCESS) - return status; - - } while (--smax); - - /* - * if we are here, this is real bad news. After SPLTMAX splits, - * we still cannot fit the key. say goodnight. - */ -#if 0 - (void) write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44); -#endif - /* ### ENOSPC not really appropriate but better than nothing */ - return APR_ENOSPC; - -} - -/* Reads 'len' bytes from file 'f' at offset 'off' into buf. - * 'off' is given relative to the start of the file. - * If 'create' is asked and EOF is returned while reading, this is taken - * as success (i.e. a cleared buffer is returned). - */ -static apr_status_t read_from(apr_file_t *f, void *buf, - apr_off_t off, apr_size_t len, - int create) -{ - apr_status_t status; - - if ((status = apr_file_seek(f, APR_SET, &off)) != APR_SUCCESS || - ((status = apr_file_read_full(f, buf, len, NULL)) != APR_SUCCESS)) { - /* if EOF is reached, pretend we read all zero's */ - if (status == APR_EOF && create) { - memset(buf, 0, len); - status = APR_SUCCESS; - } - } - - return status; -} - -/* - * the following two routines will break if - * deletions aren't taken into account. (ndbm bug) - */ -APU_DECLARE(apr_status_t) apr_sdbm_firstkey(apr_sdbm_t *db, - apr_sdbm_datum_t *key) -{ - apr_status_t status; - - if ((status = apr_sdbm_lock(db, APR_FLOCK_SHARED)) != APR_SUCCESS) - return status; - - /* - * start at page 0 - */ - if ((status = getpage(db, 0, 1, 1)) == APR_SUCCESS) { - db->blkptr = 0; - db->keyptr = 0; - status = getnext(key, db); - } - - (void) apr_sdbm_unlock(db); - - return status; -} - -APU_DECLARE(apr_status_t) apr_sdbm_nextkey(apr_sdbm_t *db, - apr_sdbm_datum_t *key) -{ - apr_status_t status; - - if ((status = apr_sdbm_lock(db, APR_FLOCK_SHARED)) != APR_SUCCESS) - return status; - - status = getnext(key, db); - - (void) apr_sdbm_unlock(db); - - return status; -} - -/* - * all important binary tree traversal - */ -static apr_status_t getpage(apr_sdbm_t *db, long hash, int by_num, int create) -{ - apr_status_t status; - register long pagb; - - if (by_num) { - pagb = hash; - } - else { - register int hbit = 0; - register long dbit = 0; - - while (dbit < db->maxbno && getdbit(db, dbit)) - dbit = 2 * dbit + ((hash & (1 << hbit++)) ? 2 : 1); - debug(("dbit: %d...", dbit)); - - db->curbit = dbit; - db->hmask = masks[hbit]; - - pagb = hash & db->hmask; - } - - /* - * see if the block we need is already in memory. - * note: this lookaside cache has about 10% hit rate. - */ - if (pagb != db->pagbno) { - /* - * note: here, we assume a "hole" is read as 0s. - * if not, must zero pagbuf first. - * ### joe: this assumption was surely never correct? but - * ### we make it so in read_from anyway. - */ - if ((status = read_from(db->pagf, db->pagbuf, - OFF_PAG(pagb), PBLKSIZ, - create)) != APR_SUCCESS) - return status; - - if (!chkpage(db->pagbuf)) - return APR_ENOSPC; /* ### better error? */ - - db->pagbno = pagb; - - debug(("pag read: %d\n", pagb)); - } - return APR_SUCCESS; -} - -static int getdbit(apr_sdbm_t *db, long dbit) -{ - register long c; - register long dirb; - - c = dbit / BYTESIZ; - dirb = c / DBLKSIZ; - - if (dirb != db->dirbno) { - if (read_from(db->dirf, db->dirbuf, - OFF_DIR(dirb), DBLKSIZ, - 1) != APR_SUCCESS) - return 0; - - db->dirbno = dirb; - - debug(("dir read: %d\n", dirb)); - } - - return db->dirbuf[c % DBLKSIZ] & (1 << dbit % BYTESIZ); -} - -static apr_status_t setdbit(apr_sdbm_t *db, long dbit) -{ - register long c; - register long dirb; - apr_status_t status; - apr_off_t off; - - c = dbit / BYTESIZ; - dirb = c / DBLKSIZ; - - if (dirb != db->dirbno) { - if ((status = read_from(db->dirf, db->dirbuf, - OFF_DIR(dirb), DBLKSIZ, - 1)) != APR_SUCCESS) - return status; - - db->dirbno = dirb; - - debug(("dir read: %d\n", dirb)); - } - - db->dirbuf[c % DBLKSIZ] |= (1 << dbit % BYTESIZ); - - if (dbit >= db->maxbno) - db->maxbno += DBLKSIZ * BYTESIZ; - - off = OFF_DIR(dirb); - if ((status = apr_file_seek(db->dirf, APR_SET, &off)) == APR_SUCCESS) - status = apr_file_write_full(db->dirf, db->dirbuf, DBLKSIZ, NULL); - - return status; -} - -/* -* getnext - get the next key in the page, and if done with -* the page, try the next page in sequence -*/ -static apr_status_t getnext(apr_sdbm_datum_t *key, apr_sdbm_t *db) -{ - apr_status_t status; - for (;;) { - db->keyptr++; - *key = getnkey(db->pagbuf, db->keyptr); - if (key->dptr != NULL) - return APR_SUCCESS; - /* - * we either run out, or there is nothing on this page.. - * try the next one... If we lost our position on the - * file, we will have to seek. - */ - db->blkptr++; - db->keyptr = 0; - - /* ### EOF acceptable here too? */ - if ((status = getpage(db, db->blkptr, 1, 0)) != APR_SUCCESS) - return status; - } - - /* NOTREACHED */ -} - - -APU_DECLARE(int) apr_sdbm_rdonly(apr_sdbm_t *db) -{ - /* ### Should we return true if the first lock is a share lock, - * to reflect that apr_sdbm_store and apr_sdbm_delete will fail? - */ - return (db->flags & SDBM_RDONLY) != 0; -} - Index: contrib/apr-util/dbm/sdbm/sdbm_hash.c =================================================================== --- contrib/apr-util/dbm/sdbm/sdbm_hash.c +++ /dev/null @@ -1,63 +0,0 @@ -/* 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-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). - * author: oz@nexus.yorku.ca - * status: ex-public domain. keep it that way. - * - * hashing routine - */ - -#include "apr_sdbm.h" -#include "sdbm_private.h" - -/* - * polynomial conversion ignoring overflows - * [this seems to work remarkably well, in fact better - * then the ndbm hash function. Replace at your own risk] - * use: 65599 nice. - * 65587 even better. - */ -long sdbm_hash(const char *str, int len) -{ - register unsigned long n = 0; - -#define DUFF /* go ahead and use the loop-unrolled version */ -#ifdef DUFF - -#define HASHC n = *str++ + 65599 * n - - if (len > 0) { - register int loop = (len + 8 - 1) >> 3; - - switch(len & (8 - 1)) { - case 0: do { - HASHC; case 7: HASHC; - case 6: HASHC; case 5: HASHC; - case 4: HASHC; case 3: HASHC; - case 2: HASHC; case 1: HASHC; - } while (--loop); - } - - } -#else - while (len--) - n = *str++ + 65599 * n; -#endif - return n; -} Index: contrib/apr-util/dbm/sdbm/sdbm_lock.c =================================================================== --- contrib/apr-util/dbm/sdbm/sdbm_lock.c +++ /dev/null @@ -1,79 +0,0 @@ -/* 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 "apr_file_info.h" -#include "apr_file_io.h" -#include "apr_sdbm.h" - -#include "sdbm_private.h" -#include "sdbm_tune.h" - -/* NOTE: this function may block until it acquires the lock */ -APU_DECLARE(apr_status_t) apr_sdbm_lock(apr_sdbm_t *db, int type) -{ - apr_status_t status; - int lock_type = type & APR_FLOCK_TYPEMASK; - - if (!(lock_type == APR_FLOCK_SHARED || lock_type == APR_FLOCK_EXCLUSIVE)) - return APR_EINVAL; - - if (db->flags & SDBM_EXCLUSIVE_LOCK) { - ++db->lckcnt; - return APR_SUCCESS; - } - else if (db->flags & SDBM_SHARED_LOCK) { - /* - * Cannot promote a shared lock to an exlusive lock - * in a cross-platform compatibile manner. - */ - if (type == APR_FLOCK_EXCLUSIVE) - return APR_EINVAL; - ++db->lckcnt; - return APR_SUCCESS; - } - /* - * zero size: either a fresh database, or one with a single, - * unsplit data page: dirpage is all zeros. - */ - if ((status = apr_file_lock(db->dirf, type)) == APR_SUCCESS) - { - apr_finfo_t finfo; - if ((status = apr_file_info_get(&finfo, APR_FINFO_SIZE, db->dirf)) - != APR_SUCCESS) { - (void) apr_file_unlock(db->dirf); - return status; - } - - SDBM_INVALIDATE_CACHE(db, finfo); - - ++db->lckcnt; - if (type == APR_FLOCK_SHARED) - db->flags |= SDBM_SHARED_LOCK; - else if (type == APR_FLOCK_EXCLUSIVE) - db->flags |= SDBM_EXCLUSIVE_LOCK; - } - return status; -} - -APU_DECLARE(apr_status_t) apr_sdbm_unlock(apr_sdbm_t *db) -{ - if (!(db->flags & (SDBM_SHARED_LOCK | SDBM_EXCLUSIVE_LOCK))) - return APR_EINVAL; - if (--db->lckcnt > 0) - return APR_SUCCESS; - db->flags &= ~(SDBM_SHARED_LOCK | SDBM_EXCLUSIVE_LOCK); - return apr_file_unlock(db->dirf); -} Index: contrib/apr-util/dbm/sdbm/sdbm_pair.h =================================================================== --- contrib/apr-util/dbm/sdbm/sdbm_pair.h +++ /dev/null @@ -1,40 +0,0 @@ -/* 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 SDBM_PAIR_H -#define SDBM_PAIR_H - -/* Mini EMBED (pair.c) */ -#define chkpage apu__sdbm_chkpage -#define delpair apu__sdbm_delpair -#define duppair apu__sdbm_duppair -#define fitpair apu__sdbm_fitpair -#define getnkey apu__sdbm_getnkey -#define getpair apu__sdbm_getpair -#define putpair apu__sdbm_putpair -#define splpage apu__sdbm_splpage - -int fitpair(char *, int); -void putpair(char *, apr_sdbm_datum_t, apr_sdbm_datum_t); -apr_sdbm_datum_t getpair(char *, apr_sdbm_datum_t); -int delpair(char *, apr_sdbm_datum_t); -int chkpage (char *); -apr_sdbm_datum_t getnkey(char *, int); -void splpage(char *, char *, long); -int duppair(char *, apr_sdbm_datum_t); - -#endif /* SDBM_PAIR_H */ - Index: contrib/apr-util/dbm/sdbm/sdbm_pair.c =================================================================== --- contrib/apr-util/dbm/sdbm/sdbm_pair.c +++ /dev/null @@ -1,320 +0,0 @@ -/* 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-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978). - * author: oz@nexus.yorku.ca - * status: ex-public domain. - * - * page-level routines - */ - -#include "apr_sdbm.h" - -#include "sdbm_tune.h" -#include "sdbm_pair.h" -#include "sdbm_private.h" - -#include /* for memset() */ - - -#define exhash(item) sdbm_hash((item).dptr, (item).dsize) - -/* - * forward - */ -static int seepair(char *, int, char *, int); - -/* - * page format: - * +------------------------------+ - * ino | n | keyoff | datoff | keyoff | - * +------------+--------+--------+ - * | datoff | - - - ----> | - * +--------+---------------------+ - * | F R E E A R E A | - * +--------------+---------------+ - * | <---- - - - | data | - * +--------+-----+----+----------+ - * | key | data | key | - * +--------+----------+----------+ - * - * calculating the offsets for free area: if the number - * of entries (ino[0]) is zero, the offset to the END of - * the free area is the block size. Otherwise, it is the - * nth (ino[ino[0]]) entry's offset. - */ - -int -fitpair(pag, need) -char *pag; -int need; -{ - register int n; - register int off; - register int avail; - register short *ino = (short *) pag; - - off = ((n = ino[0]) > 0) ? ino[n] : PBLKSIZ; - avail = off - (n + 1) * sizeof(short); - need += 2 * sizeof(short); - - debug(("avail %d need %d\n", avail, need)); - - return need <= avail; -} - -void -putpair(pag, key, val) -char *pag; -apr_sdbm_datum_t key; -apr_sdbm_datum_t val; -{ - register int n; - register int off; - register short *ino = (short *) pag; - - off = ((n = ino[0]) > 0) ? ino[n] : PBLKSIZ; -/* - * enter the key first - */ - off -= key.dsize; - (void) memcpy(pag + off, key.dptr, key.dsize); - ino[n + 1] = off; -/* - * now the data - */ - off -= val.dsize; - (void) memcpy(pag + off, val.dptr, val.dsize); - ino[n + 2] = off; -/* - * adjust item count - */ - ino[0] += 2; -} - -apr_sdbm_datum_t -getpair(pag, key) -char *pag; -apr_sdbm_datum_t key; -{ - register int i; - register int n; - apr_sdbm_datum_t val; - register short *ino = (short *) pag; - - if ((n = ino[0]) == 0) - return sdbm_nullitem; - - if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0) - return sdbm_nullitem; - - val.dptr = pag + ino[i + 1]; - val.dsize = ino[i] - ino[i + 1]; - return val; -} - -int -duppair(pag, key) -char *pag; -apr_sdbm_datum_t key; -{ - register short *ino = (short *) pag; - return ino[0] > 0 && seepair(pag, ino[0], key.dptr, key.dsize) > 0; -} - -apr_sdbm_datum_t -getnkey(pag, num) -char *pag; -int num; -{ - apr_sdbm_datum_t key; - register int off; - register short *ino = (short *) pag; - - num = num * 2 - 1; - if (ino[0] == 0 || num > ino[0]) - return sdbm_nullitem; - - off = (num > 1) ? ino[num - 1] : PBLKSIZ; - - key.dptr = pag + ino[num]; - key.dsize = off - ino[num]; - - return key; -} - -int -delpair(pag, key) -char *pag; -apr_sdbm_datum_t key; -{ - register int n; - register int i; - register short *ino = (short *) pag; - - if ((n = ino[0]) == 0) - return 0; - - if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0) - return 0; -/* - * found the key. if it is the last entry - * [i.e. i == n - 1] we just adjust the entry count. - * hard case: move all data down onto the deleted pair, - * shift offsets onto deleted offsets, and adjust them. - * [note: 0 < i < n] - */ - if (i < n - 1) { - register int m; - register char *dst = pag + (i == 1 ? PBLKSIZ : ino[i - 1]); - register char *src = pag + ino[i + 1]; - register short zoo = (short) (dst - src); - - debug(("free-up %d ", zoo)); -/* - * shift data/keys down - */ - m = ino[i + 1] - ino[n]; - -#undef DUFF /* just use memmove. it should be plenty fast. */ -#ifdef DUFF -#define MOVB *--dst = *--src - - if (m > 0) { - register int loop = (m + 8 - 1) >> 3; - - switch (m & (8 - 1)) { - case 0: do { - MOVB; case 7: MOVB; - case 6: MOVB; case 5: MOVB; - case 4: MOVB; case 3: MOVB; - case 2: MOVB; case 1: MOVB; - } while (--loop); - } - } -#else - dst -= m; - src -= m; - memmove(dst, src, m); -#endif - -/* - * adjust offset index up - */ - while (i < n - 1) { - ino[i] = ino[i + 2] + zoo; - i++; - } - } - ino[0] -= 2; - return 1; -} - -/* - * search for the key in the page. - * return offset index in the range 0 < i < n. - * return 0 if not found. - */ -static int -seepair(pag, n, key, siz) -char *pag; -register int n; -register char *key; -register int siz; -{ - register int i; - register int off = PBLKSIZ; - register short *ino = (short *) pag; - - for (i = 1; i < n; i += 2) { - if (siz == off - ino[i] && - memcmp(key, pag + ino[i], siz) == 0) - return i; - off = ino[i + 1]; - } - return 0; -} - -void -splpage(pag, new, sbit) -char *pag; -char *new; -long sbit; -{ - apr_sdbm_datum_t key; - apr_sdbm_datum_t val; - - register int n; - register int off = PBLKSIZ; - char cur[PBLKSIZ]; - register short *ino = (short *) cur; - - (void) memcpy(cur, pag, PBLKSIZ); - (void) memset(pag, 0, PBLKSIZ); - (void) memset(new, 0, PBLKSIZ); - - n = ino[0]; - for (ino++; n > 0; ino += 2) { - key.dptr = cur + ino[0]; - key.dsize = off - ino[0]; - val.dptr = cur + ino[1]; - val.dsize = ino[0] - ino[1]; -/* - * select the page pointer (by looking at sbit) and insert - */ - (void) putpair((exhash(key) & sbit) ? new : pag, key, val); - - off = ino[1]; - n -= 2; - } - - debug(("%d split %d/%d\n", ((short *) cur)[0] / 2, - ((short *) new)[0] / 2, - ((short *) pag)[0] / 2)); -} - -/* - * check page sanity: - * number of entries should be something - * reasonable, and all offsets in the index should be in order. - * this could be made more rigorous. - */ -int -chkpage(pag) -char *pag; -{ - register int n; - register int off; - register short *ino = (short *) pag; - - if ((n = ino[0]) < 0 || n > PBLKSIZ / sizeof(short)) - return 0; - - if (n > 0) { - off = PBLKSIZ; - for (ino++; n > 0; ino += 2) { - if (ino[0] < 0 || ino[0] > off || - ino[1] < 0 || ino[1] > off || - ino[1] > ino[0]) - return 0; - off = ino[1]; - n -= 2; - } - } - return 1; -} Index: contrib/apr-util/dbm/sdbm/sdbm_private.h =================================================================== --- contrib/apr-util/dbm/sdbm/sdbm_private.h +++ /dev/null @@ -1,84 +0,0 @@ -/* 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 - */ - -#ifndef SDBM_PRIVATE_H -#define SDBM_PRIVATE_H - -#include "apr.h" -#include "apr_pools.h" -#include "apr_file_io.h" -#include "apr_errno.h" /* for apr_status_t */ - -#if 0 -/* if the block/page size is increased, it breaks perl apr_sdbm_t compatibility */ -#define DBLKSIZ 16384 -#define PBLKSIZ 8192 -#define PAIRMAX 8008 /* arbitrary on PBLKSIZ-N */ -#else -#define DBLKSIZ 4096 -#define PBLKSIZ 1024 -#define PAIRMAX 1008 /* arbitrary on PBLKSIZ-N */ -#endif -#define SPLTMAX 10 /* maximum allowed splits */ - -/* for apr_sdbm_t.flags */ -#define SDBM_RDONLY 0x1 /* data base open read-only */ -#define SDBM_SHARED 0x2 /* data base open for sharing */ -#define SDBM_SHARED_LOCK 0x4 /* data base locked for shared read */ -#define SDBM_EXCLUSIVE_LOCK 0x8 /* data base locked for write */ - -struct apr_sdbm_t { - apr_pool_t *pool; - apr_file_t *dirf; /* directory file descriptor */ - apr_file_t *pagf; /* page file descriptor */ - apr_int32_t flags; /* status/error flags, see below */ - long maxbno; /* size of dirfile in bits */ - long curbit; /* current bit number */ - long hmask; /* current hash mask */ - long blkptr; /* current block for nextkey */ - int keyptr; /* current key for nextkey */ - long blkno; /* current page to read/write */ - long pagbno; /* current page in pagbuf */ - char pagbuf[PBLKSIZ]; /* page file block buffer */ - long dirbno; /* current block in dirbuf */ - char dirbuf[DBLKSIZ]; /* directory file block buffer */ - int lckcnt; /* number of calls to sdbm_lock */ -}; - - -#define sdbm_hash apu__sdbm_hash -#define sdbm_nullitem apu__sdbm_nullitem - -extern const apr_sdbm_datum_t sdbm_nullitem; - -long sdbm_hash(const char *str, int len); - -/* - * zero the cache - */ -#define SDBM_INVALIDATE_CACHE(db, finfo) \ - do { db->dirbno = (!finfo.size) ? 0 : -1; \ - db->pagbno = -1; \ - db->maxbno = (long)(finfo.size * BYTESIZ); \ - } while (0); - -#endif /* SDBM_PRIVATE_H */ Index: contrib/apr-util/dbm/sdbm/sdbm_tune.h =================================================================== --- contrib/apr-util/dbm/sdbm/sdbm_tune.h +++ /dev/null @@ -1,40 +0,0 @@ -/* 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 - * tuning and portability constructs [not nearly enough] - * author: oz@nexus.yorku.ca - */ - -#ifndef SDBM_TUNE_H -#define SDBM_TUNE_H - -#include "apr_errno.h" - -/* ### this might be better off as sizeof(char *) */ -#define BYTESIZ 8 - -/* - * misc - */ -#ifdef DEBUG -#define debug(x) printf x -#else -#define debug(x) -#endif - -#endif /* SDBM_TUNE_H */ Index: contrib/apr-util/docs/doxygen.conf =================================================================== --- contrib/apr-util/docs/doxygen.conf +++ /dev/null @@ -1,32 +0,0 @@ -PROJECT_NAME="Apache Portable Runtime Utility Library" - -INPUT=. -QUIET=YES -RECURSIVE=YES -FILE_PATTERNS=*.h - -OUTPUT_DIRECTORY=docs/dox - -MACRO_EXPANSION=YES -EXPAND_ONLY_PREDEF=YES -#EXPAND_AS_DEFINED= -# not sure why this doesn't work as EXPAND_AS_DEFINED, it should! -PREDEFINED="APU_DECLARE(x)=x" \ - "APU_DECLARE_NONSTD(x)=x" \ - "APU_DECLARE_DATA" \ - "APU_MODULE_DECLARE_DATA" \ - "APU_DECLARE_LDAP(x)=x" \ - "APR_HAS_MMAP" \ - "APR_HAS_THREADS" \ - "APR_HAS_XLATE" \ - "__attribute__(x)=" \ - DOXYGEN= - -OPTIMIZE_OUTPUT_FOR_C=YES - -FULL_PATH_NAMES=YES -CASE_SENSE_NAMES=NO -# some autoconf guru needs to make configure set this correctly... -#STRIP_FROM_PATH=/root/apache/httpd-2.0-8/srclib/apr-util - -GENERATE_TAGFILE=docs/dox/apu.tag Index: contrib/apr-util/encoding/apr_base64.c =================================================================== --- contrib/apr-util/encoding/apr_base64.c +++ /dev/null @@ -1,268 +0,0 @@ -/* 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. - */ - -/* base64 encoder/decoder. Originally part of main/util.c - * but moved here so that support/ab and apr_sha1.c could - * use it. This meant removing the apr_palloc()s and adding - * ugly 'len' functions, which is quite a nasty cost. - */ - -#include "apr_base64.h" -#if APR_CHARSET_EBCDIC -#include "apr_xlate.h" -#endif /* APR_CHARSET_EBCDIC */ - -/* aaaack but it's fast and const should make it shared text page. */ -static const unsigned char pr2six[256] = -{ -#if !APR_CHARSET_EBCDIC - /* ASCII table */ - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64, - 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64, - 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 -#else /*APR_CHARSET_EBCDIC*/ - /* EBCDIC table */ - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 64, 64, 64, 64, 64, 64, - 64, 35, 36, 37, 38, 39, 40, 41, 42, 43, 64, 64, 64, 64, 64, 64, - 64, 64, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 64, 64, 64, 64, 64, 64, - 64, 9, 10, 11, 12, 13, 14, 15, 16, 17, 64, 64, 64, 64, 64, 64, - 64, 64, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64, 64, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64 -#endif /*APR_CHARSET_EBCDIC*/ -}; - -#if APR_CHARSET_EBCDIC -static apr_xlate_t *xlate_to_ebcdic; -static unsigned char os_toascii[256]; - -APU_DECLARE(apr_status_t) apr_base64init_ebcdic(apr_xlate_t *to_ascii, - apr_xlate_t *to_ebcdic) -{ - int i; - apr_size_t inbytes_left, outbytes_left; - apr_status_t rv; - int onoff; - - /* Only single-byte conversion is supported. - */ - rv = apr_xlate_sb_get(to_ascii, &onoff); - if (rv) { - return rv; - } - if (!onoff) { /* If conversion is not single-byte-only */ - return APR_EINVAL; - } - rv = apr_xlate_sb_get(to_ebcdic, &onoff); - if (rv) { - return rv; - } - if (!onoff) { /* If conversion is not single-byte-only */ - return APR_EINVAL; - } - xlate_to_ebcdic = to_ebcdic; - for (i = 0; i < sizeof(os_toascii); i++) { - os_toascii[i] = i; - } - inbytes_left = outbytes_left = sizeof(os_toascii); - apr_xlate_conv_buffer(to_ascii, os_toascii, &inbytes_left, - os_toascii, &outbytes_left); - - return APR_SUCCESS; -} -#endif /*APR_CHARSET_EBCDIC*/ - -APU_DECLARE(int) apr_base64_decode_len(const char *bufcoded) -{ - int nbytesdecoded; - register const unsigned char *bufin; - register apr_size_t nprbytes; - - bufin = (const unsigned char *) bufcoded; - while (pr2six[*(bufin++)] <= 63); - - nprbytes = (bufin - (const unsigned char *) bufcoded) - 1; - nbytesdecoded = (((int)nprbytes + 3) / 4) * 3; - - return nbytesdecoded + 1; -} - -APU_DECLARE(int) apr_base64_decode(char *bufplain, const char *bufcoded) -{ -#if APR_CHARSET_EBCDIC - apr_size_t inbytes_left, outbytes_left; -#endif /* APR_CHARSET_EBCDIC */ - int len; - - len = apr_base64_decode_binary((unsigned char *) bufplain, bufcoded); -#if APR_CHARSET_EBCDIC - inbytes_left = outbytes_left = len; - apr_xlate_conv_buffer(xlate_to_ebcdic, bufplain, &inbytes_left, - bufplain, &outbytes_left); -#endif /* APR_CHARSET_EBCDIC */ - bufplain[len] = '\0'; - return len; -} - -/* This is the same as apr_base64_decode() except on EBCDIC machines, where - * the conversion of the output to ebcdic is left out. - */ -APU_DECLARE(int) apr_base64_decode_binary(unsigned char *bufplain, - const char *bufcoded) -{ - int nbytesdecoded; - register const unsigned char *bufin; - register unsigned char *bufout; - register apr_size_t nprbytes; - - bufin = (const unsigned char *) bufcoded; - while (pr2six[*(bufin++)] <= 63); - nprbytes = (bufin - (const unsigned char *) bufcoded) - 1; - nbytesdecoded = (((int)nprbytes + 3) / 4) * 3; - - bufout = (unsigned char *) bufplain; - bufin = (const unsigned char *) bufcoded; - - while (nprbytes > 4) { - *(bufout++) = - (unsigned char) (pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4); - *(bufout++) = - (unsigned char) (pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2); - *(bufout++) = - (unsigned char) (pr2six[bufin[2]] << 6 | pr2six[bufin[3]]); - bufin += 4; - nprbytes -= 4; - } - - /* Note: (nprbytes == 1) would be an error, so just ingore that case */ - if (nprbytes > 1) { - *(bufout++) = - (unsigned char) (pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4); - } - if (nprbytes > 2) { - *(bufout++) = - (unsigned char) (pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2); - } - if (nprbytes > 3) { - *(bufout++) = - (unsigned char) (pr2six[bufin[2]] << 6 | pr2six[bufin[3]]); - } - - nbytesdecoded -= (4 - (int)nprbytes) & 3; - return nbytesdecoded; -} - -static const char basis_64[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -APU_DECLARE(int) apr_base64_encode_len(int len) -{ - return ((len + 2) / 3 * 4) + 1; -} - -APU_DECLARE(int) apr_base64_encode(char *encoded, const char *string, int len) -{ -#if !APR_CHARSET_EBCDIC - return apr_base64_encode_binary(encoded, (const unsigned char *) string, len); -#else /* APR_CHARSET_EBCDIC */ - int i; - char *p; - - p = encoded; - for (i = 0; i < len - 2; i += 3) { - *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F]; - *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | - ((int) (os_toascii[string[i + 1]] & 0xF0) >> 4)]; - *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2) | - ((int) (os_toascii[string[i + 2]] & 0xC0) >> 6)]; - *p++ = basis_64[os_toascii[string[i + 2]] & 0x3F]; - } - if (i < len) { - *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F]; - if (i == (len - 1)) { - *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4)]; - *p++ = '='; - } - else { - *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | - ((int) (os_toascii[string[i + 1]] & 0xF0) >> 4)]; - *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2)]; - } - *p++ = '='; - } - - *p++ = '\0'; - return p - encoded; -#endif /* APR_CHARSET_EBCDIC */ -} - -/* This is the same as apr_base64_encode() except on EBCDIC machines, where - * the conversion of the input to ascii is left out. - */ -APU_DECLARE(int) apr_base64_encode_binary(char *encoded, - const unsigned char *string, int len) -{ - int i; - char *p; - - p = encoded; - for (i = 0; i < len - 2; i += 3) { - *p++ = basis_64[(string[i] >> 2) & 0x3F]; - *p++ = basis_64[((string[i] & 0x3) << 4) | - ((int) (string[i + 1] & 0xF0) >> 4)]; - *p++ = basis_64[((string[i + 1] & 0xF) << 2) | - ((int) (string[i + 2] & 0xC0) >> 6)]; - *p++ = basis_64[string[i + 2] & 0x3F]; - } - if (i < len) { - *p++ = basis_64[(string[i] >> 2) & 0x3F]; - if (i == (len - 1)) { - *p++ = basis_64[((string[i] & 0x3) << 4)]; - *p++ = '='; - } - else { - *p++ = basis_64[((string[i] & 0x3) << 4) | - ((int) (string[i + 1] & 0xF0) >> 4)]; - *p++ = basis_64[((string[i + 1] & 0xF) << 2)]; - } - *p++ = '='; - } - - *p++ = '\0'; - return (int)(p - encoded); -} Index: contrib/apr-util/export_vars.sh.in =================================================================== --- contrib/apr-util/export_vars.sh.in +++ /dev/null @@ -1,13 +0,0 @@ -# -# export_vars.sh -# -# This shell script is used to export vars to the application using the -# APRUTIL library. This script should be "sourced" to ensure the variable -# values are set within the calling script's context. For example: -# -# $ . path/to/apr-util/export_vars.sh -# - -APRUTIL_EXPORT_INCLUDES="@APRUTIL_INCLUDES@" -APRUTIL_EXPORT_LIBS="@APRUTIL_EXPORT_LIBS@" -APRUTIL_LDFLAGS="@APRUTIL_LDFLAGS@" Index: contrib/apr-util/hooks/apr_hooks.c =================================================================== --- contrib/apr-util/hooks/apr_hooks.c +++ /dev/null @@ -1,414 +0,0 @@ -/* 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 -#include -#include - -#include "apr_pools.h" -#include "apr_tables.h" -#include "apr.h" -#include "apr_hooks.h" -#include "apr_hash.h" -#include "apr_optional_hooks.h" -#include "apr_optional.h" -#define APR_WANT_MEMFUNC -#define APR_WANT_STRFUNC -#include "apr_want.h" - -#if 0 -#define apr_palloc(pool,size) malloc(size) -#endif - -APU_DECLARE_DATA apr_pool_t *apr_hook_global_pool = NULL; -APU_DECLARE_DATA int apr_hook_debug_enabled = 0; -APU_DECLARE_DATA const char *apr_hook_debug_current = NULL; - -/** @deprecated @see apr_hook_global_pool */ -APU_DECLARE_DATA apr_pool_t *apr_global_hook_pool = NULL; - -/** @deprecated @see apr_hook_debug_enabled */ -APU_DECLARE_DATA int apr_debug_module_hooks = 0; - -/** @deprecated @see apr_hook_debug_current */ -APU_DECLARE_DATA const char *apr_current_hooking_module = NULL; - -/* NB: This must echo the LINK_##name structure */ -typedef struct -{ - void (*dummy)(void *); - const char *szName; - const char * const *aszPredecessors; - const char * const *aszSuccessors; - int nOrder; -} TSortData; - -typedef struct tsort_ -{ - void *pData; - int nPredecessors; - struct tsort_ **ppPredecessors; - struct tsort_ *pNext; -} TSort; - -#ifdef NETWARE -#include "apr_private.h" -#define get_apd APP_DATA* apd = (APP_DATA*)get_app_data(gLibId); -#define s_aHooksToSort ((apr_array_header_t *)(apd->gs_aHooksToSort)) -#define s_phOptionalHooks ((apr_hash_t *)(apd->gs_phOptionalHooks)) -#define s_phOptionalFunctions ((apr_hash_t *)(apd->gs_phOptionalFunctions)) -#endif - -static int crude_order(const void *a_,const void *b_) -{ - const TSortData *a=a_; - const TSortData *b=b_; - - return a->nOrder-b->nOrder; -} - -static TSort *prepare(apr_pool_t *p,TSortData *pItems,int nItems) -{ - TSort *pData=apr_palloc(p,nItems*sizeof *pData); - int n; - - qsort(pItems,nItems,sizeof *pItems,crude_order); - for(n=0 ; n < nItems ; ++n) { - pData[n].nPredecessors=0; - pData[n].ppPredecessors=apr_pcalloc(p,nItems*sizeof *pData[n].ppPredecessors); - pData[n].pNext=NULL; - pData[n].pData=&pItems[n]; - } - - for(n=0 ; n < nItems ; ++n) { - int i,k; - - for(i=0 ; pItems[n].aszPredecessors && pItems[n].aszPredecessors[i] ; ++i) - for(k=0 ; k < nItems ; ++k) - if(!strcmp(pItems[k].szName,pItems[n].aszPredecessors[i])) { - int l; - - for(l=0 ; l < pData[n].nPredecessors ; ++l) - if(pData[n].ppPredecessors[l] == &pData[k]) - goto got_it; - pData[n].ppPredecessors[pData[n].nPredecessors]=&pData[k]; - ++pData[n].nPredecessors; - got_it: - break; - } - for(i=0 ; pItems[n].aszSuccessors && pItems[n].aszSuccessors[i] ; ++i) - for(k=0 ; k < nItems ; ++k) - if(!strcmp(pItems[k].szName,pItems[n].aszSuccessors[i])) { - int l; - - for(l=0 ; l < pData[k].nPredecessors ; ++l) - if(pData[k].ppPredecessors[l] == &pData[n]) - goto got_it2; - pData[k].ppPredecessors[pData[k].nPredecessors]=&pData[n]; - ++pData[k].nPredecessors; - got_it2: - break; - } - } - - return pData; -} - -/* Topologically sort, dragging out-of-order items to the front. Note that - this tends to preserve things that want to be near the front better, and - changing that behaviour might compromise some of Apache's behaviour (in - particular, mod_log_forensic might otherwise get pushed to the end, and - core.c's log open function used to end up at the end when pushing items - to the back was the methedology). Also note that the algorithm could - go back to its original simplicity by sorting from the back instead of - the front. -*/ -static TSort *tsort(TSort *pData,int nItems) -{ - int nTotal; - TSort *pHead=NULL; - TSort *pTail=NULL; - - for(nTotal=0 ; nTotal < nItems ; ++nTotal) { - int n,i,k; - - for(n=0 ; ; ++n) { - if(n == nItems) - assert(0); /* we have a loop... */ - if(!pData[n].pNext) { - if(pData[n].nPredecessors) { - for(k=0 ; ; ++k) { - assert(k < nItems); - if(pData[n].ppPredecessors[k]) - break; - } - for(i=0 ; ; ++i) { - assert(i < nItems); - if(&pData[i] == pData[n].ppPredecessors[k]) { - n=i-1; - break; - } - } - } else - break; - } - } - if(pTail) - pTail->pNext=&pData[n]; - else - pHead=&pData[n]; - pTail=&pData[n]; - pTail->pNext=pTail; /* fudge it so it looks linked */ - for(i=0 ; i < nItems ; ++i) - for(k=0 ; k < nItems ; ++k) - if(pData[i].ppPredecessors[k] == &pData[n]) { - --pData[i].nPredecessors; - pData[i].ppPredecessors[k]=NULL; - break; - } - } - pTail->pNext=NULL; /* unfudge the tail */ - return pHead; -} - -static apr_array_header_t *sort_hook(apr_array_header_t *pHooks, - const char *szName) -{ - apr_pool_t *p; - TSort *pSort; - apr_array_header_t *pNew; - int n; - - apr_pool_create(&p, apr_hook_global_pool); - pSort=prepare(p,(TSortData *)pHooks->elts,pHooks->nelts); - pSort=tsort(pSort,pHooks->nelts); - pNew=apr_array_make(apr_hook_global_pool,pHooks->nelts,sizeof(TSortData)); - if(apr_hook_debug_enabled) - printf("Sorting %s:",szName); - for(n=0 ; pSort ; pSort=pSort->pNext,++n) { - TSortData *pHook; - assert(n < pHooks->nelts); - pHook=apr_array_push(pNew); - memcpy(pHook,pSort->pData,sizeof *pHook); - if(apr_hook_debug_enabled) - printf(" %s",pHook->szName); - } - if(apr_hook_debug_enabled) - fputc('\n',stdout); - - /* destroy the pool - the sorted hooks were already copied */ - apr_pool_destroy(p); - - return pNew; -} - -#ifndef NETWARE -static apr_array_header_t *s_aHooksToSort; -#endif - -typedef struct -{ - const char *szHookName; - apr_array_header_t **paHooks; -} HookSortEntry; - -APU_DECLARE(void) apr_hook_sort_register(const char *szHookName, - apr_array_header_t **paHooks) -{ -#ifdef NETWARE - get_apd -#endif - HookSortEntry *pEntry; - - if(!s_aHooksToSort) - s_aHooksToSort=apr_array_make(apr_hook_global_pool,1,sizeof(HookSortEntry)); - pEntry=apr_array_push(s_aHooksToSort); - pEntry->szHookName=szHookName; - pEntry->paHooks=paHooks; -} - -APU_DECLARE(void) apr_hook_sort_all(void) -{ -#ifdef NETWARE - get_apd -#endif - int n; - - if (!s_aHooksToSort) { - s_aHooksToSort = apr_array_make(apr_hook_global_pool, 1, sizeof(HookSortEntry)); - } - - for(n=0 ; n < s_aHooksToSort->nelts ; ++n) { - HookSortEntry *pEntry=&((HookSortEntry *)s_aHooksToSort->elts)[n]; - *pEntry->paHooks=sort_hook(*pEntry->paHooks,pEntry->szHookName); - } -} - -#ifndef NETWARE -static apr_hash_t *s_phOptionalHooks; -static apr_hash_t *s_phOptionalFunctions; -#endif - -APU_DECLARE(void) apr_hook_deregister_all(void) -{ -#ifdef NETWARE - get_apd -#endif - int n; - - if (!s_aHooksToSort) { - return; - } - - for(n=0 ; n < s_aHooksToSort->nelts ; ++n) { - HookSortEntry *pEntry=&((HookSortEntry *)s_aHooksToSort->elts)[n]; - *pEntry->paHooks=NULL; - } - s_aHooksToSort=NULL; - s_phOptionalHooks=NULL; - s_phOptionalFunctions=NULL; -} - -APU_DECLARE(void) apr_hook_debug_show(const char *szName, - const char * const *aszPre, - const char * const *aszSucc) -{ - int nFirst; - - printf(" Hooked %s",szName); - if(aszPre) { - fputs(" pre(",stdout); - nFirst=1; - while(*aszPre) { - if(!nFirst) - fputc(',',stdout); - nFirst=0; - fputs(*aszPre,stdout); - ++aszPre; - } - fputc(')',stdout); - } - if(aszSucc) { - fputs(" succ(",stdout); - nFirst=1; - while(*aszSucc) { - if(!nFirst) - fputc(',',stdout); - nFirst=0; - fputs(*aszSucc,stdout); - ++aszSucc; - } - fputc(')',stdout); - } - fputc('\n',stdout); -} - -/* Optional hook support */ - -APR_DECLARE_EXTERNAL_HOOK(apr,APU,void,_optional,(void)) - -APU_DECLARE(apr_array_header_t *) apr_optional_hook_get(const char *szName) -{ -#ifdef NETWARE - get_apd -#endif - apr_array_header_t **ppArray; - - if(!s_phOptionalHooks) - return NULL; - ppArray=apr_hash_get(s_phOptionalHooks,szName,strlen(szName)); - if(!ppArray) - return NULL; - return *ppArray; -} - -APU_DECLARE(void) apr_optional_hook_add(const char *szName,void (*pfn)(void), - const char * const *aszPre, - const char * const *aszSucc,int nOrder) -{ -#ifdef NETWARE - get_apd -#endif - apr_array_header_t *pArray=apr_optional_hook_get(szName); - apr_LINK__optional_t *pHook; - - if(!pArray) { - apr_array_header_t **ppArray; - - pArray=apr_array_make(apr_hook_global_pool,1, - sizeof(apr_LINK__optional_t)); - if(!s_phOptionalHooks) - s_phOptionalHooks=apr_hash_make(apr_hook_global_pool); - ppArray=apr_palloc(apr_hook_global_pool,sizeof *ppArray); - *ppArray=pArray; - apr_hash_set(s_phOptionalHooks,szName,strlen(szName),ppArray); - apr_hook_sort_register(szName,ppArray); - } - pHook=apr_array_push(pArray); - pHook->pFunc=pfn; - pHook->aszPredecessors=aszPre; - pHook->aszSuccessors=aszSucc; - pHook->nOrder=nOrder; - pHook->szName=apr_hook_debug_current; - if(apr_hook_debug_enabled) - apr_hook_debug_show(szName,aszPre,aszSucc); -} - -/* optional function support */ - -APU_DECLARE(apr_opt_fn_t *) apr_dynamic_fn_retrieve(const char *szName) -{ -#ifdef NETWARE - get_apd -#endif - if(!s_phOptionalFunctions) - return NULL; - return (void(*)(void))apr_hash_get(s_phOptionalFunctions,szName,strlen(szName)); -} - -/* Deprecated */ -APU_DECLARE_NONSTD(void) apr_dynamic_fn_register(const char *szName, - apr_opt_fn_t *pfn) -{ -#ifdef NETWARE - get_apd -#endif - if(!s_phOptionalFunctions) - s_phOptionalFunctions=apr_hash_make(apr_hook_global_pool); - apr_hash_set(s_phOptionalFunctions,szName,strlen(szName),(void *)pfn); -} - -#if 0 -void main() -{ - const char *aszAPre[]={"b","c",NULL}; - const char *aszBPost[]={"a",NULL}; - const char *aszCPost[]={"b",NULL}; - TSortData t1[]= - { - { "a",aszAPre,NULL }, - { "b",NULL,aszBPost }, - { "c",NULL,aszCPost } - }; - TSort *pResult; - - pResult=prepare(t1,3); - pResult=tsort(pResult,3); - - for( ; pResult ; pResult=pResult->pNext) - printf("%s\n",pResult->pData->szName); -} -#endif Index: contrib/apr-util/include/apr_anylock.h =================================================================== --- contrib/apr-util/include/apr_anylock.h +++ /dev/null @@ -1,128 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_base64.h =================================================================== --- contrib/apr-util/include/apr_base64.h +++ /dev/null @@ -1,113 +0,0 @@ -/* 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 for xinetd. - */ - -/** - * @file apr_base64.h - * @brief APR-UTIL Base64 Encoding - */ -#ifndef APR_BASE64_H -#define APR_BASE64_H - -#include "apu.h" -#include "apr_general.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup APR_Util_Base64 Base64 Encoding - * @ingroup APR_Util - * @{ - */ - -/* Simple BASE64 encode/decode functions. - * - * As we might encode binary strings, hence we require the length of - * the incoming plain source. And return the length of what we decoded. - * - * The decoding function takes any non valid char (i.e. whitespace, \0 - * or anything non A-Z,0-9 etc as terminal. - * - * plain strings/binary sequences are not assumed '\0' terminated. Encoded - * strings are neither. But probably should. - * - */ - -/** - * Given the length of an un-encoded string, get the length of the - * encoded string. - * @param len the length of an unencoded string. - * @return the length of the string after it is encoded, including the - * trailing \0 - */ -APU_DECLARE(int) apr_base64_encode_len(int len); - -/** - * Encode a text string using base64encoding. - * @param coded_dst The destination string for the encoded string. - * @param plain_src The original string in plain text - * @param len_plain_src The length of the plain text string - * @return the length of the encoded string - */ -APU_DECLARE(int) apr_base64_encode(char * coded_dst, const char *plain_src, - int len_plain_src); - -/** - * Encode an EBCDIC string using base64encoding. - * @param coded_dst The destination string for the encoded string. - * @param plain_src The original string in plain text - * @param len_plain_src The length of the plain text string - * @return the length of the encoded string - */ -APU_DECLARE(int) apr_base64_encode_binary(char * coded_dst, - const unsigned char *plain_src, - int len_plain_src); - -/** - * Determine the maximum buffer length required to decode the plain text - * string given the encoded string. - * @param coded_src The encoded string - * @return the maximum required buffer length for the plain text string - */ -APU_DECLARE(int) apr_base64_decode_len(const char * coded_src); - -/** - * Decode a string to plain text - * @param plain_dst The destination string for the plain text - * @param coded_src The encoded string - * @return the length of the plain text string - */ -APU_DECLARE(int) apr_base64_decode(char * plain_dst, const char *coded_src); - -/** - * Decode an EBCDIC string to plain text - * @param plain_dst The destination string for the plain text - * @param coded_src The encoded string - * @return the length of the plain text string - */ -APU_DECLARE(int) apr_base64_decode_binary(unsigned char * plain_dst, - const char *coded_src); - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* !APR_BASE64_H */ Index: contrib/apr-util/include/apr_buckets.h =================================================================== --- contrib/apr-util/include/apr_buckets.h +++ /dev/null @@ -1,1598 +0,0 @@ -/* 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_buckets.h - * @brief APR-UTIL Buckets/Bucket Brigades - */ - -#ifndef APR_BUCKETS_H -#define APR_BUCKETS_H - -#if defined(APR_BUCKET_DEBUG) && !defined(APR_RING_DEBUG) -#define APR_RING_DEBUG -#endif - -#include "apu.h" -#include "apr_network_io.h" -#include "apr_file_io.h" -#include "apr_general.h" -#include "apr_mmap.h" -#include "apr_errno.h" -#include "apr_ring.h" -#include "apr.h" -#if APR_HAVE_SYS_UIO_H -#include /* for struct iovec */ -#endif -#if APR_HAVE_STDARG_H -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup APR_Util_Bucket_Brigades Bucket Brigades - * @ingroup APR_Util - * @{ - */ - -/** default bucket buffer size - 8KB minus room for memory allocator headers */ -#define APR_BUCKET_BUFF_SIZE 8000 - -/** Determines how a bucket or brigade should be read */ -typedef enum { - APR_BLOCK_READ, /**< block until data becomes available */ - APR_NONBLOCK_READ /**< return immediately if no data is available */ -} apr_read_type_e; - -/** - * The one-sentence buzzword-laden overview: Bucket brigades represent - * a complex data stream that can be passed through a layered IO - * system without unnecessary copying. A longer overview follows... - * - * A bucket brigade is a doubly linked list (ring) of buckets, so we - * aren't limited to inserting at the front and removing at the end. - * Buckets are only passed around as members of a brigade, although - * singleton buckets can occur for short periods of time. - * - * Buckets are data stores of various types. They can refer to data in - * memory, or part of a file or mmap area, or the output of a process, - * etc. Buckets also have some type-dependent accessor functions: - * read, split, copy, setaside, and destroy. - * - * read returns the address and size of the data in the bucket. If the - * data isn't in memory then it is read in and the bucket changes type - * so that it can refer to the new location of the data. If all the - * data doesn't fit in the bucket then a new bucket is inserted into - * the brigade to hold the rest of it. - * - * split divides the data in a bucket into two regions. After a split - * the original bucket refers to the first part of the data and a new - * bucket inserted into the brigade after the original bucket refers - * to the second part of the data. Reference counts are maintained as - * necessary. - * - * setaside ensures that the data in the bucket has a long enough - * lifetime. Sometimes it is convenient to create a bucket referring - * to data on the stack in the expectation that it will be consumed - * (output to the network) before the stack is unwound. If that - * expectation turns out not to be valid, the setaside function is - * called to move the data somewhere safer. - * - * copy makes a duplicate of the bucket structure as long as it's - * possible to have multiple references to a single copy of the - * data itself. Not all bucket types can be copied. - * - * destroy maintains the reference counts on the resources used by a - * bucket and frees them if necessary. - * - * Note: all of the above functions have wrapper macros (apr_bucket_read(), - * apr_bucket_destroy(), etc), and those macros should be used rather - * than using the function pointers directly. - * - * To write a bucket brigade, they are first made into an iovec, so that we - * don't write too little data at one time. Currently we ignore compacting the - * buckets into as few buckets as possible, but if we really want good - * performance, then we need to compact the buckets before we convert to an - * iovec, or possibly while we are converting to an iovec. - */ - -/* - * Forward declaration of the main types. - */ - -/** @see apr_bucket_brigade */ -typedef struct apr_bucket_brigade apr_bucket_brigade; -/** @see apr_bucket */ -typedef struct apr_bucket apr_bucket; -/** @see apr_bucket_alloc_t */ -typedef struct apr_bucket_alloc_t apr_bucket_alloc_t; - -/** @see apr_bucket_type_t */ -typedef struct apr_bucket_type_t apr_bucket_type_t; - -/** - * Basic bucket type - */ -struct apr_bucket_type_t { - /** - * The name of the bucket type - */ - const char *name; - /** - * The number of functions this bucket understands. Can not be less than - * five. - */ - int num_func; - /** - * Whether the bucket contains metadata (ie, information that - * describes the regular contents of the brigade). The metadata - * is not returned by apr_bucket_read() and is not indicated by - * the ->length of the apr_bucket itself. In other words, an - * empty bucket is safe to arbitrarily remove if and only if it - * contains no metadata. In this sense, "data" is just raw bytes - * that are the "content" of the brigade and "metadata" describes - * that data but is not a proper part of it. - */ - enum { - /** This bucket type represents actual data to send to the client. */ - APR_BUCKET_DATA = 0, - /** This bucket type represents metadata. */ - APR_BUCKET_METADATA = 1 - } is_metadata; - /** - * Free the private data and any resources used by the bucket (if they - * aren't shared with another bucket). This function is required to be - * implemented for all bucket types, though it might be a no-op on some - * of them (namely ones that never allocate any private data structures). - * @param data The private data pointer from the bucket to be destroyed - */ - void (*destroy)(void *data); - - /** - * Read the data from the bucket. This is required to be implemented - * for all bucket types. - * @param b The bucket to read from - * @param str A place to store the data read. Allocation should only be - * done if absolutely necessary. - * @param len The amount of data read. - * @param block Should this read function block if there is more data that - * cannot be read immediately. - */ - apr_status_t (*read)(apr_bucket *b, const char **str, apr_size_t *len, - apr_read_type_e block); - - /** - * Make it possible to set aside the data for at least as long as the - * given pool. Buckets containing data that could potentially die before - * this pool (e.g. the data resides on the stack, in a child pool of - * the given pool, or in a disjoint pool) must somehow copy, shift, or - * transform the data to have the proper lifetime. - * @param e The bucket to convert - * @remark Some bucket types contain data that will always outlive the - * bucket itself. For example no data (EOS and FLUSH), or the data - * resides in global, constant memory (IMMORTAL), or the data is on - * the heap (HEAP). For these buckets, apr_bucket_setaside_noop can - * be used. - */ - apr_status_t (*setaside)(apr_bucket *e, apr_pool_t *pool); - - /** - * Split one bucket in two at the specified position by duplicating - * the bucket structure (not the data) and modifying any necessary - * start/end/offset information. If it's not possible to do this - * for the bucket type (perhaps the length of the data is indeterminate, - * as with pipe and socket buckets), then APR_ENOTIMPL is returned. - * @param e The bucket to split - * @param point The offset of the first byte in the new bucket - */ - apr_status_t (*split)(apr_bucket *e, apr_size_t point); - - /** - * Copy the bucket structure (not the data), assuming that this is - * possible for the bucket type. If it's not, APR_ENOTIMPL is returned. - * @param e The bucket to copy - * @param c Returns a pointer to the new bucket - */ - apr_status_t (*copy)(apr_bucket *e, apr_bucket **c); - -}; - -/** - * apr_bucket structures are allocated on the malloc() heap and - * their lifetime is controlled by the parent apr_bucket_brigade - * structure. Buckets can move from one brigade to another e.g. by - * calling APR_BRIGADE_CONCAT(). In general the data in a bucket has - * the same lifetime as the bucket and is freed when the bucket is - * destroyed; if the data is shared by more than one bucket (e.g. - * after a split) the data is freed when the last bucket goes away. - */ -struct apr_bucket { - /** Links to the rest of the brigade */ - APR_RING_ENTRY(apr_bucket) link; - /** The type of bucket. */ - const apr_bucket_type_t *type; - /** The length of the data in the bucket. This could have been implemented - * with a function, but this is an optimization, because the most - * common thing to do will be to get the length. If the length is unknown, - * the value of this field will be (apr_size_t)(-1). - */ - apr_size_t length; - /** The start of the data in the bucket relative to the private base - * pointer. The vast majority of bucket types allow a fixed block of - * data to be referenced by multiple buckets, each bucket pointing to - * a different segment of the data. That segment starts at base+start - * and ends at base+start+length. - * If the length == (apr_size_t)(-1), then start == -1. - */ - apr_off_t start; - /** type-dependent data hangs off this pointer */ - void *data; - /** - * Pointer to function used to free the bucket. This function should - * always be defined and it should be consistent with the memory - * function used to allocate the bucket. For example, if malloc() is - * used to allocate the bucket, this pointer should point to free(). - * @param e Pointer to the bucket being freed - */ - void (*free)(void *e); - /** The freelist from which this bucket was allocated */ - apr_bucket_alloc_t *list; -}; - -/** A list of buckets */ -struct apr_bucket_brigade { - /** The pool to associate the brigade with. The data is not allocated out - * of the pool, but a cleanup is registered with this pool. If the - * brigade is destroyed by some mechanism other than pool destruction, - * the destroying function is responsible for killing the cleanup. - */ - apr_pool_t *p; - /** The buckets in the brigade are on this list. */ - /* - * The apr_bucket_list structure doesn't actually need a name tag - * because it has no existence independent of struct apr_bucket_brigade; - * the ring macros are designed so that you can leave the name tag - * argument empty in this situation but apparently the Windows compiler - * doesn't like that. - */ - APR_RING_HEAD(apr_bucket_list, apr_bucket) list; - /** The freelist from which this bucket was allocated */ - apr_bucket_alloc_t *bucket_alloc; -}; - - -/** - * Function called when a brigade should be flushed - */ -typedef apr_status_t (*apr_brigade_flush)(apr_bucket_brigade *bb, void *ctx); - -/* - * define APR_BUCKET_DEBUG if you want your brigades to be checked for - * validity at every possible instant. this will slow your code down - * substantially but is a very useful debugging tool. - */ -#ifdef APR_BUCKET_DEBUG - -#define APR_BRIGADE_CHECK_CONSISTENCY(b) \ - APR_RING_CHECK_CONSISTENCY(&(b)->list, apr_bucket, link) - -#define APR_BUCKET_CHECK_CONSISTENCY(e) \ - APR_RING_CHECK_ELEM_CONSISTENCY((e), apr_bucket, link) - -#else -/** - * checks the ring pointers in a bucket brigade for consistency. an - * abort() will be triggered if any inconsistencies are found. - * note: this is a no-op unless APR_BUCKET_DEBUG is defined. - * @param b The brigade - */ -#define APR_BRIGADE_CHECK_CONSISTENCY(b) -/** - * checks the brigade a bucket is in for ring consistency. an - * abort() will be triggered if any inconsistencies are found. - * note: this is a no-op unless APR_BUCKET_DEBUG is defined. - * @param e The bucket - */ -#define APR_BUCKET_CHECK_CONSISTENCY(e) -#endif - - -/** - * Wrappers around the RING macros to reduce the verbosity of the code - * that handles bucket brigades. - */ -/** - * The magic pointer value that indicates the head of the brigade - * @remark This is used to find the beginning and end of the brigade, eg: - *
- *      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 */ - /** File read block size */ - apr_size_t read_size; -}; - -/** @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); - -/** - * Get the aligned size corresponding to the requested size, but minus the - * allocator(s) overhead such that the allocation would remain in the - * same boundary. - * @param list The allocator from which to the memory would be allocated. - * @param size The requested size. - * @return The corresponding aligned/floored size. - */ -APU_DECLARE_NONSTD(apr_size_t) apr_bucket_alloc_aligned_floor(apr_bucket_alloc_t *list, - apr_size_t size) - __attribute__((nonnull(1))); - -/** - * Allocate memory for use by the buckets. - * @param size The amount to allocate. - * @param list The allocator from which to allocate the memory. - */ -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); - -/** - * Set the size of the read buffer allocated by a FILE bucket (default - * is @a APR_BUCKET_BUFF_SIZE) - * memory-mapping is disabled only) - * @param b The bucket - * @param size Size of the allocated buffers - * @return APR_SUCCESS normally, or an error code if the operation fails - * @remark Relevant/used only when memory-mapping is disabled (@see - * apr_bucket_file_enable_mmap) - */ -APU_DECLARE(apr_status_t) apr_bucket_file_set_buf_size(apr_bucket *e, - apr_size_t size); - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* !APR_BUCKETS_H */ Index: contrib/apr-util/include/apr_crypto.h =================================================================== --- contrib/apr-util/include/apr_crypto.h +++ /dev/null @@ -1,507 +0,0 @@ -/* 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_COMMONCRYPTO -#define APU_CRYPTO_RECOMMENDED_DRIVER "commoncrypto" -#else -#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 -#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 CommonCrypto NSS Interop - * Align Pad Align Pad Align Pad Align Pad - * 3DES_192/CBC X X X X X X X X - * 3DES_192/ECB X X X X - * AES_256/CBC X X X X X X X X - * AES_256/ECB X X X X X X - * AES_192/CBC X X X X X X - * AES_192/ECB X X X X X - * AES_128/CBC X X X X X X - * AES_128/ECB X X X X X - * - * Conclusion: for padded data, use 3DES_192/CBC or AES_256/CBC. For - * aligned data, use 3DES_192/CBC, AES_256/CBC or AES_256/ECB. - */ - -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; - -typedef struct apr_crypto_block_key_type_t { - apr_crypto_block_key_type_e type; - int keysize; - int blocksize; - int ivsize; -} apr_crypto_block_key_type_t; - -typedef struct apr_crypto_block_key_mode_t { - apr_crypto_block_key_mode_e mode; -} apr_crypto_block_key_mode_t; - -typedef struct apr_crypto_passphrase_t { - const char *pass; - apr_size_t passLen; - const unsigned char * salt; - apr_size_t saltLen; - int iterations; -} apr_crypto_passphrase_t; - -typedef struct apr_crypto_secret_t { - const unsigned char *secret; - apr_size_t secretLen; -} apr_crypto_secret_t; - -typedef enum { - /** Key is derived from a passphrase */ - APR_CRYPTO_KTYPE_PASSPHRASE = 1, - /** Key is derived from a raw key */ - APR_CRYPTO_KTYPE_SECRET = 2, -} apr_crypto_key_type; - -typedef struct apr_crypto_key_rec_t { - apr_crypto_key_type ktype; - apr_crypto_block_key_type_e type; - apr_crypto_block_key_mode_e mode; - int pad; - union { - apr_crypto_passphrase_t passphrase; - apr_crypto_secret_t secret; - } k; -} apr_crypto_key_rec_t; - -/** - * @brief Perform once-only initialisation. Call once only. - * - * @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 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 Always zero out the buffer provided, without being optimized out by - * the compiler. - * - * @param buffer - buffer to zero out - * @param size - size of the buffer to zero out - */ -APU_DECLARE(apr_status_t) apr_crypto_memzero(void *buffer, apr_size_t size); - -/** - * @brief Timing attacks safe buffers comparison, where the executing time does - * not depend on the bytes compared but solely on the number of bytes. - * - * @param buf1 - first buffer to compare - * @param buf2 - second buffer to compare - * @param size - size of the buffers to compare - * @return 1 if the buffers are equals, 0 otherwise. - */ -APU_DECLARE(int) apr_crypto_equals(const void *buf1, const void *buf2, - apr_size_t size); - -/** - * @brief Get the driver struct for a name - * - * @param driver - pointer to driver struct. - * @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 - * a pointer to apr_crypto_block_key_type_t, which in turn begins with an - * integer. - * - * @param types - hashtable of key types keyed to constants. - * @param f - encryption context - * @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 - * a pointer to apr_crypto_block_key_mode_t, which in turn begins with an - * integer. - * - * @param modes - hashtable of key modes keyed to constants. - * @param f - encryption context - * @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 provided secret or passphrase. The key is cleaned - * up when the context is cleaned, and may be reused with multiple encryption - * or decryption operations. - * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If - * *key is not NULL, *key must point at a previously created structure. - * @param key The key returned, see note. - * @param rec The key record, from which the key will be derived. - * @param f The context to use. - * @param p The pool to use. - * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend - * error occurred while generating the key. APR_ENOCIPHER if the type or mode - * is not supported by the particular backend. APR_EKEYTYPE if the key type is - * not known. APR_EPADDING if padding was requested but is not supported. - * APR_ENOTIMPL if not implemented. - */ -APU_DECLARE(apr_status_t) apr_crypto_key(apr_crypto_key_t **key, - const apr_crypto_key_rec_t *rec, const apr_crypto_t *f, apr_pool_t *p); - -/** - * @brief Create a key from the given passphrase. By default, the PBKDF2 - * algorithm is used to generate the key from the passphrase. It is expected - * that the same pass phrase will generate the same key, regardless of the - * 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. - * @deprecated Replaced by apr_crypto_key(). - */ -APU_DECLARE(apr_status_t) apr_crypto_passphrase(apr_crypto_key_t **key, - apr_size_t *ivSize, const char *pass, apr_size_t passLen, - 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 Index: contrib/apr-util/include/apr_date.h =================================================================== --- contrib/apr-util/include/apr_date.h +++ /dev/null @@ -1,106 +0,0 @@ -/* 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_DATE_H -#define APR_DATE_H - -/** - * @file apr_date.h - * @brief APR-UTIL date routines - */ - -/** - * @defgroup APR_Util_Date Date routines - * @ingroup APR_Util - * @{ - */ - -/* - * apr_date.h: prototypes for date parsing utility routines - */ - -#include "apu.h" -#include "apr_time.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** A bad date. */ -#define APR_DATE_BAD ((apr_time_t)0) - -/** - * Compare a string to a mask - * @param data The string to compare - * @param mask Mask characters (arbitrary maximum is 256 characters): - *
- *   '\@' - 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 */ Index: contrib/apr-util/include/apr_dbd.h =================================================================== --- contrib/apr-util/include/apr_dbd.h +++ /dev/null @@ -1,549 +0,0 @@ -/* 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. - */ - -/* Overview of what this is and does: - * http://www.apache.org/~niq/dbd.html - */ - -#ifndef APR_DBD_H -#define APR_DBD_H - -#include "apu.h" -#include "apr_pools.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file apr_dbd.h - * @brief APR-UTIL DBD library - */ -/** - * @defgroup APR_Util_DBD DBD routines - * @ingroup APR_Util - * @{ - */ - -/** - * Mapping of C to SQL types, used for prepared statements. - * @remarks - * For apr_dbd_p[v]query/select functions, in and out parameters are always - * const char * (i.e. regular nul terminated strings). LOB types are passed - * with four (4) arguments: payload, length, table and column, all as const - * char *, where table and column are reserved for future use by Oracle. - * @remarks - * For apr_dbd_p[v]bquery/select functions, in and out parameters are - * described next to each enumeration constant and are generally native binary - * types or some APR data type. LOB types are passed with four (4) arguments: - * payload (char*), length (apr_size_t*), table (char*) and column (char*). - * Table and column are reserved for future use by Oracle. - */ -typedef enum { - APR_DBD_TYPE_NONE, - APR_DBD_TYPE_TINY, /**< \%hhd : in, out: char* */ - APR_DBD_TYPE_UTINY, /**< \%hhu : in, out: unsigned char* */ - APR_DBD_TYPE_SHORT, /**< \%hd : in, out: short* */ - APR_DBD_TYPE_USHORT, /**< \%hu : in, out: unsigned short* */ - APR_DBD_TYPE_INT, /**< \%d : in, out: int* */ - APR_DBD_TYPE_UINT, /**< \%u : in, out: unsigned int* */ - APR_DBD_TYPE_LONG, /**< \%ld : in, out: long* */ - APR_DBD_TYPE_ULONG, /**< \%lu : in, out: unsigned long* */ - APR_DBD_TYPE_LONGLONG, /**< \%lld : in, out: apr_int64_t* */ - APR_DBD_TYPE_ULONGLONG, /**< \%llu : in, out: apr_uint64_t* */ - APR_DBD_TYPE_FLOAT, /**< \%f : in, out: float* */ - APR_DBD_TYPE_DOUBLE, /**< \%lf : in, out: double* */ - APR_DBD_TYPE_STRING, /**< \%s : in: char*, out: char** */ - APR_DBD_TYPE_TEXT, /**< \%pDt : in: char*, out: char** */ - APR_DBD_TYPE_TIME, /**< \%pDi : in: char*, out: char** */ - APR_DBD_TYPE_DATE, /**< \%pDd : in: char*, out: char** */ - APR_DBD_TYPE_DATETIME, /**< \%pDa : in: char*, out: char** */ - APR_DBD_TYPE_TIMESTAMP, /**< \%pDs : in: char*, out: char** */ - APR_DBD_TYPE_ZTIMESTAMP, /**< \%pDz : in: char*, out: char** */ - APR_DBD_TYPE_BLOB, /**< \%pDb : in: char* apr_size_t* char* char*, out: apr_bucket_brigade* */ - APR_DBD_TYPE_CLOB, /**< \%pDc : in: char* apr_size_t* char* char*, out: apr_bucket_brigade* */ - APR_DBD_TYPE_NULL /**< \%pDn : in: void*, out: void** */ -} apr_dbd_type_e; - -/* These are opaque structs. Instantiation is up to each backend */ -typedef struct apr_dbd_driver_t apr_dbd_driver_t; -typedef struct apr_dbd_t apr_dbd_t; -typedef struct apr_dbd_transaction_t apr_dbd_transaction_t; -typedef struct apr_dbd_results_t apr_dbd_results_t; -typedef struct apr_dbd_row_t apr_dbd_row_t; -typedef struct apr_dbd_prepared_t apr_dbd_prepared_t; - -/** apr_dbd_init: perform once-only initialisation. Call once only. - * - * @param pool - pool to register any shutdown cleanups, etc - */ -APU_DECLARE(apr_status_t) apr_dbd_init(apr_pool_t *pool); - -/** apr_dbd_get_driver: get the driver struct for a name - * - * @param pool - (process) pool to register cleanup - * @param name - driver name - * @param driver - pointer to driver struct. - * @return APR_SUCCESS for success - * @return APR_ENOTIMPL for no driver (when DSO not enabled) - * @return APR_EDSOOPEN if DSO driver file can't be opened - * @return APR_ESYMNOTFOUND if the driver file doesn't contain a driver - */ -APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name, - const apr_dbd_driver_t **driver); - -/** apr_dbd_open_ex: open a connection to a backend - * - * @param driver - driver struct. - * @param pool - working pool - * @param params - arguments to driver (implementation-dependent) - * @param handle - pointer to handle to return - * @param error - descriptive error. - * @return APR_SUCCESS for success - * @return APR_EGENERAL if driver exists but connection failed - * @remarks PostgreSQL: the params is passed directly to the PQconnectdb() - * function (check PostgreSQL documentation for more details on the syntax). - * @remarks SQLite2: the params is split on a colon, with the first part used - * as the filename and second part converted to an integer and used as file - * mode. - * @remarks SQLite3: the params is passed directly to the sqlite3_open() - * function as a filename to be opened (check SQLite3 documentation for more - * details). - * @remarks Oracle: the params can have "user", "pass", "dbname" and "server" - * keys, each followed by an equal sign and a value. Such key/value pairs can - * be delimited by space, CR, LF, tab, semicolon, vertical bar or comma. - * @remarks MySQL: the params can have "host", "port", "user", "pass", - * "dbname", "sock", "flags" "fldsz", "group" and "reconnect" keys, each - * followed by an equal sign and a value. Such key/value pairs can be - * delimited by space, CR, LF, tab, semicolon, vertical bar or comma. For - * now, "flags" can only recognise CLIENT_FOUND_ROWS (check MySQL manual for - * details). The value associated with "fldsz" determines maximum amount of - * memory (in bytes) for each of the fields in the result set of prepared - * statements. By default, this value is 1 MB. The value associated with - * "group" determines which group from configuration file to use (see - * MYSQL_READ_DEFAULT_GROUP option of mysql_options() in MySQL manual). - * Reconnect is set to 1 by default (i.e. true). - */ -APU_DECLARE(apr_status_t) apr_dbd_open_ex(const apr_dbd_driver_t *driver, - apr_pool_t *pool, const char *params, - apr_dbd_t **handle, - const char **error); - -/** apr_dbd_open: open a connection to a backend - * - * @param driver - driver struct. - * @param pool - working pool - * @param params - arguments to driver (implementation-dependent) - * @param handle - pointer to handle to return - * @return APR_SUCCESS for success - * @return APR_EGENERAL if driver exists but connection failed - * @see apr_dbd_open_ex - */ -APU_DECLARE(apr_status_t) apr_dbd_open(const apr_dbd_driver_t *driver, - apr_pool_t *pool, const char *params, - apr_dbd_t **handle); - -/** apr_dbd_close: close a connection to a backend - * - * @param driver - driver struct. - * @param handle - handle to close - * @return APR_SUCCESS for success or error status - */ -APU_DECLARE(apr_status_t) apr_dbd_close(const apr_dbd_driver_t *driver, - apr_dbd_t *handle); - -/* apr-function-shaped versions of things */ - -/** apr_dbd_name: get the name of the driver - * - * @param driver - the driver - * @return - name - */ -APU_DECLARE(const char*) apr_dbd_name(const apr_dbd_driver_t *driver); - -/** apr_dbd_native_handle: get native database handle of the underlying db - * - * @param driver - the driver - * @param handle - apr_dbd handle - * @return - native handle - */ -APU_DECLARE(void*) apr_dbd_native_handle(const apr_dbd_driver_t *driver, - apr_dbd_t *handle); - -/** check_conn: check status of a database connection - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection to check - * @return APR_SUCCESS or error - */ -APU_DECLARE(int) apr_dbd_check_conn(const apr_dbd_driver_t *driver, apr_pool_t *pool, - apr_dbd_t *handle); - -/** apr_dbd_set_dbname: select database name. May be a no-op if not supported. - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param name - the database to select - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_set_dbname(const apr_dbd_driver_t *driver, apr_pool_t *pool, - apr_dbd_t *handle, const char *name); - -/** apr_dbd_transaction_start: start a transaction. May be a no-op. - * - * @param driver - the driver - * @param pool - a pool to use for error messages (if any). - * @param handle - the db connection - * @param trans - ptr to a transaction. May be null on entry - * @return 0 for success or error code - * @remarks Note that transaction modes, set by calling - * apr_dbd_transaction_mode_set(), will affect all query/select calls within - * a transaction. By default, any error in query/select during a transaction - * will cause the transaction to inherit the error code and any further - * query/select calls will fail immediately. Put transaction in "ignore - * errors" mode to avoid that. Use "rollback" mode to do explicit rollback. - */ -APU_DECLARE(int) apr_dbd_transaction_start(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, - apr_dbd_transaction_t **trans); - -/** apr_dbd_transaction_end: end a transaction - * (commit on success, rollback on error). - * May be a no-op. - * - * @param driver - the driver - * @param handle - the db connection - * @param trans - the transaction. - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_transaction_end(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_transaction_t *trans); - -#define APR_DBD_TRANSACTION_COMMIT 0x00 /**< commit the transaction */ -#define APR_DBD_TRANSACTION_ROLLBACK 0x01 /**< rollback the transaction */ -#define APR_DBD_TRANSACTION_IGNORE_ERRORS 0x02 /**< ignore transaction errors */ - -/** apr_dbd_transaction_mode_get: get the mode of transaction - * - * @param driver - the driver - * @param trans - the transaction - * @return mode of transaction - */ -APU_DECLARE(int) apr_dbd_transaction_mode_get(const apr_dbd_driver_t *driver, - apr_dbd_transaction_t *trans); - -/** apr_dbd_transaction_mode_set: set the mode of transaction - * - * @param driver - the driver - * @param trans - the transaction - * @param mode - new mode of the transaction - * @return the mode of transaction in force after the call - */ -APU_DECLARE(int) apr_dbd_transaction_mode_set(const apr_dbd_driver_t *driver, - apr_dbd_transaction_t *trans, - int mode); - -/** apr_dbd_query: execute an SQL query that doesn't return a result set - * - * @param driver - the driver - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the SQL statement to execute - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_query(const apr_dbd_driver_t *driver, apr_dbd_t *handle, - int *nrows, const char *statement); - -/** apr_dbd_select: execute an SQL query that returns a result set - * - * @param driver - the driver - * @param pool - pool to allocate the result set - * @param handle - the connection - * @param res - pointer to result set pointer. May point to NULL on entry - * @param statement - the SQL statement to execute - * @param random - 1 to support random access to results (seek any row); - * 0 to support only looping through results in order - * (async access - faster) - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_select(const apr_dbd_driver_t *driver, apr_pool_t *pool, - apr_dbd_t *handle, apr_dbd_results_t **res, - const char *statement, int random); - -/** apr_dbd_num_cols: get the number of columns in a results set - * - * @param driver - the driver - * @param res - result set. - * @return number of columns - */ -APU_DECLARE(int) apr_dbd_num_cols(const apr_dbd_driver_t *driver, - apr_dbd_results_t *res); - -/** apr_dbd_num_tuples: get the number of rows in a results set - * of a synchronous select - * - * @param driver - the driver - * @param res - result set. - * @return number of rows, or -1 if the results are asynchronous - */ -APU_DECLARE(int) apr_dbd_num_tuples(const apr_dbd_driver_t *driver, - apr_dbd_results_t *res); - -/** apr_dbd_get_row: get a row from a result set - * - * @param driver - the driver - * @param pool - pool to allocate the row - * @param res - result set pointer - * @param row - pointer to row pointer. May point to NULL on entry - * @param rownum - row number (counting from 1), or -1 for "next row". - * Ignored if random access is not supported. - * @return 0 for success, -1 for rownum out of range or data finished - */ -APU_DECLARE(int) apr_dbd_get_row(const apr_dbd_driver_t *driver, apr_pool_t *pool, - apr_dbd_results_t *res, apr_dbd_row_t **row, - int rownum); - -/** apr_dbd_get_entry: get an entry from a row - * - * @param driver - the driver - * @param row - row pointer - * @param col - entry number - * @return value from the row, or NULL if col is out of bounds. - */ -APU_DECLARE(const char*) apr_dbd_get_entry(const apr_dbd_driver_t *driver, - apr_dbd_row_t *row, int col); - -/** apr_dbd_get_name: get an entry name from a result set - * - * @param driver - the driver - * @param res - result set pointer - * @param col - entry number - * @return name of the entry, or NULL if col is out of bounds. - */ -APU_DECLARE(const char*) apr_dbd_get_name(const apr_dbd_driver_t *driver, - apr_dbd_results_t *res, int col); - - -/** apr_dbd_error: get current error message (if any) - * - * @param driver - the driver - * @param handle - the connection - * @param errnum - error code from operation that returned an error - * @return the database current error message, or message for errnum - * (implementation-dependent whether errnum is ignored) - */ -APU_DECLARE(const char*) apr_dbd_error(const apr_dbd_driver_t *driver, - apr_dbd_t *handle, int errnum); - -/** apr_dbd_escape: escape a string so it is safe for use in query/select - * - * @param driver - the driver - * @param pool - pool to alloc the result from - * @param string - the string to escape - * @param handle - the connection - * @return the escaped, safe string - */ -APU_DECLARE(const char*) apr_dbd_escape(const apr_dbd_driver_t *driver, - apr_pool_t *pool, const char *string, - apr_dbd_t *handle); - -/** apr_dbd_prepare: prepare a statement - * - * @param driver - the driver - * @param pool - pool to alloc the result from - * @param handle - the connection - * @param query - the SQL query - * @param label - A label for the prepared statement. - * use NULL for temporary prepared statements - * (eg within a Request in httpd) - * @param statement - statement to prepare. May point to null on entry. - * @return 0 for success or error code - * @remarks To specify parameters of the prepared query, use \%s, \%d etc. - * (see below for full list) in place of database specific parameter syntax - * (e.g. for PostgreSQL, this would be $1, $2, for SQLite3 this would be ? - * etc.). For instance: "SELECT name FROM customers WHERE name=%s" would be - * a query that this function understands. - * @remarks Here is the full list of format specifiers that this function - * understands and what they map to in SQL: \%hhd (TINY INT), \%hhu (UNSIGNED - * TINY INT), \%hd (SHORT), \%hu (UNSIGNED SHORT), \%d (INT), \%u (UNSIGNED - * INT), \%ld (LONG), \%lu (UNSIGNED LONG), \%lld (LONG LONG), \%llu - * (UNSIGNED LONG LONG), \%f (FLOAT, REAL), \%lf (DOUBLE PRECISION), \%s - * (VARCHAR), \%pDt (TEXT), \%pDi (TIME), \%pDd (DATE), \%pDa (DATETIME), - * \%pDs (TIMESTAMP), \%pDz (TIMESTAMP WITH TIME ZONE), \%pDb (BLOB), \%pDc - * (CLOB) and \%pDn (NULL). Not all databases have support for all these - * types, so the underlying driver will attempt the "best match" where - * possible. A \% followed by any letter not in the above list will be - * interpreted as VARCHAR (i.e. \%s). - */ -APU_DECLARE(int) apr_dbd_prepare(const apr_dbd_driver_t *driver, apr_pool_t *pool, - apr_dbd_t *handle, const char *query, - const char *label, - apr_dbd_prepared_t **statement); - - -/** apr_dbd_pquery: query using a prepared statement + args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param nargs - ignored (for backward compatibility only) - * @param args - args to prepared statement - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_pquery(const apr_dbd_driver_t *driver, apr_pool_t *pool, - apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, int nargs, - const char **args); - -/** apr_dbd_pselect: select using a prepared statement + args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param nargs - ignored (for backward compatibility only) - * @param args - args to prepared statement - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_pselect(const apr_dbd_driver_t *driver, apr_pool_t *pool, - apr_dbd_t *handle, apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - int nargs, const char **args); - -/** apr_dbd_pvquery: query using a prepared statement + args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param ... - varargs list - * @return 0 for success or error code - */ -APU_DECLARE_NONSTD(int) apr_dbd_pvquery(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, ...); - -/** apr_dbd_pvselect: select using a prepared statement + args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param ... - varargs list - * @return 0 for success or error code - */ -APU_DECLARE_NONSTD(int) apr_dbd_pvselect(const apr_dbd_driver_t *driver, - apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, - int random, ...); - -/** apr_dbd_pbquery: query using a prepared statement + binary args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param args - binary args to prepared statement - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_pbquery(const apr_dbd_driver_t *driver, - apr_pool_t *pool, apr_dbd_t *handle, - int *nrows, apr_dbd_prepared_t *statement, - const void **args); - -/** apr_dbd_pbselect: select using a prepared statement + binary args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param args - binary args to prepared statement - * @return 0 for success or error code - */ -APU_DECLARE(int) apr_dbd_pbselect(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, - const void **args); - -/** apr_dbd_pvbquery: query using a prepared statement + binary args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param ... - varargs list of binary args - * @return 0 for success or error code - */ -APU_DECLARE_NONSTD(int) apr_dbd_pvbquery(const apr_dbd_driver_t *driver, - apr_pool_t *pool, - apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, ...); - -/** apr_dbd_pvbselect: select using a prepared statement + binary args - * - * @param driver - the driver - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param ... - varargs list of binary args - * @return 0 for success or error code - */ -APU_DECLARE_NONSTD(int) apr_dbd_pvbselect(const apr_dbd_driver_t *driver, - apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, - int random, ...); - -/** apr_dbd_datum_get: get a binary entry from a row - * - * @param driver - the driver - * @param row - row pointer - * @param col - entry number - * @param type - type of data to get - * @param data - pointer to data, allocated by the caller - * @return APR_SUCCESS on success, APR_ENOENT if data is NULL or APR_EGENERAL - */ -APU_DECLARE(apr_status_t) apr_dbd_datum_get(const apr_dbd_driver_t *driver, - apr_dbd_row_t *row, int col, - apr_dbd_type_e type, void *data); - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif Index: contrib/apr-util/include/apr_dbm.h =================================================================== --- contrib/apr-util/include/apr_dbm.h +++ /dev/null @@ -1,227 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_hooks.h =================================================================== --- contrib/apr-util/include/apr_hooks.h +++ /dev/null @@ -1,358 +0,0 @@ -/* 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_HOOKS_H -#define APR_HOOKS_H - -#include "apu.h" -/* For apr_array_header_t */ -#include "apr_tables.h" - -/** - * @file apr_hooks.h - * @brief Apache hook functions - */ - -#ifdef __cplusplus -extern "C" { -#endif -/** - * @defgroup APR_Util_Hook Hook Functions - * @ingroup APR_Util - * @{ - */ - -/** - * @defgroup apr_hook_probes Hook probe capability - * APR hooks provide a trace probe capability for capturing - * the flow of control and return values with hooks. - * - * In order to use this facility, the application must define - * the symbol APR_HOOK_PROBES_ENABLED and the four APR_HOOK_PROBE_ - * macros described below before including apr_hooks.h in files - * that use the APR_IMPLEMENT_EXTERNAL_HOOK_* macros. - * - * This probe facility is not provided for APR optional hooks. - * @{ - */ - -#ifdef APR_HOOK_PROBES_ENABLED -#define APR_HOOK_INT_DCL_UD void *ud = NULL -#else -/** internal implementation detail to avoid the ud declaration when - * hook probes are not used - */ -#define APR_HOOK_INT_DCL_UD -/** - * User-defined hook probe macro that is invoked when the hook - * is run, before calling any hook functions. - * @param ud A void * user data field that should be filled in by - * this macro, and will be provided to the other hook probe macros. - * @param ns The namespace prefix of the hook functions - * @param name The name of the hook - * @param args The argument list to the hook functions, with enclosing - * parens. - */ -#define APR_HOOK_PROBE_ENTRY(ud,ns,name,args) -/** - * User-defined hook probe macro that is invoked after the hook - * has run. - * @param ud A void * user data field that was filled in by the user- - * provided APR_HOOK_PROBE_ENTRY(). - * @param ns The namespace prefix of the hook functions - * @param name The name of the hook - * @param rv The return value of the hook, or 0 if the hook is void. - * @param args The argument list to the hook functions, with enclosing - * parens. - */ -#define APR_HOOK_PROBE_RETURN(ud,ns,name,rv,args) -/** - * User-defined hook probe macro that is invoked before calling a - * hook function. - * @param ud A void * user data field that was filled in by the user- - * provided APR_HOOK_PROBE_ENTRY(). - * @param ns The namespace prefix of the hook functions - * @param name The name of the hook - * @param src The value of apr_hook_debug_current at the time the function - * was hooked (usually the source file implementing the hook function). - * @param args The argument list to the hook functions, with enclosing - * parens. - */ -#define APR_HOOK_PROBE_INVOKE(ud,ns,name,src,args) -/** - * User-defined hook probe macro that is invoked after calling a - * hook function. - * @param ud A void * user data field that was filled in by the user- - * provided APR_HOOK_PROBE_ENTRY(). - * @param ns The namespace prefix of the hook functions - * @param name The name of the hook - * @param src The value of apr_hook_debug_current at the time the function - * was hooked (usually the source file implementing the hook function). - * @param rv The return value of the hook function, or 0 if the hook is void. - * @param args The argument list to the hook functions, with enclosing - * parens. - */ -#define APR_HOOK_PROBE_COMPLETE(ud,ns,name,src,rv,args) -#endif - -/** @} */ - -/** macro to return the prototype of the hook function */ -#define APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \ -link##_DECLARE(apr_array_header_t *) ns##_hook_get_##name(void) - -/** macro to declare the hook correctly */ -#define APR_DECLARE_EXTERNAL_HOOK(ns,link,ret,name,args) \ -typedef ret ns##_HOOK_##name##_t args; \ -link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf, \ - const char * const *aszPre, \ - const char * const *aszSucc, int nOrder); \ -link##_DECLARE(ret) ns##_run_##name args; \ -APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name); \ -typedef struct ns##_LINK_##name##_t \ - { \ - ns##_HOOK_##name##_t *pFunc; \ - const char *szName; \ - const char * const *aszPredecessors; \ - const char * const *aszSuccessors; \ - int nOrder; \ - } ns##_LINK_##name##_t; - -/** macro to declare the hook structure */ -#define APR_HOOK_STRUCT(members) \ -static struct { members } _hooks; - -/** macro to link the hook structure */ -#define APR_HOOK_LINK(name) \ - apr_array_header_t *link_##name; - -/** macro to implement the hook */ -#define APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \ -link##_DECLARE(void) ns##_hook_##name(ns##_HOOK_##name##_t *pf,const char * const *aszPre, \ - const char * const *aszSucc,int nOrder) \ - { \ - ns##_LINK_##name##_t *pHook; \ - if(!_hooks.link_##name) \ - { \ - _hooks.link_##name=apr_array_make(apr_hook_global_pool,1,sizeof(ns##_LINK_##name##_t)); \ - apr_hook_sort_register(#name,&_hooks.link_##name); \ - } \ - pHook=apr_array_push(_hooks.link_##name); \ - pHook->pFunc=pf; \ - pHook->aszPredecessors=aszPre; \ - pHook->aszSuccessors=aszSucc; \ - pHook->nOrder=nOrder; \ - pHook->szName=apr_hook_debug_current; \ - if(apr_hook_debug_enabled) \ - apr_hook_debug_show(#name,aszPre,aszSucc); \ - } \ - APR_IMPLEMENT_HOOK_GET_PROTO(ns,link,name) \ - { \ - return _hooks.link_##name; \ - } - -/** - * Implement a hook that has no return code, and therefore runs all of the - * registered functions - * @param ns The namespace prefix of the hook functions - * @param link The linkage declaration prefix of the hook - * @param name The name of the hook - * @param args_decl The declaration of the arguments for the hook - * @param args_use The names for the arguments for the hook - * @note The link prefix FOO corresponds to FOO_DECLARE() macros, which - * provide export linkage from the module that IMPLEMENTs the hook, and - * import linkage from external modules that link to the hook's module. - */ -#define APR_IMPLEMENT_EXTERNAL_HOOK_VOID(ns,link,name,args_decl,args_use) \ -APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \ -link##_DECLARE(void) ns##_run_##name args_decl \ - { \ - ns##_LINK_##name##_t *pHook; \ - int n; \ - APR_HOOK_INT_DCL_UD; \ -\ - APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \ -\ - if(_hooks.link_##name) \ - { \ - pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ - for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ - { \ - APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \ - pHook[n].pFunc args_use; \ - APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, 0, args_use); \ - } \ - } \ -\ - APR_HOOK_PROBE_RETURN(ud, ns, name, 0, args_use); \ -\ - } - -/* FIXME: note that this returns ok when nothing is run. I suspect it should - really return decline, but that breaks Apache currently - Ben -*/ -/** - * Implement a hook that runs until one of the functions returns something - * other than OK or DECLINE - * @param ns The namespace prefix of the hook functions - * @param link The linkage declaration prefix of the hook - * @param ret Type to return - * @param name The name of the hook - * @param args_decl The declaration of the arguments for the hook - * @param args_use The names for the arguments for the hook - * @param ok Success value - * @param decline Decline value - * @note The link prefix FOO corresponds to FOO_DECLARE() macros, which - * provide export linkage from the module that IMPLEMENTs the hook, and - * import linkage from external modules that link to the hook's module. - */ -#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_ALL(ns,link,ret,name,args_decl,args_use,ok,decline) \ -APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \ -link##_DECLARE(ret) ns##_run_##name args_decl \ - { \ - ns##_LINK_##name##_t *pHook; \ - int n; \ - ret rv = ok; \ - APR_HOOK_INT_DCL_UD; \ -\ - APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \ -\ - if(_hooks.link_##name) \ - { \ - pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ - for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ - { \ - APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \ - rv=pHook[n].pFunc args_use; \ - APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \ - if(rv != ok && rv != decline) \ - break; \ - rv = ok; \ - } \ - } \ -\ - APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \ -\ - return rv; \ - } - - -/** - * Implement a hook that runs until the first function returns something - * other than the value of decline - * @param ns The namespace prefix of the hook functions - * @param link The linkage declaration prefix of the hook - * @param name The name of the hook - * @param ret Type to return - * @param args_decl The declaration of the arguments for the hook - * @param args_use The names for the arguments for the hook - * @param decline Decline value - * @note The link prefix FOO corresponds to FOO_DECLARE() macros, which - * provide export linkage from the module that IMPLEMENTs the hook, and - * import linkage from external modules that link to the hook's module. - */ -#define APR_IMPLEMENT_EXTERNAL_HOOK_RUN_FIRST(ns,link,ret,name,args_decl,args_use,decline) \ -APR_IMPLEMENT_EXTERNAL_HOOK_BASE(ns,link,name) \ -link##_DECLARE(ret) ns##_run_##name args_decl \ - { \ - ns##_LINK_##name##_t *pHook; \ - int n; \ - ret rv = decline; \ - APR_HOOK_INT_DCL_UD; \ -\ - APR_HOOK_PROBE_ENTRY(ud, ns, name, args_use); \ -\ - if(_hooks.link_##name) \ - { \ - pHook=(ns##_LINK_##name##_t *)_hooks.link_##name->elts; \ - for(n=0 ; n < _hooks.link_##name->nelts ; ++n) \ - { \ - APR_HOOK_PROBE_INVOKE(ud, ns, name, (char *)pHook[n].szName, args_use); \ - rv=pHook[n].pFunc args_use; \ - APR_HOOK_PROBE_COMPLETE(ud, ns, name, (char *)pHook[n].szName, rv, args_use); \ -\ - if(rv != decline) \ - break; \ - } \ - } \ -\ - APR_HOOK_PROBE_RETURN(ud, ns, name, rv, args_use); \ -\ - return rv; \ - } - - /* Hook orderings */ -/** run this hook first, before ANYTHING */ -#define APR_HOOK_REALLY_FIRST (-10) -/** run this hook first */ -#define APR_HOOK_FIRST 0 -/** run this hook somewhere */ -#define APR_HOOK_MIDDLE 10 -/** run this hook after every other hook which is defined*/ -#define APR_HOOK_LAST 20 -/** run this hook last, after EVERYTHING */ -#define APR_HOOK_REALLY_LAST 30 - -/** - * The global pool used to allocate any memory needed by the hooks. - */ -APU_DECLARE_DATA extern apr_pool_t *apr_hook_global_pool; - -/** - * A global variable to determine if debugging information about the - * hooks functions should be printed. - */ -APU_DECLARE_DATA extern int apr_hook_debug_enabled; - -/** - * The name of the module that is currently registering a function. - */ -APU_DECLARE_DATA extern const char *apr_hook_debug_current; - -/** - * Register a hook function to be sorted. - * @param szHookName The name of the Hook the function is registered for - * @param aHooks The array which stores all of the functions for this hook - */ -APU_DECLARE(void) apr_hook_sort_register(const char *szHookName, - apr_array_header_t **aHooks); -/** - * Sort all of the registered functions for a given hook. - */ -APU_DECLARE(void) apr_hook_sort_all(void); - -/** - * Print all of the information about the current hook. This is used for - * debugging purposes. - * @param szName The name of the hook - * @param aszPre All of the functions in the predecessor array - * @param aszSucc All of the functions in the successor array - */ -APU_DECLARE(void) apr_hook_debug_show(const char *szName, - const char * const *aszPre, - const char * const *aszSucc); - -/** - * Remove all currently registered functions. - */ -APU_DECLARE(void) apr_hook_deregister_all(void); - -/** @} */ -#ifdef __cplusplus -} -#endif - -#endif /* APR_HOOKS_H */ Index: contrib/apr-util/include/apr_ldap.h.in =================================================================== --- contrib/apr-util/include/apr_ldap.h.in +++ /dev/null @@ -1,197 +0,0 @@ -/* 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 @apu_has_ldap@ - -/* identify the LDAP toolkit used */ -#define APR_HAS_NETSCAPE_LDAPSDK @apu_has_ldap_netscape@ -#define APR_HAS_SOLARIS_LDAPSDK @apu_has_ldap_solaris@ -#define APR_HAS_NOVELL_LDAPSDK @apu_has_ldap_novell@ -#define APR_HAS_MOZILLA_LDAPSDK @apu_has_ldap_mozilla@ -#define APR_HAS_OPENLDAP_LDAPSDK @apu_has_ldap_openldap@ -#define APR_HAS_MICROSOFT_LDAPSDK @apu_has_ldap_microsoft@ -#define APR_HAS_TIVOLI_LDAPSDK @apu_has_ldap_tivoli@ -#define APR_HAS_ZOS_LDAPSDK @apu_has_ldap_zos@ -#define APR_HAS_OTHER_LDAPSDK @apu_has_ldap_other@ - - -/* - * Handle the case when LDAP is enabled - */ -#if APR_HAS_LDAP - -/* - * The following #defines are DEPRECATED and should not be used for - * anything. They remain to maintain binary compatibility. - * The original code defined the OPENLDAP SDK as present regardless - * of what really was there, which was way bogus. In addition, the - * apr_ldap_url_parse*() functions have been rewritten specifically for - * APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero. - */ -#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. - */ - -@lber_h@ -@ldap_h@ -@ldap_ssl_h@ - - -/* - * Detected standard functions - */ -#define APR_HAS_LDAPSSL_CLIENT_INIT @apu_has_ldapssl_client_init@ -#define APR_HAS_LDAPSSL_CLIENT_DEINIT @apu_has_ldapssl_client_deinit@ -#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT @apu_has_ldapssl_add_trusted_cert@ -#define APR_HAS_LDAP_START_TLS_S @apu_has_ldap_start_tls_s@ -#define APR_HAS_LDAP_SSLINIT @apu_has_ldap_sslinit@ -#define APR_HAS_LDAPSSL_INIT @apu_has_ldapssl_init@ -#define APR_HAS_LDAPSSL_INSTALL_ROUTINES @apu_has_ldapssl_install_routines@ - -/* - * Make sure the secure LDAP port is defined - */ -#ifndef LDAPS_PORT -#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ -#endif - -/* - * For ldap function calls that input a size limit on the number of returned elements - * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0) - * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK - * or process is configured for. - */ -#ifdef LDAP_DEFAULT_LIMIT -#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT -#else -#ifdef LDAP_NO_LIMIT -#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT -#endif -#endif - -#ifndef APR_LDAP_SIZELIMIT -#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */ -#endif - -/* - * z/OS is missing some defines - */ -#ifndef LDAP_VERSION_MAX -#define LDAP_VERSION_MAX LDAP_VERSION -#endif -#if APR_HAS_ZOS_LDAPSDK -#define LDAP_VENDOR_NAME "IBM z/OS" -#endif - -/* Note: Macros defining const casting has been removed in APR v1.0, - * pending real support for LDAP v2.0 toolkits. - * - * In the mean time, please use an LDAP v3.0 toolkit. - */ -#if LDAP_VERSION_MAX <= 2 -#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit. -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * This structure allows the C LDAP API error codes to be returned - * along with plain text error messages that explain to us mere mortals - * what really happened. - */ -typedef struct apr_ldap_err_t { - const char *reason; - const char *msg; - int rc; -} apr_ldap_err_t; - -#ifdef __cplusplus -} -#endif - -/* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection - * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone - * manually chooses another SDK on Windows - */ -#if APR_HAS_MICROSOFT_LDAPSDK -#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN \ - || (s) == LDAP_UNAVAILABLE) -#else -#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN) -#endif - -/* These symbols are not actually exported in a DSO build, but mapped into - * a private exported function array for apr_ldap_stub to bind dynamically. - * Rename them appropriately to protect the global namespace. - */ -#ifdef APU_DSO_LDAP_BUILD - -#define apr_ldap_info apr__ldap_info -#define apr_ldap_init apr__ldap_init -#define apr_ldap_ssl_init apr__ldap_ssl_init -#define apr_ldap_ssl_deinit apr__ldap_ssl_deinit -#define apr_ldap_get_option apr__ldap_get_option -#define apr_ldap_set_option apr__ldap_set_option -#define apr_ldap_rebind_init apr__ldap_rebind_init -#define apr_ldap_rebind_add apr__ldap_rebind_add -#define apr_ldap_rebind_remove apr__ldap_rebind_remove - -#define APU_DECLARE_LDAP(type) type -#else -#define APU_DECLARE_LDAP(type) APU_DECLARE(type) -#endif - -#include "apr_ldap_url.h" -#include "apr_ldap_init.h" -#include "apr_ldap_option.h" -#include "apr_ldap_rebind.h" - -#endif /* APR_HAS_LDAP */ -/** @} */ -#endif /* APU_LDAP_H */ Index: contrib/apr-util/include/apr_ldap.hnw =================================================================== --- contrib/apr-util/include/apr_ldap.hnw +++ /dev/null @@ -1,158 +0,0 @@ -/* 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 1 -#define APR_HAS_MOZILLA_LDAPSDK 0 -#define APR_HAS_OPENLDAP_LDAPSDK 0 -#define APR_HAS_MICROSOFT_LDAPSDK 0 -#define APR_HAS_OTHER_LDAPSDK 0 - - -/* - * Handle the case when LDAP is enabled - */ -#if APR_HAS_LDAP - -/* - * The following #defines are DEPRECATED and should not be used for - * anything. They remain to maintain binary compatibility. - * The original code defined the OPENLDAP SDK as present regardless - * of what really was there, which was way bogus. In addition, the - * apr_ldap_url_parse*() functions have been rewritten specifically for - * APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero. - */ -#define APR_HAS_LDAP_SSL 1 -#define APR_HAS_LDAP_URL_PARSE 0 - - -/* - * Include the standard LDAP header files. - */ - -#ifdef GENEXPORTS -#define LDAP_VERSION_MAX 3 -#define LDAP_INSUFFICIENT_ACCESS -#else -#include -#include -#if APR_HAS_LDAP_SSL -#include -#endif -#endif - - -/* - * Detected standard functions - */ -#define APR_HAS_LDAPSSL_CLIENT_INIT 1 -#define APR_HAS_LDAPSSL_CLIENT_DEINIT 1 -#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT 1 -#define APR_HAS_LDAP_START_TLS_S 0 -#define APR_HAS_LDAP_SSLINIT 0 -#define APR_HAS_LDAPSSL_INIT 1 -#define APR_HAS_LDAPSSL_INSTALL_ROUTINES 0 - - -/* - * Make sure the secure LDAP port is defined - */ -#ifndef LDAPS_PORT -#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ -#endif - - -/* Note: Macros defining const casting has been removed in APR v1.0, - * pending real support for LDAP v2.0 toolkits. - * - * In the mean time, please use an LDAP v3.0 toolkit. - */ -#if LDAP_VERSION_MAX <= 2 -#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit. -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * This structure allows the C LDAP API error codes to be returned - * along with plain text error messages that explain to us mere mortals - * what really happened. - */ -typedef struct apr_ldap_err_t { - const char *reason; - const char *msg; - int rc; -} apr_ldap_err_t; - -#ifdef __cplusplus -} -#endif - -#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN) - -/* These symbols are not actually exported in a DSO build, but mapped into - * a private exported function array for apr_ldap_stub to bind dynamically. - * Rename them appropriately to protect the global namespace. - */ -#ifdef APU_DSO_LDAP_BUILD - -#define apr_ldap_info apr__ldap_info -#define apr_ldap_init apr__ldap_init -#define apr_ldap_ssl_init apr__ldap_ssl_init -#define apr_ldap_ssl_deinit apr__ldap_ssl_deinit -#define apr_ldap_get_option apr__ldap_get_option -#define apr_ldap_set_option apr__ldap_set_option -#define apr_ldap_rebind_init apr__ldap_rebind_init -#define apr_ldap_rebind_add apr__ldap_rebind_add -#define apr_ldap_rebind_remove apr__ldap_rebind_remove - -#define APU_DECLARE_LDAP(type) type -#else -#define APU_DECLARE_LDAP(type) APU_DECLARE(type) -#endif - -#include "apr_ldap_url.h" -#include "apr_ldap_init.h" -#include "apr_ldap_option.h" -#include "apr_ldap_rebind.h" - -/** @} */ -#endif /* APR_HAS_LDAP */ -#endif /* APU_LDAP_H */ - Index: contrib/apr-util/include/apr_ldap.hw =================================================================== --- contrib/apr-util/include/apr_ldap.hw +++ /dev/null @@ -1,197 +0,0 @@ -/* 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 0 -#define APR_HAS_MICROSOFT_LDAPSDK 1 -#define APR_HAS_TIVOLI_LDAPSDK 0 -#define APR_HAS_ZOS_LDAPSDK 0 -#define APR_HAS_OTHER_LDAPSDK 0 - - -/* - * Handle the case when LDAP is enabled - */ -#if APR_HAS_LDAP - -/* - * The following #defines are DEPRECATED and should not be used for - * anything. They remain to maintain binary compatibility. - * The original code defined the OPENLDAP SDK as present regardless - * of what really was there, which was way bogus. In addition, the - * apr_ldap_url_parse*() functions have been rewritten specifically for - * APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero. - */ -#if APR_HAS_TIVOLI_LDAPSDK -#define APR_HAS_LDAP_SSL 0 -#else -#define APR_HAS_LDAP_SSL 1 -#endif -#define APR_HAS_LDAP_URL_PARSE 0 - -#if APR_HAS_OPENLDAP_LDAPSDK && !defined(LDAP_DEPRECATED) -/* Ensure that the "deprecated" interfaces are still exposed - * with OpenLDAP >= 2.3; these were exposed by default in earlier - * releases. */ -#define LDAP_DEPRECATED 1 -#endif - -/* - * Include the standard LDAP header files. - */ - -#include - - -/* - * Detected standard functions - */ -#define APR_HAS_LDAPSSL_CLIENT_INIT 0 -#define APR_HAS_LDAPSSL_CLIENT_DEINIT 0 -#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT 0 -#define APR_HAS_LDAP_START_TLS_S 0 -#define APR_HAS_LDAP_SSLINIT 1 -#define APR_HAS_LDAPSSL_INIT 0 -#define APR_HAS_LDAPSSL_INSTALL_ROUTINES 0 - - -/* - * Make sure the secure LDAP port is defined - */ -#ifndef LDAPS_PORT -#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ -#endif - - -/* - * For ldap function calls that input a size limit on the number of returned elements - * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0) - * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK - * or process is configured for. - */ -#ifdef LDAP_DEFAULT_LIMIT -#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT -#else -#ifdef LDAP_NO_LIMIT -#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT -#endif -#endif - -#ifndef APR_LDAP_SIZELIMIT -#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */ -#endif - -/* - * z/OS is missing some defines - */ -#ifndef LDAP_VERSION_MAX -#define LDAP_VERSION_MAX LDAP_VERSION -#endif -#if APR_HAS_ZOS_LDAPSDK -#define LDAP_VENDOR_NAME "IBM z/OS" -#endif - -/* Note: Macros defining const casting has been removed in APR v1.0, - * pending real support for LDAP v2.0 toolkits. - * - * In the mean time, please use an LDAP v3.0 toolkit. - */ -#if LDAP_VERSION_MAX <= 2 -#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit. -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * This structure allows the C LDAP API error codes to be returned - * along with plain text error messages that explain to us mere mortals - * what really happened. - */ -typedef struct apr_ldap_err_t { - const char *reason; - const char *msg; - int rc; -} apr_ldap_err_t; - -#ifdef __cplusplus -} -#endif - -/* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection - * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone - * manually chooses another SDK on Windows - */ -#if APR_HAS_MICROSOFT_LDAPSDK -#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN \ - || (s) == LDAP_UNAVAILABLE) -#else -#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN) -#endif - -/* These symbols are not actually exported in a DSO build, but mapped into - * a private exported function array for apr_ldap_stub to bind dynamically. - * Rename them appropriately to protect the global namespace. - */ -#ifdef APU_DSO_LDAP_BUILD - -#define apr_ldap_info apr__ldap_info -#define apr_ldap_init apr__ldap_init -#define apr_ldap_ssl_init apr__ldap_ssl_init -#define apr_ldap_ssl_deinit apr__ldap_ssl_deinit -#define apr_ldap_get_option apr__ldap_get_option -#define apr_ldap_set_option apr__ldap_set_option -#define apr_ldap_rebind_init apr__ldap_rebind_init -#define apr_ldap_rebind_add apr__ldap_rebind_add -#define apr_ldap_rebind_remove apr__ldap_rebind_remove - -#define APU_DECLARE_LDAP(type) type -#else -#define APU_DECLARE_LDAP(type) APU_DECLARE(type) -#endif - -#include "apr_ldap_url.h" -#include "apr_ldap_init.h" -#include "apr_ldap_option.h" -#include "apr_ldap_rebind.h" - -/** @} */ -#endif /* APR_HAS_LDAP */ -#endif /* APU_LDAP_H */ Index: contrib/apr-util/include/apr_ldap.hwc =================================================================== --- contrib/apr-util/include/apr_ldap.hwc +++ /dev/null @@ -1,197 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * apr_ldap.h is generated from apr_ldap.h.in by configure -- do not edit apr_ldap.h - */ -/** - * @file apr_ldap.h - * @brief APR-UTIL LDAP - */ -#ifndef APU_LDAP_H -#define APU_LDAP_H - -/** - * @defgroup APR_Util_LDAP LDAP - * @ingroup APR_Util - * @{ - */ - -/* this will be defined if LDAP support was compiled into apr-util */ -#define APR_HAS_LDAP @apr_has_ldap_10@ - -/* identify the LDAP toolkit used */ -#define APR_HAS_NETSCAPE_LDAPSDK 0 -#define APR_HAS_SOLARIS_LDAPSDK 0 -#define APR_HAS_NOVELL_LDAPSDK 0 -#define APR_HAS_MOZILLA_LDAPSDK 0 -#define APR_HAS_OPENLDAP_LDAPSDK 0 -#define APR_HAS_MICROSOFT_LDAPSDK 1 -#define APR_HAS_TIVOLI_LDAPSDK 0 -#define APR_HAS_ZOS_LDAPSDK 0 -#define APR_HAS_OTHER_LDAPSDK 0 - - -/* - * Handle the case when LDAP is enabled - */ -#if APR_HAS_LDAP - -/* - * The following #defines are DEPRECATED and should not be used for - * anything. They remain to maintain binary compatibility. - * The original code defined the OPENLDAP SDK as present regardless - * of what really was there, which was way bogus. In addition, the - * apr_ldap_url_parse*() functions have been rewritten specifically for - * APR, so the APR_HAS_LDAP_URL_PARSE macro is forced to zero. - */ -#if APR_HAS_TIVOLI_LDAPSDK -#define APR_HAS_LDAP_SSL 0 -#else -#define APR_HAS_LDAP_SSL 1 -#endif -#define APR_HAS_LDAP_URL_PARSE 0 - -#if APR_HAS_OPENLDAP_LDAPSDK && !defined(LDAP_DEPRECATED) -/* Ensure that the "deprecated" interfaces are still exposed - * with OpenLDAP >= 2.3; these were exposed by default in earlier - * releases. */ -#define LDAP_DEPRECATED 1 -#endif - -/* - * Include the standard LDAP header files. - */ - -#include - - -/* - * Detected standard functions - */ -#define APR_HAS_LDAPSSL_CLIENT_INIT 0 -#define APR_HAS_LDAPSSL_CLIENT_DEINIT 0 -#define APR_HAS_LDAPSSL_ADD_TRUSTED_CERT 0 -#define APR_HAS_LDAP_START_TLS_S 0 -#define APR_HAS_LDAP_SSLINIT 1 -#define APR_HAS_LDAPSSL_INIT 0 -#define APR_HAS_LDAPSSL_INSTALL_ROUTINES 0 - - -/* - * Make sure the secure LDAP port is defined - */ -#ifndef LDAPS_PORT -#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ -#endif - - -/* - * For ldap function calls that input a size limit on the number of returned elements - * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0) - * LDAP_DEFAULT_LIMIT is preferred as it allows inheritance from whatever the SDK - * or process is configured for. - */ -#ifdef LDAP_DEFAULT_LIMIT -#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT -#else -#ifdef LDAP_NO_LIMIT -#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT -#endif -#endif - -#ifndef APR_LDAP_SIZELIMIT -#define APR_LDAP_SIZELIMIT 0 /* equivalent to LDAP_NO_LIMIT, and what goes on the wire */ -#endif - -/* - * z/OS is missing some defines - */ -#ifndef LDAP_VERSION_MAX -#define LDAP_VERSION_MAX LDAP_VERSION -#endif -#if APR_HAS_ZOS_LDAPSDK -#define LDAP_VENDOR_NAME "IBM z/OS" -#endif - -/* Note: Macros defining const casting has been removed in APR v1.0, - * pending real support for LDAP v2.0 toolkits. - * - * In the mean time, please use an LDAP v3.0 toolkit. - */ -#if LDAP_VERSION_MAX <= 2 -#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit. -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * This structure allows the C LDAP API error codes to be returned - * along with plain text error messages that explain to us mere mortals - * what really happened. - */ -typedef struct apr_ldap_err_t { - const char *reason; - const char *msg; - int rc; -} apr_ldap_err_t; - -#ifdef __cplusplus -} -#endif - -/* The MS SDK returns LDAP_UNAVAILABLE when the backend has closed the connection - * between LDAP calls. Protect with APR_HAS_MICROSOFT_LDAPSDK in case someone - * manually chooses another SDK on Windows - */ -#if APR_HAS_MICROSOFT_LDAPSDK -#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN \ - || (s) == LDAP_UNAVAILABLE) -#else -#define APR_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN) -#endif - -/* These symbols are not actually exported in a DSO build, but mapped into - * a private exported function array for apr_ldap_stub to bind dynamically. - * Rename them appropriately to protect the global namespace. - */ -#ifdef APU_DSO_LDAP_BUILD - -#define apr_ldap_info apr__ldap_info -#define apr_ldap_init apr__ldap_init -#define apr_ldap_ssl_init apr__ldap_ssl_init -#define apr_ldap_ssl_deinit apr__ldap_ssl_deinit -#define apr_ldap_get_option apr__ldap_get_option -#define apr_ldap_set_option apr__ldap_set_option -#define apr_ldap_rebind_init apr__ldap_rebind_init -#define apr_ldap_rebind_add apr__ldap_rebind_add -#define apr_ldap_rebind_remove apr__ldap_rebind_remove - -#define APU_DECLARE_LDAP(type) type -#else -#define APU_DECLARE_LDAP(type) APU_DECLARE(type) -#endif - -#include "apr_ldap_url.h" -#include "apr_ldap_init.h" -#include "apr_ldap_option.h" -#include "apr_ldap_rebind.h" - -/** @} */ -#endif /* APR_HAS_LDAP */ -#endif /* APU_LDAP_H */ Index: contrib/apr-util/include/apr_ldap_init.h =================================================================== --- contrib/apr-util/include/apr_ldap_init.h +++ /dev/null @@ -1,165 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_ldap_option.h =================================================================== --- contrib/apr-util/include/apr_ldap_option.h +++ /dev/null @@ -1,254 +0,0 @@ -/* 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 */ - Index: contrib/apr-util/include/apr_ldap_rebind.h =================================================================== --- contrib/apr-util/include/apr_ldap_rebind.h +++ /dev/null @@ -1,98 +0,0 @@ -/* 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 */ - Index: contrib/apr-util/include/apr_ldap_url.h =================================================================== --- contrib/apr-util/include/apr_ldap_url.h +++ /dev/null @@ -1,120 +0,0 @@ -/* 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_url.h - * @brief APR-UTIL LDAP ldap_init() functions - */ -#ifndef APR_LDAP_URL_H -#define APR_LDAP_URL_H - -/** - * @addtogroup APR_Util_LDAP - * @{ - */ - -#if defined(DOXYGEN) -#include "apr_ldap.h" -#endif - -#if APR_HAS_LDAP - -#include "apu.h" -#include "apr_pools.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** Structure to access an exploded LDAP URL */ -typedef struct apr_ldap_url_desc_t { - struct apr_ldap_url_desc_t *lud_next; - char *lud_scheme; - char *lud_host; - int lud_port; - char *lud_dn; - char **lud_attrs; - int lud_scope; - char *lud_filter; - char **lud_exts; - int lud_crit_exts; -} apr_ldap_url_desc_t; - -#ifndef APR_LDAP_URL_SUCCESS -#define APR_LDAP_URL_SUCCESS 0x00 /* Success */ -#define APR_LDAP_URL_ERR_MEM 0x01 /* can't allocate memory space */ -#define APR_LDAP_URL_ERR_PARAM 0x02 /* parameter is bad */ -#define APR_LDAP_URL_ERR_BADSCHEME 0x03 /* URL doesn't begin with "ldap[si]://" */ -#define APR_LDAP_URL_ERR_BADENCLOSURE 0x04 /* URL is missing trailing ">" */ -#define APR_LDAP_URL_ERR_BADURL 0x05 /* URL is bad */ -#define APR_LDAP_URL_ERR_BADHOST 0x06 /* host port is bad */ -#define APR_LDAP_URL_ERR_BADATTRS 0x07 /* bad (or missing) attributes */ -#define APR_LDAP_URL_ERR_BADSCOPE 0x08 /* scope string is invalid (or missing) */ -#define APR_LDAP_URL_ERR_BADFILTER 0x09 /* bad or missing filter */ -#define APR_LDAP_URL_ERR_BADEXTS 0x0a /* bad or missing extensions */ -#endif - -/** - * Is this URL an ldap url? ldap:// - * @param url The url to test - */ -APU_DECLARE(int) apr_ldap_is_ldap_url(const char *url); - -/** - * Is this URL an SSL ldap url? ldaps:// - * @param url The url to test - */ -APU_DECLARE(int) apr_ldap_is_ldaps_url(const char *url); - -/** - * Is this URL an ldap socket url? ldapi:// - * @param url The url to test - */ -APU_DECLARE(int) apr_ldap_is_ldapi_url(const char *url); - -/** - * Parse an LDAP URL. - * @param pool The pool to use - * @param url_in The URL to parse - * @param ludpp The structure to return the exploded URL - * @param result_err The result structure of the operation - */ -APU_DECLARE(int) apr_ldap_url_parse_ext(apr_pool_t *pool, - const char *url_in, - apr_ldap_url_desc_t **ludpp, - apr_ldap_err_t **result_err); - -/** - * Parse an LDAP URL. - * @param pool The pool to use - * @param url_in The URL to parse - * @param ludpp The structure to return the exploded URL - * @param result_err The result structure of the operation - */ -APU_DECLARE(int) apr_ldap_url_parse(apr_pool_t *pool, - const char *url_in, - apr_ldap_url_desc_t **ludpp, - apr_ldap_err_t **result_err); - -#ifdef __cplusplus -} -#endif - -#endif /* APR_HAS_LDAP */ - -/** @} */ - -#endif /* APR_LDAP_URL_H */ Index: contrib/apr-util/include/apr_md4.h =================================================================== --- contrib/apr-util/include/apr_md4.h +++ /dev/null @@ -1,135 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_md5.h =================================================================== --- contrib/apr-util/include/apr_md5.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * 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 */ Index: contrib/apr-util/include/apr_memcache.h =================================================================== --- contrib/apr-util/include/apr_memcache.h +++ /dev/null @@ -1,444 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_optional.h =================================================================== --- contrib/apr-util/include/apr_optional.h +++ /dev/null @@ -1,92 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_optional_hooks.h =================================================================== --- contrib/apr-util/include/apr_optional_hooks.h +++ /dev/null @@ -1,117 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_queue.h =================================================================== --- contrib/apr-util/include/apr_queue.h +++ /dev/null @@ -1,138 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_redis.h =================================================================== --- contrib/apr-util/include/apr_redis.h +++ /dev/null @@ -1,459 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @file apr_redis.h - * @brief Client interface for redis - * @remark To use this interface you must have a separate redis - * for more information. - */ - -#ifndef APR_REDIS_H -#define APR_REDIS_H - -#include "apr.h" -#include "apr_pools.h" -#include "apr_time.h" -#include "apr_strings.h" -#include "apr_network_io.h" -#include "apr_ring.h" -#include "apr_buckets.h" -#include "apr_reslist.h" -#include "apr_hash.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef RC_DEFAULT_SERVER_PORT -#define RC_DEFAULT_SERVER_PORT 6379 -#endif - -#ifndef RC_DEFAULT_SERVER_MIN -#define RC_DEFAULT_SERVER_MIN 0 -#endif - -#ifndef RC_DEFAULT_SERVER_SMAX -#define RC_DEFAULT_SERVER_SMAX 1 -#endif - -#ifndef RC_DEFAULT_SERVER_TTL -#define RC_DEFAULT_SERVER_TTL 600 -#endif - -/** - * @defgroup APR_Util_RC Redis Client Routines - * @ingroup APR_Util - * @{ - */ - -/** Specifies the status of a redis server */ -typedef enum -{ - APR_RC_SERVER_LIVE, /**< Server is alive and responding to requests */ - APR_RC_SERVER_DEAD /**< Server is not responding to requests */ -} apr_redis_server_status_t; - -/** Opaque redis client connection object */ -typedef struct apr_redis_conn_t apr_redis_conn_t; - -/** Redis Server Info Object */ -typedef struct apr_redis_server_t apr_redis_server_t; -struct apr_redis_server_t -{ - const char *host; /**< Hostname of this Server */ - apr_port_t port; /**< Port of this Server */ - apr_redis_server_status_t status; /**< @see apr_redis_server_status_t */ -#if APR_HAS_THREADS || defined(DOXYGEN) - apr_reslist_t *conns; /**< Resource list of actual client connections */ -#else - apr_redis_conn_t *conn; -#endif - apr_pool_t *p; /** Pool to use for private allocations */ -#if APR_HAS_THREADS - apr_thread_mutex_t *lock; -#endif - apr_time_t btime; - apr_uint32_t rwto; - struct - { - int major; - int minor; - int patch; - char *number; - } version; -}; - -typedef struct apr_redis_t apr_redis_t; - -/* Custom hash callback function prototype, user for server selection. -* @param baton user selected baton -* @param data data to hash -* @param data_len length of data -*/ -typedef apr_uint32_t (*apr_redis_hash_func)(void *baton, - const char *data, - const apr_size_t data_len); -/* Custom Server Select callback function prototype. -* @param baton user selected baton -* @param rc redis instance, use rc->live_servers to select a node -* @param hash hash of the selected key. -*/ -typedef apr_redis_server_t* (*apr_redis_server_func)(void *baton, - apr_redis_t *rc, - const apr_uint32_t hash); - -/** Container for a set of redis servers */ -struct apr_redis_t -{ - apr_uint32_t flags; /**< Flags, Not currently used */ - apr_uint16_t nalloc; /**< Number of Servers Allocated */ - apr_uint16_t ntotal; /**< Number of Servers Added */ - apr_redis_server_t **live_servers; /**< Array of Servers */ - apr_pool_t *p; /** Pool to use for allocations */ - void *hash_baton; - apr_redis_hash_func hash_func; - void *server_baton; - apr_redis_server_func server_func; -}; - -/** - * Creates a crc32 hash used to split keys between servers - * @param rc The redis client object to use - * @param data Data to be hashed - * @param data_len Length of the data to use - * @return crc32 hash of data - * @remark The crc32 hash is not compatible with old redisd clients. - */ -APU_DECLARE(apr_uint32_t) apr_redis_hash(apr_redis_t *rc, - const char *data, - const apr_size_t data_len); - -/** - * Pure CRC32 Hash. Used by some clients. - */ -APU_DECLARE(apr_uint32_t) apr_redis_hash_crc32(void *baton, - const char *data, - const apr_size_t data_len); - -/** - * hash compatible with the standard Perl Client. - */ -APU_DECLARE(apr_uint32_t) apr_redis_hash_default(void *baton, - const char *data, - const apr_size_t data_len); - -/** - * Picks a server based on a hash - * @param rc The redis client object to use - * @param hash Hashed value of a Key - * @return server that controls specified hash - * @see apr_redis_hash - */ -APU_DECLARE(apr_redis_server_t *) apr_redis_find_server_hash(apr_redis_t *rc, - const apr_uint32_t hash); - -/** - * server selection compatible with the standard Perl Client. - */ -APU_DECLARE(apr_redis_server_t *) apr_redis_find_server_hash_default(void *baton, - apr_redis_t *rc, - const apr_uint32_t hash); - -/** - * Adds a server to a client object - * @param rc The redis client object to use - * @param server Server to add - * @remark Adding servers is not thread safe, and should be done once at startup. - * @warning Changing servers after startup may cause keys to go to - * different servers. - */ -APU_DECLARE(apr_status_t) apr_redis_add_server(apr_redis_t *rc, - apr_redis_server_t *server); - - -/** - * Finds a Server object based on a hostname/port pair - * @param rc The redis client object to use - * @param host Hostname of the server - * @param port Port of the server - * @return Server with matching Hostname and Port, or NULL if none was found. - */ -APU_DECLARE(apr_redis_server_t *) apr_redis_find_server(apr_redis_t *rc, - const char *host, - apr_port_t port); - -/** - * Enables a Server for use again - * @param rc The redis client object to use - * @param rs Server to Activate - */ -APU_DECLARE(apr_status_t) apr_redis_enable_server(apr_redis_t *rc, - apr_redis_server_t *rs); - - -/** - * Disable a Server - * @param rc The redis client object to use - * @param rs Server to Disable - */ -APU_DECLARE(apr_status_t) apr_redis_disable_server(apr_redis_t *rc, - apr_redis_server_t *rs); - -/** - * Creates a new Server Object - * @param p Pool to use - * @param host hostname of the server - * @param port port of the server - * @param min minimum number of client sockets to open - * @param smax soft maximum number of client connections to open - * @param max hard maximum number of client connections - * @param ttl time to live in microseconds of a client connection - * @param rwto r/w timeout value in seconds of a client connection - * @param ns location of the new server object - * @see apr_reslist_create - * @remark min, smax, and max are only used when APR_HAS_THREADS - */ -APU_DECLARE(apr_status_t) apr_redis_server_create(apr_pool_t *p, - const char *host, - apr_port_t port, - apr_uint32_t min, - apr_uint32_t smax, - apr_uint32_t max, - apr_uint32_t ttl, - apr_uint32_t rwto, - apr_redis_server_t **ns); -/** - * Creates a new redisd client object - * @param p Pool to use - * @param max_servers maximum number of servers - * @param flags Not currently used - * @param rc location of the new redis client object - */ -APU_DECLARE(apr_status_t) apr_redis_create(apr_pool_t *p, - apr_uint16_t max_servers, - apr_uint32_t flags, - apr_redis_t **rc); - -/** - * Gets a value from the server, allocating the value out of p - * @param rc client to use - * @param p Pool to use - * @param key null terminated string containing the key - * @param baton location of the allocated value - * @param len length of data at baton - * @param flags any flags set by the client for this key - * @return - */ -APU_DECLARE(apr_status_t) apr_redis_getp(apr_redis_t *rc, - apr_pool_t *p, - const char* key, - char **baton, - apr_size_t *len, - apr_uint16_t *flags); - -/** - * Sets a value by key on the server - * @param rc client to use - * @param key null terminated string containing the key - * @param baton data to store on the server - * @param data_size length of data at baton - * @param flags any flags set by the client for this key - */ -APU_DECLARE(apr_status_t) apr_redis_set(apr_redis_t *rc, - const char *key, - char *baton, - const apr_size_t data_size, - apr_uint16_t flags); - -/** - * Sets a value by key on the server - * @param rc client to use - * @param key null terminated string containing the key - * @param baton data to store on the server - * @param data_size length of data at baton - * @param timeout time in seconds for the data to live on the server - * @param flags any flags set by the client for this key - */ -APU_DECLARE(apr_status_t) apr_redis_setex(apr_redis_t *rc, - const char *key, - char *baton, - const apr_size_t data_size, - apr_uint32_t timeout, - apr_uint16_t flags); - -/** - * Deletes a key from a server - * @param rc client to use - * @param key null terminated string containing the key - * @param timeout time for the delete to stop other clients from adding - */ -APU_DECLARE(apr_status_t) apr_redis_delete(apr_redis_t *rc, - const char *key, - apr_uint32_t timeout); - -/** - * Query a server's version - * @param rs server to query - * @param p Pool to allocate answer from - * @param baton location to store server version string - */ -APU_DECLARE(apr_status_t) apr_redis_version(apr_redis_server_t *rs, - apr_pool_t *p, - char **baton); - -/** - * Query a server's INFO - * @param rs server to query - * @param p Pool to allocate answer from - * @param baton location to store server INFO response string - */ -APU_DECLARE(apr_status_t) apr_redis_info(apr_redis_server_t *rs, - apr_pool_t *p, - char **baton); - -/** - * Increments a value - * @param rc client to use - * @param key null terminated string containing the key - * @param inc number to increment by - * @param new_value new value after incrementing - */ -APU_DECLARE(apr_status_t) apr_redis_incr(apr_redis_t *rc, - const char *key, - apr_int32_t inc, - apr_uint32_t *new_value); -/** - * Decrements a value - * @param rc client to use - * @param key null terminated string containing the key - * @param inc number to decrement by - * @param new_value new value after decrementing - */ -APU_DECLARE(apr_status_t) apr_redis_decr(apr_redis_t *rc, - const char *key, - apr_int32_t inc, - apr_uint32_t *new_value); - - -/** - * Pings the server - * @param rs Server to ping - */ -APU_DECLARE(apr_status_t) apr_redis_ping(apr_redis_server_t *rs); - -/** - * Gets multiple values from the server, allocating the values out of p - * @param rc client to use - * @param temp_pool Pool used for temporary allocations. May be cleared inside this - * call. - * @param data_pool Pool used to allocate data for the returned values. - * @param values hash of apr_redis_value_t keyed by strings, contains the - * result of the multiget call. - * @return - */ -APU_DECLARE(apr_status_t) apr_redis_multgetp(apr_redis_t *rc, - apr_pool_t *temp_pool, - apr_pool_t *data_pool, - apr_hash_t *values); - -typedef enum -{ - APR_RS_SERVER_MASTER, /**< Server is a master */ - APR_RS_SERVER_SLAVE, /**< Server is a slave */ - APR_RS_SERVER_UNKNOWN /**< Server role is unknown */ -} apr_redis_server_role_t; - -typedef struct -{ -/* # Server */ - /** Major version number of this server */ - apr_uint32_t major; - /** Minor version number of this server */ - apr_uint32_t minor; - /** Patch version number of this server */ - apr_uint32_t patch; - /** Process id of this server process */ - apr_uint32_t process_id; - /** Number of seconds this server has been running */ - apr_uint32_t uptime_in_seconds; - /** Bitsize of the arch on the current machine */ - apr_uint32_t arch_bits; - -/* # Clients */ - /** Number of connected clients */ - apr_uint32_t connected_clients; - /** Number of blocked clients */ - apr_uint32_t blocked_clients; - -/* # Memory */ - /** Max memory of this server */ - apr_uint64_t maxmemory; - /** Amount of used memory */ - apr_uint64_t used_memory; - /** Total memory available on this server */ - apr_uint64_t total_system_memory; - -/* # Stats */ - /** Total connections received */ - apr_uint64_t total_connections_received; - /** Total commands processed */ - apr_uint64_t total_commands_processed; - /** Total commands rejected */ - apr_uint64_t rejected_connections; - /** Total net input bytes */ - apr_uint64_t total_net_input_bytes; - /** Total net output bytes */ - apr_uint64_t total_net_output_bytes; - /** Keyspace hits */ - apr_uint64_t keyspace_hits; - /** Keyspace misses */ - apr_uint64_t keyspace_misses; - -/* # Replication */ - /** Role */ - apr_redis_server_role_t role; - /** Number of connected slave */ - apr_uint32_t connected_slaves; - -/* # CPU */ - /** Accumulated CPU user time for this process */ - apr_uint32_t used_cpu_sys; - /** Accumulated CPU system time for this process */ - apr_uint32_t used_cpu_user; - -/* # Cluster */ - /** Is cluster enabled */ - apr_uint32_t cluster_enabled; -} apr_redis_stats_t; - -/** - * Query a server for statistics - * @param rs server to query - * @param p Pool to allocate answer from - * @param stats location of the new statistics structure - */ -APU_DECLARE(apr_status_t) apr_redis_stats(apr_redis_server_t *rs, - apr_pool_t *p, - apr_redis_stats_t **stats); - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* APR_REDIS_H */ Index: contrib/apr-util/include/apr_reslist.h =================================================================== --- contrib/apr-util/include/apr_reslist.h +++ /dev/null @@ -1,183 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_rmm.h =================================================================== --- contrib/apr-util/include/apr_rmm.h +++ /dev/null @@ -1,137 +0,0 @@ -/* 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 */ - Index: contrib/apr-util/include/apr_sdbm.h =================================================================== --- contrib/apr-util/include/apr_sdbm.h +++ /dev/null @@ -1,176 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_sha1.h =================================================================== --- contrib/apr-util/include/apr_sha1.h +++ /dev/null @@ -1,121 +0,0 @@ -/* 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. - */ -/* NIST Secure Hash Algorithm - * heavily modified by Uwe Hollerbach uh@alumni.caltech edu - * from Peter C. Gutmann's implementation as found in - * Applied Cryptography by Bruce Schneier - * This code is hereby placed in the public domain - */ - -#ifndef APR_SHA1_H -#define APR_SHA1_H - -#include "apu.h" -#include "apr_general.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file apr_sha1.h - * @brief APR-UTIL SHA1 library - */ - -/** size of the SHA1 DIGEST */ -#define APR_SHA1_DIGESTSIZE 20 - -/** - * Define the Magic String prefix that identifies a password as being - * hashed using our algorithm. - */ -#define APR_SHA1PW_ID "{SHA}" - -/** length of the SHA Password */ -#define APR_SHA1PW_IDLEN 5 - -/** @see apr_sha1_ctx_t */ -typedef struct apr_sha1_ctx_t apr_sha1_ctx_t; - -/** - * SHA1 context structure - */ -struct apr_sha1_ctx_t { - /** message digest */ - apr_uint32_t digest[5]; - /** 64-bit bit counts */ - apr_uint32_t count_lo, count_hi; - /** SHA data buffer */ - apr_uint32_t data[16]; - /** unprocessed amount in data */ - int local; -}; - -/** - * Provide a means to SHA1 crypt/encode a plaintext password in a way which - * makes password file compatible with those commonly use in netscape web - * and ldap installations. - * @param clear The plaintext password - * @param len The length of the plaintext password - * @param out The encrypted/encoded password - * @note SHA1 support is useful for migration purposes, but is less - * secure than Apache's password format, since Apache's (MD5) - * password format uses a random eight character salt to generate - * one of many possible hashes for the same password. Netscape - * uses plain SHA1 without a salt, so the same password - * will always generate the same hash, making it easier - * to break since the search space is smaller. - */ -APU_DECLARE(void) apr_sha1_base64(const char *clear, int len, char *out); - -/** - * Initialize the SHA digest - * @param context The SHA context to initialize - */ -APU_DECLARE(void) apr_sha1_init(apr_sha1_ctx_t *context); - -/** - * Update the SHA digest - * @param context The SHA1 context to update - * @param input The buffer to add to the SHA digest - * @param inputLen The length of the input buffer - */ -APU_DECLARE(void) apr_sha1_update(apr_sha1_ctx_t *context, const char *input, - unsigned int inputLen); - -/** - * Update the SHA digest with binary data - * @param context The SHA1 context to update - * @param input The buffer to add to the SHA digest - * @param inputLen The length of the input buffer - */ -APU_DECLARE(void) apr_sha1_update_binary(apr_sha1_ctx_t *context, - const unsigned char *input, - unsigned int inputLen); - -/** - * Finish computing the SHA digest - * @param digest the output buffer in which to store the digest - * @param context The context to finalize - */ -APU_DECLARE(void) apr_sha1_final(unsigned char digest[APR_SHA1_DIGESTSIZE], - apr_sha1_ctx_t *context); - -#ifdef __cplusplus -} -#endif - -#endif /* APR_SHA1_H */ Index: contrib/apr-util/include/apr_siphash.h =================================================================== --- contrib/apr-util/include/apr_siphash.h +++ /dev/null @@ -1,148 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - SipHash reference C implementation - Copyright (c) 2012-2014 Jean-Philippe Aumasson - - Copyright (c) 2012-2014 Daniel J. Bernstein - To the extent possible under law, the author(s) have dedicated all copyright - and related and neighboring rights to this software to the public domain - worldwide. This software is distributed without any warranty. - You should have received a copy of the CC0 Public Domain Dedication along - with this software. If not, see - . - */ - -#ifndef APR_SIPHASH_H -#define APR_SIPHASH_H - -#include "apr.h" -#include "apu.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @file apr_siphash.h - * @brief APR-UTIL siphash library - * "SipHash-c-d is a family of pseudorandom functions (a.k.a. keyed - * hash functions) optimized for speed on short messages", designed by - * Jean-Philippe Aumasson and Daniel J. Bernstein. It generates a 64bit - * hash (or MAC) from the message and a 128bit key. - * See http://cr.yp.to/siphash/siphash-20120620.pdf for the details, - * c is the number of compression rounds, d the number of finalization - * rounds; we also define fast implementations for c = 2 with d = 4 (aka - * siphash-2-4), and c = 4 with d = 8 (aka siphash-4-8), as recommended - * parameters per the authors. - */ - -/** size of the siphash digest */ -#define APR_SIPHASH_DSIZE 8 - -/** size of the siphash key */ -#define APR_SIPHASH_KSIZE 16 - - -/** - * @brief Computes SipHash-c-d, producing a 64bit (APR_SIPHASH_DSIZE) hash - * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key. - * @param src The message - * @param len The length of the message - * @param key The secret key - * @param c The number of compression rounds - * @param d The number of finalization rounds - * @return The hash value as a 64bit unsigned integer - */ -APU_DECLARE(apr_uint64_t) apr_siphash(const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE], - unsigned int c, unsigned int d); - -/** - * @brief Computes SipHash-c-d, producing a 64bit (APR_SIPHASH_DSIZE) hash - * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key, into a possibly - * unaligned buffer (using the little endian representation as defined by the - * authors for interoperabilty) usable as a MAC. - * @param out The output buffer (or MAC) - * @param src The message - * @param len The length of the message - * @param key The secret key - * @param c The number of compression rounds - * @param d The number of finalization rounds - * @return The hash value as a 64bit unsigned integer - */ -APU_DECLARE(void) apr_siphash_auth(unsigned char out[APR_SIPHASH_DSIZE], - const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE], - unsigned int c, unsigned int d); - -/** - * @brief Computes SipHash-2-4, producing a 64bit (APR_SIPHASH_DSIZE) hash - * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key. - * @param src The message to hash - * @param len The length of the message - * @param key The secret key - * @return The hash value as a 64bit unsigned integer - */ -APU_DECLARE(apr_uint64_t) apr_siphash24(const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]); - -/** - * @brief Computes SipHash-2-4, producing a 64bit (APR_SIPHASH_DSIZE) hash - * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key, into a possibly - * unaligned buffer (using the little endian representation as defined by the - * authors for interoperabilty) usable as a MAC. - * @param out The output buffer (or MAC) - * @param src The message - * @param len The length of the message - * @param key The secret key - * @return The hash value as a 64bit unsigned integer - */ -APU_DECLARE(void) apr_siphash24_auth(unsigned char out[APR_SIPHASH_DSIZE], - const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]); - -/** - * @brief Computes SipHash-4-8, producing a 64bit (APR_SIPHASH_DSIZE) hash - * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key. - * @param src The message - * @param len The length of the message - * @param key The secret key - * @return The hash value as a 64bit unsigned integer - */ -APU_DECLARE(apr_uint64_t) apr_siphash48(const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]); - -/** - * @brief Computes SipHash-4-8, producing a 64bit (APR_SIPHASH_DSIZE) hash - * from a message and a 128bit (APR_SIPHASH_KSIZE) secret key, into a possibly - * unaligned buffer (using the little endian representation as defined by the - * authors for interoperabilty) usable as a MAC. - * @param out The output buffer (or MAC) - * @param src The message - * @param len The length of the message - * @param key The secret key - * @return The hash value as a 64bit unsigned integer - */ -APU_DECLARE(void) apr_siphash48_auth(unsigned char out[APR_SIPHASH_DSIZE], - const void *src, apr_size_t len, - const unsigned char key[APR_SIPHASH_KSIZE]); - -#ifdef __cplusplus -} -#endif - -#endif /* APR_SIPHASH_H */ Index: contrib/apr-util/include/apr_strmatch.h =================================================================== --- contrib/apr-util/include/apr_strmatch.h +++ /dev/null @@ -1,81 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_thread_pool.h =================================================================== --- contrib/apr-util/include/apr_thread_pool.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * 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_THREAD_POOL_H -#define APU_THREAD_POOL_H - -#include "apu.h" -#include "apr_thread_proc.h" - -/** - * @file apr_thread_pool.h - * @brief APR Thread Pool Library - - * @remarks This library implements a thread pool using apr_thread_t. A thread - * pool is a set of threads that can be created in advance or on demand until a - * maximum number. When a task is scheduled, the thread pool will find an idle - * thread to handle the task. In case all existing threads are busy and the - * number of tasks in the queue is higher than the adjustable threshold, the - * pool will try to create a new thread to serve the task if the maximum number - * has not been reached. Otherwise, the task will be put into a queue based on - * priority, which can be valued from 0 to 255, with higher values being served - * first. If there are tasks with the same priority, the new task might be put at - * the top or at the bottom - it depends on which function is used to put the task. - * - * @remarks There may be the case where the thread pool can use up to the maximum - * number of threads at peak load, but having those threads idle afterwards. A - * maximum number of idle threads can be set so that the extra idling threads will - * be terminated to save system resources. - */ -#if APR_HAS_THREADS - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/** - * @defgroup APR_Util_TP Thread Pool routines - * @ingroup APR_Util - * @{ - */ - -/** Opaque Thread Pool structure. */ -typedef struct apr_thread_pool apr_thread_pool_t; - -#define APR_THREAD_TASK_PRIORITY_LOWEST 0 -#define APR_THREAD_TASK_PRIORITY_LOW 63 -#define APR_THREAD_TASK_PRIORITY_NORMAL 127 -#define APR_THREAD_TASK_PRIORITY_HIGH 191 -#define APR_THREAD_TASK_PRIORITY_HIGHEST 255 - -/** - * Create a thread pool - * @param me The pointer in which to return the newly created apr_thread_pool - * object, or NULL if thread pool creation fails. - * @param init_threads The number of threads to be created initially, this number - * will also be used as the initial value for the maximum number of idle threads. - * @param max_threads The maximum number of threads that can be created - * @param pool The pool to use - * @return APR_SUCCESS if the thread pool was created successfully. Otherwise, - * the error code. - */ -APU_DECLARE(apr_status_t) apr_thread_pool_create(apr_thread_pool_t **me, - apr_size_t init_threads, - apr_size_t max_threads, - apr_pool_t *pool); - -/** - * Destroy the thread pool and stop all the threads - * @return APR_SUCCESS if all threads are stopped. - */ -APU_DECLARE(apr_status_t) apr_thread_pool_destroy(apr_thread_pool_t *me); - -/** - * Schedule a task to the bottom of the tasks of same priority. - * @param me The thread pool - * @param func The task function - * @param param The parameter for the task function - * @param priority The priority of the task. - * @param owner Owner of this task. - * @return APR_SUCCESS if the task had been scheduled successfully - */ -APU_DECLARE(apr_status_t) apr_thread_pool_push(apr_thread_pool_t *me, - apr_thread_start_t func, - void *param, - apr_byte_t priority, - void *owner); -/** - * Schedule a task to be run after a delay - * @param me The thread pool - * @param func The task function - * @param param The parameter for the task function - * @param time Time in microseconds - * @param owner Owner of this task. - * @return APR_SUCCESS if the task had been scheduled successfully - */ -APU_DECLARE(apr_status_t) apr_thread_pool_schedule(apr_thread_pool_t *me, - apr_thread_start_t func, - void *param, - apr_interval_time_t time, - void *owner); - -/** - * Schedule a task to the top of the tasks of same priority. - * @param me The thread pool - * @param func The task function - * @param param The parameter for the task function - * @param priority The priority of the task. - * @param owner Owner of this task. - * @return APR_SUCCESS if the task had been scheduled successfully - */ -APU_DECLARE(apr_status_t) apr_thread_pool_top(apr_thread_pool_t *me, - apr_thread_start_t func, - void *param, - apr_byte_t priority, - void *owner); - -/** - * Cancel tasks submitted by the owner. If there is any task from the owner that - * is currently running, the function will spin until the task finished. - * @param me The thread pool - * @param owner Owner of the task - * @return APR_SUCCESS if the task has been cancelled successfully - * @note The task function should not be calling cancel, otherwise the function - * may get stuck forever. The function assert if it detect such a case. - */ -APU_DECLARE(apr_status_t) apr_thread_pool_tasks_cancel(apr_thread_pool_t *me, - void *owner); - -/** - * Get the current number of tasks waiting in the queue - * @param me The thread pool - * @return Number of tasks in the queue - */ -APU_DECLARE(apr_size_t) apr_thread_pool_tasks_count(apr_thread_pool_t *me); - -/** - * Get the current number of scheduled tasks waiting in the queue - * @param me The thread pool - * @return Number of scheduled tasks in the queue - */ -APU_DECLARE(apr_size_t) apr_thread_pool_scheduled_tasks_count(apr_thread_pool_t *me); - -/** - * Get the current number of threads - * @param me The thread pool - * @return Total number of threads - */ -APU_DECLARE(apr_size_t) apr_thread_pool_threads_count(apr_thread_pool_t *me); - -/** - * Get the current number of busy threads - * @param me The thread pool - * @return Number of busy threads - */ -APU_DECLARE(apr_size_t) apr_thread_pool_busy_count(apr_thread_pool_t *me); - -/** - * Get the current number of idle threads - * @param me The thread pool - * @return Number of idle threads - */ -APU_DECLARE(apr_size_t) apr_thread_pool_idle_count(apr_thread_pool_t *me); - -/** - * Access function for the maximum number of idle threads. Number of current - * idle threads will be reduced to the new limit. - * @param me The thread pool - * @param cnt The number - * @return The number of threads that were stopped. - */ -APU_DECLARE(apr_size_t) apr_thread_pool_idle_max_set(apr_thread_pool_t *me, - apr_size_t cnt); - -/** - * Get number of tasks that have run - * @param me The thread pool - * @return Number of tasks that have run - */ -APU_DECLARE(apr_size_t) - apr_thread_pool_tasks_run_count(apr_thread_pool_t * me); - -/** - * Get high water mark of the number of tasks waiting to run - * @param me The thread pool - * @return High water mark of tasks waiting to run - */ -APU_DECLARE(apr_size_t) - apr_thread_pool_tasks_high_count(apr_thread_pool_t * me); - -/** - * Get high water mark of the number of threads - * @param me The thread pool - * @return High water mark of threads in thread pool - */ -APU_DECLARE(apr_size_t) - apr_thread_pool_threads_high_count(apr_thread_pool_t * me); - -/** - * Get the number of idle threads that were destroyed after timing out - * @param me The thread pool - * @return Number of idle threads that timed out - */ -APU_DECLARE(apr_size_t) - apr_thread_pool_threads_idle_timeout_count(apr_thread_pool_t * me); - -/** - * Access function for the maximum number of idle threads - * @param me The thread pool - * @return The current maximum number - */ -APU_DECLARE(apr_size_t) apr_thread_pool_idle_max_get(apr_thread_pool_t *me); - -/** - * Access function for the maximum number of threads. - * @param me The thread pool - * @param cnt Number of threads - * @return The original maximum number of threads - */ -APU_DECLARE(apr_size_t) apr_thread_pool_thread_max_set(apr_thread_pool_t *me, - apr_size_t cnt); - -/** - * Access function for the maximum wait time (in microseconds) of an - * idling thread that exceeds the maximum number of idling threads. - * A non-zero value allows for the reaping of idling threads to shrink - * over time. Which helps reduce thrashing. - * @param me The thread pool - * @param timeout The number of microseconds an idle thread should wait - * till it reaps itself - * @return The original maximum wait time - */ -APU_DECLARE(apr_interval_time_t) - apr_thread_pool_idle_wait_set(apr_thread_pool_t * me, - apr_interval_time_t timeout); - -/** - * Access function for the maximum wait time (in microseconds) of an - * idling thread that exceeds the maximum number of idling threads - * @param me The thread pool - * @return The current maximum wait time - */ -APU_DECLARE(apr_interval_time_t) - apr_thread_pool_idle_wait_get(apr_thread_pool_t * me); - -/** - * Access function for the maximum number of threads - * @param me The thread pool - * @return The current maximum number - */ -APU_DECLARE(apr_size_t) apr_thread_pool_thread_max_get(apr_thread_pool_t *me); - -/** - * Access function for the threshold of tasks in queue to trigger a new thread. - * @param me The thread pool - * @param cnt The new threshold - * @return The original threshold - */ -APU_DECLARE(apr_size_t) apr_thread_pool_threshold_set(apr_thread_pool_t *me, - apr_size_t val); - -/** - * Access function for the threshold of tasks in queue to trigger a new thread. - * @param me The thread pool - * @return The current threshold - */ -APU_DECLARE(apr_size_t) apr_thread_pool_threshold_get(apr_thread_pool_t * me); - -/** - * Get owner of the task currently been executed by the thread. - * @param thd The thread is executing a task - * @param owner Pointer to receive owner of the task. - * @return APR_SUCCESS if the owner is retrieved successfully - */ -APU_DECLARE(apr_status_t) apr_thread_pool_task_owner_get(apr_thread_t *thd, - void **owner); - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif /* APR_HAS_THREADS */ -#endif /* !APR_THREAD_POOL_H */ Index: contrib/apr-util/include/apr_uri.h =================================================================== --- contrib/apr-util/include/apr_uri.h +++ /dev/null @@ -1,178 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_uuid.h =================================================================== --- contrib/apr-util/include/apr_uuid.h +++ /dev/null @@ -1,76 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_xlate.h =================================================================== --- contrib/apr-util/include/apr_xlate.h +++ /dev/null @@ -1,163 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apr_xml.h =================================================================== --- contrib/apr-util/include/apr_xml.h +++ /dev/null @@ -1,358 +0,0 @@ -/* 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 
- *     APR_XML_X2T_PARSED              original prefixes
- * 
- * @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 */ -#define APR_XML_X2T_PARSED 4 /**< original prefixes */ - -/** - * 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 */ Index: contrib/apr-util/include/apu.h.in =================================================================== --- contrib/apr-util/include/apu.h.in +++ /dev/null @@ -1,128 +0,0 @@ -/* 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 @apu_have_sdbm@ -#define APU_HAVE_GDBM @apu_have_gdbm@ -#define APU_HAVE_NDBM @apu_have_ndbm@ -#define APU_HAVE_DB @apu_have_db@ - -#if APU_HAVE_DB -#define APU_HAVE_DB_VERSION @apu_db_version@ -#endif - -#define APU_HAVE_PGSQL @apu_have_pgsql@ -#define APU_HAVE_MYSQL @apu_have_mysql@ -#define APU_HAVE_SQLITE3 @apu_have_sqlite3@ -#define APU_HAVE_SQLITE2 @apu_have_sqlite2@ -#define APU_HAVE_ORACLE @apu_have_oracle@ -#define APU_HAVE_ODBC @apu_have_odbc@ - -#define APU_HAVE_CRYPTO @apu_have_crypto@ -#define APU_HAVE_OPENSSL @apu_have_openssl@ -#define APU_HAVE_NSS @apu_have_nss@ -#define APU_HAVE_COMMONCRYPTO @apu_have_commoncrypto@ - -#define APU_HAVE_APR_ICONV @have_apr_iconv@ -#define APU_HAVE_ICONV @have_iconv@ -#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) - -#endif /* APU_H */ -/** @} */ Index: contrib/apr-util/include/apu.hnw =================================================================== --- contrib/apr-util/include/apu.hnw +++ /dev/null @@ -1,124 +0,0 @@ -/* 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. - */ - -/* - * Note: This is a NetWare specific version of apu.h. It is renamed to - * apu.h at the start of a NetWare build. - */ -/* @file apu.h - * @brief APR-Utility main file - */ - -#ifdef NETWARE -#ifndef APU_H -#define APU_H -/** - * @defgroup APR_Util APR Utility Functions - * @{ - */ - - -/** - * APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library, - * so that all public symbols are exported. - * - * APU_DECLARE_STATIC is defined when including the APR-UTIL public headers, - * to provide static linkage when the dynamic library may be unavailable. - * - * APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when - * including the APR-UTIL public headers, to import and link the symbols from - * the dynamic APR-UTIL library and assure appropriate indirection and calling - * conventions at compile time. - */ - -/** - * 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 - -/** - * 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 - -/* - * we always have SDBM (it's in our codebase) - */ -#define APU_HAVE_SDBM 1 - -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_GDBM 0 -#define APU_HAVE_NDBM 0 -#define APU_HAVE_DB 0 - -#if APU_HAVE_DB -#define APU_HAVE_DB_VERSION 0 -#endif -#endif - -/* - * we always enable dynamic driver loads within apr_dbd - */ -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_PGSQL 0 -#define APU_HAVE_MYSQL 0 -#define APU_HAVE_SQLITE3 0 -#define APU_HAVE_SQLITE2 0 -#define APU_HAVE_ORACLE 0 -#define APU_HAVE_ODBC 0 -#endif - -#define APU_HAVE_CRYPTO 0 - -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_OPENSSL 0 -#define APU_HAVE_NSS 0 -#define APU_HAVE_COMMONCRYPTO 0 -#endif - -#define APU_HAVE_APR_ICONV 0 -#define APU_HAVE_ICONV 1 -#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) - -#endif /* APU_H */ -#endif /* NETWARE */ - Index: contrib/apr-util/include/apu.hw =================================================================== --- contrib/apr-util/include/apu.hw +++ /dev/null @@ -1,146 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * apu.h is duplicated from apu.hw at build time -- do not edit apu.h - */ -/* @file apu.h - * @brief APR-Utility main file - */ -/** - * @defgroup APR_Util APR Utility Functions - * @{ - */ - - -#ifndef APU_H -#define APU_H - -/** - * APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library, - * so that all public symbols are exported. - * - * APU_DECLARE_STATIC is defined when including the APR-UTIL public headers, - * to provide static linkage when the dynamic library may be unavailable. - * - * APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when - * including the APR-UTIL public headers, to import and link the symbols from - * the dynamic APR-UTIL library and assure appropriate indirection and calling - * conventions at compile time. - */ - -/* Make sure we have our platform identifier macro defined we ask for later. - */ -#if defined(_WIN32) && !defined(WIN32) -#define WIN32 1 -#endif - -#if defined(DOXYGEN) || !defined(WIN32) -/** - * The public APR-UTIL functions are declared with APU_DECLARE(), so they may - * use the most appropriate calling convention. Public APR functions with - * variable arguments must use APU_DECLARE_NONSTD(). - * - * @fn APU_DECLARE(rettype) apr_func(args); - */ -#define APU_DECLARE(type) type -/** - * The public APR-UTIL functions using variable arguments are declared with - * APU_DECLARE_NONSTD(), as they must use the C language calling convention. - * - * @fn APU_DECLARE_NONSTD(rettype) apr_func(args, ...); - */ -#define APU_DECLARE_NONSTD(type) type -/** - * The public APR-UTIL variables are declared with APU_DECLARE_DATA. - * This assures the appropriate indirection is invoked at compile time. - * - * @fn APU_DECLARE_DATA type apr_variable; - * @note extern APU_DECLARE_DATA type apr_variable; syntax is required for - * declarations within headers to properly import the variable. - */ -#define APU_DECLARE_DATA -#elif defined(APU_DECLARE_STATIC) -#define APU_DECLARE(type) type __stdcall -#define APU_DECLARE_NONSTD(type) type __cdecl -#define APU_DECLARE_DATA -#elif defined(APU_DECLARE_EXPORT) -#define APU_DECLARE(type) __declspec(dllexport) type __stdcall -#define APU_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl -#define APU_DECLARE_DATA __declspec(dllexport) -#else -#define APU_DECLARE(type) __declspec(dllimport) type __stdcall -#define APU_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl -#define APU_DECLARE_DATA __declspec(dllimport) -#endif - -#if !defined(WIN32) || defined(APU_MODULE_DECLARE_STATIC) -/** - * Declare a dso module's exported module structure as APU_MODULE_DECLARE_DATA. - * - * Unless APU_MODULE_DECLARE_STATIC is defined at compile time, symbols - * declared with APU_MODULE_DECLARE_DATA are always exported. - * @code - * module APU_MODULE_DECLARE_DATA mod_tag - * @endcode - */ -#define APU_MODULE_DECLARE_DATA -#else -#define APU_MODULE_DECLARE_DATA __declspec(dllexport) -#endif - -/* - * we always have SDBM (it's in our codebase) - */ -#define APU_HAVE_SDBM 1 - -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_GDBM 0 -#define APU_HAVE_NDBM 0 -#define APU_HAVE_DB 0 - -#if APU_HAVE_DB -#define APU_HAVE_DB_VERSION 0 -#endif -#endif - -/* - * we always enable dynamic driver loads within apr_dbd - * Win32 always has odbc (it's always installed) - */ -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_PGSQL 0 -#define APU_HAVE_MYSQL 0 -#define APU_HAVE_SQLITE3 0 -#define APU_HAVE_SQLITE2 0 -#define APU_HAVE_ORACLE 0 -#define APU_HAVE_ODBC 1 -#endif - -#define APU_HAVE_CRYPTO 0 - -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_OPENSSL 0 -#define APU_HAVE_NSS 0 -#define APU_HAVE_COMMONCRYPTO 0 -#endif - -#define APU_HAVE_APR_ICONV 1 -#define APU_HAVE_ICONV 0 -#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) - -#endif /* APU_H */ -/** @} */ Index: contrib/apr-util/include/apu.hwc =================================================================== --- contrib/apr-util/include/apu.hwc +++ /dev/null @@ -1,145 +0,0 @@ -/* Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * apu.h is duplicated from apu.hwc at build time -- do not edit apu.h - */ -/* @file apu.h - * @brief APR-Utility main file - */ -/** - * @defgroup APR_Util APR Utility Functions - * @{ - */ - - -#ifndef APU_H -#define APU_H - -/** - * APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library, - * so that all public symbols are exported. - * - * APU_DECLARE_STATIC is defined when including the APR-UTIL public headers, - * to provide static linkage when the dynamic library may be unavailable. - * - * APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when - * including the APR-UTIL public headers, to import and link the symbols from - * the dynamic APR-UTIL library and assure appropriate indirection and calling - * conventions at compile time. - */ - -/* Make sure we have our platform identifier macro defined we ask for later. - */ -#if defined(_WIN32) && !defined(WIN32) -#define WIN32 1 -#endif - -#if defined(DOXYGEN) || !defined(WIN32) -/** - * The public APR-UTIL functions are declared with APU_DECLARE(), so they may - * use the most appropriate calling convention. Public APR functions with - * variable arguments must use APU_DECLARE_NONSTD(). - * - * @fn APU_DECLARE(rettype) apr_func(args); - */ -#define APU_DECLARE(type) type -/** - * The public APR-UTIL functions using variable arguments are declared with - * APU_DECLARE_NONSTD(), as they must use the C language calling convention. - * - * @fn APU_DECLARE_NONSTD(rettype) apr_func(args, ...); - */ -#define APU_DECLARE_NONSTD(type) type -/** - * The public APR-UTIL variables are declared with APU_DECLARE_DATA. - * This assures the appropriate indirection is invoked at compile time. - * - * @fn APU_DECLARE_DATA type apr_variable; - * @note extern APU_DECLARE_DATA type apr_variable; syntax is required for - * declarations within headers to properly import the variable. - */ -#define APU_DECLARE_DATA -#elif defined(APU_DECLARE_STATIC) -#define APU_DECLARE(type) type __stdcall -#define APU_DECLARE_NONSTD(type) type __cdecl -#define APU_DECLARE_DATA -#elif defined(APU_DECLARE_EXPORT) -#define APU_DECLARE(type) __declspec(dllexport) type __stdcall -#define APU_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl -#define APU_DECLARE_DATA __declspec(dllexport) -#else -#define APU_DECLARE(type) __declspec(dllimport) type __stdcall -#define APU_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl -#define APU_DECLARE_DATA __declspec(dllimport) -#endif - -#if !defined(WIN32) || defined(APU_MODULE_DECLARE_STATIC) -/** - * Declare a dso module's exported module structure as APU_MODULE_DECLARE_DATA. - * - * Unless APU_MODULE_DECLARE_STATIC is defined at compile time, symbols - * declared with APU_MODULE_DECLARE_DATA are always exported. - * @code - * module APU_MODULE_DECLARE_DATA mod_tag - * @endcode - */ -#define APU_MODULE_DECLARE_DATA -#else -#define APU_MODULE_DECLARE_DATA __declspec(dllexport) -#endif - -/* - * we always have SDBM (it's in our codebase) - */ -#define APU_HAVE_SDBM 1 - -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_GDBM 0 -#define APU_HAVE_NDBM 0 -#define APU_HAVE_DB 0 - -#if APU_HAVE_DB -#define APU_HAVE_DB_VERSION 0 -#endif -#endif - -/* - * we always enable dynamic driver loads within apr_dbd - * Win32 always has odbc (it's always installed) - */ -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_PGSQL 0 -#define APU_HAVE_MYSQL 0 -#define APU_HAVE_SQLITE3 0 -#define APU_HAVE_SQLITE2 0 -#define APU_HAVE_ORACLE 0 -#define APU_HAVE_ODBC 1 -#endif - -#define APU_HAVE_CRYPTO @apu_have_crypto_10@ - -#ifndef APU_DSO_MODULE_BUILD -#define APU_HAVE_OPENSSL 0 -#define APU_HAVE_NSS 0 -#endif - -#define APU_HAVE_APR_ICONV @apu_have_apr_iconv_10@ -#define APU_HAVE_ICONV 0 -#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV) - -#endif /* APU_H */ -/** @} */ Index: contrib/apr-util/include/apu_errno.h =================================================================== --- contrib/apr-util/include/apu_errno.h +++ /dev/null @@ -1,173 +0,0 @@ -/* 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 */ Index: contrib/apr-util/include/apu_version.h =================================================================== --- contrib/apr-util/include/apu_version.h +++ /dev/null @@ -1,139 +0,0 @@ -/* 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) 2000-2016 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 6 - -/** patch level - * The Patch Level never includes API changes, simply bug fixes. - * Reset to 0 when upgrading APR_MINOR_VERSION - */ -#define APU_PATCH_VERSION 1 - -/** - * The symbol APU_IS_DEV_VERSION is only defined for internal, - * "development" copies of APU. It is undefined for released versions - * of APU. - */ -/* #undef 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 */ Index: contrib/apr-util/include/apu_want.h.in =================================================================== --- contrib/apr-util/include/apu_want.h.in +++ /dev/null @@ -1,51 +0,0 @@ -/* 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:       <@apu_db_header@>
- *
- * Typical usage:
- *
- *   #define APU_WANT_DB
- *   #include "apu_want.h"
- *
- * The appropriate headers will be included.
- *
- * Note: it is safe to use this in a header (it won't interfere with other
- *       headers' or source files' use of apu_want.h)
- * 
- */ - -/* --------------------------------------------------------------------- */ - -#ifdef APU_WANT_DB - -#if APU_HAVE_DB -#include <@apu_db_header@> -#endif - -#undef APU_WANT_DB -#endif - -/* --------------------------------------------------------------------- */ Index: contrib/apr-util/include/apu_want.hnw =================================================================== --- contrib/apr-util/include/apu_want.hnw +++ /dev/null @@ -1,52 +0,0 @@ -/* 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:       <@apu_db_header>
- *
- * Typical usage:
- *
- *   #define APU_WANT_DB
- *   #include "apu_want.h"
- *
- * The appropriate headers will be included.
- *
- * Note: it is safe to use this in a header (it won't interfere with other
- *       headers' or source files' use of apu_want.h)
- * 
- */ - -/* --------------------------------------------------------------------- */ - -#ifdef APU_WANT_DB - -#if APU_HAVE_DB -/* win32 note.. you will need to change this for db1 */ -#include -#endif - -#undef APU_WANT_DB -#endif - -/* --------------------------------------------------------------------- */ Index: contrib/apr-util/include/apu_want.hw =================================================================== --- contrib/apr-util/include/apu_want.hw +++ /dev/null @@ -1,52 +0,0 @@ -/* 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:       
- *
- * 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)
- * 
- */ - -/* --------------------------------------------------------------------- */ - -#ifdef APU_WANT_DB - -#if APU_HAVE_DB -/* win32 note.. you will need to change this for db1 */ -#include -#endif - -#undef APU_WANT_DB -#endif - -/* --------------------------------------------------------------------- */ Index: contrib/apr-util/include/private/apr_crypto_internal.h =================================================================== --- contrib/apr-util/include/private/apr_crypto_internal.h +++ /dev/null @@ -1,297 +0,0 @@ -/* 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_INTERNAL_H -#define APR_CRYPTO_INTERNAL_H - -#include - -#include "apr_crypto.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if APU_HAVE_CRYPTO - -struct apr_crypto_driver_t { - - /** name */ - const char *name; - - /** - * @brief: allow driver to perform once-only initialisation. - * Called once only. - * @param pool The pool to register the cleanup in. - * @param params Optional init parameter string. - * @param rc Driver-specific additional error code - */ - apr_status_t (*init)(apr_pool_t *pool, const char *params, - const apu_err_t **result); - - /** - * @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 provider - provider 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. - */ - apr_status_t (*make)(apr_crypto_t **f, const apr_crypto_driver_t *provider, - const char *params, apr_pool_t *pool); - - /** - * @brief Get a hash table of key types, keyed by the name of the type against - * a pointer to apr_crypto_block_key_type_t. - * - * @param types - hashtable of key types keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ - apr_status_t (*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 - * a pointer to apr_crypto_block_key_mode_t. - * - * @param modes - hashtable of key modes keyed to constants. - * @param f - encryption context - * @return APR_SUCCESS for success - */ - apr_status_t (*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 Iteration count - * @param f The context to use. - * @param p The pool to use. - * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend - * error occurred while generating the key. APR_ENOCIPHER if the type or mode - * is not supported by the particular backend. APR_EKEYTYPE if the key type is - * not known. APR_EPADDING if padding was requested but is not supported. - * APR_ENOTIMPL if not implemented. - */ - apr_status_t (*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. - * @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. - */ - apr_status_t (*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. - */ - apr_status_t (*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. - */ - apr_status_t (*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. If the buffer pointed to is NULL, - * an IV will be created at random, in space allocated from the pool. - * If the buffer is not NULL, the IV in the buffer will be used. - * @param key The key structure. - * @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. - */ - apr_status_t (*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. - */ - apr_status_t (*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. - */ - apr_status_t (*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. - */ - apr_status_t (*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. - */ - apr_status_t (*cleanup)(apr_crypto_t *f); - - /** - * @brief Clean encryption / decryption context. - * @note After cleanup, a context is free to be reused if necessary. - * @return Returns APR_ENOTIMPL if not supported. - */ - apr_status_t (*shutdown)(void); - - /** - * @brief: fetch the most recent error from this driver. - * @param result - the result structure - * @param f - context pointer - * @return APR_SUCCESS for success. - */ - apr_status_t (*error)(const apu_err_t **result, const apr_crypto_t *f); - - /** - * @brief Create a key from the provided secret or passphrase. The key is cleaned - * up when the context is cleaned, and may be reused with multiple encryption - * or decryption operations. - * @note If *key is NULL, a apr_crypto_key_t will be created from a pool. If - * *key is not NULL, *key must point at a previously created structure. - * @param key The key returned, see note. - * @param rec The key record, from which the key will be derived. - * @param f The context to use. - * @param p The pool to use. - * @return Returns APR_ENOKEY if the pass phrase is missing or empty, or if a backend - * error occurred while generating the key. APR_ENOCIPHER if the type or mode - * is not supported by the particular backend. APR_EKEYTYPE if the key type is - * not known. APR_EPADDING if padding was requested but is not supported. - * APR_ENOTIMPL if not implemented. - */ - apr_status_t (*key)(apr_crypto_key_t **key, const apr_crypto_key_rec_t *rec, - const apr_crypto_t *f, apr_pool_t *p); - -}; - -#endif - -#ifdef __cplusplus -} -#endif - -#endif Index: contrib/apr-util/include/private/apr_dbd_internal.h =================================================================== --- contrib/apr-util/include/private/apr_dbd_internal.h +++ /dev/null @@ -1,365 +0,0 @@ -/* 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. - */ - -/* Overview of what this is and does: - * http://www.apache.org/~niq/dbd.html - */ - -#ifndef APR_DBD_INTERNAL_H -#define APR_DBD_INTERNAL_H - -#include - -#include "apr_dbd.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define TXN_IGNORE_ERRORS(t) \ - ((t) && ((t)->mode & APR_DBD_TRANSACTION_IGNORE_ERRORS)) -#define TXN_NOTICE_ERRORS(t) \ - ((t) && !((t)->mode & APR_DBD_TRANSACTION_IGNORE_ERRORS)) - -#define TXN_DO_COMMIT(t) (!((t)->mode & APR_DBD_TRANSACTION_ROLLBACK)) -#define TXN_DO_ROLLBACK(t) ((t)->mode & APR_DBD_TRANSACTION_ROLLBACK) - -#define TXN_MODE_BITS \ - (APR_DBD_TRANSACTION_ROLLBACK|APR_DBD_TRANSACTION_IGNORE_ERRORS) - -struct apr_dbd_driver_t { - /** name */ - const char *name; - - /** init: allow driver to perform once-only initialisation. - * Called once only. May be NULL - */ - void (*init)(apr_pool_t *pool); - - /** native_handle: return the native database handle of the underlying db - * - * @param handle - apr_dbd handle - * @return - native handle - */ - void *(*native_handle)(apr_dbd_t *handle); - - /** open: obtain a database connection from the server rec. - * Must be explicitly closed when you're finished with it. - * WARNING: only use this when you need a connection with - * a lifetime other than a request - * - * @param pool - a pool to use for error messages (if any). - * @param params - connection parameters. - * @param error - descriptive error. - * @return database handle, or NULL on error. - */ - apr_dbd_t *(*open)(apr_pool_t *pool, const char *params, - const char **error); - - /** check_conn: check status of a database connection - * - * @param pool - a pool to use for error messages (if any). - * @param handle - the connection to check - * @return APR_SUCCESS or error - */ - apr_status_t (*check_conn)(apr_pool_t *pool, apr_dbd_t *handle); - - /** close: close/release a connection obtained from open() - * - * @param handle - the connection to release - * @return APR_SUCCESS or error - */ - apr_status_t (*close)(apr_dbd_t *handle); - - /** set_dbname: select database name. May be a no-op if not supported. - * - * @param pool - working pool - * @param handle - the connection - * @param name - the database to select - * @return 0 for success or error code - */ - int (*set_dbname)(apr_pool_t* pool, apr_dbd_t *handle, const char *name); - - /** transaction: start a transaction. May be a no-op. - * - * @param pool - a pool to use for error messages (if any). - * @param handle - the connection - * @param trans - ptr to a transaction. May be null on entry - * @return 0 for success or error code - */ - int (*start_transaction)(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_transaction_t **trans); - - /** end_transaction: end a transaction - * (commit on success, rollback on error). - * May be a no-op. - * - * @param trans - the transaction. - * @return 0 for success or error code - */ - int (*end_transaction)(apr_dbd_transaction_t *trans); - - /** query: execute an SQL query that doesn't return a result set - * - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the SQL statement to execute - * @return 0 for success or error code - */ - int (*query)(apr_dbd_t *handle, int *nrows, const char *statement); - - /** select: execute an SQL query that returns a result set - * - * @param pool - pool to allocate the result set - * @param handle - the connection - * @param res - pointer to result set pointer. May point to NULL on entry - * @param statement - the SQL statement to execute - * @param random - 1 to support random access to results (seek any row); - * 0 to support only looping through results in order - * (async access - faster) - * @return 0 for success or error code - */ - int (*select)(apr_pool_t *pool, apr_dbd_t *handle, apr_dbd_results_t **res, - const char *statement, int random); - - /** num_cols: get the number of columns in a results set - * - * @param res - result set. - * @return number of columns - */ - int (*num_cols)(apr_dbd_results_t *res); - - /** num_tuples: get the number of rows in a results set - * of a synchronous select - * - * @param res - result set. - * @return number of rows, or -1 if the results are asynchronous - */ - int (*num_tuples)(apr_dbd_results_t *res); - - /** get_row: get a row from a result set - * - * @param pool - pool to allocate the row - * @param res - result set pointer - * @param row - pointer to row pointer. May point to NULL on entry - * @param rownum - row number, or -1 for "next row". Ignored if random - * access is not supported. - * @return 0 for success, -1 for rownum out of range or data finished - */ - int (*get_row)(apr_pool_t *pool, apr_dbd_results_t *res, - apr_dbd_row_t **row, int rownum); - - /** get_entry: get an entry from a row - * - * @param row - row pointer - * @param col - entry number - * @param val - entry to fill - * @return 0 for success, -1 for no data, +1 for general error - */ - const char* (*get_entry)(const apr_dbd_row_t *row, int col); - - /** error: get current error message (if any) - * - * @param handle - the connection - * @param errnum - error code from operation that returned an error - * @return the database current error message, or message for errnum - * (implementation-dependent whether errnum is ignored) - */ - const char *(*error)(apr_dbd_t *handle, int errnum); - - /** escape: escape a string so it is safe for use in query/select - * - * @param pool - pool to alloc the result from - * @param string - the string to escape - * @param handle - the connection - * @return the escaped, safe string - */ - const char *(*escape)(apr_pool_t *pool, const char *string, - apr_dbd_t *handle); - - /** prepare: prepare a statement - * - * @param pool - pool to alloc the result from - * @param handle - the connection - * @param query - the SQL query - * @param label - A label for the prepared statement. - * use NULL for temporary prepared statements - * (eg within a Request in httpd) - * @param nargs - number of parameters in the query - * @param nvals - number of values passed in p[b]query/select - * @param types - pointer to an array with types of parameters - * @param statement - statement to prepare. May point to null on entry. - * @return 0 for success or error code - */ - int (*prepare)(apr_pool_t *pool, apr_dbd_t *handle, const char *query, - const char *label, int nargs, int nvals, - apr_dbd_type_e *types, apr_dbd_prepared_t **statement); - - /** pvquery: query using a prepared statement + args - * - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param args - args to prepared statement - * @return 0 for success or error code - */ - int (*pvquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, va_list args); - - /** pvselect: select using a prepared statement + args - * - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param args - args to prepared statement - * @return 0 for success or error code - */ - int (*pvselect)(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, va_list args); - - /** pquery: query using a prepared statement + args - * - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param args - args to prepared statement - * @return 0 for success or error code - */ - int (*pquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, const char **args); - - /** pselect: select using a prepared statement + args - * - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param args - args to prepared statement - * @return 0 for success or error code - */ - int (*pselect)(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, apr_dbd_prepared_t *statement, - int random, const char **args); - - - /** get_name: get a column title from a result set - * - * @param res - result set pointer - * @param col - entry number - * @return param name, or NULL if col is out of bounds. - */ - const char* (*get_name)(const apr_dbd_results_t *res, int col); - - /** transaction_mode_get: get the mode of transaction - * - * @param trans - the transaction. - * @return mode of transaction - */ - int (*transaction_mode_get)(apr_dbd_transaction_t *trans); - - /** transaction_mode_set: get the mode of transaction - * - * @param trans - the transaction. - * @param mode - new mode of the transaction - * @return the mode of transaction in force after the call - */ - int (*transaction_mode_set)(apr_dbd_transaction_t *trans, int mode); - - /** format of prepared statement parameters */ - const char *pformat; - - /** pvbquery: query using a prepared statement + binary args - * - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param args - binary args to prepared statement - * @return 0 for success or error code - */ - int (*pvbquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement, va_list args); - - /** pvbselect: select using a prepared statement + binary args - * - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param args - binary args to prepared statement - * @return 0 for success or error code - */ - int (*pvbselect)(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, - apr_dbd_prepared_t *statement, int random, va_list args); - - /** pbquery: query using a prepared statement + binary args - * - * @param pool - working pool - * @param handle - the connection - * @param nrows - number of rows affected. - * @param statement - the prepared statement to execute - * @param args - binary args to prepared statement - * @return 0 for success or error code - */ - int (*pbquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows, - apr_dbd_prepared_t *statement,const void **args); - - /** pbselect: select using a prepared statement + binary args - * - * @param pool - working pool - * @param handle - the connection - * @param res - pointer to query results. May point to NULL on entry - * @param statement - the prepared statement to execute - * @param random - Whether to support random-access to results - * @param args - binary args to prepared statement - * @return 0 for success or error code - */ - int (*pbselect)(apr_pool_t *pool, apr_dbd_t *handle, - apr_dbd_results_t **res, apr_dbd_prepared_t *statement, - int random, const void **args); - - /** datum_get: get a binary entry from a row - * - * @param row - row pointer - * @param col - entry number - * @param type - type of data to get - * @param data - pointer to data, allocated by the caller - * @return APR_SUCCESS, an error code on error or if col is out of bounds - */ - apr_status_t (*datum_get)(const apr_dbd_row_t *row, int col, - apr_dbd_type_e type, void *data); -}; - -/* Export mutex lock/unlock for drivers that need it - * deprecated; create a per-dbd mutex within the (*init) function - * to avoid blocking other providers running on other threads - */ -APU_DECLARE(apr_status_t) apr_dbd_mutex_lock(void); -APU_DECLARE(apr_status_t) apr_dbd_mutex_unlock(void); - -#ifdef __cplusplus -} -#endif - -#endif Index: contrib/apr-util/include/private/apr_dbd_odbc_v2.h =================================================================== --- contrib/apr-util/include/private/apr_dbd_odbc_v2.h +++ /dev/null @@ -1,119 +0,0 @@ -/* 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. - */ - - -/* ONLY USED FOR ODBC Version 2 -DODBCV2 -* -* Re-define everything to work (more-or-less) in an ODBC V2 environment -* Random access to retrieved rows is not supported - i.e. calls to apr_dbd_select() cannot -* have a 'random' argument of 1. apr_dbd_get_row() must always pass rownum as 0 (get next row) -* -*/ - -#define SQLHANDLE SQLHENV /* Presumes that ENV, DBC, and STMT handles are all the same datatype */ -#define SQL_NULL_HANDLE 0 -#define SQL_HANDLE_STMT 1 -#define SQL_HANDLE_DBC 2 -#define SQL_HANDLE_ENV 3 -#define SQL_NO_DATA SQL_NO_DATA_FOUND - -#ifndef SQL_SUCCEEDED -#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) -#endif - -#undef SQLSetEnvAttr -#define SQLSetEnvAttr(henv, Attribute, Value, StringLength) (0) - -#undef SQLAllocHandle -#define SQLAllocHandle(type, parent, hndl) \ -( (type == SQL_HANDLE_STMT) ? SQLAllocStmt(parent, hndl) \ - : (type == SQL_HANDLE_ENV) ? SQLAllocEnv(hndl) \ - : SQLAllocConnect(parent, hndl) \ -) - -#undef SQLFreeHandle -#define SQLFreeHandle(type, hndl) \ -( (type == SQL_HANDLE_STMT) ? SQLFreeStmt(hndl, SQL_DROP) \ - : (type == SQL_HANDLE_ENV) ? SQLFreeEnv(hndl) \ - : SQLFreeConnect(hndl) \ -) - -#undef SQLGetDiagRec -#define SQLGetDiagRec(type, h, i, state, native, buffer, bufsize, reslen) \ - SQLError( (type == SQL_HANDLE_ENV) ? h : NULL, \ - (type == SQL_HANDLE_DBC) ? h : NULL, \ - (type == SQL_HANDLE_STMT) ? h : NULL, \ - state, native, buffer, bufsize, reslen) - -#undef SQLCloseCursor -#define SQLCloseCursor(stmt) SQLFreeStmt(stmt, SQL_CLOSE) - -#undef SQLGetConnectAttr -#define SQLGetConnectAttr(hdbc, fOption, ValuePtr, BufferLength, NULL) \ - SQLGetConnectOption(hdbc, fOption, ValuePtr) - -#undef SQLSetConnectAttr -#define SQLSetConnectAttr(hdbc, fOption, ValuePtr, BufferLength) \ - SQLSetConnectOption(hdbc, fOption, (SQLUINTEGER) ValuePtr) - -#undef SQLSetStmtAttr -#define SQLSetStmtAttr(hstmt, fOption, ValuePtr, BufferLength) (0); return APR_ENOTIMPL; - -#undef SQLEndTran -#define SQLEndTran(hType, hdbc,type) SQLTransact(henv, hdbc, type) - -#undef SQLFetchScroll -#define SQLFetchScroll(stmt, orient, rownum) (0); return APR_ENOTIMPL; - -#define SQL_DESC_TYPE SQL_COLUMN_TYPE -#define SQL_DESC_CONCISE_TYPE SQL_COLUMN_TYPE -#define SQL_DESC_DISPLAY_SIZE SQL_COLUMN_DISPLAY_SIZE -#define SQL_DESC_OCTET_LENGTH SQL_COLUMN_LENGTH -#define SQL_DESC_UNSIGNED SQL_COLUMN_UNSIGNED - -#undef SQLColAttribute -#define SQLColAttribute(s, c, f, a, l, m, n) SQLColAttributes(s, c, f, a, l, m, n) - -#define SQL_ATTR_ACCESS_MODE SQL_ACCESS_MODE -#define SQL_ATTR_AUTOCOMMIT SQL_AUTOCOMMIT -#define SQL_ATTR_CONNECTION_TIMEOUT 113 -#define SQL_ATTR_CURRENT_CATALOG SQL_CURRENT_QUALIFIER -#define SQL_ATTR_DISCONNECT_BEHAVIOR 114 -#define SQL_ATTR_ENLIST_IN_DTC 1207 -#define SQL_ATTR_ENLIST_IN_XA 1208 - -#define SQL_ATTR_CONNECTION_DEAD 1209 -#define SQL_CD_TRUE 1L /* Connection is closed/dead */ -#define SQL_CD_FALSE 0L /* Connection is open/available */ - -#define SQL_ATTR_LOGIN_TIMEOUT SQL_LOGIN_TIMEOUT -#define SQL_ATTR_ODBC_CURSORS SQL_ODBC_CURSORS -#define SQL_ATTR_PACKET_SIZE SQL_PACKET_SIZE -#define SQL_ATTR_QUIET_MODE SQL_QUIET_MODE -#define SQL_ATTR_TRACE SQL_OPT_TRACE -#define SQL_ATTR_TRACEFILE SQL_OPT_TRACEFILE -#define SQL_ATTR_TRANSLATE_LIB SQL_TRANSLATE_DLL -#define SQL_ATTR_TRANSLATE_OPTION SQL_TRANSLATE_OPTION -#define SQL_ATTR_TXN_ISOLATION SQL_TXN_ISOLATION - -#define SQL_ATTR_CURSOR_SCROLLABLE -1 - -#define SQL_C_SBIGINT (SQL_BIGINT+SQL_SIGNED_OFFSET) /* SIGNED BIGINT */ -#define SQL_C_UBIGINT (SQL_BIGINT+SQL_UNSIGNED_OFFSET) /* UNSIGNED BIGINT */ - -#define SQL_FALSE 0 -#define SQL_TRUE 1 - Index: contrib/apr-util/include/private/apr_dbm_private.h =================================================================== --- contrib/apr-util/include/private/apr_dbm_private.h +++ /dev/null @@ -1,121 +0,0 @@ -/* 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_PRIVATE_H -#define APR_DBM_PRIVATE_H - -#include "apr.h" -#include "apr_errno.h" -#include "apr_pools.h" -#include "apr_dbm.h" -#include "apr_file_io.h" - -#include "apu.h" - -/* ### for now, include the DBM selection; this will go away once we start - ### building and linking all of the DBMs at once. */ -#include "apu_select_dbm.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @internal */ - -/** - * Most DBM libraries take a POSIX mode for creating files. Don't trust - * the mode_t type, some platforms may not support it, int is safe. - */ -APU_DECLARE(int) apr_posix_perms2mode(apr_fileperms_t perm); - -/** - * Structure to describe the operations of the DBM - */ -typedef struct { - /** The name of the DBM Type */ - const char *name; - - /** Open the DBM */ - apr_status_t (*open)(apr_dbm_t **pdb, const char *pathname, - apr_int32_t mode, apr_fileperms_t perm, - apr_pool_t *pool); - - /** Close the DBM */ - void (*close)(apr_dbm_t *dbm); - - /** Fetch a dbm record value by key */ - apr_status_t (*fetch)(apr_dbm_t *dbm, apr_datum_t key, - apr_datum_t * pvalue); - - /** Store a dbm record value by key */ - apr_status_t (*store)(apr_dbm_t *dbm, apr_datum_t key, apr_datum_t value); - - /** Delete a dbm record value by key */ - apr_status_t (*del)(apr_dbm_t *dbm, apr_datum_t key); - - /** Search for a key within the dbm */ - int (*exists)(apr_dbm_t *dbm, apr_datum_t key); - - /** Retrieve the first record key from a dbm */ - apr_status_t (*firstkey)(apr_dbm_t *dbm, apr_datum_t * pkey); - - /** Retrieve the next record key from a dbm */ - apr_status_t (*nextkey)(apr_dbm_t *dbm, apr_datum_t * pkey); - - /** Proactively toss any memory associated with the apr_datum_t. */ - void (*freedatum)(apr_dbm_t *dbm, apr_datum_t data); - - /** Get the names that the DBM will use for a given pathname. */ - void (*getusednames)(apr_pool_t *pool, - const char *pathname, - const char **used1, - const char **used2); - -} apr_dbm_type_t; - - -/** - * The actual DBM - */ -struct apr_dbm_t -{ - /** Associated pool */ - apr_pool_t *pool; - - /** pointer to DB Implementation Specific data */ - void *file; - - /** Current integer error code */ - int errcode; - /** Current string error code */ - const char *errmsg; - - /** the type of DBM */ - const apr_dbm_type_t *type; -}; - - -/* Declare all of the DBM provider tables */ -APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_sdbm; -APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_gdbm; -APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_ndbm; -APU_MODULE_DECLARE_DATA extern const apr_dbm_type_t apr_dbm_type_db; - -#ifdef __cplusplus -} -#endif - -#endif /* APR_DBM_PRIVATE_H */ Index: contrib/apr-util/include/private/apu_config.h.in =================================================================== --- contrib/apr-util/include/private/apu_config.h.in +++ /dev/null @@ -1,183 +0,0 @@ -/* include/private/apu_config.h.in. Generated from configure.in by autoheader. */ - -/* Define if the system crypt() function is threadsafe */ -#undef APU_CRYPT_THREADSAFE - -/* Define to 1 if modular components are built as DSOs */ -#undef APU_DSO_BUILD - -/* Define to be absolute path to DSO directory */ -#undef APU_DSO_LIBDIR - -/* Define if the inbuf parm to iconv() is const char ** */ -#undef APU_ICONV_INBUF_CONST - -/* Define that OpenSSL uses const buffers */ -#undef CRYPTO_OPENSSL_CONST_BUFFERS - -/* Define if crypt_r has uses CRYPTD */ -#undef CRYPT_R_CRYPTD - -/* Define if crypt_r uses struct crypt_data */ -#undef CRYPT_R_STRUCT_CRYPT_DATA - -/* Define if CODESET is defined in langinfo.h */ -#undef HAVE_CODESET - -/* Define to 1 if you have the header - file. */ -#undef HAVE_COMMONCRYPTO_COMMONKEYDERIVATION_H - -/* Define to 1 if you have the `crypt_r' function. */ -#undef HAVE_CRYPT_R - -/* Define to 1 if you have the declaration of `EVP_PKEY_CTX_new', and to 0 if - you don't. */ -#undef HAVE_DECL_EVP_PKEY_CTX_NEW - -/* Define if expat.h is available */ -#undef HAVE_EXPAT_H - -/* Define if explicit_bzero function is supported */ -#undef HAVE_EXPLICIT_BZERO - -/* Define to 1 if you have the header file. */ -#undef HAVE_ICONV_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LANGINFO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LBER_H - -/* Defined if ldap.h is present */ -#undef HAVE_LDAP_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LDAP_SSL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIBPQ_FE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define if memset_s function is supported */ -#undef HAVE_MEMSET_S - -/* Define to 1 if you have the header file. */ -#undef HAVE_MYSQL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MYSQL_MYSQL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MYSQL_MY_GLOBAL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MYSQL_MY_SYS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MY_GLOBAL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MY_SYS_H - -/* Define to 1 if you have the `nl_langinfo' function. */ -#undef HAVE_NL_LANGINFO - -/* Define to 1 if you have the header file. */ -#undef HAVE_NSS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NSS_NSS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NSS_PK11PUB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_OCI_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ODBC_SQL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_OPENSSL_X509_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_PK11PUB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_POSTGRESQL_LIBPQ_FE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_PRERROR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SQLITE3_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SQLITE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SQL_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define if compiler handles weak symbols */ -#undef HAVE_WEAK_SYMBOLS - -/* Define if xmlparse/xmlparse.h is available */ -#undef HAVE_XMLPARSE_XMLPARSE_H - -/* Define if xmltok/xmlparse.h is available */ -#undef HAVE_XMLTOK_XMLPARSE_H - -/* Define if xml/xmlparse.h is available */ -#undef HAVE_XML_XMLPARSE_H - -/* Define if ldap_set_rebind_proc takes three arguments */ -#undef LDAP_SET_REBIND_PROC_THREE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS Index: contrib/apr-util/include/private/apu_config.hnw =================================================================== --- contrib/apr-util/include/private/apu_config.hnw +++ /dev/null @@ -1,53 +0,0 @@ -/* 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. - */ - -/* - * Note: This is a NetWare specific version of apu_config.hnw. It is copied - * as apu_config.h at the start of a NetWare build. - */ - -#ifdef NETWARE - -#ifndef APU_CONFIG_H -#define APU_CONFIG_H - -/* Always compile Netware with DSO support for .nlm builds */ -#define APU_DSO_BUILD 0 - -/* - * NetWare does not have GDBM, and we always use the bundled (new) Expat - */ - -/* Define if you have the gdbm library (-lgdbm). */ -/* #undef HAVE_LIBGDBM */ - -/* define if Expat 1.0 or 1.1 was found */ -/* #undef APR_HAVE_OLD_EXPAT */ - -/* NetWare uses its own ICONV implementation. */ -#define HAVE_ICONV_H 1 - -/* - * check for newer NDKs which use now correctly 'const char*' with iconv. - */ -#include -#if (CURRENT_NDK_THRESHOLD >= 705110000) -#define APU_ICONV_INBUF_CONST -#endif - -#endif /* APU_CONFIG_H */ -#endif /* NETWARE */ - Index: contrib/apr-util/include/private/apu_config.hw =================================================================== --- contrib/apr-util/include/private/apu_config.hw +++ /dev/null @@ -1,52 +0,0 @@ -/* 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. - */ - -/* - * Note: This is a Windows specific version of apu_config.hw. It is copied - * as apu_config.h at the start of a Windows build. - */ - -#ifdef WIN32 - -#ifndef APU_CONFIG_H -#define APU_CONFIG_H - -/* Compile win32 with DSO support for .dll builds */ -#ifdef APU_DECLARE_STATIC -#define APU_DSO_BUILD 0 -#else -#define APU_DSO_BUILD 1 -#endif - -/* Presume a standard, modern (5.x) mysql sdk/ -#define HAVE_MY_GLOBAL_H 1 - -/* my_sys.h is broken on VC/Win32, and apparently not required */ -/* #undef HAVE_MY_SYS_H 0 */ - -/* - * Windows does not have GDBM, and we always use the bundled (new) Expat - */ - -/* Define if you have the gdbm library (-lgdbm). */ -/* #undef HAVE_LIBGDBM */ - -/* define if Expat 1.0 or 1.1 was found */ -/* #undef APR_HAVE_OLD_EXPAT */ - - -#endif /* APU_CONFIG_H */ -#endif /* WIN32 */ Index: contrib/apr-util/include/private/apu_internal.h =================================================================== --- contrib/apr-util/include/private/apu_internal.h +++ /dev/null @@ -1,73 +0,0 @@ -/* 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 "apr.h" -#include "apr_dso.h" -#include "apu.h" - -#ifndef APU_INTERNAL_H -#define APU_INTERNAL_H - -#if APU_DSO_BUILD - -#ifdef __cplusplus -extern "C" { -#endif - -/* For modular dso loading, an internal interlock to allow us to - * continue to initialize modules by multiple threads, the caller - * of apu_dso_load must lock first, and not unlock until any init - * finalization is complete. - */ -apr_status_t apu_dso_init(apr_pool_t *pool); - -apr_status_t apu_dso_mutex_lock(void); -apr_status_t apu_dso_mutex_unlock(void); - -apr_status_t apu_dso_load(apr_dso_handle_t **dso, apr_dso_handle_sym_t *dsoptr, const char *module, - const char *modsym, apr_pool_t *pool); - -#if APR_HAS_LDAP - -/* For LDAP internal builds, wrap our LDAP namespace */ - -struct apr__ldap_dso_fntable { - int (*info)(apr_pool_t *pool, apr_ldap_err_t **result_err); - int (*init)(apr_pool_t *pool, LDAP **ldap, const char *hostname, - int portno, int secure, apr_ldap_err_t **result_err); - int (*ssl_init)(apr_pool_t *pool, const char *cert_auth_file, - int cert_file_type, apr_ldap_err_t **result_err); - int (*ssl_deinit)(void); - int (*get_option)(apr_pool_t *pool, LDAP *ldap, int option, - void *outvalue, apr_ldap_err_t **result_err); - int (*set_option)(apr_pool_t *pool, LDAP *ldap, int option, - const void *invalue, apr_ldap_err_t **result_err); - apr_status_t (*rebind_init)(apr_pool_t *pool); - apr_status_t (*rebind_add)(apr_pool_t *pool, LDAP *ld, - const char *bindDN, const char *bindPW); - apr_status_t (*rebind_remove)(LDAP *ld); -}; - -#endif /* APR_HAS_LDAP */ - -#ifdef __cplusplus -} -#endif - -#endif /* APU_DSO_BUILD */ - -#endif /* APU_INTERNAL_H */ - Index: contrib/apr-util/include/private/apu_select_dbm.h.in =================================================================== --- contrib/apr-util/include/private/apu_select_dbm.h.in +++ /dev/null @@ -1,28 +0,0 @@ -/* 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_SELECT_DBM_H -#define APU_SELECT_DBM_H - -/* -** The following macros control what features APRUTIL will use -*/ -#define APU_USE_SDBM @apu_use_sdbm@ -#define APU_USE_NDBM @apu_use_ndbm@ -#define APU_USE_GDBM @apu_use_gdbm@ -#define APU_USE_DB @apu_use_db@ - -#endif /* !APU_SELECT_DBM_H */ Index: contrib/apr-util/include/private/apu_select_dbm.hw =================================================================== --- contrib/apr-util/include/private/apu_select_dbm.hw +++ /dev/null @@ -1,28 +0,0 @@ -/* 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_SELECT_DBM_H -#define APU_SELECT_DBM_H - -/* -** The following macros control what features APRUTIL will use -*/ -#define APU_USE_SDBM 1 -#define APU_USE_GDBM 0 -#define APU_USE_NDBM 0 -#define APU_USE_DB 0 - -#endif /* !APU_SELECT_DBM_H */ Index: contrib/apr-util/ldap/NWGNUmakefile =================================================================== --- contrib/apr-util/ldap/NWGNUmakefile +++ /dev/null @@ -1,263 +0,0 @@ -# -# Declare the sub-directories to be built here -# - -SUBDIRS = \ - $(EOLIST) - -# -# Get the 'head' of the build environment. This includes default targets and -# paths to tools -# - -include $(APR_WORK)/build/NWGNUhead.inc - -# -# build this level's files - -# -# Make sure all needed macro's are defined -# - -# -# These directories will be at the beginning of the include list, followed by -# INCDIRS -# -XINCDIRS += \ - $(APR)/include \ - $(APR)/include/arch/NetWare \ - $(APU)/include \ - $(APU)/include/private \ - $(LDAPSDK)/inc \ - $(EOLIST) - -# -# These flags will come after CFLAGS -# -XCFLAGS += \ - $(EOLIST) - -# -# These defines will come after DEFINES -# -XDEFINES += \ - $(EOLIST) - -# -#LDAP client requires the use of Winsock -# -ifdef USE_STDSOCKETS -XDEFINES += -DUSE_WINSOCK \ - $(EOLIST) -endif - -# -# These flags will be added to the link.opt file -# -XLFLAGS += \ - $(EOLIST) - -# -# These values will be appended to the correct variables based on the value of -# RELEASE -# -ifeq "$(RELEASE)" "debug" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "noopt" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -ifeq "$(RELEASE)" "release" -XINCDIRS += \ - $(EOLIST) - -XCFLAGS += \ - $(EOLIST) - -XDEFINES += \ - $(EOLIST) - -XLFLAGS += \ - $(EOLIST) -endif - -# -# These are used by the link target if an NLM is being generated -# This is used by the link 'name' directive to name the nlm. If left blank -# TARGET_nlm (see below) will be used. -# -NLM_NAME = - -# -# This is used by the link '-desc ' directive. -# If left blank, NLM_NAME will be used. -# -NLM_DESCRIPTION = - -# -# This is used by the '-threadname' directive. If left blank, -# NLM_NAME Thread will be used. -# -NLM_THREAD_NAME = -# -# If this is specified, it will override VERSION value in -# $(APR_WORK)/build/NWGNUenvironment.inc -# -NLM_VERSION = - -# -# If this is specified, it will override the default of 64K -# -NLM_STACK_SIZE = - -# -# If this is specified it will be used by the link '-entry' directive -# -NLM_ENTRY_SYM = - -# -# If this is specified it will be used by the link '-exit' directive -# -NLM_EXIT_SYM = - -# -# If this is specified it will be used by the link '-check' directive -# -NLM_CHECK_SYM = - -# -# If this is specified it will be used by the link '-flags' directive -# -NLM_FLAGS = - -# -# If this is specified it will be linked in with the XDCData option in the def -# file instead of the default of $(APR)/misc/netware/apache.xdc. XDCData can -# be disabled by setting APACHE_UNIPROC in the environment -# -XDCDATA = - -# -# Declare all target files (you must add your files here) -# - -# -# If there is an NLM target, put it here -# -TARGET_nlm = \ - $(EOLIST) - -# -# If there is an LIB target, put it here -# -TARGET_lib = \ - $(OBJDIR)/apuldap.lib \ - $(EOLIST) - -# -# These are the OBJ files needed to create the NLM target above. -# Paths must all use the '/' character -# -FILES_nlm_objs = \ - $(EOLIST) - -# -# These are the LIB files needed to create the NLM target above. -# These will be added as a library command in the link.opt file. -# -FILES_nlm_libs = \ - $(EOLIST) - -# -# These are the modules that the above NLM target depends on to load. -# These will be added as a module command in the link.opt file. -# -FILES_nlm_modules = \ - $(EOLIST) - -# -# If the nlm has a msg file, put it's path here -# -FILE_nlm_msg = - -# -# If the nlm has a hlp file put it's path here -# -FILE_nlm_hlp = - -# -# If this is specified, it will override the default copyright. -# -FILE_nlm_copyright = - -# -# Any additional imports go here -# -FILES_nlm_Ximports = \ - $(EOLIST) - -# -# Any symbols exported to here -# -FILES_nlm_exports = \ - $(EOLIST) - -# -# These are the OBJ files needed to create the LIB target above. -# Paths must all use the '/' character -# -FILES_lib_objs = \ - $(OBJDIR)/apr_ldap_init.o \ - $(OBJDIR)/apr_ldap_option.o \ - $(OBJDIR)/apr_ldap_url.o \ - $(OBJDIR)/apr_ldap_rebind.o \ - $(OBJDIR)/apr_ldap_stub.o \ - $(EOLIST) - -# -# implement targets and dependancies (leave this section alone) -# - -libs :: $(OBJDIR) $(TARGET_lib) - -nlms :: libs $(TARGET_nlm) - -# -# Updated this target to create necessary directories and copy files to the -# correct place. (See $(APR_WORK)/build/NWGNUhead.inc for examples) -# -install :: nlms FORCE - -# -# Any specialized rules here -# - -# -# Include the 'tail' makefile that has targets that depend on variables defined -# in this makefile -# - -include $(APRBUILD)/NWGNUtail.inc - Index: contrib/apr-util/ldap/apr_ldap_init.c =================================================================== --- contrib/apr-util/ldap/apr_ldap_init.c +++ /dev/null @@ -1,235 +0,0 @@ -/* 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_init.c: LDAP v2/v3 common initialise - * - * Original code from auth_ldap module for Apache v1.3: - * Copyright 1998, 1999 Enbridge Pipelines Inc. - * Copyright 1999-2001 Dave Carrigan - */ - -#include "apr.h" -#include "apu.h" -#include "apu_config.h" - -#if APU_DSO_BUILD -#define APU_DSO_LDAP_BUILD -#endif - -#include "apr_ldap.h" -#include "apu_internal.h" -#include "apr_errno.h" -#include "apr_pools.h" -#include "apr_strings.h" - -#if APR_HAS_LDAP - -/** - * 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. - */ -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_err_t *result = (apr_ldap_err_t *)apr_pcalloc(pool, sizeof(apr_ldap_err_t)); - *result_err = result; - -#if APR_HAS_LDAP_SSL /* compiled with ssl support */ - - /* Novell */ -#if APR_HAS_NOVELL_LDAPSDK - ldapssl_client_init(NULL, NULL); -#endif - - /* if a certificate was specified, set it */ - if (cert_auth_file) { - apr_ldap_opt_tls_cert_t *cert = (apr_ldap_opt_tls_cert_t *)apr_pcalloc(pool, sizeof(apr_ldap_opt_tls_cert_t)); - cert->type = cert_file_type; - cert->path = cert_auth_file; - return apr_ldap_set_option(pool, NULL, APR_LDAP_OPT_TLS_CERT, (void *)cert, result_err); - } - -#else /* not compiled with SSL Support */ - if (cert_auth_file) { - result->reason = "LDAP: Attempt to set certificate store failed. " - "Not built with SSL support"; - result->rc = -1; - } -#endif /* APR_HAS_LDAP_SSL */ - - if (result->rc != -1) { - result->msg = ldap_err2string(result->rc); - } - - if (LDAP_SUCCESS != result->rc) { - return APR_EGENERAL; - } - - return APR_SUCCESS; - -} - - -/** - * 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. - * - * This function only does anything on Netware. - * - * @todo currently we do not check whether apr_ldap_ssl_init() - * has been called first - should we? - */ -APU_DECLARE_LDAP(int) apr_ldap_ssl_deinit(void) -{ - -#if APR_HAS_LDAP_SSL && APR_HAS_LDAPSSL_CLIENT_DEINIT - ldapssl_client_deinit(); -#endif - return APR_SUCCESS; - -} - - -/** - * 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:// - */ -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_err_t *result = (apr_ldap_err_t *)apr_pcalloc(pool, sizeof(apr_ldap_err_t)); - *result_err = result; - -#if APR_HAS_LDAPSSL_INIT -#if APR_HAS_SOLARIS_LDAPSDK - /* - * Using the secure argument should aways be possible. But as LDAP SDKs - * tend to have different quirks and bugs, this needs to be tested for - * for each of them, first. For Solaris LDAP it works, and the method - * with ldap_set_option doesn't. - */ - *ldap = ldapssl_init(hostname, portno, secure == APR_LDAP_SSL); -#else - *ldap = ldapssl_init(hostname, portno, 0); -#endif -#elif APR_HAS_LDAP_SSLINIT - *ldap = ldap_sslinit((char *)hostname, portno, 0); -#else - *ldap = ldap_init((char *)hostname, portno); -#endif - - if (*ldap != NULL) { -#if APR_HAS_SOLARIS_LDAPSDK - if (secure == APR_LDAP_SSL) - return APR_SUCCESS; - else -#endif - return apr_ldap_set_option(pool, *ldap, APR_LDAP_OPT_TLS, &secure, result_err); - } - else { - /* handle the error case */ - apr_ldap_err_t *result = (apr_ldap_err_t *)apr_pcalloc(pool, sizeof(apr_ldap_err_t)); - *result_err = result; - - result->reason = "APR LDAP: Unable to initialize the LDAP connection"; - result->rc = -1; - return APR_EGENERAL; - } - -} - - -/** - * APR LDAP info function - * - * This function returns a string describing the LDAP toolkit - * currently in use. The string is placed inside result_err->reason. - */ -APU_DECLARE_LDAP(int) apr_ldap_info(apr_pool_t *pool, - apr_ldap_err_t **result_err) -{ - apr_ldap_err_t *result = (apr_ldap_err_t *)apr_pcalloc(pool, sizeof(apr_ldap_err_t)); - *result_err = result; - - result->reason = "APR LDAP: Built with " - LDAP_VENDOR_NAME - " LDAP SDK"; - return APR_SUCCESS; - -} - -#if APU_DSO_BUILD - -/* For DSO builds, export the table of entry points into the apr_ldap DSO - * See include/private/apu_internal.h for the corresponding declarations - */ -APU_MODULE_DECLARE_DATA struct apr__ldap_dso_fntable apr__ldap_fns = { - apr_ldap_info, - apr_ldap_init, - apr_ldap_ssl_init, - apr_ldap_ssl_deinit, - apr_ldap_get_option, - apr_ldap_set_option, - apr_ldap_rebind_init, - apr_ldap_rebind_add, - apr_ldap_rebind_remove -}; - -#endif /* APU_DSO_BUILD */ - -#endif /* APR_HAS_LDAP */ Index: contrib/apr-util/ldap/apr_ldap_option.c =================================================================== --- contrib/apr-util/ldap/apr_ldap_option.c +++ /dev/null @@ -1,652 +0,0 @@ -/* 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_option.c -- LDAP options - * - * The LDAP SDK allows the getting and setting of options on an LDAP - * connection. - * - */ - -#include "apr.h" -#include "apu.h" -#include "apu_config.h" - -#if APU_DSO_BUILD -#define APU_DSO_LDAP_BUILD -#endif - -#include "apr_ldap.h" -#include "apr_errno.h" -#include "apr_pools.h" -#include "apr_strings.h" -#include "apr_tables.h" - -#if APR_HAS_LDAP - -static void option_set_cert(apr_pool_t *pool, LDAP *ldap, const void *invalue, - apr_ldap_err_t *result); -static void option_set_tls(apr_pool_t *pool, LDAP *ldap, const void *invalue, - apr_ldap_err_t *result); - -/** - * APR LDAP get option function - * - * This function gets option values from a given LDAP session if - * one was specified. - */ -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_err_t *result; - - result = apr_pcalloc(pool, sizeof(apr_ldap_err_t)); - *result_err = result; - if (!result) { - return APR_ENOMEM; - } - - /* get the option specified using the native LDAP function */ - result->rc = ldap_get_option(ldap, option, outvalue); - - /* handle the error case */ - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result-> rc); - result->reason = apr_pstrdup(pool, "LDAP: Could not get an option"); - return APR_EGENERAL; - } - - return APR_SUCCESS; - -} - -/** - * APR LDAP set option function - * - * This function sets option values to a given LDAP session if - * one was specified. - * - * 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. - */ -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) -{ - apr_ldap_err_t *result; - - result = apr_pcalloc(pool, sizeof(apr_ldap_err_t)); - *result_err = result; - if (!result) { - return APR_ENOMEM; - } - - switch (option) { - case APR_LDAP_OPT_TLS_CERT: - option_set_cert(pool, ldap, invalue, result); - break; - - case APR_LDAP_OPT_TLS: - option_set_tls(pool, ldap, invalue, result); - break; - - case APR_LDAP_OPT_VERIFY_CERT: -#if APR_HAS_NETSCAPE_LDAPSDK || APR_HAS_SOLARIS_LDAPSDK || APR_HAS_MOZILLA_LDAPSK - result->reason = "LDAP: Verify certificate not yet supported by APR on the " - "Netscape, Solaris or Mozilla LDAP SDKs"; - result->rc = -1; - return APR_EGENERAL; -#endif -#if APR_HAS_NOVELL_LDAPSDK - if (*((int*)invalue)) { - result->rc = ldapssl_set_verify_mode(LDAPSSL_VERIFY_SERVER); - } - else { - result->rc = ldapssl_set_verify_mode(LDAPSSL_VERIFY_NONE); - } -#endif -#if APR_HAS_OPENLDAP_LDAPSDK -#ifdef LDAP_OPT_X_TLS - /* This is not a per-connection setting so just pass NULL for the - Ldap connection handle */ - if (*((int*)invalue)) { - int i = LDAP_OPT_X_TLS_DEMAND; - result->rc = ldap_set_option(NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, &i); - } - else { - int i = LDAP_OPT_X_TLS_NEVER; - result->rc = ldap_set_option(NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, &i); - } -#else - result->reason = "LDAP: SSL/TLS not yet supported by APR on this " - "version of the OpenLDAP toolkit"; - result->rc = -1; - return APR_EGENERAL; -#endif -#endif - - /* handle the error case */ - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result->rc); - result->reason = "LDAP: Could not set verify mode"; - } - break; - - case APR_LDAP_OPT_REFERRALS: - /* Setting this option is supported on at least TIVOLI_SDK and OpenLDAP. Folks - * who know the NOVELL, NETSCAPE, MOZILLA, and SOLARIS SDKs should note here if - * the SDK at least tolerates this option being set, or add an elif to handle - * special cases (i.e. different LDAP_OPT_X value). - */ - result->rc = ldap_set_option(ldap, LDAP_OPT_REFERRALS, (void *)invalue); - - if (result->rc != LDAP_SUCCESS) { - result->reason = "Unable to set LDAP_OPT_REFERRALS."; - return(result->rc); - } - break; - - case APR_LDAP_OPT_REFHOPLIMIT: -#if !defined(LDAP_OPT_REFHOPLIMIT) || APR_HAS_NOVELL_LDAPSDK - /* If the LDAP_OPT_REFHOPLIMIT symbol is missing, assume that the - * particular LDAP library has a reasonable default. So far certain - * versions of the OpenLDAP SDK miss this symbol (but default to 5), - * and the Microsoft SDK misses the symbol (the default is not known). - */ - result->rc = LDAP_SUCCESS; -#else - /* Setting this option is supported on at least TIVOLI_SDK. Folks who know - * the NOVELL, NETSCAPE, MOZILLA, and SOLARIS SDKs should note here if - * the SDK at least tolerates this option being set, or add an elif to handle - * special cases so an error isn't returned if there is a perfectly good - * default value that just can't be changed (like openLDAP). - */ - result->rc = ldap_set_option(ldap, LDAP_OPT_REFHOPLIMIT, (void *)invalue); -#endif - - if (result->rc != LDAP_SUCCESS) { - result->reason = "Unable to set LDAP_OPT_REFHOPLIMIT."; - return(result->rc); - } - break; - - default: - /* set the option specified using the native LDAP function */ - result->rc = ldap_set_option(ldap, option, (void *)invalue); - - /* handle the error case */ - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result->rc); - result->reason = "LDAP: Could not set an option"; - } - break; - } - - /* handle the error case */ - if (result->rc != LDAP_SUCCESS) { - return APR_EGENERAL; - } - - return APR_SUCCESS; - -} - -/** - * Handle APR_LDAP_OPT_TLS - * - * This function sets the type of TLS to be applied to this connection. - * The options are: - * APR_LDAP_NONE: no encryption - * APR_LDAP_SSL: SSL encryption (ldaps://) - * APR_LDAP_STARTTLS: STARTTLS encryption - * APR_LDAP_STOPTLS: Stop existing TLS connecttion - */ -static void option_set_tls(apr_pool_t *pool, LDAP *ldap, const void *invalue, - apr_ldap_err_t *result) -{ -#if APR_HAS_LDAP_SSL /* compiled with ssl support */ - - int tls = * (const int *)invalue; - - /* Netscape/Mozilla/Solaris SDK */ -#if APR_HAS_NETSCAPE_LDAPSDK || APR_HAS_SOLARIS_LDAPSDK || APR_HAS_MOZILLA_LDAPSK -#if APR_HAS_LDAPSSL_INSTALL_ROUTINES - if (tls == APR_LDAP_SSL) { - result->rc = ldapssl_install_routines(ldap); -#ifdef LDAP_OPT_SSL - /* apparently Netscape and Mozilla need this too, Solaris doesn't */ - if (result->rc == LDAP_SUCCESS) { - result->rc = ldap_set_option(ldap, LDAP_OPT_SSL, LDAP_OPT_ON); - } -#endif - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result->rc); - result->reason = "LDAP: Could not switch SSL on for this " - "connection."; - } - } - else if (tls == APR_LDAP_STARTTLS) { - result->reason = "LDAP: STARTTLS is not supported by the " - "Netscape/Mozilla/Solaris SDK"; - result->rc = -1; - } - else if (tls == APR_LDAP_STOPTLS) { - result->reason = "LDAP: STOPTLS is not supported by the " - "Netscape/Mozilla/Solaris SDK"; - result->rc = -1; - } -#else - if (tls != APR_LDAP_NONE) { - result->reason = "LDAP: SSL/TLS is not supported by this version " - "of the Netscape/Mozilla/Solaris SDK"; - result->rc = -1; - } -#endif -#endif - - /* Novell SDK */ -#if APR_HAS_NOVELL_LDAPSDK - /* ldapssl_install_routines(ldap) - * Behavior is unpredictable when other LDAP functions are called - * between the ldap_init function and the ldapssl_install_routines - * function. - * - * STARTTLS is supported by the ldap_start_tls_s() method - */ - if (tls == APR_LDAP_SSL) { - result->rc = ldapssl_install_routines(ldap); - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result->rc); - result->reason = "LDAP: Could not switch SSL on for this " - "connection."; - } - } - if (tls == APR_LDAP_STARTTLS) { - result->rc = ldapssl_start_tls(ldap); - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result->rc); - result->reason = "LDAP: Could not start TLS on this connection"; - } - } - else if (tls == APR_LDAP_STOPTLS) { - result->rc = ldapssl_stop_tls(ldap); - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result->rc); - result->reason = "LDAP: Could not stop TLS on this connection"; - } - } -#endif - - /* OpenLDAP SDK */ -#if APR_HAS_OPENLDAP_LDAPSDK -#ifdef LDAP_OPT_X_TLS - if (tls == APR_LDAP_SSL) { - int SSLmode = LDAP_OPT_X_TLS_HARD; - result->rc = ldap_set_option(ldap, LDAP_OPT_X_TLS, &SSLmode); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: ldap_set_option failed. " - "Could not set LDAP_OPT_X_TLS to " - "LDAP_OPT_X_TLS_HARD"; - result->msg = ldap_err2string(result->rc); - } - } - else if (tls == APR_LDAP_STARTTLS) { - result->rc = ldap_start_tls_s(ldap, NULL, NULL); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: ldap_start_tls_s() failed"; - result->msg = ldap_err2string(result->rc); - } - } - else if (tls == APR_LDAP_STOPTLS) { - result->reason = "LDAP: STOPTLS is not supported by the " - "OpenLDAP SDK"; - result->rc = -1; - } -#else - if (tls != APR_LDAP_NONE) { - result->reason = "LDAP: SSL/TLS not yet supported by APR on this " - "version of the OpenLDAP toolkit"; - result->rc = -1; - } -#endif -#endif - - /* Microsoft SDK */ -#if APR_HAS_MICROSOFT_LDAPSDK - if (tls == APR_LDAP_NONE) { - ULONG ul = (ULONG) LDAP_OPT_OFF; - result->rc = ldap_set_option(ldap, LDAP_OPT_SSL, &ul); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: an attempt to set LDAP_OPT_SSL off " - "failed."; - result->msg = ldap_err2string(result->rc); - } - } - else if (tls == APR_LDAP_SSL) { - ULONG ul = (ULONG) LDAP_OPT_ON; - result->rc = ldap_set_option(ldap, LDAP_OPT_SSL, &ul); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: an attempt to set LDAP_OPT_SSL on " - "failed."; - result->msg = ldap_err2string(result->rc); - } - } -#if APR_HAS_LDAP_START_TLS_S - else if (tls == APR_LDAP_STARTTLS) { - result->rc = ldap_start_tls_s(ldap, NULL, NULL, NULL, NULL); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: ldap_start_tls_s() failed"; - result->msg = ldap_err2string(result->rc); - } - } - else if (tls == APR_LDAP_STOPTLS) { - result->rc = ldap_stop_tls_s(ldap); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: ldap_stop_tls_s() failed"; - result->msg = ldap_err2string(result->rc); - } - } -#endif -#endif - -#if APR_HAS_OTHER_LDAPSDK - if (tls != APR_LDAP_NONE) { - result->reason = "LDAP: SSL/TLS is currently not supported by " - "APR on this LDAP SDK"; - result->rc = -1; - } -#endif - -#endif /* APR_HAS_LDAP_SSL */ - -} - -/** - * Handle APR_LDAP_OPT_TLS_CACERTFILE - * - * This function sets the CA certificate for further SSL/TLS connections. - * - * The file provided are in different formats depending on the toolkit used: - * - * Netscape: cert7.db file - * Novell: PEM or DER - * OpenLDAP: PEM (others supported?) - * Microsoft: unknown - * Solaris: unknown - */ -static void option_set_cert(apr_pool_t *pool, LDAP *ldap, - const void *invalue, apr_ldap_err_t *result) -{ -#if APR_HAS_LDAP_SSL -#if APR_HAS_LDAPSSL_CLIENT_INIT || APR_HAS_OPENLDAP_LDAPSDK - apr_array_header_t *certs = (apr_array_header_t *)invalue; - struct apr_ldap_opt_tls_cert_t *ents = (struct apr_ldap_opt_tls_cert_t *)certs->elts; - int i = 0; -#endif - - /* Netscape/Mozilla/Solaris SDK */ -#if APR_HAS_NETSCAPE_LDAPSDK || APR_HAS_SOLARIS_LDAPSDK || APR_HAS_MOZILLA_LDAPSDK -#if APR_HAS_LDAPSSL_CLIENT_INIT - const char *nickname = NULL; - const char *secmod = NULL; - const char *key3db = NULL; - const char *cert7db = NULL; - const char *password = NULL; - - /* set up cert7.db, key3.db and secmod parameters */ - for (i = 0; i < certs->nelts; i++) { - switch (ents[i].type) { - case APR_LDAP_CA_TYPE_CERT7_DB: - cert7db = ents[i].path; - break; - case APR_LDAP_CA_TYPE_SECMOD: - secmod = ents[i].path; - break; - case APR_LDAP_CERT_TYPE_KEY3_DB: - key3db = ents[i].path; - break; - case APR_LDAP_CERT_TYPE_NICKNAME: - nickname = ents[i].path; - password = ents[i].password; - break; - default: - result->rc = -1; - result->reason = "LDAP: The Netscape/Mozilla LDAP SDK only " - "understands the CERT7, KEY3 and SECMOD " - "file types."; - break; - } - if (result->rc != LDAP_SUCCESS) { - break; - } - } - - /* actually set the certificate parameters */ - if (result->rc == LDAP_SUCCESS) { - if (nickname) { - result->rc = ldapssl_enable_clientauth(ldap, "", - (char *)password, - (char *)nickname); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: could not set client certificate: " - "ldapssl_enable_clientauth() failed."; - result->msg = ldap_err2string(result->rc); - } - } - else if (secmod) { - result->rc = ldapssl_advclientauth_init(cert7db, NULL, - key3db ? 1 : 0, key3db, NULL, - 1, secmod, LDAPSSL_AUTH_CNCHECK); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: ldapssl_advclientauth_init() failed."; - result->msg = ldap_err2string(result->rc); - } - } - else if (key3db) { - result->rc = ldapssl_clientauth_init(cert7db, NULL, - 1, key3db, NULL); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: ldapssl_clientauth_init() failed."; - result->msg = ldap_err2string(result->rc); - } - } - else { - result->rc = ldapssl_client_init(cert7db, NULL); - if (result->rc != LDAP_SUCCESS) { - result->reason = "LDAP: ldapssl_client_init() failed."; - result->msg = ldap_err2string(result->rc); - } - } - } -#else - result->reason = "LDAP: SSL/TLS ldapssl_client_init() function not " - "supported by this Netscape/Mozilla/Solaris SDK. " - "Certificate authority file not set"; - result->rc = -1; -#endif -#endif - - /* Novell SDK */ -#if APR_HAS_NOVELL_LDAPSDK -#if APR_HAS_LDAPSSL_CLIENT_INIT && APR_HAS_LDAPSSL_ADD_TRUSTED_CERT && APR_HAS_LDAPSSL_CLIENT_DEINIT - /* The Novell library cannot support per connection certificates. Error - * out if the ldap handle is provided. - */ - if (ldap) { - result->rc = -1; - result->reason = "LDAP: The Novell LDAP SDK cannot support the setting " - "of certificates or keys on a per connection basis."; - } - /* Novell's library needs to be initialised first */ - else { - result->rc = ldapssl_client_init(NULL, NULL); - if (result->rc != LDAP_SUCCESS) { - result->msg = ldap_err2string(result-> rc); - result->reason = apr_pstrdup(pool, "LDAP: Could not " - "initialize SSL"); - } - } - /* set one or more certificates */ - for (i = 0; LDAP_SUCCESS == result->rc && i < certs->nelts; i++) { - /* Novell SDK supports DER or BASE64 files. */ - switch (ents[i].type) { - case APR_LDAP_CA_TYPE_DER: - result->rc = ldapssl_add_trusted_cert((void *)ents[i].path, - LDAPSSL_CERT_FILETYPE_DER); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_CA_TYPE_BASE64: - result->rc = ldapssl_add_trusted_cert((void *)ents[i].path, - LDAPSSL_CERT_FILETYPE_B64); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_CERT_TYPE_DER: - result->rc = ldapssl_set_client_cert((void *)ents[i].path, - LDAPSSL_CERT_FILETYPE_DER, - (void*)ents[i].password); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_CERT_TYPE_BASE64: - result->rc = ldapssl_set_client_cert((void *)ents[i].path, - LDAPSSL_CERT_FILETYPE_B64, - (void*)ents[i].password); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_CERT_TYPE_PFX: - result->rc = ldapssl_set_client_cert((void *)ents[i].path, - LDAPSSL_FILETYPE_P12, - (void*)ents[i].password); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_KEY_TYPE_DER: - result->rc = ldapssl_set_client_private_key((void *)ents[i].path, - LDAPSSL_CERT_FILETYPE_DER, - (void*)ents[i].password); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_KEY_TYPE_BASE64: - result->rc = ldapssl_set_client_private_key((void *)ents[i].path, - LDAPSSL_CERT_FILETYPE_B64, - (void*)ents[i].password); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_KEY_TYPE_PFX: - result->rc = ldapssl_set_client_private_key((void *)ents[i].path, - LDAPSSL_FILETYPE_P12, - (void*)ents[i].password); - result->msg = ldap_err2string(result->rc); - break; - default: - result->rc = -1; - result->reason = "LDAP: The Novell LDAP SDK only understands the " - "DER and PEM (BASE64) file types."; - break; - } - if (result->rc != LDAP_SUCCESS) { - break; - } - } -#else - result->reason = "LDAP: ldapssl_client_init(), " - "ldapssl_add_trusted_cert() or " - "ldapssl_client_deinit() functions not supported " - "by this Novell SDK. Certificate authority file " - "not set"; - result->rc = -1; -#endif -#endif - - /* OpenLDAP SDK */ -#if APR_HAS_OPENLDAP_LDAPSDK -#ifdef LDAP_OPT_X_TLS_CACERTFILE - /* set one or more certificates */ - /* FIXME: make it support setting directories as well as files */ - for (i = 0; i < certs->nelts; i++) { - /* OpenLDAP SDK supports BASE64 files. */ - switch (ents[i].type) { - case APR_LDAP_CA_TYPE_BASE64: - result->rc = ldap_set_option(ldap, LDAP_OPT_X_TLS_CACERTFILE, - (void *)ents[i].path); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_CERT_TYPE_BASE64: - result->rc = ldap_set_option(ldap, LDAP_OPT_X_TLS_CERTFILE, - (void *)ents[i].path); - result->msg = ldap_err2string(result->rc); - break; - case APR_LDAP_KEY_TYPE_BASE64: - result->rc = ldap_set_option(ldap, LDAP_OPT_X_TLS_KEYFILE, - (void *)ents[i].path); - result->msg = ldap_err2string(result->rc); - break; -#ifdef LDAP_OPT_X_TLS_CACERTDIR - case APR_LDAP_CA_TYPE_CACERTDIR_BASE64: - result->rc = ldap_set_option(ldap, LDAP_OPT_X_TLS_CACERTDIR, - (void *)ents[i].path); - result->msg = ldap_err2string(result->rc); - break; -#endif - default: - result->rc = -1; - result->reason = "LDAP: The OpenLDAP SDK only understands the " - "PEM (BASE64) file type."; - break; - } - if (result->rc != LDAP_SUCCESS) { - break; - } - } -#else - result->reason = "LDAP: LDAP_OPT_X_TLS_CACERTFILE not " - "defined by this OpenLDAP SDK. Certificate " - "authority file not set"; - result->rc = -1; -#endif -#endif - - /* Microsoft SDK */ -#if APR_HAS_MICROSOFT_LDAPSDK - /* Microsoft SDK use the registry certificate store - error out - * here with a message explaining this. */ - result->reason = "LDAP: CA certificates cannot be set using this method, " - "as they are stored in the registry instead."; - result->rc = -1; -#endif - - /* SDK not recognised */ -#if APR_HAS_OTHER_LDAPSDK - result->reason = "LDAP: LDAP_OPT_X_TLS_CACERTFILE not " - "defined by this LDAP SDK. Certificate " - "authority file not set"; - result->rc = -1; -#endif - -#else /* not compiled with SSL Support */ - result->reason = "LDAP: Attempt to set certificate(s) failed. " - "Not built with SSL support"; - result->rc = -1; -#endif /* APR_HAS_LDAP_SSL */ - -} - -#endif /* APR_HAS_LDAP */ - Index: contrib/apr-util/ldap/apr_ldap_rebind.c =================================================================== --- contrib/apr-util/ldap/apr_ldap_rebind.c +++ /dev/null @@ -1,377 +0,0 @@ -/* 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_rebind.c -- LDAP rebind callbacks for referrals - * - * The LDAP SDK allows a callback to be set to enable rebinding - * for referral processing. - * - */ - -#include "apr.h" -#include "apu.h" -#include "apu_config.h" - -#if APU_DSO_BUILD -#define APU_DSO_LDAP_BUILD -#endif - -#include "apr_ldap.h" -#include "apr_errno.h" -#include "apr_strings.h" -#include "apr_ldap_rebind.h" - -#include "stdio.h" - -#if APR_HAS_LDAP - -/* Used to store information about connections for use in the referral rebind callback. */ -struct apr_ldap_rebind_entry { - apr_pool_t *pool; - LDAP *index; - const char *bindDN; - const char *bindPW; - struct apr_ldap_rebind_entry *next; -}; -typedef struct apr_ldap_rebind_entry apr_ldap_rebind_entry_t; - - -#ifdef NETWARE -#include "apr_private.h" -#define get_apd APP_DATA* apd = (APP_DATA*)get_app_data(gLibId); -#define apr_ldap_xref_lock ((apr_thread_mutex_t *)(apd->gs_ldap_xref_lock)) -#define xref_head ((apr_ldap_rebind_entry_t *)(apd->gs_xref_head)) -#else -#if APR_HAS_THREADS -static apr_thread_mutex_t *apr_ldap_xref_lock = NULL; -#endif -static apr_ldap_rebind_entry_t *xref_head = NULL; -#endif - -static int apr_ldap_rebind_set_callback(LDAP *ld); -static apr_status_t apr_ldap_rebind_remove_helper(void *data); - -static apr_status_t apr_ldap_pool_cleanup_set_null(void *data_) -{ - void **ptr = (void **)data_; - *ptr = NULL; - return APR_SUCCESS; -} - - -/* APR utility routine used to create the xref_lock. */ -APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_init(apr_pool_t *pool) -{ - apr_status_t retcode = APR_SUCCESS; - -#ifdef NETWARE - get_apd -#endif - -#if APR_HAS_THREADS - /* run after apr_thread_mutex_create cleanup */ - apr_pool_cleanup_register(pool, &apr_ldap_xref_lock, apr_ldap_pool_cleanup_set_null, - apr_pool_cleanup_null); - - if (apr_ldap_xref_lock == NULL) { - retcode = apr_thread_mutex_create(&apr_ldap_xref_lock, APR_THREAD_MUTEX_DEFAULT, pool); - } -#endif - - return(retcode); -} - - -APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_add(apr_pool_t *pool, - LDAP *ld, - const char *bindDN, - const char *bindPW) -{ - apr_status_t retcode = APR_SUCCESS; - apr_ldap_rebind_entry_t *new_xref; - -#ifdef NETWARE - get_apd -#endif - - new_xref = (apr_ldap_rebind_entry_t *)apr_pcalloc(pool, sizeof(apr_ldap_rebind_entry_t)); - if (new_xref) { - new_xref->pool = pool; - new_xref->index = ld; - if (bindDN) { - new_xref->bindDN = apr_pstrdup(pool, bindDN); - } - if (bindPW) { - new_xref->bindPW = apr_pstrdup(pool, bindPW); - } - -#if APR_HAS_THREADS - retcode = apr_thread_mutex_lock(apr_ldap_xref_lock); - if (retcode != APR_SUCCESS) { - return retcode; - } -#endif - - new_xref->next = xref_head; - xref_head = new_xref; - -#if APR_HAS_THREADS - retcode = apr_thread_mutex_unlock(apr_ldap_xref_lock); - if (retcode != APR_SUCCESS) { - return retcode; - } -#endif - } - else { - return(APR_ENOMEM); - } - - retcode = apr_ldap_rebind_set_callback(ld); - if (APR_SUCCESS != retcode) { - apr_ldap_rebind_remove(ld); - return retcode; - } - - apr_pool_cleanup_register(pool, ld, - apr_ldap_rebind_remove_helper, - apr_pool_cleanup_null); - - return(APR_SUCCESS); -} - - -APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_remove(LDAP *ld) -{ - apr_ldap_rebind_entry_t *tmp_xref, *prev = NULL; - apr_status_t retcode = 0; - -#ifdef NETWARE - get_apd -#endif - -#if APR_HAS_THREADS - retcode = apr_thread_mutex_lock(apr_ldap_xref_lock); - if (retcode != APR_SUCCESS) { - return retcode; - } -#endif - tmp_xref = xref_head; - - while ((tmp_xref) && (tmp_xref->index != ld)) { - prev = tmp_xref; - tmp_xref = tmp_xref->next; - } - - if (tmp_xref) { - if (tmp_xref == xref_head) { - xref_head = xref_head->next; - } - else { - prev->next = tmp_xref->next; - } - - /* tmp_xref and its contents were pool allocated so they don't need to be freed here. */ - - /* remove the cleanup, just in case this was done manually */ - apr_pool_cleanup_kill(tmp_xref->pool, tmp_xref->index, - apr_ldap_rebind_remove_helper); - } - -#if APR_HAS_THREADS - retcode = apr_thread_mutex_unlock(apr_ldap_xref_lock); - if (retcode != APR_SUCCESS) { - return retcode; - } -#endif - return APR_SUCCESS; -} - - -static apr_status_t apr_ldap_rebind_remove_helper(void *data) -{ - LDAP *ld = (LDAP *)data; - apr_ldap_rebind_remove(ld); - return APR_SUCCESS; -} - -#if APR_HAS_TIVOLI_LDAPSDK || APR_HAS_OPENLDAP_LDAPSDK || APR_HAS_NOVELL_LDAPSDK -static apr_ldap_rebind_entry_t *apr_ldap_rebind_lookup(LDAP *ld) -{ - apr_ldap_rebind_entry_t *tmp_xref, *match = NULL; - -#ifdef NETWARE - get_apd -#endif - -#if APR_HAS_THREADS - apr_thread_mutex_lock(apr_ldap_xref_lock); -#endif - tmp_xref = xref_head; - - while (tmp_xref) { - if (tmp_xref->index == ld) { - match = tmp_xref; - tmp_xref = NULL; - } - else { - tmp_xref = tmp_xref->next; - } - } - -#if APR_HAS_THREADS - apr_thread_mutex_unlock(apr_ldap_xref_lock); -#endif - - return (match); -} -#endif - -#if APR_HAS_TIVOLI_LDAPSDK - -/* LDAP_rebindproc() Tivoli LDAP style - * Rebind callback function. Called when chasing referrals. See API docs. - * ON ENTRY: - * ld Pointer to an LDAP control structure. (input only) - * binddnp Pointer to an Application DName used for binding (in *or* out) - * passwdp Pointer to the password associated with the DName (in *or* out) - * methodp Pointer to the Auth method (output only) - * freeit Flag to indicate if this is a lookup or a free request (input only) - */ -static int LDAP_rebindproc(LDAP *ld, char **binddnp, char **passwdp, int *methodp, int freeit) -{ - if (!freeit) { - apr_ldap_rebind_entry_t *my_conn; - - *methodp = LDAP_AUTH_SIMPLE; - my_conn = apr_ldap_rebind_lookup(ld); - - if ((my_conn) && (my_conn->bindDN != NULL)) { - *binddnp = strdup(my_conn->bindDN); - *passwdp = strdup(my_conn->bindPW); - } else { - *binddnp = NULL; - *passwdp = NULL; - } - } else { - if (*binddnp) { - free(*binddnp); - } - if (*passwdp) { - free(*passwdp); - } - } - - return LDAP_SUCCESS; -} - -static int apr_ldap_rebind_set_callback(LDAP *ld) -{ - ldap_set_rebind_proc(ld, (LDAPRebindProc)LDAP_rebindproc); - return APR_SUCCESS; -} - -#elif APR_HAS_OPENLDAP_LDAPSDK - -/* LDAP_rebindproc() openLDAP V3 style - * ON ENTRY: - * ld Pointer to an LDAP control structure. (input only) - * url Unused in this routine - * request Unused in this routine - * msgid Unused in this routine - * params Unused in this routine - * - * or - * - * ld Pointer to an LDAP control structure. (input only) - * url Unused in this routine - * request Unused in this routine - * msgid Unused in this routine - */ -#if defined(LDAP_SET_REBIND_PROC_THREE) -static int LDAP_rebindproc(LDAP *ld, LDAP_CONST char *url, ber_tag_t request, - ber_int_t msgid, void *params) -#else -static int LDAP_rebindproc(LDAP *ld, LDAP_CONST char *url, int request, - ber_int_t msgid) -#endif -{ - apr_ldap_rebind_entry_t *my_conn; - const char *bindDN = NULL; - const char *bindPW = NULL; - - my_conn = apr_ldap_rebind_lookup(ld); - - if ((my_conn) && (my_conn->bindDN != NULL)) { - bindDN = my_conn->bindDN; - bindPW = my_conn->bindPW; - } - - return (ldap_bind_s(ld, bindDN, bindPW, LDAP_AUTH_SIMPLE)); -} - -static int apr_ldap_rebind_set_callback(LDAP *ld) -{ -#if defined(LDAP_SET_REBIND_PROC_THREE) - ldap_set_rebind_proc(ld, LDAP_rebindproc, NULL); -#else - ldap_set_rebind_proc(ld, LDAP_rebindproc); -#endif - return APR_SUCCESS; -} - -#elif APR_HAS_NOVELL_LDAPSDK - -/* LDAP_rebindproc() openLDAP V3 style - * ON ENTRY: - * ld Pointer to an LDAP control structure. (input only) - * url Unused in this routine - * request Unused in this routine - * msgid Unused in this routine - */ -static int LDAP_rebindproc(LDAP *ld, LDAP_CONST char *url, int request, ber_int_t msgid) -{ - - apr_ldap_rebind_entry_t *my_conn; - const char *bindDN = NULL; - const char *bindPW = NULL; - - my_conn = apr_ldap_rebind_lookup(ld); - - if ((my_conn) && (my_conn->bindDN != NULL)) { - bindDN = my_conn->bindDN; - bindPW = my_conn->bindPW; - } - - return (ldap_bind_s(ld, bindDN, bindPW, LDAP_AUTH_SIMPLE)); -} - -static int apr_ldap_rebind_set_callback(LDAP *ld) -{ - ldap_set_rebind_proc(ld, LDAP_rebindproc); - return APR_SUCCESS; -} - -#else /* Implementation not recognised */ - -static int apr_ldap_rebind_set_callback(LDAP *ld) -{ - return APR_ENOTIMPL; -} - -#endif - - -#endif /* APR_HAS_LDAP */ Index: contrib/apr-util/ldap/apr_ldap_stub.c =================================================================== --- contrib/apr-util/ldap/apr_ldap_stub.c +++ /dev/null @@ -1,145 +0,0 @@ -/* 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 "apr.h" -#include "apu.h" -#include "apu_config.h" -#include "apr_ldap.h" -#include "apu_internal.h" -#include "apr_dso.h" -#include "apr_errno.h" -#include "apr_pools.h" -#include "apr_strings.h" -#include "apu_version.h" - -#if APR_HAS_LDAP - -#if APU_DSO_BUILD - -static struct apr__ldap_dso_fntable *lfn = NULL; - -static apr_status_t load_ldap(apr_pool_t *pool) -{ - char *modname; - apr_dso_handle_sym_t symbol; - apr_status_t rv; - - /* deprecate in 2.0 - permit implicit initialization */ - apu_dso_init(pool); - - rv = apu_dso_mutex_lock(); - if (rv) { - return rv; - } - -#if defined(WIN32) - modname = "apr_ldap-" APU_STRINGIFY(APU_MAJOR_VERSION) ".dll"; -#else - modname = "apr_ldap-" APU_STRINGIFY(APU_MAJOR_VERSION) ".so"; -#endif - rv = apu_dso_load(NULL, &symbol, modname, "apr__ldap_fns", pool); - if (rv == APR_SUCCESS) { - lfn = symbol; - } - apu_dso_mutex_unlock(); - - return rv; -} - -#define LOAD_LDAP_STUB(pool, failres) \ - if (!lfn && (load_ldap(pool) != APR_SUCCESS)) \ - return failres; - -APU_DECLARE_LDAP(int) apr_ldap_info(apr_pool_t *pool, - apr_ldap_err_t **result_err) -{ - LOAD_LDAP_STUB(pool, -1); - return lfn->info(pool, result_err); -} - -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) -{ - LOAD_LDAP_STUB(pool, -1); - return lfn->init(pool, ldap, hostname, portno, secure, result_err); -} - -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) -{ - LOAD_LDAP_STUB(pool, -1); - return lfn->ssl_init(pool, cert_auth_file, cert_file_type, result_err); -} - -APU_DECLARE_LDAP(int) apr_ldap_ssl_deinit(void) -{ - if (!lfn) - return -1; - return lfn->ssl_deinit(); -} - -APU_DECLARE_LDAP(int) apr_ldap_get_option(apr_pool_t *pool, - LDAP *ldap, - int option, - void *outvalue, - apr_ldap_err_t **result_err) -{ - LOAD_LDAP_STUB(pool, -1); - return lfn->get_option(pool, ldap, option, outvalue, result_err); -} - -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) -{ - LOAD_LDAP_STUB(pool, -1); - return lfn->set_option(pool, ldap, option, invalue, result_err); -} - -APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_init(apr_pool_t *pool) -{ - LOAD_LDAP_STUB(pool, APR_EGENERAL); - return lfn->rebind_init(pool); -} - -APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_add(apr_pool_t *pool, - LDAP *ld, - const char *bindDN, - const char *bindPW) -{ - LOAD_LDAP_STUB(pool, APR_EGENERAL); - return lfn->rebind_add(pool, ld, bindDN, bindPW); -} - -APU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_remove(LDAP *ld) -{ - if (!lfn) - return APR_EGENERAL; - return lfn->rebind_remove(ld); -} - -#endif /* APU_DSO_BUILD */ - -#endif /* APR_HAS_LDAP */ - Index: contrib/apr-util/ldap/apr_ldap_url.c =================================================================== --- contrib/apr-util/ldap/apr_ldap_url.c +++ /dev/null @@ -1,694 +0,0 @@ -/* 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. - */ - -/* Portions Copyright 1998-2002 The OpenLDAP Foundation - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted only as authorized by the OpenLDAP - * Public License. A copy of this license is available at - * http://www.OpenLDAP.org/license.html or in file LICENSE in the - * top-level directory of the distribution. - * - * OpenLDAP is a registered trademark of the OpenLDAP Foundation. - * - * Individual files and/or contributed packages may be copyright by - * other parties and subject to additional restrictions. - * - * This work is derived from the University of Michigan LDAP v3.3 - * distribution. Information concerning this software is available - * at: http://www.umich.edu/~dirsvcs/ldap/ - * - * This work also contains materials derived from public sources. - * - * Additional information about OpenLDAP can be obtained at: - * http://www.openldap.org/ - */ - -/* - * Portions Copyright (c) 1992-1996 Regents of the University of Michigan. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that this notice is preserved and that due credit is given - * to the University of Michigan at Ann Arbor. The name of the University - * may not be used to endorse or promote products derived from this - * software without specific prior written permission. This software - * is provided ``as is'' without express or implied warranty. - */ - -/* apr_ldap_url.c -- LDAP URL (RFC 2255) related routines - * - * Win32 and perhaps other non-OpenLDAP based ldap libraries may be - * missing ldap_url_* APIs. We focus here on the one significant - * aspect, which is parsing. We have [for the time being] omitted - * the ldap_url_search APIs. - * - * LDAP URLs look like this: - * ldap[is]://host:port[/[dn[?[attributes][?[scope][?[filter][?exts]]]]]] - * - * where: - * attributes is a comma separated list - * scope is one of these three strings: base one sub (default=base) - * filter is an string-represented filter as in RFC 2254 - * - * e.g., ldap://host:port/dc=com?o,cn?base?o=openldap?extension - * - * Tolerates URLs that look like: and - */ - -#include "apu.h" -#include "apr_pools.h" -#include "apr_general.h" -#include "apr_strings.h" -#include "apr_ldap.h" - -#if APR_HAS_LDAP - -#if APR_HAVE_STDLIB_H -#include -#endif - -#ifndef LDAPS_PORT -#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */ -#endif - -#define APR_LDAP_URL_PREFIX "ldap://" -#define APR_LDAP_URL_PREFIX_LEN (sizeof(APR_LDAP_URL_PREFIX)-1) -#define APR_LDAPS_URL_PREFIX "ldaps://" -#define APR_LDAPS_URL_PREFIX_LEN (sizeof(APR_LDAPS_URL_PREFIX)-1) -#define APR_LDAPI_URL_PREFIX "ldapi://" -#define APR_LDAPI_URL_PREFIX_LEN (sizeof(APR_LDAPI_URL_PREFIX)-1) -#define APR_LDAP_URL_URLCOLON "URL:" -#define APR_LDAP_URL_URLCOLON_LEN (sizeof(APR_LDAP_URL_URLCOLON)-1) - - -/* local functions */ -static const char* skip_url_prefix(const char *url, - int *enclosedp, - const char **scheme); - -static void apr_ldap_pvt_hex_unescape(char *s); - -static int apr_ldap_pvt_unhex(int c); - -static char **apr_ldap_str2charray(apr_pool_t *pool, - const char *str, - const char *brkstr); - - -/** - * Is this URL an ldap url? - * - */ -APU_DECLARE(int) apr_ldap_is_ldap_url(const char *url) -{ - int enclosed; - const char * scheme; - - if( url == NULL ) { - return 0; - } - - if( skip_url_prefix( url, &enclosed, &scheme ) == NULL ) { - return 0; - } - - return 1; -} - -/** - * Is this URL a secure ldap url? - * - */ -APU_DECLARE(int) apr_ldap_is_ldaps_url(const char *url) -{ - int enclosed; - const char * scheme; - - if( url == NULL ) { - return 0; - } - - if( skip_url_prefix( url, &enclosed, &scheme ) == NULL ) { - return 0; - } - - return strcmp(scheme, "ldaps") == 0; -} - -/** - * Is this URL an ldap socket url? - * - */ -APU_DECLARE(int) apr_ldap_is_ldapi_url(const char *url) -{ - int enclosed; - const char * scheme; - - if( url == NULL ) { - return 0; - } - - if( skip_url_prefix( url, &enclosed, &scheme ) == NULL ) { - return 0; - } - - return strcmp(scheme, "ldapi") == 0; -} - - -static const char *skip_url_prefix(const char *url, int *enclosedp, - const char **scheme) -{ - /* - * return non-zero if this looks like a LDAP URL; zero if not - * if non-zero returned, *urlp will be moved past "ldap://" part of URL - */ - const char *p; - - if ( url == NULL ) { - return( NULL ); - } - - p = url; - - /* skip leading '<' (if any) */ - if ( *p == '<' ) { - *enclosedp = 1; - ++p; - } else { - *enclosedp = 0; - } - - /* skip leading "URL:" (if any) */ - if ( strncasecmp( p, APR_LDAP_URL_URLCOLON, APR_LDAP_URL_URLCOLON_LEN ) == 0 ) { - p += APR_LDAP_URL_URLCOLON_LEN; - } - - /* check for "ldap://" prefix */ - if ( strncasecmp( p, APR_LDAP_URL_PREFIX, APR_LDAP_URL_PREFIX_LEN ) == 0 ) { - /* skip over "ldap://" prefix and return success */ - p += APR_LDAP_URL_PREFIX_LEN; - *scheme = "ldap"; - return( p ); - } - - /* check for "ldaps://" prefix */ - if ( strncasecmp( p, APR_LDAPS_URL_PREFIX, APR_LDAPS_URL_PREFIX_LEN ) == 0 ) { - /* skip over "ldaps://" prefix and return success */ - p += APR_LDAPS_URL_PREFIX_LEN; - *scheme = "ldaps"; - return( p ); - } - - /* check for "ldapi://" prefix */ - if ( strncasecmp( p, APR_LDAPI_URL_PREFIX, APR_LDAPI_URL_PREFIX_LEN ) == 0 ) { - /* skip over "ldapi://" prefix and return success */ - p += APR_LDAPI_URL_PREFIX_LEN; - *scheme = "ldapi"; - return( p ); - } - - return( NULL ); -} - - -static int str2scope(const char *p) -{ - if ( strcasecmp( p, "one" ) == 0 ) { - return LDAP_SCOPE_ONELEVEL; - - } else if ( strcasecmp( p, "onetree" ) == 0 ) { - return LDAP_SCOPE_ONELEVEL; - - } else if ( strcasecmp( p, "base" ) == 0 ) { - return LDAP_SCOPE_BASE; - - } else if ( strcasecmp( p, "sub" ) == 0 ) { - return LDAP_SCOPE_SUBTREE; - - } else if ( strcasecmp( p, "subtree" ) == 0 ) { - return LDAP_SCOPE_SUBTREE; - } - - return( -1 ); -} - - -/** - * Parse the URL provided into an apr_ldap_url_desc_t object. - * - * APR_SUCCESS is returned on success, APR_EGENERAL on failure. - * The LDAP result code and reason string is returned in the - * apr_ldap_err_t structure. - */ -APU_DECLARE(int) apr_ldap_url_parse_ext(apr_pool_t *pool, - const char *url_in, - apr_ldap_url_desc_t **ludpp, - apr_ldap_err_t **result_err) -{ - apr_ldap_url_desc_t *ludp; - char *p, *q, *r; - int i, enclosed; - const char *scheme = NULL; - const char *url_tmp; - char *url; - - apr_ldap_err_t *result = (apr_ldap_err_t *)apr_pcalloc(pool, sizeof(apr_ldap_err_t)); - *result_err = result; - - /* sanity check our parameters */ - if( url_in == NULL || ludpp == NULL ) { - result->reason = "Either the LDAP URL, or the URL structure was NULL. Oops."; - result->rc = APR_LDAP_URL_ERR_PARAM; - return APR_EGENERAL; - } - - *ludpp = NULL; /* pessimistic */ - - url_tmp = skip_url_prefix( url_in, &enclosed, &scheme ); - if ( url_tmp == NULL ) { - result->reason = "The scheme was not recognised as a valid LDAP URL scheme."; - result->rc = APR_LDAP_URL_ERR_BADSCHEME; - return APR_EGENERAL; - } - - /* make working copy of the remainder of the URL */ - url = (char *)apr_pstrdup(pool, url_tmp); - if ( url == NULL ) { - result->reason = "Out of memory parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_MEM; - return APR_EGENERAL; - } - - if ( enclosed ) { - p = &url[strlen(url)-1]; - - if( *p != '>' ) { - result->reason = "Bad enclosure error while parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_BADENCLOSURE; - return APR_EGENERAL; - } - - *p = '\0'; - } - - /* allocate return struct */ - ludp = (apr_ldap_url_desc_t *)apr_pcalloc(pool, sizeof(apr_ldap_url_desc_t)); - if ( ludp == NULL ) { - result->reason = "Out of memory parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_MEM; - return APR_EGENERAL; - } - - ludp->lud_next = NULL; - ludp->lud_host = NULL; - ludp->lud_port = LDAP_PORT; - ludp->lud_dn = NULL; - ludp->lud_attrs = NULL; - ludp->lud_filter = NULL; - ludp->lud_scope = -1; - ludp->lud_filter = NULL; - ludp->lud_exts = NULL; - - ludp->lud_scheme = (char *)apr_pstrdup(pool, scheme); - if ( ludp->lud_scheme == NULL ) { - result->reason = "Out of memory parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_MEM; - return APR_EGENERAL; - } - - if( strcasecmp( ludp->lud_scheme, "ldaps" ) == 0 ) { - ludp->lud_port = LDAPS_PORT; - } - - /* scan forward for '/' that marks end of hostport and begin. of dn */ - p = strchr( url, '/' ); - - if( p != NULL ) { - /* terminate hostport; point to start of dn */ - *p++ = '\0'; - } - - /* IPv6 syntax with [ip address]:port */ - if ( *url == '[' ) { - r = strchr( url, ']' ); - if ( r == NULL ) { - result->reason = "Bad LDAP URL while parsing IPV6 syntax."; - result->rc = APR_LDAP_URL_ERR_BADURL; - return APR_EGENERAL; - } - *r++ = '\0'; - q = strrchr( r, ':' ); - } else { - q = strrchr( url, ':' ); - } - - if ( q != NULL ) { - apr_ldap_pvt_hex_unescape( ++q ); - - if( *q == '\0' ) { - result->reason = "Bad LDAP URL while parsing."; - result->rc = APR_LDAP_URL_ERR_BADURL; - return APR_EGENERAL; - } - - ludp->lud_port = atoi( q ); - } - - apr_ldap_pvt_hex_unescape( url ); - - /* If [ip address]:port syntax, url is [ip and we skip the [ */ - ludp->lud_host = (char *)apr_pstrdup(pool, url + ( *url == '[' )); - if( ludp->lud_host == NULL ) { - result->reason = "Out of memory parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_MEM; - return APR_EGENERAL; - } - - /* - * Kludge. ldap://111.222.333.444:389??cn=abc,o=company - * - * On early Novell releases, search references/referrals were returned - * in this format, i.e., the dn was kind of in the scope position, - * but the required slash is missing. The whole thing is illegal syntax, - * but we need to account for it. Fortunately it can't be confused with - * anything real. - */ - if( (p == NULL) && (q != NULL) && ((q = strchr( q, '?')) != NULL)) { - q++; - /* ? immediately followed by question */ - if( *q == '?') { - q++; - if( *q != '\0' ) { - /* parse dn part */ - apr_ldap_pvt_hex_unescape( q ); - ludp->lud_dn = (char *)apr_pstrdup(pool, q); - } else { - ludp->lud_dn = (char *)apr_pstrdup(pool, ""); - } - - if( ludp->lud_dn == NULL ) { - result->reason = "Out of memory parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_MEM; - return APR_EGENERAL; - } - } - } - - if( p == NULL ) { - *ludpp = ludp; - return APR_SUCCESS; - } - - /* scan forward for '?' that may marks end of dn */ - q = strchr( p, '?' ); - - if( q != NULL ) { - /* terminate dn part */ - *q++ = '\0'; - } - - if( *p != '\0' ) { - /* parse dn part */ - apr_ldap_pvt_hex_unescape( p ); - ludp->lud_dn = (char *)apr_pstrdup(pool, p); - } else { - ludp->lud_dn = (char *)apr_pstrdup(pool, ""); - } - - if( ludp->lud_dn == NULL ) { - result->reason = "Out of memory parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_MEM; - return APR_EGENERAL; - } - - if( q == NULL ) { - /* no more */ - *ludpp = ludp; - return APR_SUCCESS; - } - - /* scan forward for '?' that may marks end of attributes */ - p = q; - q = strchr( p, '?' ); - - if( q != NULL ) { - /* terminate attributes part */ - *q++ = '\0'; - } - - if( *p != '\0' ) { - /* parse attributes */ - apr_ldap_pvt_hex_unescape( p ); - ludp->lud_attrs = apr_ldap_str2charray(pool, p, ","); - - if( ludp->lud_attrs == NULL ) { - result->reason = "Bad attributes encountered while parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_BADATTRS; - return APR_EGENERAL; - } - } - - if ( q == NULL ) { - /* no more */ - *ludpp = ludp; - return APR_SUCCESS; - } - - /* scan forward for '?' that may marks end of scope */ - p = q; - q = strchr( p, '?' ); - - if( q != NULL ) { - /* terminate the scope part */ - *q++ = '\0'; - } - - if( *p != '\0' ) { - /* parse the scope */ - apr_ldap_pvt_hex_unescape( p ); - ludp->lud_scope = str2scope( p ); - - if( ludp->lud_scope == -1 ) { - result->reason = "Bad scope encountered while parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_BADSCOPE; - return APR_EGENERAL; - } - } - - if ( q == NULL ) { - /* no more */ - *ludpp = ludp; - return APR_SUCCESS; - } - - /* scan forward for '?' that may marks end of filter */ - p = q; - q = strchr( p, '?' ); - - if( q != NULL ) { - /* terminate the filter part */ - *q++ = '\0'; - } - - if( *p != '\0' ) { - /* parse the filter */ - apr_ldap_pvt_hex_unescape( p ); - - if( ! *p ) { - /* missing filter */ - result->reason = "Bad filter encountered while parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_BADFILTER; - return APR_EGENERAL; - } - - ludp->lud_filter = (char *)apr_pstrdup(pool, p); - if( ludp->lud_filter == NULL ) { - result->reason = "Out of memory parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_MEM; - return APR_EGENERAL; - } - } - - if ( q == NULL ) { - /* no more */ - *ludpp = ludp; - return APR_SUCCESS; - } - - /* scan forward for '?' that may marks end of extensions */ - p = q; - q = strchr( p, '?' ); - - if( q != NULL ) { - /* extra '?' */ - result->reason = "Bad URL encountered while parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_BADURL; - return APR_EGENERAL; - } - - /* parse the extensions */ - ludp->lud_exts = apr_ldap_str2charray(pool, p, ","); - if( ludp->lud_exts == NULL ) { - result->reason = "Bad extensions encountered while parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_BADEXTS; - return APR_EGENERAL; - } - - for( i=0; ludp->lud_exts[i] != NULL; i++ ) { - apr_ldap_pvt_hex_unescape( ludp->lud_exts[i] ); - - if( *ludp->lud_exts[i] == '!' ) { - /* count the number of critical extensions */ - ludp->lud_crit_exts++; - } - } - - if( i == 0 ) { - /* must have 1 or more */ - result->reason = "Bad extensions encountered while parsing LDAP URL."; - result->rc = APR_LDAP_URL_ERR_BADEXTS; - return APR_EGENERAL; - } - - /* no more */ - *ludpp = ludp; - return APR_SUCCESS; -} - - -/** - * Parse the URL provided into an apr_ldap_url_desc_t object. - * - * APR_SUCCESS is returned on success, APR_EGENERAL on failure. - * The LDAP result code and reason string is returned in the - * apr_ldap_err_t structure. - */ -APU_DECLARE(int) apr_ldap_url_parse(apr_pool_t *pool, - const char *url_in, - apr_ldap_url_desc_t **ludpp, - apr_ldap_err_t **result_err) -{ - - int rc = apr_ldap_url_parse_ext(pool, url_in, ludpp, result_err); - if( rc != APR_SUCCESS ) { - return rc; - } - - if ((*ludpp)->lud_scope == -1) { - (*ludpp)->lud_scope = LDAP_SCOPE_BASE; - } - - if ((*ludpp)->lud_host != NULL && *(*ludpp)->lud_host == '\0') { - (*ludpp)->lud_host = NULL; - } - - return rc; - -} - - -static void apr_ldap_pvt_hex_unescape(char *s) -{ - /* - * Remove URL hex escapes from s... done in place. The basic concept for - * this routine is borrowed from the WWW library HTUnEscape() routine. - */ - char *p; - - for ( p = s; *s != '\0'; ++s ) { - if ( *s == '%' ) { - if ( *++s == '\0' ) { - break; - } - *p = apr_ldap_pvt_unhex( *s ) << 4; - if ( *++s == '\0' ) { - break; - } - *p++ += apr_ldap_pvt_unhex( *s ); - } else { - *p++ = *s; - } - } - - *p = '\0'; -} - - -static int apr_ldap_pvt_unhex(int c) -{ - return( c >= '0' && c <= '9' ? c - '0' - : c >= 'A' && c <= 'F' ? c - 'A' + 10 - : c - 'a' + 10 ); -} - - -/** - * Convert a string to a character array - */ -static char **apr_ldap_str2charray(apr_pool_t *pool, - const char *str_in, - const char *brkstr) -{ - char **res; - char *str, *s; - char *lasts; - int i; - - /* protect the input string from strtok */ - str = (char *)apr_pstrdup(pool, str_in); - if( str == NULL ) { - return NULL; - } - - i = 1; - for ( s = str; *s; s++ ) { - /* Warning: this strchr was previously ldap_utf8_strchr(), check - * whether this particular code has any charset issues. - */ - if ( strchr( brkstr, *s ) != NULL ) { - i++; - } - } - - res = (char **) apr_pcalloc(pool, (i + 1) * sizeof(char *)); - if( res == NULL ) { - return NULL; - } - - i = 0; - - for ( s = (char *)apr_strtok( str, brkstr, &lasts ); - s != NULL; - s = (char *)apr_strtok( NULL, brkstr, &lasts ) ) { - - res[i] = (char *)apr_pstrdup(pool, s); - if(res[i] == NULL) { - return NULL; - } - - i++; - } - - res[i] = NULL; - - return( res ); - -} - -#endif /* APR_HAS_LDAP */ Index: contrib/apr-util/libaprutil.rc =================================================================== --- contrib/apr-util/libaprutil.rc +++ /dev/null @@ -1,69 +0,0 @@ -#include "apu_version.h" - -#define APU_LICENSE \ - "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\r\n\r\n" \ - "http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n" \ - "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." - -#ifdef DLL_NAME -#define APU_DLL_BASENAME APU_STRINGIFY(DLL_NAME) "-" APU_STRINGIFY(APU_MAJOR_VERSION) -#define APU_DLL_DESCRIPTION "Apache Portable Runtime " APU_STRINGIFY(DLL_NAME) " Module" -#else -#define APU_DLL_BASENAME "libaprutil-" APU_STRINGIFY(APU_MAJOR_VERSION) -#define APU_DLL_DESCRIPTION "Apache Portable Runtime Utility Library" -#endif - -1 VERSIONINFO - FILEVERSION APU_VERSION_STRING_CSV,0 - PRODUCTVERSION APU_VERSION_STRING_CSV,0 - FILEFLAGSMASK 0x3fL -#if defined(APU_IS_DEV_VERSION) -#if defined(_DEBUG) - FILEFLAGS 0x03L -#else - FILEFLAGS 0x02L -#endif -#else -#if defined(_DEBUG) - FILEFLAGS 0x01L -#else - FILEFLAGS 0x00L -#endif -#endif -#if defined(WINNT) || defined(WIN64) - FILEOS 0x40004L -#else - FILEOS 0x4L -#endif - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", APU_LICENSE "\0" - VALUE "CompanyName", "Apache Software Foundation\0" - VALUE "FileDescription", APU_DLL_DESCRIPTION "\0" - VALUE "FileVersion", APU_VERSION_STRING "\0" - VALUE "InternalName", APU_DLL_BASENAME "\0" - VALUE "LegalCopyright", APU_COPYRIGHT "\0" - VALUE "OriginalFilename", APU_DLL_BASENAME ".dll\0" - VALUE "ProductName", "Apache Portable Runtime Project\0" - VALUE "ProductVersion", APU_VERSION_STRING "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END Index: contrib/apr-util/memcache/apr_memcache.c =================================================================== --- contrib/apr-util/memcache/apr_memcache.c +++ /dev/null @@ -1,1724 +0,0 @@ -/* 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 "apr_memcache.h" -#include "apr_poll.h" -#include "apr_version.h" -#include - -#define BUFFER_SIZE 512 -struct apr_memcache_conn_t -{ - char *buffer; - apr_size_t blen; - apr_pool_t *p; - apr_pool_t *tp; - apr_socket_t *sock; - apr_bucket_brigade *bb; - apr_bucket_brigade *tb; - apr_memcache_server_t *ms; -}; - -/* Strings for Client Commands */ - -#define MC_EOL "\r\n" -#define MC_EOL_LEN (sizeof(MC_EOL)-1) - -#define MC_WS " " -#define MC_WS_LEN (sizeof(MC_WS)-1) - -#define MC_GET "get " -#define MC_GET_LEN (sizeof(MC_GET)-1) - -#define MC_SET "set " -#define MC_SET_LEN (sizeof(MC_SET)-1) - -#define MC_ADD "add " -#define MC_ADD_LEN (sizeof(MC_ADD)-1) - -#define MC_REPLACE "replace " -#define MC_REPLACE_LEN (sizeof(MC_REPLACE)-1) - -#define MC_DELETE "delete " -#define MC_DELETE_LEN (sizeof(MC_DELETE)-1) - -#define MC_INCR "incr " -#define MC_INCR_LEN (sizeof(MC_INCR)-1) - -#define MC_DECR "decr " -#define MC_DECR_LEN (sizeof(MC_DECR)-1) - -#define MC_VERSION "version" -#define MC_VERSION_LEN (sizeof(MC_VERSION)-1) - -#define MC_STATS "stats" -#define MC_STATS_LEN (sizeof(MC_STATS)-1) - -#define MC_QUIT "quit" -#define MC_QUIT_LEN (sizeof(MC_QUIT)-1) - -/* Strings for Server Replies */ - -#define MS_STORED "STORED" -#define MS_STORED_LEN (sizeof(MS_STORED)-1) - -#define MS_NOT_STORED "NOT_STORED" -#define MS_NOT_STORED_LEN (sizeof(MS_NOT_STORED)-1) - -#define MS_DELETED "DELETED" -#define MS_DELETED_LEN (sizeof(MS_DELETED)-1) - -#define MS_NOT_FOUND "NOT_FOUND" -#define MS_NOT_FOUND_LEN (sizeof(MS_NOT_FOUND)-1) - -#define MS_VALUE "VALUE" -#define MS_VALUE_LEN (sizeof(MS_VALUE)-1) - -#define MS_ERROR "ERROR" -#define MS_ERROR_LEN (sizeof(MS_ERROR)-1) - -#define MS_VERSION "VERSION" -#define MS_VERSION_LEN (sizeof(MS_VERSION)-1) - -#define MS_STAT "STAT" -#define MS_STAT_LEN (sizeof(MS_STAT)-1) - -#define MS_END "END" -#define MS_END_LEN (sizeof(MS_END)-1) - -/** Server and Query Structure for a multiple get */ -struct cache_server_query_t { - apr_memcache_server_t* ms; - apr_memcache_conn_t* conn; - struct iovec* query_vec; - apr_int32_t query_vec_count; -}; - -#define MULT_GET_TIMEOUT 50000 - -static apr_status_t make_server_dead(apr_memcache_t *mc, apr_memcache_server_t *ms) -{ -#if APR_HAS_THREADS - apr_thread_mutex_lock(ms->lock); -#endif - ms->status = APR_MC_SERVER_DEAD; - ms->btime = apr_time_now(); -#if APR_HAS_THREADS - apr_thread_mutex_unlock(ms->lock); -#endif - return APR_SUCCESS; -} - -static apr_status_t make_server_live(apr_memcache_t *mc, apr_memcache_server_t *ms) -{ - ms->status = APR_MC_SERVER_LIVE; - return APR_SUCCESS; -} - - -APU_DECLARE(apr_status_t) apr_memcache_add_server(apr_memcache_t *mc, apr_memcache_server_t *ms) -{ - apr_status_t rv = APR_SUCCESS; - - if(mc->ntotal >= mc->nalloc) { - return APR_ENOMEM; - } - - mc->live_servers[mc->ntotal] = ms; - mc->ntotal++; - make_server_live(mc, ms); - return rv; -} - -static apr_status_t mc_version_ping(apr_memcache_server_t *ms); - -APU_DECLARE(apr_memcache_server_t *) -apr_memcache_find_server_hash(apr_memcache_t *mc, const apr_uint32_t hash) -{ - if (mc->server_func) { - return mc->server_func(mc->server_baton, mc, hash); - } - else { - return apr_memcache_find_server_hash_default(NULL, mc, hash); - } -} - -APU_DECLARE(apr_memcache_server_t *) -apr_memcache_find_server_hash_default(void *baton, apr_memcache_t *mc, - const apr_uint32_t hash) -{ - apr_memcache_server_t *ms = NULL; - apr_uint32_t h = hash ? hash : 1; - apr_uint32_t i = 0; - apr_time_t curtime = 0; - - if(mc->ntotal == 0) { - return NULL; - } - - do { - ms = mc->live_servers[h % mc->ntotal]; - if(ms->status == APR_MC_SERVER_LIVE) { - break; - } - else { - if (curtime == 0) { - curtime = apr_time_now(); - } -#if APR_HAS_THREADS - apr_thread_mutex_lock(ms->lock); -#endif - /* Try the dead server, every 5 seconds */ - if (curtime - ms->btime > apr_time_from_sec(5)) { - ms->btime = curtime; - if (mc_version_ping(ms) == APR_SUCCESS) { - make_server_live(mc, ms); -#if APR_HAS_THREADS - apr_thread_mutex_unlock(ms->lock); -#endif - break; - } - } -#if APR_HAS_THREADS - apr_thread_mutex_unlock(ms->lock); -#endif - } - h++; - i++; - } while(i < mc->ntotal); - - if (i == mc->ntotal) { - ms = NULL; - } - - return ms; -} - -APU_DECLARE(apr_memcache_server_t *) apr_memcache_find_server(apr_memcache_t *mc, const char *host, apr_port_t port) -{ - int i; - - for (i = 0; i < mc->ntotal; i++) { - if (strcmp(mc->live_servers[i]->host, host) == 0 - && mc->live_servers[i]->port == port) { - - return mc->live_servers[i]; - } - } - - return NULL; -} - -static apr_status_t ms_find_conn(apr_memcache_server_t *ms, apr_memcache_conn_t **conn) -{ - apr_status_t rv; - apr_bucket_alloc_t *balloc; - apr_bucket *e; - -#if APR_HAS_THREADS - rv = apr_reslist_acquire(ms->conns, (void **)conn); -#else - *conn = ms->conn; - rv = APR_SUCCESS; -#endif - - if (rv != APR_SUCCESS) { - return rv; - } - - balloc = apr_bucket_alloc_create((*conn)->tp); - (*conn)->bb = apr_brigade_create((*conn)->tp, balloc); - (*conn)->tb = apr_brigade_create((*conn)->tp, balloc); - - e = apr_bucket_socket_create((*conn)->sock, balloc); - APR_BRIGADE_INSERT_TAIL((*conn)->bb, e); - - return rv; -} - -static apr_status_t ms_bad_conn(apr_memcache_server_t *ms, apr_memcache_conn_t *conn) -{ -#if APR_HAS_THREADS - return apr_reslist_invalidate(ms->conns, conn); -#else - return APR_SUCCESS; -#endif -} - -static apr_status_t ms_release_conn(apr_memcache_server_t *ms, apr_memcache_conn_t *conn) -{ - apr_pool_clear(conn->tp); -#if APR_HAS_THREADS - return apr_reslist_release(ms->conns, conn); -#else - return APR_SUCCESS; -#endif -} - -APU_DECLARE(apr_status_t) apr_memcache_enable_server(apr_memcache_t *mc, apr_memcache_server_t *ms) -{ - apr_status_t rv = APR_SUCCESS; - - if (ms->status == APR_MC_SERVER_LIVE) { - return rv; - } - - rv = make_server_live(mc, ms); - return rv; -} - -APU_DECLARE(apr_status_t) apr_memcache_disable_server(apr_memcache_t *mc, apr_memcache_server_t *ms) -{ - return make_server_dead(mc, ms); -} - -static apr_status_t conn_connect(apr_memcache_conn_t *conn) -{ - apr_status_t rv = APR_SUCCESS; - apr_sockaddr_t *sa; -#if APR_HAVE_SOCKADDR_UN - apr_int32_t family = conn->ms->host[0] != '/' ? APR_INET : APR_UNIX; -#else - apr_int32_t family = APR_INET; -#endif - - rv = apr_sockaddr_info_get(&sa, conn->ms->host, family, conn->ms->port, 0, conn->p); - if (rv != APR_SUCCESS) { - return rv; - } - - rv = apr_socket_timeout_set(conn->sock, 1 * APR_USEC_PER_SEC); - if (rv != APR_SUCCESS) { - return rv; - } - - rv = apr_socket_connect(conn->sock, sa); - if (rv != APR_SUCCESS) { - return rv; - } - - rv = apr_socket_timeout_set(conn->sock, -1); - if (rv != APR_SUCCESS) { - return rv; - } - - return rv; -} - - -static apr_status_t -mc_conn_construct(void **conn_, void *params, apr_pool_t *pool) -{ - apr_status_t rv = APR_SUCCESS; - apr_memcache_conn_t *conn; - apr_pool_t *np; - apr_pool_t *tp; - apr_memcache_server_t *ms = params; -#if APR_HAVE_SOCKADDR_UN - apr_int32_t family = ms->host[0] != '/' ? APR_INET : APR_UNIX; -#else - apr_int32_t family = APR_INET; -#endif - - rv = apr_pool_create(&np, pool); - if (rv != APR_SUCCESS) { - return rv; - } - - rv = apr_pool_create(&tp, np); - if (rv != APR_SUCCESS) { - apr_pool_destroy(np); - return rv; - } - - conn = apr_palloc(np, sizeof( apr_memcache_conn_t )); - - conn->p = np; - conn->tp = tp; - - rv = apr_socket_create(&conn->sock, family, SOCK_STREAM, 0, np); - - if (rv != APR_SUCCESS) { - apr_pool_destroy(np); - return rv; - } - - conn->buffer = apr_palloc(conn->p, BUFFER_SIZE + 1); - conn->blen = 0; - conn->ms = ms; - - rv = conn_connect(conn); - if (rv != APR_SUCCESS) { - apr_pool_destroy(np); - } - else { - *conn_ = conn; - } - - return rv; -} - -#if APR_HAS_THREADS -static apr_status_t -mc_conn_destruct(void *conn_, void *params, apr_pool_t *pool) -{ - apr_memcache_conn_t *conn = (apr_memcache_conn_t*)conn_; - struct iovec vec[2]; - apr_size_t written; - - /* send a quit message to the memcached server to be nice about it. */ - vec[0].iov_base = MC_QUIT; - vec[0].iov_len = MC_QUIT_LEN; - - vec[1].iov_base = MC_EOL; - vec[1].iov_len = MC_EOL_LEN; - - /* Return values not checked, since we just want to make it go away. */ - apr_socket_sendv(conn->sock, vec, 2, &written); - apr_socket_close(conn->sock); - - apr_pool_destroy(conn->p); - - return APR_SUCCESS; -} -#endif - -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 **ms) -{ - apr_status_t rv = APR_SUCCESS; - apr_memcache_server_t *server; - apr_pool_t *np; - - rv = apr_pool_create(&np, p); - - server = apr_palloc(np, sizeof(apr_memcache_server_t)); - - server->p = np; - server->host = apr_pstrdup(np, host); - server->port = port; - server->status = APR_MC_SERVER_DEAD; -#if APR_HAS_THREADS - rv = apr_thread_mutex_create(&server->lock, APR_THREAD_MUTEX_DEFAULT, np); - if (rv != APR_SUCCESS) { - return rv; - } - - rv = apr_reslist_create(&server->conns, - min, /* hard minimum */ - smax, /* soft maximum */ - max, /* hard maximum */ - ttl, /* Time to live */ - mc_conn_construct, /* Make a New Connection */ - mc_conn_destruct, /* Kill Old Connection */ - server, np); - if (rv != APR_SUCCESS) { - return rv; - } - - apr_reslist_cleanup_order_set(server->conns, APR_RESLIST_CLEANUP_FIRST); -#else - rv = mc_conn_construct((void**)&(server->conn), server, np); - if (rv != APR_SUCCESS) { - return rv; - } -#endif - - *ms = server; - - return rv; -} - -APU_DECLARE(apr_status_t) apr_memcache_create(apr_pool_t *p, - apr_uint16_t max_servers, apr_uint32_t flags, - apr_memcache_t **memcache) -{ - apr_status_t rv = APR_SUCCESS; - apr_memcache_t *mc; - - mc = apr_palloc(p, sizeof(apr_memcache_t)); - mc->p = p; - mc->nalloc = max_servers; - mc->ntotal = 0; - mc->live_servers = apr_palloc(p, mc->nalloc * sizeof(struct apr_memcache_server_t *)); - mc->hash_func = NULL; - mc->hash_baton = NULL; - mc->server_func = NULL; - mc->server_baton = NULL; - *memcache = mc; - return rv; -} - - -/* The crc32 functions and data was originally written by Spencer - * Garrett and was gleaned from the PostgreSQL source - * tree via the files contrib/ltree/crc32.[ch] and from FreeBSD at - * src/usr.bin/cksum/crc32.c. - */ - -static const apr_uint32_t crc32tab[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, -}; - -APU_DECLARE(apr_uint32_t) apr_memcache_hash_crc32(void *baton, - const char *data, - const apr_size_t data_len) -{ - apr_uint32_t i; - apr_uint32_t crc; - crc = ~0; - - for (i = 0; i < data_len; i++) - crc = (crc >> 8) ^ crc32tab[(crc ^ (data[i])) & 0xff]; - - return ~crc; -} - -APU_DECLARE(apr_uint32_t) apr_memcache_hash_default(void *baton, - const char *data, - const apr_size_t data_len) -{ - /* The default Perl Client doesn't actually use just crc32 -- it shifts it again - * like this.... - */ - return ((apr_memcache_hash_crc32(baton, data, data_len) >> 16) & 0x7fff); -} - -APU_DECLARE(apr_uint32_t) apr_memcache_hash(apr_memcache_t *mc, - const char *data, - const apr_size_t data_len) -{ - if (mc->hash_func) { - return mc->hash_func(mc->hash_baton, data, data_len); - } - else { - return apr_memcache_hash_default(NULL, data, data_len); - } -} - -static apr_status_t get_server_line(apr_memcache_conn_t *conn) -{ - apr_size_t bsize = BUFFER_SIZE; - apr_status_t rv = APR_SUCCESS; - - rv = apr_brigade_split_line(conn->tb, conn->bb, APR_BLOCK_READ, BUFFER_SIZE); - - if (rv != APR_SUCCESS) { - return rv; - } - - rv = apr_brigade_flatten(conn->tb, conn->buffer, &bsize); - - if (rv != APR_SUCCESS) { - return rv; - } - - conn->blen = bsize; - conn->buffer[bsize] = '\0'; - - return apr_brigade_cleanup(conn->tb); -} - -static apr_status_t storage_cmd_write(apr_memcache_t *mc, - char *cmd, - const apr_size_t cmd_size, - const char *key, - char *data, - const apr_size_t data_size, - apr_uint32_t timeout, - apr_uint16_t flags) -{ - apr_uint32_t hash; - apr_memcache_server_t *ms; - apr_memcache_conn_t *conn; - apr_status_t rv; - apr_size_t written; - struct iovec vec[5]; - apr_size_t klen; - - apr_size_t key_size = strlen(key); - - hash = apr_memcache_hash(mc, key, key_size); - - ms = apr_memcache_find_server_hash(mc, hash); - - if (ms == NULL) - return APR_NOTFOUND; - - rv = ms_find_conn(ms, &conn); - - if (rv != APR_SUCCESS) { - apr_memcache_disable_server(mc, ms); - return rv; - } - - /* \r\n\r\n */ - - vec[0].iov_base = cmd; - vec[0].iov_len = cmd_size; - - vec[1].iov_base = (void*)key; - vec[1].iov_len = key_size; - - klen = apr_snprintf(conn->buffer, BUFFER_SIZE, " %u %u %" APR_SIZE_T_FMT " " MC_EOL, - flags, timeout, data_size); - - vec[2].iov_base = conn->buffer; - vec[2].iov_len = klen; - - vec[3].iov_base = data; - vec[3].iov_len = data_size; - - vec[4].iov_base = MC_EOL; - vec[4].iov_len = MC_EOL_LEN; - - rv = apr_socket_sendv(conn->sock, vec, 5, &written); - - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return rv; - } - - rv = get_server_line(conn); - - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return rv; - } - - if (strcmp(conn->buffer, MS_STORED MC_EOL) == 0) { - rv = APR_SUCCESS; - } - else if (strcmp(conn->buffer, MS_NOT_STORED MC_EOL) == 0) { - rv = APR_EEXIST; - } - else { - rv = APR_EGENERAL; - } - - ms_release_conn(ms, conn); - - return rv; -} - -APU_DECLARE(apr_status_t) -apr_memcache_set(apr_memcache_t *mc, - const char *key, - char *data, - const apr_size_t data_size, - apr_uint32_t timeout, - apr_uint16_t flags) -{ - return storage_cmd_write(mc, - MC_SET, MC_SET_LEN, - key, - data, data_size, - timeout, flags); -} - -APU_DECLARE(apr_status_t) -apr_memcache_add(apr_memcache_t *mc, - const char *key, - char *data, - const apr_size_t data_size, - apr_uint32_t timeout, - apr_uint16_t flags) -{ - return storage_cmd_write(mc, - MC_ADD, MC_ADD_LEN, - key, - data, data_size, - timeout, flags); -} - -APU_DECLARE(apr_status_t) -apr_memcache_replace(apr_memcache_t *mc, - const char *key, - char *data, - const apr_size_t data_size, - apr_uint32_t timeout, - apr_uint16_t flags) -{ - return storage_cmd_write(mc, - MC_REPLACE, MC_REPLACE_LEN, - key, - data, data_size, - timeout, flags); - -} - -/* - * Parses a decimal size from size_str, returning the value in *size. - * Returns 1 if parsing was successful, 0 if parsing failed. - */ -static int parse_size(const char *size_str, apr_size_t *size) -{ - char *endptr; - long size_as_long; - - errno = 0; - size_as_long = strtol(size_str, &endptr, 10); - if ((size_as_long < 0) || (errno != 0) || (endptr == size_str) || - (endptr[0] != ' ' && (endptr[0] != '\r' || endptr[1] != '\n'))) { - return 0; - } - - *size = (unsigned long)size_as_long; - return 1; -} - -APU_DECLARE(apr_status_t) -apr_memcache_getp(apr_memcache_t *mc, - apr_pool_t *p, - const char *key, - char **baton, - apr_size_t *new_length, - apr_uint16_t *flags_) -{ - apr_status_t rv; - apr_memcache_server_t *ms; - apr_memcache_conn_t *conn; - apr_uint32_t hash; - apr_size_t written; - apr_size_t klen = strlen(key); - struct iovec vec[3]; - - hash = apr_memcache_hash(mc, key, klen); - ms = apr_memcache_find_server_hash(mc, hash); - if (ms == NULL) - return APR_NOTFOUND; - - rv = ms_find_conn(ms, &conn); - - if (rv != APR_SUCCESS) { - apr_memcache_disable_server(mc, ms); - return rv; - } - - /* get [ [...]]\r\n */ - vec[0].iov_base = MC_GET; - vec[0].iov_len = MC_GET_LEN; - - vec[1].iov_base = (void*)key; - vec[1].iov_len = klen; - - vec[2].iov_base = MC_EOL; - vec[2].iov_len = MC_EOL_LEN; - - rv = apr_socket_sendv(conn->sock, vec, 3, &written); - - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return rv; - } - - rv = get_server_line(conn); - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return rv; - } - - if (strncmp(MS_VALUE, conn->buffer, MS_VALUE_LEN) == 0) { - char *flags; - char *length; - char *last; - apr_size_t len = 0; - - flags = apr_strtok(conn->buffer, " ", &last); - flags = apr_strtok(NULL, " ", &last); - flags = apr_strtok(NULL, " ", &last); - - if (flags_) { - *flags_ = atoi(flags); - } - - length = apr_strtok(NULL, " ", &last); - if (!length || !parse_size(length, &len)) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return APR_EGENERAL; - } - else { - apr_bucket_brigade *bbb; - apr_bucket *e; - - /* eat the trailing \r\n */ - rv = apr_brigade_partition(conn->bb, len+2, &e); - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return rv; - } - - bbb = apr_brigade_split(conn->bb, e); - - rv = apr_brigade_pflatten(conn->bb, baton, &len, p); - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - return rv; - } - - rv = apr_brigade_destroy(conn->bb); - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - return rv; - } - - conn->bb = bbb; - - *new_length = len - 2; - (*baton)[*new_length] = '\0'; - } - - rv = get_server_line(conn); - if (rv != APR_SUCCESS) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return rv; - } - - if (strncmp(MS_END, conn->buffer, MS_END_LEN) != 0) { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return APR_EGENERAL; - } - } - else if (strncmp(MS_END, conn->buffer, MS_END_LEN) == 0) { - rv = APR_NOTFOUND; - } - else { - ms_bad_conn(ms, conn); - apr_memcache_disable_server(mc, ms); - return APR_EGENERAL; - } - - ms_release_conn(ms, conn); - - return rv; -} - -APU_DECLARE(apr_status_t) -apr_memcache_delete(apr_memcache_t *mc, - const char *key, - apr_uint32_t timeout) -{ - apr_status_t rv; - apr_memcache_server_t *ms; - apr_memcache_conn_t *conn; - apr_uint32_t hash; - apr_size_t written; - struct iovec vec[3]; - apr_size_t klen = strlen(key); - - hash = apr_memcache_hash(mc, key, klen); - ms = apr_memcache_find_server_hash(mc, hash); - if (ms == NULL) - return APR_NOTFOUND; - - rv = ms_find_conn(ms, &conn); - - if (rv != APR_SUCCESS) { - apr_memcache_disable_server(mc, ms); - return rv; - } - - /* delete