check return values from ldap operations and close it we get back

LDAP_SERVER_DOWN. stupid ldap client lib, you should retry by yourself.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13899 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2004-06-01 20:09:29 +00:00
parent 99c773a1db
commit 2e20f6c28f

View File

@@ -42,7 +42,8 @@ RCSID("$Id$");
#include <ctype.h>
#include <sys/un.h>
static krb5_error_code LDAP__connect(krb5_context context, HDB * db);
static krb5_error_code LDAP__connect(krb5_context context, HDB *);
static krb5_error_code LDAP_close(krb5_context context, HDB *);
static krb5_error_code
LDAP_message2entry(krb5_context context, HDB * db, LDAPMessage * msg,
@@ -165,6 +166,20 @@ LDAP_no_size_limit(krb5_context context, LDAP *lp)
return 0;
}
static int
check_ldap(krb5_context context, HDB *db, int ret)
{
switch (ret) {
case LDAP_SUCCESS:
return 0;
case LDAP_SERVER_DOWN:
LDAP_close(context, db);
return 1;
default:
return 1;
}
}
static krb5_error_code
LDAP__setmod(LDAPMod *** modlist, int modop, const char *attribute,
int *pIndex)
@@ -744,7 +759,7 @@ LDAP_dn2principal(krb5_context context, HDB * db, const char *dn,
rc = ldap_search_s(HDB2LDAP(db), dn, LDAP_SCOPE_SUBTREE,
"(objectclass=krb5Principal)", krb5principal_attrs,
0, &res);
if (rc != LDAP_SUCCESS) {
if (check_ldap(context, db, rc)) {
krb5_set_error_string(context, "ldap_search_s: %s",
ldap_err2string(rc));
ret = HDB_ERR_NOENTRY;
@@ -803,7 +818,7 @@ LDAP__lookup_princ(krb5_context context,
rc = ldap_search_s(HDB2LDAP(db), HDB2BASE(db), LDAP_SCOPE_SUBTREE, filter,
krb5kdcentry_attrs, 0, msg);
if (rc != LDAP_SUCCESS) {
if (check_ldap(context, db, rc)) {
krb5_set_error_string(context, "ldap_search_s: %s",
ldap_err2string(rc));
ret = HDB_ERR_NOENTRY;
@@ -831,7 +846,7 @@ LDAP__lookup_princ(krb5_context context,
rc = ldap_search_s(HDB2LDAP(db), HDB2BASE(db), LDAP_SCOPE_SUBTREE,
filter, krb5kdcentry_attrs, 0, msg);
if (rc != LDAP_SUCCESS) {
if (check_ldap(context, db, rc)) {
krb5_set_error_string(context, "ldap_search_s: %s",
ldap_err2string(rc));
ret = HDB_ERR_NOENTRY;
@@ -1335,6 +1350,9 @@ LDAP_seq(krb5_context context, HDB * db, unsigned flags, hdb_entry * entry)
ret = HDB_ERR_NOENTRY;
HDBSETMSGID(db, -1);
break;
case LDAP_SERVER_DOWN:
LDAP_close(context, db);
/* fall though */
case 0:
case -1:
default:
@@ -1565,16 +1583,15 @@ LDAP_store(krb5_context context, HDB * db, unsigned flags,
errfn = "ldap_modify_s";
}
if (rc == LDAP_SUCCESS) {
ret = 0;
} else {
if (check_ldap(context, db, rc)) {
char *ld_error = NULL;
ldap_get_option(HDB2LDAP(db), LDAP_OPT_ERROR_STRING,
&ld_error);
krb5_set_error_string(context, "%s: %s (dn=%s) %s: %s",
errfn, name, dn, ldap_err2string(rc), ld_error);
ret = HDB_ERR_CANT_LOCK_DB;
}
} else
ret = 0;
out:
/* free stuff */