1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-07 12:23:51 +03:00

r21761: - Give more detail on LDAP client library failures (make it clear

where the error is from)

- Make default error string more consistant

Andrew Bartlett
This commit is contained in:
Andrew Bartlett
2007-03-08 06:23:39 +00:00
committed by Gerald (Jerry) Carter
parent 2e85b1583b
commit 7f115579d2
4 changed files with 18 additions and 9 deletions

View File

@@ -432,7 +432,7 @@ int ldb_next_request(struct ldb_module *module, struct ldb_request *request)
} }
if (!ldb_errstring(module->ldb)) { if (!ldb_errstring(module->ldb)) {
/* Set a default error string, to place the blame somewhere */ /* Set a default error string, to place the blame somewhere */
ldb_asprintf_errstring(module->ldb, "error in module %s: %s", module->ops->name, ldb_strerror(ret)); ldb_asprintf_errstring(module->ldb, "error in module %s: %s (%d)", module->ops->name, ldb_strerror(ret), ret);
} }
return ret; return ret;
} }

View File

@@ -123,10 +123,16 @@ failed:
*/ */
static int ildb_map_error(struct ildb_private *ildb, NTSTATUS status) static int ildb_map_error(struct ildb_private *ildb, NTSTATUS status)
{ {
TALLOC_CTX *mem_ctx = talloc_new(ildb);
if (NT_STATUS_IS_OK(status)) { if (NT_STATUS_IS_OK(status)) {
return LDB_SUCCESS; return LDB_SUCCESS;
} }
ldb_set_errstring(ildb->module->ldb, ldap_errstr(ildb->ldap, status)); if (!mem_ctx) {
ldb_oom(ildb->module->ldb);
return LDB_ERR_OPERATIONS_ERROR;
}
ldb_set_errstring(ildb->module->ldb, ldap_errstr(ildb->ldap, mem_ctx, status));
talloc_free(mem_ctx);
if (NT_STATUS_IS_LDAP(status)) { if (NT_STATUS_IS_LDAP(status)) {
return NT_STATUS_LDAP_CODE(status); return NT_STATUS_LDAP_CODE(status);
} }
@@ -763,7 +769,7 @@ static int ildb_connect(struct ldb_context *ldb, const char *url,
status = ldap_connect(ildb->ldap, url); status = ldap_connect(ildb->ldap, url);
if (!NT_STATUS_IS_OK(status)) { if (!NT_STATUS_IS_OK(status)) {
ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to connect to ldap URL '%s' - %s\n", ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to connect to ldap URL '%s' - %s\n",
url, ldap_errstr(ildb->ldap, status)); url, ldap_errstr(ildb->ldap, module, status));
goto failed; goto failed;
} }
@@ -783,14 +789,14 @@ static int ildb_connect(struct ldb_context *ldb, const char *url,
status = ldap_bind_simple(ildb->ldap, bind_dn, password); status = ldap_bind_simple(ildb->ldap, bind_dn, password);
if (!NT_STATUS_IS_OK(status)) { if (!NT_STATUS_IS_OK(status)) {
ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to bind - %s\n", ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to bind - %s\n",
ldap_errstr(ildb->ldap, status)); ldap_errstr(ildb->ldap, module, status));
goto failed; goto failed;
} }
} else { } else {
status = ldap_bind_sasl(ildb->ldap, creds); status = ldap_bind_sasl(ildb->ldap, creds);
if (!NT_STATUS_IS_OK(status)) { if (!NT_STATUS_IS_OK(status)) {
ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to bind - %s\n", ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to bind - %s\n",
ldap_errstr(ildb->ldap, status)); ldap_errstr(ildb->ldap, module, status));
goto failed; goto failed;
} }
} }

View File

@@ -562,6 +562,7 @@ struct ldap_request *ldap_request_send(struct ldap_connection *conn,
msg->messageid = req->messageid; msg->messageid = req->messageid;
if (!ldap_encode(msg, &req->data, req)) { if (!ldap_encode(msg, &req->data, req)) {
status = NT_STATUS_INTERNAL_ERROR;
goto failed; goto failed;
} }
@@ -704,12 +705,14 @@ NTSTATUS ldap_check_response(struct ldap_connection *conn, struct ldap_Result *r
/* /*
return error string representing the last error return error string representing the last error
*/ */
const char *ldap_errstr(struct ldap_connection *conn, NTSTATUS status) const char *ldap_errstr(struct ldap_connection *conn,
TALLOC_CTX *mem_ctx,
NTSTATUS status)
{ {
if (NT_STATUS_IS_LDAP(status) && conn->last_error != NULL) { if (NT_STATUS_IS_LDAP(status) && conn->last_error != NULL) {
return conn->last_error; return talloc_strdup(mem_ctx, conn->last_error);
} }
return nt_errstr(status); return talloc_asprintf(mem_ctx, "LDAP client internal error: %s", nt_errstr(status));
} }

View File

@@ -86,7 +86,7 @@ NTSTATUS torture_ldap_connection2(TALLOC_CTX *mem_ctx, struct ldap_connection **
status = ldap_bind_simple(*conn, userdn, password); status = ldap_bind_simple(*conn, userdn, password);
if (!NT_STATUS_IS_OK(status)) { if (!NT_STATUS_IS_OK(status)) {
printf("Failed a simple ldap bind - %s\n", ldap_errstr(*conn, status)); printf("Failed a simple ldap bind - %s\n", ldap_errstr(*conn, mem_ctx, status));
} }
return status; return status;