[fedfs-utils] [PATCH 10/17] libnsdb: Remove *ldaperr argument from nsdb_list API

Chuck Lever chuck.lever at oracle.com
Thu Jan 2 12:28:18 PST 2014


Simplify the external libnsdb API by removing the *ldaperr argument
from nsdb_list_s() and friends.  When it is needed, the ldaperr
value can be extracted with the new nsdb_ldaperr() function.

Signed-off-by: Chuck Lever <chuck.lever at oracle.com>
---
 src/include/nsdb.h       |    3 +--
 src/libnsdb/fileserver.c |   29 +++++++++++------------------
 src/nsdbc/nsdb-list.c    |   28 +++++++++++-----------------
 3 files changed, 23 insertions(+), 37 deletions(-)

diff --git a/src/include/nsdb.h b/src/include/nsdb.h
index 3a183c2..2aafcb5 100644
--- a/src/include/nsdb.h
+++ b/src/include/nsdb.h
@@ -400,8 +400,7 @@ FedFsStatus	 nsdb_get_fsn_s(nsdb_t host, const char *nce,
 /**
  * Enumerate FSNs
  */
-FedFsStatus	 nsdb_list_s(nsdb_t host, const char *nce, char ***fsns,
-				unsigned int *ldap_err);
+FedFsStatus	 nsdb_list_s(nsdb_t host, const char *nce, char ***fsns);
 
 /**
  * Ping an NSDB host
diff --git a/src/libnsdb/fileserver.c b/src/libnsdb/fileserver.c
index 0ad9a35..222b47a 100644
--- a/src/libnsdb/fileserver.c
+++ b/src/libnsdb/fileserver.c
@@ -1754,7 +1754,6 @@ nsdb_parse_fsn_entry(LDAP *ld, LDAPMessage *entry, char ***fsns)
  * @param host an initialized and bound nsdb_t object
  * @param nce a NUL-terminated C string containing the DN of the NSDB container
  * @param fsns OUT: pointer to an array of NUL-terminated C strings containing FSN UUIDs
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  *
  * ldapsearch equivalent:
@@ -1765,18 +1764,17 @@ nsdb_parse_fsn_entry(LDAP *ld, LDAPMessage *entry, char ***fsns)
    @endverbatim
  */
 static FedFsStatus
-nsdb_list_find_entries_s(nsdb_t host, const char *nce, char ***fsns,
-		unsigned int *ldap_err)
+nsdb_list_find_entries_s(nsdb_t host, const char *nce, char ***fsns)
 {
 	LDAPMessage *response, *message;
 	LDAP *ld = host->fn_ldap;
 	FedFsStatus retval;
-	int rc, entries;
+	int entries;
 	char **tmp;
 
-	rc = nsdb_search_nsdb_all_s(ld, nce, LDAP_SCOPE_ONE,
+	host->fn_ldaperr = nsdb_search_nsdb_all_s(ld, nce, LDAP_SCOPE_ONE,
 					"(objectClass=fedfsFsn)", &response);
-	switch (rc) {
+	switch (host->fn_ldaperr) {
 	case LDAP_SUCCESS:
 	case LDAP_REFERRAL:
 		break;
@@ -1786,8 +1784,7 @@ nsdb_list_find_entries_s(nsdb_t host, const char *nce, char ***fsns,
 		return FEDFS_ERR_NSDB_NOFSN;
 	default:
 		xlog(D_GENERAL, "%s: LDAP search failed: %s\n",
-			__func__, ldap_err2string(rc));
-		*ldap_err = rc;
+			__func__, ldap_err2string(host->fn_ldaperr));
 		return FEDFS_ERR_NSDB_LDAP_VAL;
 	}
 	if (response == NULL) {
@@ -1822,7 +1819,7 @@ nsdb_list_find_entries_s(nsdb_t host, const char *nce, char ***fsns,
 		case LDAP_RES_SEARCH_RESULT:
 			retval = nsdb_parse_result(ld, message,
 							&host->fn_referrals,
-							ldap_err);
+							&host->fn_ldaperr);
 			break;
 		default:
 			xlog(L_ERROR, "%s: Unrecognized LDAP message type",
@@ -1854,13 +1851,12 @@ out:
  * @param host an initialized and bound nsdb_t object
  * @param nce a NUL-terminated C string containing DN of NSDB container entry
  * @param fsns OUT: pointer to an array of NUL-terminated C strings containing FSN UUIDs
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  *
  * If caller did not provide an NCE, discover one by querying the NSDB.
  */
 FedFsStatus
-nsdb_list_s(nsdb_t host, const char *nce, char ***fsns, unsigned int *ldap_err)
+nsdb_list_s(nsdb_t host, const char *nce, char ***fsns)
 {
 	char **contexts, **nce_list;
 	FedFsStatus retval;
@@ -1876,13 +1872,13 @@ nsdb_list_s(nsdb_t host, const char *nce, char ***fsns, unsigned int *ldap_err)
 		return FEDFS_ERR_INVAL;
 	}
 
-	if (fsns == NULL || ldap_err == NULL) {
+	if (fsns == NULL) {
 		xlog(L_ERROR, "%s: Invalid parameter", __func__);
 		return FEDFS_ERR_INVAL;
 	}
 
 	if (nce != NULL)
-		return nsdb_list_find_entries_s(host, nce, fsns, ldap_err);
+		return nsdb_list_find_entries_s(host, nce, fsns);
 
 	/*
 	 * Caller did not provide an nce.  Discover the server's NSDB
@@ -1890,10 +1886,8 @@ nsdb_list_s(nsdb_t host, const char *nce, char ***fsns, unsigned int *ldap_err)
 	 * containers.
 	 */
 	retval = nsdb_get_naming_contexts_s(host, &contexts);
-	if (retval != FEDFS_OK) {
-		*ldap_err = (unsigned int)nsdb_ldaperr(host);
+	if (retval != FEDFS_OK)
 		return retval;
-	}
 
 	for (i = 0; contexts[i] != NULL; i++);
 	nce_list = calloc(i + 1, sizeof(char *));
@@ -1914,8 +1908,7 @@ nsdb_list_s(nsdb_t host, const char *nce, char ***fsns, unsigned int *ldap_err)
 		goto out;
 
 	for (j = 0; nce_list[j] != NULL; j++) {
-		retval = nsdb_list_find_entries_s(host, nce_list[j],
-						fsns, ldap_err);
+		retval = nsdb_list_find_entries_s(host, nce_list[j], fsns);
 		if (retval == FEDFS_OK)
 			break;
 	}
diff --git a/src/nsdbc/nsdb-list.c b/src/nsdbc/nsdb-list.c
index bfd15b1..43f3410 100644
--- a/src/nsdbc/nsdb-list.c
+++ b/src/nsdbc/nsdb-list.c
@@ -145,17 +145,16 @@ nsdb_list_resolve_and_display_fsn(nsdb_t host, const char *nce, const char *fsn_
  *
  * @param host an initialized and bound nsdb_t object
  * @param nce a NUL-terminated C string containing DN of NSDB container entry
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  */
 static FedFsStatus
-nsdb_list_display_one_nce(nsdb_t host, const char *nce, unsigned int *ldap_err)
+nsdb_list_display_one_nce(nsdb_t host, const char *nce)
 {
 	FedFsStatus retval;
 	char **fsns;
 	int i;
 
-	retval = nsdb_list_s(host, nce, &fsns, ldap_err);
+	retval = nsdb_list_s(host, nce, &fsns);
 	switch (retval) {
 	case FEDFS_OK:
 		printf("  NCE: %s\n\n", nce);
@@ -183,14 +182,13 @@ nsdb_list_display_one_nce(nsdb_t host, const char *nce, unsigned int *ldap_err)
  *
  * @param host an initialized and bound nsdb_t object
  * @param nce a NUL-terminated C string containing DN of NSDB container entry
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  */
 static FedFsStatus
-nsdb_list_display_nce(nsdb_t host, const char *nce, unsigned int *ldap_err)
+nsdb_list_display_nce(nsdb_t host, const char *nce)
 {
 	printf("NSDB: %s:%u\n\n", nsdb_hostname(host), nsdb_port(host));
-	return nsdb_list_display_one_nce(host, nce, ldap_err);
+	return nsdb_list_display_one_nce(host, nce);
 
 }
 
@@ -198,21 +196,18 @@ nsdb_list_display_nce(nsdb_t host, const char *nce, unsigned int *ldap_err)
  * Display FSNs under all NCEs, with header
  *
  * @param host an initialized and bound nsdb_t object
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  */
 static FedFsStatus
-nsdb_list_display_all_nces(nsdb_t host, unsigned int *ldap_err)
+nsdb_list_display_all_nces(nsdb_t host)
 {
 	char *dn, **contexts;
 	FedFsStatus retval;
 	int i;
 
 	retval = nsdb_get_naming_contexts_s(host, &contexts);
-	if (retval != FEDFS_OK) {
-		*ldap_err = (unsigned int)nsdb_ldaperr(host);
+	if (retval != FEDFS_OK)
 		return retval;
-	}
 
 	printf("NSDB: %s:%u\n\n", nsdb_hostname(host), nsdb_port(host));
 
@@ -220,7 +215,7 @@ nsdb_list_display_all_nces(nsdb_t host, unsigned int *ldap_err)
 	for (i = 0; contexts[i] != NULL; i++) {
 		retval = nsdb_get_ncedn_s(host, contexts[i], &dn);
 		if (retval == FEDFS_OK) {
-			retval = nsdb_list_display_one_nce(host, dn, ldap_err);
+			retval = nsdb_list_display_one_nce(host, dn);
 			free(dn);
 			if (retval != FEDFS_OK)
 				break;
@@ -289,7 +284,6 @@ main(int argc, char **argv)
 {
 	char *progname, *nsdbname;
 	unsigned short nsdbport;
-	unsigned int ldap_err;
 	FedFsStatus retval;
 	nsdb_t host;
 	char *nce;
@@ -387,11 +381,11 @@ again:
 	}
 
 	if (nce != NULL)
-		retval = nsdb_list_display_nce(host, nce, &ldap_err);
+		retval = nsdb_list_display_nce(host, nce);
 	else
-		retval = nsdb_list_display_all_nces(host, &ldap_err);
+		retval = nsdb_list_display_all_nces(host);
 	if (retval == FEDFS_ERR_NSDB_LDAP_VAL) {
-		switch (ldap_err) {
+		switch (nsdb_ldaperr(host)) {
 		case LDAP_REFERRAL:
 			retval = nsdb_list_follow_ldap_referral(&host);
 			if (retval == FEDFS_OK)
@@ -403,7 +397,7 @@ again:
 			break;
 		default:
 			fprintf(stderr, "Failed to list FSNs: %s\n",
-				ldap_err2string(ldap_err));
+				nsdb_ldaperr2string(host));
 		}
 	}
 




More information about the fedfs-utils-devel mailing list