db-ldap.c revision a64adf62fa33f2463a86f990217b0c9078531a40
310N/A#include "env-util.h"
310N/A#include "var-expand.h"
310N/A#include "settings.h"
310N/A#define HAVE_LDAP_SASL
310N/A#ifdef HAVE_SASL_SASL_H
310N/A#ifdef LDAP_OPT_X_TLS
586N/A# define OPENLDAP_TLS_OPTIONS
310N/A#ifndef LDAP_SASL_QUIET
310N/A# define OPENLDAP_ASYNC_WORKAROUND
310N/A#ifndef LDAP_OPT_SUCCESS
310N/Astruct db_ldap_result_iterate_context {
310N/A const char *const *static_attrs;
struct db_ldap_sasl_bind_context {
const char *authcid;
const char *passwd;
const char *realm;
const char *authzid;
{ 0, NULL, 0 }
return LDAP_DEREF_NEVER;
return LDAP_DEREF_SEARCHING;
return LDAP_DEREF_FINDING;
return LDAP_DEREF_ALWAYS;
return LDAP_SCOPE_BASE;
return LDAP_SCOPE_ONELEVEL;
return LDAP_SCOPE_SUBTREE;
#ifdef OPENLDAP_TLS_OPTIONS
return LDAP_OPT_X_TLS_NEVER;
return LDAP_OPT_X_TLS_HARD;
return LDAP_OPT_X_TLS_DEMAND;
return LDAP_OPT_X_TLS_ALLOW;
return LDAP_OPT_X_TLS_TRY;
return LDAP_UNAVAILABLE;
return err;
switch (err) {
case LDAP_SUCCESS:
i_unreached();
case LDAP_SIZELIMIT_EXCEEDED:
case LDAP_TIMELIMIT_EXCEEDED:
case LDAP_NO_SUCH_ATTRIBUTE:
case LDAP_UNDEFINED_TYPE:
case LDAP_INVALID_SYNTAX:
case LDAP_NO_SUCH_OBJECT:
case LDAP_ALIAS_PROBLEM:
case LDAP_INVALID_DN_SYNTAX:
case LDAP_IS_LEAF:
case LDAP_ALIAS_DEREF_PROBLEM:
case LDAP_FILTER_ERROR:
case LDAP_SERVER_DOWN:
case LDAP_TIMEOUT:
case LDAP_UNAVAILABLE:
case LDAP_BUSY:
#ifdef LDAP_CONNECT_ERROR
case LDAP_CONNECT_ERROR:
case LDAP_LOCAL_ERROR:
case LDAP_INVALID_CREDENTIALS:
return FALSE;
return FALSE;
return FALSE;
return FALSE;
case LDAP_CONN_STATE_BINDING:
return FALSE;
return FALSE;
case LDAP_REQUEST_TYPE_BIND:
case LDAP_REQUEST_TYPE_SEARCH:
if (ret > 0) {
return TRUE;
} else if (ret < 0) {
return FALSE;
return TRUE;
int ret;
unsigned int max_count,
unsigned int timeout_secs,
if (error) {
max_count--;
unsigned int i, count;
for (i = 0; i < count; i++) {
T_BEGIN {
} T_END;
int ret;
#ifdef OPENLDAP_ASYNC_WORKAROUND
if (ret == 0) {
if (ret <= 0)
if (ret == 0) {
#ifdef HAVE_LDAP_SASL
const char *str;
case SASL_CB_GETREALM:
case SASL_CB_AUTHNAME:
case SASL_CB_USER:
case SASL_CB_PASS:
return LDAP_SUCCESS;
int msgid;
int ret;
int ret;
const char *optname)
#ifdef OPENLDAP_TLS_OPTIONS
unsigned int ldap_version;
int value;
#ifdef LDAP_OPT_DEBUG_LEVEL
if (value != 0) {
int ret;
#ifdef LDAP_HAVE_INITIALIZE
#ifdef LDAP_HAVE_START_TLS_S
#ifdef HAVE_LDAP_SASL
const char *skip_attr)
unsigned int i, j, size;
for (i = j = 0; i < size; i++) {
if (p == NULL)
else if (p != attr_data) {
struct var_expand_table *
unsigned int count;
count++;
return table;
#define IS_LDAP_ESCAPED_CHAR(c) \
if (IS_LDAP_ESCAPED_CHAR(*p))
return str;
if (IS_LDAP_ESCAPED_CHAR(*p))
struct db_ldap_result_iterate_context *
const char *static_data;
return ctx;
if (!first)
return TRUE;
if (p == NULL) {
return TRUE;
return FALSE;
return FALSE;
return TRUE;
const char **name_r,
const char *const **values_r)
return FALSE;
return TRUE;
return conn;
return NULL;
const char *str;
return conn;
#ifndef LDAP_HAVE_INITIALIZE
return conn;
struct ldap_connection **p;
if (*p == conn) {
#ifndef BUILTIN_LDAP
void authdb_ldap_init(void);
void authdb_ldap_deinit(void);
void authdb_ldap_init(void)
void authdb_ldap_deinit(void)