db-ldap.c revision ba00293b85c7fb4e7a2d100991c716e17b9daaae
1920ef85b63738a06914e56508049dd0afe38732Timo Sirainen/* Copyright (C) 2003-2006 Timo Sirainen */
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#if defined(PASSDB_LDAP) || defined(USERDB_LDAP)
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch# define LDAP_SASL_QUIET 0 /* Doesn't exist in Solaris LDAP */
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch/* Older versions may require calling ldap_result() twice */
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch/* Solaris LDAP library doesn't have LDAP_OPT_SUCCESS */
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch const char *name, *value, *template, *val_1_arr[2];
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch const char *const *static_attrs;
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#define DEF_STR(name) DEF_STRUCT_STR(name, ldap_settings)
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#define DEF_INT(name) DEF_STRUCT_INT(name, ldap_settings)
e8f1e510df3ab051a816715c2056f0d10aee929eStephan Bosch#define DEF_BOOL(name) DEF_STRUCT_BOOL(name, ldap_settings)
{ 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;
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:
int scope)
while (*p != NULL) {
request = *p;
p = &(*p)->next;
#ifdef OPENLDAP_ASYNC_WORKAROUND
if (ret == 0) {
if (ret <= 0)
msgid);
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 ret;
int msgid;
int ret;
unsigned int ldap_version;
int ret;
#ifdef LDAP_HAVE_INITIALIZE
(void *)&ldap_version);
#ifdef LDAP_HAVE_START_TLS_S
#ifdef HAVE_LDAP_SASL
if (flush_requests) {
const char *skip_attr)
unsigned int i, j, size;
t_push();
for (i = j = 0; i < size; i++) {
if (p == NULL)
else if (p != attr_data) {
t_pop();
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;
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)