1251876Speter/* Licensed to the Apache Software Foundation (ASF) under one or more 2251876Speter * contributor license agreements. See the NOTICE file distributed with 3251876Speter * this work for additional information regarding copyright ownership. 4251876Speter * The ASF licenses this file to You under the Apache License, Version 2.0 5251876Speter * (the "License"); you may not use this file except in compliance with 6251876Speter * the License. You may obtain a copy of the License at 7251876Speter * 8251876Speter * http://www.apache.org/licenses/LICENSE-2.0 9251876Speter * 10251876Speter * Unless required by applicable law or agreed to in writing, software 11251876Speter * distributed under the License is distributed on an "AS IS" BASIS, 12251876Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13251876Speter * See the License for the specific language governing permissions and 14251876Speter * limitations under the License. 15251876Speter */ 16251876Speter 17251876Speter#include "apr.h" 18251876Speter#include "apu.h" 19251876Speter#include "apu_config.h" 20251876Speter#include "apr_ldap.h" 21251876Speter#include "apu_internal.h" 22251876Speter#include "apr_dso.h" 23251876Speter#include "apr_errno.h" 24251876Speter#include "apr_pools.h" 25251876Speter#include "apr_strings.h" 26251876Speter#include "apu_version.h" 27251876Speter 28251876Speter#if APR_HAS_LDAP 29251876Speter 30251876Speter#if APU_DSO_BUILD 31251876Speter 32251876Speterstatic struct apr__ldap_dso_fntable *lfn = NULL; 33251876Speter 34251876Speterstatic apr_status_t load_ldap(apr_pool_t *pool) 35251876Speter{ 36251876Speter char *modname; 37251876Speter apr_dso_handle_sym_t symbol; 38251876Speter apr_status_t rv; 39251876Speter 40251876Speter /* deprecate in 2.0 - permit implicit initialization */ 41251876Speter apu_dso_init(pool); 42251876Speter 43251876Speter rv = apu_dso_mutex_lock(); 44251876Speter if (rv) { 45251876Speter return rv; 46251876Speter } 47251876Speter 48251876Speter#if defined(WIN32) 49251876Speter modname = "apr_ldap-" APU_STRINGIFY(APU_MAJOR_VERSION) ".dll"; 50251876Speter#else 51251876Speter modname = "apr_ldap-" APU_STRINGIFY(APU_MAJOR_VERSION) ".so"; 52251876Speter#endif 53251876Speter rv = apu_dso_load(NULL, &symbol, modname, "apr__ldap_fns", pool); 54251876Speter if (rv == APR_SUCCESS) { 55251876Speter lfn = symbol; 56251876Speter } 57251876Speter apu_dso_mutex_unlock(); 58251876Speter 59251876Speter return rv; 60251876Speter} 61251876Speter 62251876Speter#define LOAD_LDAP_STUB(pool, failres) \ 63251876Speter if (!lfn && (load_ldap(pool) != APR_SUCCESS)) \ 64251876Speter return failres; 65251876Speter 66251876SpeterAPU_DECLARE_LDAP(int) apr_ldap_info(apr_pool_t *pool, 67251876Speter apr_ldap_err_t **result_err) 68251876Speter{ 69251876Speter LOAD_LDAP_STUB(pool, -1); 70251876Speter return lfn->info(pool, result_err); 71251876Speter} 72251876Speter 73251876SpeterAPU_DECLARE_LDAP(int) apr_ldap_init(apr_pool_t *pool, 74251876Speter LDAP **ldap, 75251876Speter const char *hostname, 76251876Speter int portno, 77251876Speter int secure, 78251876Speter apr_ldap_err_t **result_err) 79251876Speter{ 80251876Speter LOAD_LDAP_STUB(pool, -1); 81251876Speter return lfn->init(pool, ldap, hostname, portno, secure, result_err); 82251876Speter} 83251876Speter 84251876SpeterAPU_DECLARE_LDAP(int) apr_ldap_ssl_init(apr_pool_t *pool, 85251876Speter const char *cert_auth_file, 86251876Speter int cert_file_type, 87251876Speter apr_ldap_err_t **result_err) 88251876Speter{ 89251876Speter LOAD_LDAP_STUB(pool, -1); 90251876Speter return lfn->ssl_init(pool, cert_auth_file, cert_file_type, result_err); 91251876Speter} 92251876Speter 93251876SpeterAPU_DECLARE_LDAP(int) apr_ldap_ssl_deinit(void) 94251876Speter{ 95251876Speter if (!lfn) 96251876Speter return -1; 97251876Speter return lfn->ssl_deinit(); 98251876Speter} 99251876Speter 100251876SpeterAPU_DECLARE_LDAP(int) apr_ldap_get_option(apr_pool_t *pool, 101251876Speter LDAP *ldap, 102251876Speter int option, 103251876Speter void *outvalue, 104251876Speter apr_ldap_err_t **result_err) 105251876Speter{ 106251876Speter LOAD_LDAP_STUB(pool, -1); 107251876Speter return lfn->get_option(pool, ldap, option, outvalue, result_err); 108251876Speter} 109251876Speter 110251876SpeterAPU_DECLARE_LDAP(int) apr_ldap_set_option(apr_pool_t *pool, 111251876Speter LDAP *ldap, 112251876Speter int option, 113251876Speter const void *invalue, 114251876Speter apr_ldap_err_t **result_err) 115251876Speter{ 116251876Speter LOAD_LDAP_STUB(pool, -1); 117251876Speter return lfn->set_option(pool, ldap, option, invalue, result_err); 118251876Speter} 119251876Speter 120251876SpeterAPU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_init(apr_pool_t *pool) 121251876Speter{ 122251876Speter LOAD_LDAP_STUB(pool, APR_EGENERAL); 123251876Speter return lfn->rebind_init(pool); 124251876Speter} 125251876Speter 126251876SpeterAPU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_add(apr_pool_t *pool, 127251876Speter LDAP *ld, 128251876Speter const char *bindDN, 129251876Speter const char *bindPW) 130251876Speter{ 131251876Speter LOAD_LDAP_STUB(pool, APR_EGENERAL); 132251876Speter return lfn->rebind_add(pool, ld, bindDN, bindPW); 133251876Speter} 134251876Speter 135251876SpeterAPU_DECLARE_LDAP(apr_status_t) apr_ldap_rebind_remove(LDAP *ld) 136251876Speter{ 137251876Speter if (!lfn) 138251876Speter return APR_EGENERAL; 139251876Speter return lfn->rebind_remove(ld); 140251876Speter} 141251876Speter 142251876Speter#endif /* APU_DSO_BUILD */ 143251876Speter 144251876Speter#endif /* APR_HAS_LDAP */ 145251876Speter 146