@@ -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.
@@ -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);
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 <chuck.lever@oracle.com> --- doc/man/nsdb-list.8 | 14 +++-- src/nsdbc/nsdb-list.c | 137 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 108 insertions(+), 43 deletions(-)