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

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


Simplify nsdb_get_ncedn_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       |    2 +
 src/libnsdb/fileserver.c |   62 +++++++++++++++++++---------------------------
 src/nsdbc/nsdb-list.c    |    2 +
 src/nsdbc/nsdb-nces.c    |    2 +
 4 files changed, 29 insertions(+), 39 deletions(-)

diff --git a/src/include/nsdb.h b/src/include/nsdb.h
index 56a26a2..5709f0c 100644
--- a/src/include/nsdb.h
+++ b/src/include/nsdb.h
@@ -378,7 +378,7 @@ FedFsStatus	 nsdb_annotation_delete_s(nsdb_t host, const char *dn,
  * NSDB Container Entry enumeration (5.2.1)
  */
 FedFsStatus	 nsdb_get_ncedn_s(nsdb_t host, const char *naming_context,
-				char **dn, unsigned int *ldap_err);
+				char **dn);
 FedFsStatus	 nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts,
 				unsigned int *ldap_err);
 FedFsStatus	 nsdb_find_naming_context_s(nsdb_t host, const char *entry,
diff --git a/src/libnsdb/fileserver.c b/src/libnsdb/fileserver.c
index f6a6e53..efb8c5a 100644
--- a/src/libnsdb/fileserver.c
+++ b/src/libnsdb/fileserver.c
@@ -362,7 +362,6 @@ nsdb_parse_ncedn_entry(LDAP *ld, LDAPMessage *entry, char **dn)
  * @param host an initialized and bound nsdb_t object
  * @param naming_context NUL-terminated C string containing one naming context
  * @param dn OUT: pointer to a NUL-terminated C string containing full DN of NSDB container
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  *
  * Caller must free "dn" with free(3)
@@ -377,18 +376,19 @@ nsdb_parse_ncedn_entry(LDAP *ld, LDAPMessage *entry, char **dn)
  * The full DN for the NSDB container entry is returned in "dn."
  */
 static FedFsStatus
-nsdb_old_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
-		unsigned int *ldap_err)
+nsdb_old_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn)
 {
 	LDAPMessage *response, *message;
 	LDAP *ld = host->fn_ldap;
 	FedFsStatus retval;
 	char *tmp = NULL;
-	int rc, entries;
+	int entries;
 
-	rc = nsdb_search_nsdb_attr_s(ld, naming_context, "(objectClass=*)",
-						"fedfsNceDN", &response);
-	switch (rc) {
+	host->fn_ldaperr = nsdb_search_nsdb_attr_s(ld, naming_context,
+							"(objectClass=*)",
+							"fedfsNceDN",
+							&response);
+	switch (host->fn_ldaperr) {
 	case LDAP_SUCCESS:
 	case LDAP_REFERRAL:
 		break;
@@ -399,8 +399,7 @@ nsdb_old_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
 	default:
 		xlog(D_GENERAL, "%s: Failed to retrieve naming_context "
 			"entry %s: %s", __func__, naming_context,
-			ldap_err2string(rc));
-		*ldap_err = rc;
+			ldap_err2string(host->fn_ldaperr));
 		return FEDFS_ERR_NSDB_LDAP_VAL;
 	}
 	if (response == NULL) {
@@ -428,7 +427,7 @@ nsdb_old_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
 		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",
@@ -500,7 +499,6 @@ out:
  * @param host an initialized and bound nsdb_t object
  * @param naming_context NUL-terminated C string containing one naming context
  * @param dn OUT: pointer to a NUL-terminated C string containing full DN of NSDB container
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  *
  * Caller must free "dn" with free(3)
@@ -515,19 +513,19 @@ out:
  * The full DN for the NSDB container entry is returned in "dn."
  */
 static FedFsStatus
-nsdb_new_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
-		unsigned int *ldap_err)
+nsdb_new_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn)
 {
 	LDAPMessage *response, *message;
 	LDAP *ld = host->fn_ldap;
 	FedFsStatus retval;
-	int rc, entries;
 	unsigned count;
+	int entries;
 
-	rc = nsdb_search_nsdb_all_s(ld, naming_context, LDAP_SCOPE_SUBTREE,
+	host->fn_ldaperr = nsdb_search_nsdb_all_s(ld, naming_context,
+					LDAP_SCOPE_SUBTREE,
 					"(objectClass=fedfsNsdbContainerEntry)",
 					&response);
-	switch (rc) {
+	switch (host->fn_ldaperr) {
 	case LDAP_SUCCESS:
 	case LDAP_REFERRAL:
 		break;
@@ -538,8 +536,7 @@ nsdb_new_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
 	default:
 		xlog(D_GENERAL, "%s: Failed to retrieve naming_context "
 			"entry %s: %s", __func__, naming_context,
-			ldap_err2string(rc));
-		*ldap_err = rc;
+			ldap_err2string(host->fn_ldaperr));
 		return FEDFS_ERR_NSDB_LDAP_VAL;
 	}
 	if (response == NULL) {
@@ -575,7 +572,7 @@ nsdb_new_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
 		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",
@@ -595,14 +592,12 @@ out:
  * @param host an initialized and bound nsdb_t object
  * @param naming_context NUL-terminated C string containing one naming context
  * @param dn OUT: pointer to a NUL-terminated C string containing full DN of NSDB container
- * @param ldap_err OUT: possibly an LDAP error code
  * @return a FedFsStatus code
  *
  * Caller must free "dn" with free(3)
  */
 FedFsStatus
-nsdb_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
-		unsigned int *ldap_err)
+nsdb_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn)
 {
 	FedFsStatus retval;
 
@@ -616,15 +611,14 @@ nsdb_get_ncedn_s(nsdb_t host, const char *naming_context, char **dn,
 		return FEDFS_ERR_INVAL;
 	}
 
-	if (dn == NULL || ldap_err == NULL) {
+	if (dn == NULL) {
 		xlog(L_ERROR, "%s: Invalid parameter", __func__);
 		return FEDFS_ERR_INVAL;
 	}
 
-	retval = nsdb_new_get_ncedn_s(host, naming_context, dn, ldap_err);
+	retval = nsdb_new_get_ncedn_s(host, naming_context, dn);
 	if (retval != FEDFS_OK)
-		retval = nsdb_old_get_ncedn_s(host, naming_context,
-							dn, ldap_err);
+		retval = nsdb_old_get_ncedn_s(host, naming_context, dn);
 	return retval;
 }
 
@@ -1333,8 +1327,7 @@ nsdb_resolve_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid,
 	 * Query only naming contexts that have an NCE prefix
 	 */
 	for (i = 0, j = 0; contexts[i] != NULL; i++) {
-		retval = nsdb_get_ncedn_s(host, contexts[i],
-						&nce_list[j], ldap_err);
+		retval = nsdb_get_ncedn_s(host, contexts[i], &nce_list[j]);
 		if (retval == FEDFS_OK)
 			j++;
 	}
@@ -1649,8 +1642,7 @@ nsdb_get_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid,
 	 * Query only naming contexts that have an NCE prefix
 	 */
 	for (i = 0, j = 0; contexts[i] != NULL; i++) {
-		retval = nsdb_get_ncedn_s(host, contexts[i],
-						&nce_list[j], ldap_err);
+		retval = nsdb_get_ncedn_s(host, contexts[i], &nce_list[j]);
 		if (retval == FEDFS_OK)
 			j++;
 	}
@@ -1908,8 +1900,7 @@ nsdb_list_s(nsdb_t host, const char *nce, char ***fsns, unsigned int *ldap_err)
 	 * List only naming contexts that have an NCE prefix
 	 */
 	for (i = 0, j = 0; contexts[i] != NULL; i++) {
-		retval = nsdb_get_ncedn_s(host, contexts[i],
-						&nce_list[j], ldap_err);
+		retval = nsdb_get_ncedn_s(host, contexts[i], &nce_list[j]);
 		if (retval == FEDFS_OK)
 			j++;
 	}
@@ -1943,23 +1934,22 @@ out:
 static FedFsStatus
 nsdb_ping_contexts_s(nsdb_t host, char **contexts, unsigned int *ldap_err)
 {
-	unsigned int ldap_result;
 	FedFsStatus retval;
 	char *dn;
 	int i;
 
 	retval = FEDFS_ERR_NSDB_RESPONSE;
 	for (i = 0; contexts[i] != NULL; i++) {
-		retval = nsdb_get_ncedn_s(host, contexts[i], &dn, &ldap_result);
+		retval = nsdb_get_ncedn_s(host, contexts[i], &dn);
 		switch (retval) {
 		case FEDFS_OK:
 			free(dn);
 			goto out;
 		case FEDFS_ERR_NSDB_LDAP_VAL:
-			if (ldap_result == LDAP_CONFIDENTIALITY_REQUIRED)
+			if (nsdb_ldaperr(host) == LDAP_CONFIDENTIALITY_REQUIRED)
 				retval = FEDFS_ERR_NSDB_AUTH;
 			else
-				*ldap_err = ldap_result;
+				*ldap_err = (unsigned int)nsdb_ldaperr(host);
 			goto out;
 		default:
 			retval = FEDFS_ERR_NSDB_NONCE;
diff --git a/src/nsdbc/nsdb-list.c b/src/nsdbc/nsdb-list.c
index 5cc20a7..68a8d89 100644
--- a/src/nsdbc/nsdb-list.c
+++ b/src/nsdbc/nsdb-list.c
@@ -216,7 +216,7 @@ nsdb_list_display_all_nces(nsdb_t host, unsigned int *ldap_err)
 
 	retval = FEDFS_ERR_NSDB_NONCE;
 	for (i = 0; contexts[i] != NULL; i++) {
-		retval = nsdb_get_ncedn_s(host, contexts[i], &dn, ldap_err);
+		retval = nsdb_get_ncedn_s(host, contexts[i], &dn);
 		if (retval == FEDFS_OK) {
 			retval = nsdb_list_display_one_nce(host, dn, ldap_err);
 			free(dn);
diff --git a/src/nsdbc/nsdb-nces.c b/src/nsdbc/nsdb-nces.c
index f7b405c..1e3caf1 100644
--- a/src/nsdbc/nsdb-nces.c
+++ b/src/nsdbc/nsdb-nces.c
@@ -219,7 +219,7 @@ main(int argc, char **argv)
 	for (i = 0; contexts[i] != NULL; i++) {
 		char *dn;
 
-		retval = nsdb_get_ncedn_s(host, contexts[i], &dn, &ldap_err);
+		retval = nsdb_get_ncedn_s(host, contexts[i], &dn);
 		printf("  namingContext '%s' ", contexts[i]);
 		if (retval == FEDFS_OK) {
 			printf("hosts an NCE at '%s'.\n", dn);




More information about the fedfs-utils-devel mailing list