The output of nsdb-list assumes an NSDB has just one NCE. It may have more than one, so list the FSN's by NCE.
Signed-off-by: Chuck Lever <[email protected]> --- doc/man/nsdb-list.8 | 14 +++-- src/nsdbc/nsdb-list.c | 137 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 108 insertions(+), 43 deletions(-) diff --git a/doc/man/nsdb-list.8 b/doc/man/nsdb-list.8 index bd125e0..11f993f 100644 --- a/doc/man/nsdb-list.8 +++ b/doc/man/nsdb-list.8 @@ -202,17 +202,19 @@ is an NSDB. Use: .sp $ nsdb-list -l ldap.example.net -e o=fedfs .br -NSDB: ldap.example.net:389, o=fedfs -.br - FSN UUID: dc25a644-06e4-11e0-ae55-000c29dc7f8a +NSDB: ldap.example.net:389 +.sp + NCE: o=fedfs +.sp + FSN UUID: c1c21720-1fcd-4ad6-a837-f57af4cf2972 .br - FSL UUID: f4e88676-06f6-11e0-96ca-000c29dc7f8a + FSL UUID: 4c887035-ad2f-4ba8-ab75-7118df9714cd .br - FSL UUID: 4d2da352-06f2-11e0-a4c7-000c29dc7f8a + FSL UUID: 84445758-b5fb-4acc-814b-cc121b3bafe9 .sp .RE There is a single file set name, with two file set location records, -registered on this NSDB. +registered under "o=fedfs" on this NSDB. To resolve the listed FSN UUID, use the .BR nsdb-resolve-junction (8) command. diff --git a/src/nsdbc/nsdb-list.c b/src/nsdbc/nsdb-list.c index 72b05a2..02c9c09 100644 --- a/src/nsdbc/nsdb-list.c +++ b/src/nsdbc/nsdb-list.c @@ -99,7 +99,7 @@ static void nsdb_list_display_fsls(struct fedfs_fsl *fsls) { for ( ; fsls != NULL; fsls = fsls->fl_next) { - printf(" FSL UUID: %s\n", fsls->fl_fsluuid); + printf(" FSL UUID: %s\n", fsls->fl_fsluuid); } } @@ -117,7 +117,7 @@ nsdb_list_resolve_and_display_fsn(nsdb_t host, const char *nce, const char *fsn_ unsigned int ldap_err; FedFsStatus retval; - printf(" FSN UUID: %s\n", fsn_uuid); + printf(" FSN UUID: %s\n", fsn_uuid); retval = nsdb_resolve_fsn_s(host, nce, fsn_uuid, &fsls, &ldap_err); switch (retval) { @@ -126,15 +126,14 @@ nsdb_list_resolve_and_display_fsn(nsdb_t host, const char *nce, const char *fsn_ nsdb_free_fedfs_fsls(fsls); break; case FEDFS_ERR_NSDB_NOFSL: - printf(" No FSL entries found\n"); + printf(" No FSL entries found\n"); break; case FEDFS_ERR_NSDB_LDAP_VAL: - fprintf(stderr, " NSDB LDAP error: %s\n", + fprintf(stderr, "NSDB LDAP error: %s\n", ldap_err2string(ldap_err)); break; default: - fprintf(stderr, " FedFsStatus code " - "while resolving FSN UUID %s: %s\n", + fprintf(stderr, "Failed to resolve FSN UUID %s: %s\n", fsn_uuid, nsdb_display_fedfsstatus(retval)); } @@ -142,6 +141,95 @@ nsdb_list_resolve_and_display_fsn(nsdb_t host, const char *nce, const char *fsn_ } /** + * Display FSNs under a specific NCE + * + * @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) +{ + FedFsStatus retval; + char **fsns; + int i; + + retval = nsdb_list_s(host, nce, &fsns, ldap_err); + switch (retval) { + case FEDFS_OK: + printf(" NCE: %s\n\n", nce); + for (i = 0; fsns[i] != NULL; i++) + nsdb_list_resolve_and_display_fsn(host, nce, fsns[i]); + nsdb_free_string_array(fsns); + break; + case FEDFS_ERR_NSDB_NOFSN: + printf(" NCE %s has no FSN records\n", nce); + break; + case FEDFS_ERR_NSDB_NONCE: + printf(" NCE %s does not exist\n", nce); + break; + case FEDFS_ERR_NSDB_LDAP_VAL: + break; + default: + fprintf(stderr, "Failed to retrieve FSNs: %s\n", + nsdb_display_fedfsstatus(retval)); + } + return retval; +} + +/** + * Display FSNs under a specific NCE, with header + * + * @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) +{ + printf("NSDB: %s:%u\n\n", nsdb_hostname(host), nsdb_port(host)); + return nsdb_list_display_one_nce(host, nce, 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) +{ + FedFsStatus retval; + char *dn, **contexts; + int i; + + retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err); + if (retval != FEDFS_OK) + return retval; + + printf("NSDB: %s:%u\n\n", nsdb_hostname(host), nsdb_port(host)); + + retval = FEDFS_ERR_NSDB_NONCE; + for (i = 0; contexts[i] != NULL; i++) { + retval = nsdb_get_ncedn_s(host, contexts[i], &dn, ldap_err); + if (retval == FEDFS_OK) { + retval = nsdb_list_display_one_nce(host, dn, ldap_err); + free(dn); + if (retval != FEDFS_OK) + break; + } + } + + nsdb_free_string_array(contexts); + return retval; +} + +/** * Attempt to follow an LDAP referral to another NSDB * * @param host OUT: pointer to an initialized nsdb_t that may be replaced @@ -202,9 +290,8 @@ main(int argc, char **argv) unsigned int ldap_err; FedFsStatus retval; nsdb_t host; - char **fsns; char *nce; - int arg, i; + int arg; (void)umask(S_IRWXO); @@ -303,31 +390,11 @@ again: goto out_free; } - retval = nsdb_list_s(host, nce, &fsns, &ldap_err); - switch (retval) { - case FEDFS_OK: - if (nce == NULL) - printf("NSDB: %s:%u\n", - nsdbname, nsdbport); - else - printf("NSDB: %s:%u, %s\n", - nsdbname, nsdbport, nce); - for (i = 0; fsns[i] != NULL; i++) - nsdb_list_resolve_and_display_fsn(host, nce, fsns[i]); - nsdb_free_string_array(fsns); - break; - case FEDFS_ERR_NSDB_NOFSN: - fprintf(stderr, "NSDB %s:%u has no FSN records\n", - nsdbname, nsdbport); - break; - case FEDFS_ERR_NSDB_NONCE: - if (nce == NULL) - fprintf(stderr, "NSDB %s:%u has no NCE\n", - nsdbname, nsdbport); - else - fprintf(stderr, "NCE %s does not exist\n", nce); - break; - case FEDFS_ERR_NSDB_LDAP_VAL: + if (nce != NULL) + retval = nsdb_list_display_nce(host, nce, &ldap_err); + else + retval = nsdb_list_display_all_nces(host, &ldap_err); + if (retval == FEDFS_ERR_NSDB_LDAP_VAL) { switch (ldap_err) { case LDAP_REFERRAL: retval = nsdb_list_follow_ldap_referral(&host); @@ -342,10 +409,6 @@ again: fprintf(stderr, "Failed to list FSNs: %s\n", ldap_err2string(ldap_err)); } - break; - default: - fprintf(stderr, "Failed to list FSNs: %s\n", - nsdb_display_fedfsstatus(retval)); } nsdb_close_nsdb(host); _______________________________________________ fedfs-utils-devel mailing list [email protected] https://oss.oracle.com/mailman/listinfo/fedfs-utils-devel
