svn commit: samba r21761 - in branches/SAMBA_4_0/source: lib/ldb/common lib/ldb/ldb_ildap libcli/ldap torture/ldap

abartlet at samba.org abartlet at samba.org
Thu Mar 8 06:23:39 GMT 2007


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;



More information about the samba-cvs mailing list