Author: abartlet Date: 2007-03-08 06:23:39 +0000 (Thu, 08 Mar 2007) New Revision: 21761
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=21761 Log: - Give more detail on LDAP client library failures (make it clear where the error is from) - Make default error string more consistant Andrew Bartlett Modified: branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c branches/SAMBA_4_0/source/lib/ldb/ldb_ildap/ldb_ildap.c branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c branches/SAMBA_4_0/source/torture/ldap/common.c Changeset: Modified: branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c =================================================================== --- branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c 2007-03-08 03:32:28 UTC (rev 21760) +++ branches/SAMBA_4_0/source/lib/ldb/common/ldb_modules.c 2007-03-08 06:23:39 UTC (rev 21761) @@ -432,7 +432,7 @@ } if (!ldb_errstring(module->ldb)) { /* 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; } Modified: branches/SAMBA_4_0/source/lib/ldb/ldb_ildap/ldb_ildap.c =================================================================== --- branches/SAMBA_4_0/source/lib/ldb/ldb_ildap/ldb_ildap.c 2007-03-08 03:32:28 UTC (rev 21760) +++ branches/SAMBA_4_0/source/lib/ldb/ldb_ildap/ldb_ildap.c 2007-03-08 06:23:39 UTC (rev 21761) @@ -123,10 +123,16 @@ */ static int ildb_map_error(struct ildb_private *ildb, NTSTATUS status) { + TALLOC_CTX *mem_ctx = talloc_new(ildb); if (NT_STATUS_IS_OK(status)) { 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)) { return NT_STATUS_LDAP_CODE(status); } @@ -763,7 +769,7 @@ status = ldap_connect(ildb->ldap, url); if (!NT_STATUS_IS_OK(status)) { 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; } @@ -783,14 +789,14 @@ status = ldap_bind_simple(ildb->ldap, bind_dn, password); if (!NT_STATUS_IS_OK(status)) { ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to bind - %s\n", - ldap_errstr(ildb->ldap, status)); + ldap_errstr(ildb->ldap, module, status)); goto failed; } } else { status = ldap_bind_sasl(ildb->ldap, creds); if (!NT_STATUS_IS_OK(status)) { ldb_debug(ldb, LDB_DEBUG_ERROR, "Failed to bind - %s\n", - ldap_errstr(ildb->ldap, status)); + ldap_errstr(ildb->ldap, module, status)); goto failed; } } Modified: branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c =================================================================== --- branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c 2007-03-08 03:32:28 UTC (rev 21760) +++ branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c 2007-03-08 06:23:39 UTC (rev 21761) @@ -562,6 +562,7 @@ msg->messageid = req->messageid; if (!ldap_encode(msg, &req->data, req)) { + status = NT_STATUS_INTERNAL_ERROR; goto failed; } @@ -704,12 +705,14 @@ /* 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) { - 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)); } Modified: branches/SAMBA_4_0/source/torture/ldap/common.c =================================================================== --- branches/SAMBA_4_0/source/torture/ldap/common.c 2007-03-08 03:32:28 UTC (rev 21760) +++ branches/SAMBA_4_0/source/torture/ldap/common.c 2007-03-08 06:23:39 UTC (rev 21761) @@ -86,7 +86,7 @@ status = ldap_bind_simple(*conn, userdn, password); 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;