Simplify the FSN resolution API by removing the *ldaperr argument. When it is needed, the ldaperr value can be extracted with the new nsdb_ldaperr() function.
Signed-off-by: Chuck Lever <[email protected]> --- src/fedfsd/svc.c | 9 +++--- src/include/nsdb.h | 6 +--- src/libnsdb/fileserver.c | 62 ++++++++++++++++++------------------------ src/nfsref/lookup.c | 11 +++---- src/nsdbc/nsdb-list.c | 5 +-- src/nsdbc/nsdb-resolve-fsn.c | 13 ++++----- src/plug-ins/nfs-plugin.c | 11 +++---- 7 files changed, 50 insertions(+), 67 deletions(-) diff --git a/src/fedfsd/svc.c b/src/fedfsd/svc.c index e531f3f..c02daad 100644 --- a/src/fedfsd/svc.c +++ b/src/fedfsd/svc.c @@ -849,7 +849,6 @@ fedfsd_prepare_fedfsfsl_array(const struct fedfs_fsl *fsls, static void fedfsd_svc_lookup_junction_1(SVCXPRT *xprt) { - unsigned int ldap_err = 0; FedFsLookupRes result; FedFsLookupResOk *resok = &result.FedFsLookupRes_u.resok; FedFsLookupArgs args; @@ -922,11 +921,11 @@ again: if (result.status != FEDFS_OK) break; - result.status = nsdb_resolve_fsn_s(host, NULL, fsn_uuid, - &fsls, &ldap_err); + result.status = nsdb_resolve_fsn_s(host, NULL, fsn_uuid, &fsls); if (result.status == FEDFS_ERR_NSDB_LDAP_VAL) { - if (ldap_err != LDAP_REFERRAL) { - result.FedFsLookupRes_u.ldapResultCode = ldap_err; + if (nsdb_ldaperr(host) != LDAP_REFERRAL) { + result.FedFsLookupRes_u.ldapResultCode = + nsdb_ldaperr(host); nsdb_close_nsdb(host); break; } diff --git a/src/include/nsdb.h b/src/include/nsdb.h index 2aafcb5..ea765f7 100644 --- a/src/include/nsdb.h +++ b/src/include/nsdb.h @@ -387,11 +387,9 @@ FedFsStatus nsdb_find_naming_context_s(nsdb_t host, const char *entry, * Resolve an FSN (5.2.2) */ FedFsStatus nsdb_resolve_fsn_s(nsdb_t host, const char *nce, - const char *fsn_uuid, struct fedfs_fsl **fsls, - unsigned int *ldap_err); + const char *fsn_uuid, struct fedfs_fsl **fsls); FedFsStatus nsdb_get_fsn_s(nsdb_t host, const char *nce, - const char *fsn_uuid, struct fedfs_fsn **fsn, - unsigned int *ldap_err); + const char *fsn_uuid, struct fedfs_fsn **fsn); /** ** NSDB fileserver operations defined by this implementation diff --git a/src/libnsdb/fileserver.c b/src/libnsdb/fileserver.c index 222b47a..db443a6 100644 --- a/src/libnsdb/fileserver.c +++ b/src/libnsdb/fileserver.c @@ -1165,7 +1165,6 @@ nsdb_resolve_fsn_parse_entry(LDAP *ld, LDAPMessage *entry, * @param nce a NUL-terminated C string containing DN of NSDB container entry * @param fsn_uuid a NUL-terminated C string containing FSN UUID * @param fsls OUT: a list of fedfs_fsl structures - * @param ldap_err OUT: possibly an LDAP error code * @return a FedFsStatus code * * ldapsearch equivalent: @@ -1177,13 +1176,13 @@ nsdb_resolve_fsn_parse_entry(LDAP *ld, LDAPMessage *entry, */ static FedFsStatus nsdb_resolve_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid, - struct fedfs_fsl **fsls, unsigned int *ldap_err) + struct fedfs_fsl **fsls) { LDAPMessage *response, *message; LDAP *ld = host->fn_ldap; struct fedfs_fsl *tmp; - int len, rc, entries; FedFsStatus retval; + int len, entries; char *filter; filter = malloc(128); @@ -1200,10 +1199,11 @@ nsdb_resolve_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid return FEDFS_ERR_INVAL; } - rc = nsdb_search_nsdb_all_s(ld, nce, LDAP_SCOPE_SUBTREE, - filter, &response); + host->fn_ldaperr = nsdb_search_nsdb_all_s(ld, nce, + LDAP_SCOPE_SUBTREE, + filter, &response); free(filter); - switch (rc) { + switch (host->fn_ldaperr) { case LDAP_SUCCESS: case LDAP_REFERRAL: break; @@ -1213,8 +1213,7 @@ nsdb_resolve_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid return FEDFS_ERR_NSDB_NOFSN; 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) { @@ -1243,7 +1242,7 @@ nsdb_resolve_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid 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", @@ -1274,7 +1273,6 @@ nsdb_resolve_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid * @param nce a NUL-terminated C string containing DN of NSDB container entry * @param fsn_uuid a NUL-terminated C string containing FSN UUID * @param fsls OUT: a list of fedfs_fsl structures - * @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. @@ -1283,7 +1281,7 @@ nsdb_resolve_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid */ FedFsStatus nsdb_resolve_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid, - struct fedfs_fsl **fsls, unsigned int *ldap_err) + struct fedfs_fsl **fsls) { char **contexts, **nce_list; FedFsStatus retval; @@ -1299,24 +1297,22 @@ nsdb_resolve_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid, return FEDFS_ERR_INVAL; } - if (fsls == NULL || ldap_err == NULL) { + if (fsls == NULL) { xlog(L_ERROR, "%s: Invalid parameter", __func__); return FEDFS_ERR_INVAL; } if (nce != NULL) return nsdb_resolve_fsn_find_entry_s(host, nce, - fsn_uuid, fsls, ldap_err); + fsn_uuid, fsls); /* * Caller did not provide an nce. Generate a list * of the server's NSDB container entries. */ 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 *)); @@ -1338,8 +1334,7 @@ nsdb_resolve_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid, for (j = 0; nce_list[j] != NULL; j++) { retval = nsdb_resolve_fsn_find_entry_s(host, nce_list[j], - fsn_uuid, fsls, - ldap_err); + fsn_uuid, fsls); if (retval == FEDFS_OK) break; } @@ -1488,7 +1483,6 @@ nsdb_get_fsn_parse_entry(LDAP *ld, LDAPMessage *entry, * @param nce a NUL-terminated C string containing DN of NSDB container entry * @param fsn_uuid a NUL-terminated C string containing FSN UUID * @param fsn OUT: a fedfs_fsn structures - * @param ldap_err OUT: possibly an LDAP error code * @return a FedFsStatus code * * Caller must free the returned "fsn" using nsdb_free_fedfs_fsn(). @@ -1502,13 +1496,13 @@ nsdb_get_fsn_parse_entry(LDAP *ld, LDAPMessage *entry, */ static FedFsStatus nsdb_get_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid, - struct fedfs_fsn **fsn, unsigned int *ldap_err) + struct fedfs_fsn **fsn) { LDAPMessage *response, *message; LDAP *ld = host->fn_ldap; struct fedfs_fsn *tmp; - int len, rc, entries; FedFsStatus retval; + int len, entries; char *filter; filter = malloc(128); @@ -1525,9 +1519,10 @@ nsdb_get_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid, return FEDFS_ERR_INVAL; } - rc = nsdb_search_nsdb_all_s(ld, nce, LDAP_SCOPE_ONE, filter, &response); + host->fn_ldaperr = nsdb_search_nsdb_all_s(ld, nce, LDAP_SCOPE_ONE, + filter, &response); free(filter); - switch (rc) { + switch (host->fn_ldaperr) { case LDAP_SUCCESS: case LDAP_REFERRAL: break; @@ -1537,8 +1532,7 @@ nsdb_get_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid, return FEDFS_ERR_NSDB_NOFSN; 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) { @@ -1566,7 +1560,7 @@ nsdb_get_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid, 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", @@ -1591,7 +1585,6 @@ nsdb_get_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid, * @param nce a NUL-terminated C string containing DN of NSDB container entry * @param fsn_uuid a NUL-terminated C string containing FSN UUID * @param fsn OUT: a fedfs_fsn structures - * @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. @@ -1600,7 +1593,7 @@ nsdb_get_fsn_find_entry_s(nsdb_t host, const char *nce, const char *fsn_uuid, */ FedFsStatus nsdb_get_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid, - struct fedfs_fsn **fsn, unsigned int *ldap_err) + struct fedfs_fsn **fsn) { char **contexts, **nce_list; FedFsStatus retval; @@ -1616,24 +1609,21 @@ nsdb_get_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid, return FEDFS_ERR_INVAL; } - if (fsn == NULL || ldap_err == NULL) { + if (fsn == NULL) { xlog(L_ERROR, "%s: Invalid parameter", __func__); return FEDFS_ERR_INVAL; } if (nce != NULL) - return nsdb_get_fsn_find_entry_s(host, nce, fsn_uuid, - fsn, ldap_err); + return nsdb_get_fsn_find_entry_s(host, nce, fsn_uuid, fsn); /* * Caller did not provide an nce. Generate a list * of the server's NSDB container entries. */ 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 *)); @@ -1654,8 +1644,8 @@ nsdb_get_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid, goto out; for (j = 0; nce_list[j] != NULL; j++) { - retval = nsdb_get_fsn_find_entry_s(host, nce_list[j], fsn_uuid, - fsn, ldap_err); + retval = nsdb_get_fsn_find_entry_s(host, nce_list[j], + fsn_uuid, fsn); if (retval == FEDFS_OK) break; } diff --git a/src/nfsref/lookup.c b/src/nfsref/lookup.c index 273663b..5f1442e 100644 --- a/src/nfsref/lookup.c +++ b/src/nfsref/lookup.c @@ -345,7 +345,6 @@ nfsref_lookup_resolve_fsn(const char *fsn_uuid, nsdb_t host) int status = EXIT_FAILURE; struct fedfs_fsl *fsls; struct fedfs_fsn *fsn; - unsigned int ldap_err; FedFsStatus retval; int fsn_ttl; @@ -378,7 +377,7 @@ again: } - retval = nsdb_get_fsn_s(host, NULL, fsn_uuid, &fsn, &ldap_err); + retval = nsdb_get_fsn_s(host, NULL, fsn_uuid, &fsn); switch (retval) { case FEDFS_OK: fsn_ttl = fsn->fn_fsnttl; @@ -390,7 +389,7 @@ again: goto out_close; case FEDFS_ERR_NSDB_LDAP_VAL: xlog(L_ERROR, "%s: NSDB operation failed with %s", - __func__, ldap_err2string(ldap_err)); + __func__, nsdb_ldaperr2string(host)); goto out_close; default: xlog(L_ERROR, "%s: Failed to retrieve FSN %s: %s", @@ -398,7 +397,7 @@ again: goto out_close; } - retval = nsdb_resolve_fsn_s(host, NULL, fsn_uuid, &fsls, &ldap_err); + retval = nsdb_resolve_fsn_s(host, NULL, fsn_uuid, &fsls); switch (retval) { case FEDFS_OK: printf("fedfsFsnUuid:\t%s\n", fsn_uuid); @@ -419,7 +418,7 @@ again: __func__, fsn_uuid); break; case FEDFS_ERR_NSDB_LDAP_VAL: - switch (ldap_err) { + switch (nsdb_ldaperr(host)) { case LDAP_REFERRAL: retval = nfsref_lookup_follow_ldap_referral(&host); if (retval == FEDFS_OK) @@ -431,7 +430,7 @@ again: break; default: xlog(L_ERROR, "%s: NSDB operation failed with %s", - __func__, ldap_err2string(ldap_err)); + __func__, nsdb_ldaperr2string(host)); } break; default: diff --git a/src/nsdbc/nsdb-list.c b/src/nsdbc/nsdb-list.c index 43f3410..a24d133 100644 --- a/src/nsdbc/nsdb-list.c +++ b/src/nsdbc/nsdb-list.c @@ -114,12 +114,11 @@ static void nsdb_list_resolve_and_display_fsn(nsdb_t host, const char *nce, const char *fsn_uuid) { struct fedfs_fsl *fsls; - unsigned int ldap_err; FedFsStatus retval; printf(" FSN UUID: %s\n", fsn_uuid); - retval = nsdb_resolve_fsn_s(host, nce, fsn_uuid, &fsls, &ldap_err); + retval = nsdb_resolve_fsn_s(host, nce, fsn_uuid, &fsls); switch (retval) { case FEDFS_OK: nsdb_list_display_fsls(fsls); @@ -130,7 +129,7 @@ nsdb_list_resolve_and_display_fsn(nsdb_t host, const char *nce, const char *fsn_ break; case FEDFS_ERR_NSDB_LDAP_VAL: fprintf(stderr, "NSDB LDAP error: %s\n", - ldap_err2string(ldap_err)); + nsdb_ldaperr2string(host)); break; default: fprintf(stderr, "Failed to resolve FSN UUID %s: %s\n", diff --git a/src/nsdbc/nsdb-resolve-fsn.c b/src/nsdbc/nsdb-resolve-fsn.c index 6baac28..ed8549d 100644 --- a/src/nsdbc/nsdb-resolve-fsn.c +++ b/src/nsdbc/nsdb-resolve-fsn.c @@ -250,7 +250,6 @@ main(int argc, char **argv) unsigned short nsdbport; struct fedfs_fsl *fsls; struct fedfs_fsn *fsn; - unsigned int ldap_err; char *nce, *fsn_uuid; FedFsStatus retval; int fsn_ttl, arg; @@ -358,7 +357,7 @@ again: goto out_free; } - retval = nsdb_get_fsn_s(host, nce, fsn_uuid, &fsn, &ldap_err); + retval = nsdb_get_fsn_s(host, nce, fsn_uuid, &fsn); switch (retval) { case FEDFS_OK: fsn_ttl = fsn->fn_fsnttl; @@ -375,7 +374,7 @@ again: fprintf(stderr, "Failed to find FSN %s\n", fsn_uuid); goto out_close; case FEDFS_ERR_NSDB_LDAP_VAL: - switch (ldap_err) { + switch (nsdb_ldaperr(host)) { case LDAP_REFERRAL: retval = nsdb_resolve_fsn_follow_ldap_referral(&host); if (retval == FEDFS_OK) @@ -387,7 +386,7 @@ again: break; default: fprintf(stderr, "NSDB LDAP error: %s\n", - ldap_err2string(ldap_err)); + nsdb_ldaperr2string(host)); } goto out_close; default: @@ -397,7 +396,7 @@ again: goto out_close; } - retval = nsdb_resolve_fsn_s(host, nce, fsn_uuid, &fsls, &ldap_err); + retval = nsdb_resolve_fsn_s(host, nce, fsn_uuid, &fsls); switch (retval) { case FEDFS_OK: printf("For FSN UUID: %s\n", fsn_uuid); @@ -421,14 +420,14 @@ again: fprintf(stderr, "Failed to find FSN %s\n", fsn_uuid); break; case FEDFS_ERR_NSDB_LDAP_VAL: - if (ldap_err == LDAP_REFERRAL) { + if (nsdb_ldaperr(host) == LDAP_REFERRAL) { retval = nsdb_resolve_fsn_follow_ldap_referral(&host); if (retval != FEDFS_OK) break; goto again; } fprintf(stderr, "NSDB LDAP error: %s\n", - ldap_err2string(ldap_err)); + nsdb_ldaperr2string(host)); break; default: fprintf(stderr, "FedFsStatus code " diff --git a/src/plug-ins/nfs-plugin.c b/src/plug-ins/nfs-plugin.c index 25e97e2..f214c09 100644 --- a/src/plug-ins/nfs-plugin.c +++ b/src/plug-ins/nfs-plugin.c @@ -390,7 +390,6 @@ nfs_jp_resolve_fsn(const char *fsn_uuid, nsdb_t host, enum jp_status status = JP_NSDBREMOTE; struct fedfs_fsl *fsls; struct fedfs_fsn *fsn; - unsigned int ldap_err; FedFsStatus retval; int fsn_ttl; @@ -419,7 +418,7 @@ again: return JP_NSDBLOCAL; } - retval = nsdb_get_fsn_s(host, NULL, fsn_uuid, &fsn, &ldap_err); + retval = nsdb_get_fsn_s(host, NULL, fsn_uuid, &fsn); switch (retval) { case FEDFS_OK: fsn_ttl = fsn->fn_fsnttl; @@ -434,7 +433,7 @@ again: __func__, fsn_uuid); goto out_close; case FEDFS_ERR_NSDB_LDAP_VAL: - switch (ldap_err) { + switch (nsdb_ldaperr(host)) { case LDAP_REFERRAL: retval = nfs_jp_follow_ldap_referral(&host); if (retval == FEDFS_OK) @@ -446,7 +445,7 @@ again: break; default: nfs_jp_debug("%s: NSDB operation failed with %s\n", - __func__, ldap_err2string(ldap_err)); + __func__, nsdb_ldaperr2string(host)); } goto out_close; default: @@ -455,7 +454,7 @@ again: goto out_close; } - retval = nsdb_resolve_fsn_s(host, NULL, fsn_uuid, &fsls, &ldap_err); + retval = nsdb_resolve_fsn_s(host, NULL, fsn_uuid, &fsls); switch (retval) { case FEDFS_OK: status = nfs_jp_convert_fedfs_fsls(fsls, new); @@ -475,7 +474,7 @@ again: break; case FEDFS_ERR_NSDB_LDAP_VAL: nfs_jp_debug("%s: NSDB operation failed with %s\n", - __func__, ldap_err2string(ldap_err)); + __func__, nsdb_ldaperr2string(host)); break; default: nfs_jp_debug("%s: Failed to resolve FSN %s: %s\n", _______________________________________________ fedfs-utils-devel mailing list [email protected] https://oss.oracle.com/mailman/listinfo/fedfs-utils-devel
