[fedfs-utils] [PATCH 07/17] libnsdb: Remove *ldaperr argument from nsdb_get_naming_contexts_s()

Chuck Lever chuck.lever at oracle.com
Thu Jan 2 12:27:54 PST 2014


Simplify nsdb_get_naming_contexts_s() by removing the *ldaperr
argument.  Instead, the ldaperr value can be extracted with the new
nsdb_ldaperr() function when it is needed.

Signed-off-by: Chuck Lever <chuck.lever at oracle.com>
---
 src/include/nsdb.h       |    3 +--
 src/libnsdb/fileserver.c |   52 +++++++++++++++++++++++++++-------------------
 src/nsdbc/nsdb-list.c    |    8 ++++---
 src/nsdbc/nsdb-nces.c    |    7 +++---
 4 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/src/include/nsdb.h b/src/include/nsdb.h
index 5709f0c..ae58397 100644
--- a/src/include/nsdb.h
+++ b/src/include/nsdb.h
@@ -379,8 +379,7 @@ FedFsStatus	 nsdb_annotation_delete_s(nsdb_t host, const char *dn,
  */
 FedFsStatus	 nsdb_get_ncedn_s(nsdb_t host, const char *naming_context,
 				char **dn);
-FedFsStatus	 nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts,
-				unsigned int *ldap_err);
+FedFsStatus	 nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts);
 FedFsStatus	 nsdb_find_naming_context_s(nsdb_t host, const char *entry,
 				char **context, unsigned int *ldap_err);
 
diff --git a/src/libnsdb/fileserver.c b/src/libnsdb/fileserver.c
index efb8c5a..8c451ee 100644
--- a/src/libnsdb/fileserver.c
+++ b/src/libnsdb/fileserver.c
@@ -701,7 +701,6 @@ nsdb_parse_naming_contexts_entry(LDAP *ld, LDAPMessage *entry,
  *
  * @param host an initialized and bound nsdb_t object
  * @param contexts OUT: pointer to an array of NUL-terminated C strings
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  *
  * Caller must free "contexts" with nsdb_free_string_array()
@@ -716,13 +715,12 @@ nsdb_parse_naming_contexts_entry(LDAP *ld, LDAPMessage *entry,
    @endverbatim
  */
 FedFsStatus
-nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts,
-		unsigned int *ldap_err)
+nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts)
 {
 	LDAPMessage *response, *message;
 	LDAP *ld = host->fn_ldap;
 	FedFsStatus retval;
-	int rc, entries;
+	int entries;
 	char **tmp;
 
 	if (host == NULL) {
@@ -735,14 +733,16 @@ nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts,
 		return FEDFS_ERR_INVAL;
 	}
 
-	if (contexts == NULL || ldap_err == NULL) {
+	if (contexts == NULL) {
 		xlog(L_ERROR, "%s: Invalid parameter", __func__);
 		return FEDFS_ERR_INVAL;
 	}
 
-	rc = nsdb_search_nsdb_attr_s(ld, LDAP_ROOT_DSE, "(objectClass=*)",
-					"namingContexts", &response);
-	switch (rc) {
+	host->fn_ldaperr = nsdb_search_nsdb_attr_s(ld, LDAP_ROOT_DSE,
+							"(objectClass=*)",
+							"namingContexts",
+							&response);
+	switch (host->fn_ldaperr) {
 	case LDAP_SUCCESS:
 		break;
 	case LDAP_NO_SUCH_OBJECT:
@@ -750,8 +750,7 @@ nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts,
 		return FEDFS_ERR_NSDB_FAULT;
 	default:
 		xlog(D_GENERAL, "%s: LDAP search failed: %s",
-					__func__, ldap_err2string(rc));
-		*ldap_err = rc;
+			__func__, ldap_err2string(host->fn_ldaperr));
 		return FEDFS_ERR_NSDB_LDAP_VAL;
 	}
 	if (response == NULL) {
@@ -785,7 +784,8 @@ nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts,
 							message, &tmp);
 			break;
 		case LDAP_RES_SEARCH_RESULT:
-			retval = nsdb_parse_result(ld, message, NULL, ldap_err);
+			retval = nsdb_parse_result(ld, message, NULL,
+							&host->fn_ldaperr);
 			break;
 		default:
 			xlog(L_ERROR, "%s: Unrecognized LDAP message type",
@@ -1312,9 +1312,11 @@ nsdb_resolve_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid,
 	 * Caller did not provide an nce.  Generate a list
 	 * of the server's NSDB container entries.
 	 */
-	retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err);
-	if (retval != FEDFS_OK)
+	retval = nsdb_get_naming_contexts_s(host, &contexts);
+	if (retval != FEDFS_OK) {
+		*ldap_err = (unsigned int)nsdb_ldaperr(host);
 		return retval;
+	}
 
 	for (i = 0; contexts[i] != NULL; i++);
 	nce_list = calloc(i + 1, sizeof(char *));
@@ -1627,9 +1629,11 @@ nsdb_get_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid,
 	 * Caller did not provide an nce.  Generate a list
 	 * of the server's NSDB container entries.
 	 */
-	retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err);
-	if (retval != FEDFS_OK)
+	retval = nsdb_get_naming_contexts_s(host, &contexts);
+	if (retval != FEDFS_OK) {
+		*ldap_err = (unsigned int)nsdb_ldaperr(host);
 		return retval;
+	}
 
 	for (i = 0; contexts[i] != NULL; i++);
 	nce_list = calloc(i + 1, sizeof(char *));
@@ -1885,9 +1889,11 @@ nsdb_list_s(nsdb_t host, const char *nce, char ***fsns, unsigned int *ldap_err)
 	 * container entry.  List entries in all discovered NSDB
 	 * containers.
 	 */
-	retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err);
-	if (retval != FEDFS_OK)
+	retval = nsdb_get_naming_contexts_s(host, &contexts);
+	if (retval != FEDFS_OK) {
+		*ldap_err = (unsigned int)nsdb_ldaperr(host);
 		return retval;
+	}
 
 	for (i = 0; contexts[i] != NULL; i++);
 	nce_list = calloc(i + 1, sizeof(char *));
@@ -1990,9 +1996,11 @@ nsdb_ping_nsdb_s(nsdb_t host, unsigned int *ldap_err)
 		return FEDFS_ERR_INVAL;
 	}
 
-	retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err);
-	if (retval != FEDFS_OK)
+	retval = nsdb_get_naming_contexts_s(host, &contexts);
+	if (retval != FEDFS_OK) {
+		*ldap_err = (unsigned int)nsdb_ldaperr(host);
 		return retval;
+	}
 
 	retval = nsdb_ping_contexts_s(host, contexts, ldap_err);
 	nsdb_free_string_array(contexts);
@@ -2119,9 +2127,11 @@ nsdb_find_naming_context_s(nsdb_t host, const char *entry, char **context,
 		return FEDFS_ERR_INVAL;
 	}
 
-	retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err);
-	if (retval != FEDFS_OK)
+	retval = nsdb_get_naming_contexts_s(host, &contexts);
+	if (retval != FEDFS_OK) {
+		*ldap_err = (unsigned int)nsdb_ldaperr(host);
 		return retval;
+	}
 
 	retval = nsdb_match_root_suffix(entry, contexts, context, ldap_err);
 
diff --git a/src/nsdbc/nsdb-list.c b/src/nsdbc/nsdb-list.c
index 68a8d89..bfd15b1 100644
--- a/src/nsdbc/nsdb-list.c
+++ b/src/nsdbc/nsdb-list.c
@@ -204,13 +204,15 @@ nsdb_list_display_nce(nsdb_t host, const char *nce, unsigned int *ldap_err)
 static FedFsStatus
 nsdb_list_display_all_nces(nsdb_t host, unsigned int *ldap_err)
 {
-	FedFsStatus retval;
 	char *dn, **contexts;
+	FedFsStatus retval;
 	int i;
 
-	retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err);
-	if (retval != FEDFS_OK)
+	retval = nsdb_get_naming_contexts_s(host, &contexts);
+	if (retval != FEDFS_OK) {
+		*ldap_err = (unsigned int)nsdb_ldaperr(host);
 		return retval;
+	}
 
 	printf("NSDB: %s:%u\n\n", nsdb_hostname(host), nsdb_port(host));
 
diff --git a/src/nsdbc/nsdb-nces.c b/src/nsdbc/nsdb-nces.c
index 1e3caf1..1b08ccc 100644
--- a/src/nsdbc/nsdb-nces.c
+++ b/src/nsdbc/nsdb-nces.c
@@ -96,7 +96,6 @@ main(int argc, char **argv)
 {
 	char *progname, *nsdbname;
 	unsigned short nsdbport;
-	unsigned int ldap_err;
 	FedFsStatus retval;
 	char **contexts;
 	nsdb_t host;
@@ -189,12 +188,12 @@ main(int argc, char **argv)
 		goto out_free;
 	}
 
-	retval = nsdb_get_naming_contexts_s(host, &contexts, &ldap_err);
+	retval = nsdb_get_naming_contexts_s(host, &contexts);
 	switch (retval) {
 	case FEDFS_OK:
 		break;
 	case FEDFS_ERR_NSDB_LDAP_VAL:
-		switch (ldap_err) {
+		switch (nsdb_ldaperr(host)) {
 		case LDAP_REFERRAL:
 			fprintf(stderr, "Encountered LDAP referral on %s:%u\n",
 				nsdbname, nsdbport);
@@ -205,7 +204,7 @@ main(int argc, char **argv)
 			break;
 		default:
 			fprintf(stderr, "Failed to list NCEs: %s\n",
-				ldap_err2string(ldap_err));
+				nsdb_ldaperr2string(host));
 		}
 		goto out_close;
 	default:




More information about the fedfs-utils-devel mailing list