/* 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.
 */

/*
 * ap_ldap.h is generated from ap_ldap.h.in by configure -- do not edit ap_ldap.h
 */
/**
 * @file ap_ldap.h
 * @brief  LDAP 
 */
#ifndef AP_LDAP_H
#define AP_LDAP_H

/**
 * @defgroup AP_Util_LDAP LDAP
 * @ingroup AP_Util
 * @{
 */

/* Create a set of LDAP_DECLARE macros with appropriate export 
 * and import tags for the platform
 */
#if !defined(WIN32)
#define LDAP_DECLARE(type)            type
#define LDAP_DECLARE_NONSTD(type)     type
#define LDAP_DECLARE_DATA
#elif defined(LDAP_DECLARE_STATIC)
#define LDAP_DECLARE(type)            type __stdcall
#define LDAP_DECLARE_NONSTD(type)     type
#define LDAP_DECLARE_DATA
#elif defined(LDAP_DECLARE_EXPORT)
#define LDAP_DECLARE(type)            __declspec(dllexport) type __stdcall
#define LDAP_DECLARE_NONSTD(type)     __declspec(dllexport) type
#define LDAP_DECLARE_DATA             __declspec(dllexport)
#else
#define LDAP_DECLARE(type)            __declspec(dllimport) type __stdcall
#define LDAP_DECLARE_NONSTD(type)     __declspec(dllimport) type
#define LDAP_DECLARE_DATA             __declspec(dllimport)
#endif

/* this will be defined if LDAP support was compiled into apr-util */
#define AP_HAS_LDAP                1 

/* identify the LDAP toolkit used */
#define AP_HAS_NETSCAPE_LDAPSDK    0
#define AP_HAS_SOLARIS_LDAPSDK     0
#define AP_HAS_NOVELL_LDAPSDK      1
#define AP_HAS_MOZILLA_LDAPSDK     0
#define AP_HAS_OPENLDAP_LDAPSDK    0
#define AP_HAS_MICROSOFT_LDAPSDK   0
#define AP_HAS_OTHER_LDAPSDK       0


/*
 * Handle the case when LDAP is enabled
 */
#if AP_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
 * ap_ldap_url_parse*() functions have been rewritten specifically for
 * APR, so the AP_HAS_LDAP_URL_PARSE macro is forced to zero.
 */
#define AP_HAS_LDAP_SSL            1
#define AP_HAS_LDAP_URL_PARSE      0


/*
 * Include the standard LDAP header files.
 */

#ifdef GENEXPORTS
#define LDAP_VERSION_MAX 3
#define LDAP_INSUFFICIENT_ACCESS
#else
#include <lber.h>
#include <ldap.h>
#if AP_HAS_LDAP_SSL 
#include <ldap_ssl.h>
#endif
#endif


/*
 * Detected standard functions
 */
#define AP_HAS_LDAPSSL_CLIENT_INIT 1
#define AP_HAS_LDAPSSL_CLIENT_DEINIT 1
#define AP_HAS_LDAPSSL_ADD_TRUSTED_CERT 1
#define AP_HAS_LDAP_START_TLS_S 0
#define AP_HAS_LDAP_SSLINIT 0
#define AP_HAS_LDAPSSL_INIT 1
#define AP_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 ap_ldap_err_t {
    const char *reason;
    const char *msg;
    int rc;
} ap_ldap_err_t;

#ifdef __cplusplus
}
#endif

#define AP_LDAP_IS_SERVER_DOWN(s)                ((s) == LDAP_SERVER_DOWN)

#include "ap_ldap_url.h"
#include "ap_ldap_init.h"
#include "ap_ldap_option.h"
#include "ap_ldap_rebind.h"

/** @} */
#endif /* AP_HAS_LDAP */
#endif /* AP_LDAP_H */

