@@ -323,9 +323,6 @@ FedFsStatus nsdb_get_nceprefix_s(nsdb_t host, const char *naming_context,
char **dn, unsigned int *ldap_err);
FedFsStatus nsdb_get_naming_contexts_s(nsdb_t host, char ***contexts,
unsigned int *ldap_err);
-FedFsStatus nsdb_split_nce_dn_s(nsdb_t host, const char *nce,
- char **context, char **prefix,
- unsigned int *ldap_err);
FedFsStatus nsdb_find_naming_context_s(nsdb_t host, const char *entry,
char **context, unsigned int *ldap_err);
@@ -1428,233 +1428,6 @@ out_free:
}
/**
- * Get a structured DN for the "nce" on "host"
- *
- * @param host an initialized and bound nsdb_t object
- * @param nce a NUL-terminated C string containing the DN of the NSDB container
- * @param nce_dn OUT: a structured LDAPDN for "nce"
- * @param ldap_err OUT: possibly an LDAP error code
- * @return a FedFsStatus code
- *
- * This also tells us if the NCE exists on "host." Caller must free
- * "nce_dn" with ldap_dnfree(3).
- *
- * ldapsearch equivalent:
- *
- * @verbatim
-
- ldapsearch -b "nce" -s base "(objectClass=*)"
- @endverbatim
- *
- */
-static FedFsStatus
-nsdb_get_nce_dn_s(nsdb_t host, const char *nce, LDAPDN *nce_dn,
- unsigned int *ldap_err)
-{
- static char *attrs[] = { LDAP_NO_ATTRS, NULL };
- LDAPMessage *response = NULL;
- LDAP *ld = host->fn_ldap;
- FedFsStatus retval;
- char *dn = NULL;
- int rc;
-
- rc = ldap_search_ext_s(ld, nce, LDAP_SCOPE_BASE,
- "(objectClass=*)", attrs, 0, NULL, NULL,
- NULL, LDAP_NO_LIMIT, &response);
- switch (rc) {
- case LDAP_SUCCESS:
- break;
- case LDAP_NO_SUCH_OBJECT:
- xlog(D_GENERAL, "%s: No entry for NCE %s exists",
- __func__, nce);
- return FEDFS_ERR_NSDB_NONCE;
- default:
- xlog(D_GENERAL, "%s: LDAP search failed: %s",
- __func__, ldap_err2string(rc));
- *ldap_err = rc;
- return FEDFS_ERR_NSDB_LDAP_VAL;
- }
- if (response == NULL) {
- xlog(D_GENERAL, "%s: Empty LDAP response", __func__);
- return FEDFS_ERR_NSDB_FAULT;
- }
-
- rc = ldap_count_messages(ld, response);
- switch (rc) {
- case -1:
- xlog(D_GENERAL, "%s: Empty LDAP response", __func__);
- retval = FEDFS_ERR_NSDB_RESPONSE;
- goto out;
- case 1:
- xlog(D_GENERAL, "%s: No entry for NCE %s exists",
- __func__, nce);
- retval = FEDFS_ERR_NSDB_NONCE;
- goto out;
- default:
- xlog(D_CALL, "%s: received %d messages", __func__, rc);
- }
-
- dn = ldap_get_dn(ld, response);
- if (dn == NULL) {
- ldap_get_option(ld, LDAP_OPT_RESULT_CODE, &rc);
- xlog(D_GENERAL, "%s: Failed to parse DN: %s",
- __func__, ldap_err2string(rc));
- *ldap_err = rc;
- retval = FEDFS_ERR_NSDB_LDAP_VAL;
- goto out;
- }
-
- rc = ldap_str2dn(dn, nce_dn, LDAP_DN_FORMAT_LDAPV3);
- if (rc != LDAP_SUCCESS) {
- xlog(D_GENERAL, "%s: Failed to construct NCE DN", __func__);
- *ldap_err = rc;
- retval = FEDFS_ERR_NSDB_LDAP_VAL;
- goto out;
- }
-
- retval = FEDFS_OK;
- xlog(D_CALL, "%s: Found '%s'", __func__, dn);
-
-out:
- ber_memfree(dn);
- ldap_msgfree(response);
- return retval;
-}
-
-/**
- * Peel off left-most RDN in "src" and stick it on right end of "dst"
- *
- * @param src IN/OUT: a structured LDAP distinguished name
- * @param dst IN/OUT: a structured LDAP distinguished name
- * @param ldap_err OUT: possibly an LDAP error code
- * @return a FedFsStatus code
- *
- * Caller must free "src" and "dst" with ldap_dnfree(3).
- */
-static FedFsStatus
-nsdb_move_one_rdn(LDAPDN *src, LDAPDN *dst, unsigned int *ldap_err)
-{
- FedFsStatus retval;
- LDAPDN dn;
-
- dn = *src;
- retval = nsdb_right_append_rdn(dst, dn[0], ldap_err);
- if (retval != FEDFS_OK)
- return retval;
-
- return nsdb_left_remove_rdn(src, ldap_err);
-}
-
-/**
- * Split an NCE DN into a namingContext and a NCE prefix
- *
- * @param host an initialized and bound nsdb_t object
- * @param nce a NUL-terminated C string containing the DN of the NSDB container
- * @param context OUT: a NUL-terminated C string containing a namingContext DN
- * @param prefix OUT: a NUL-terminated C string containing an NCE prefix DN
- * @param ldap_err OUT: possibly an LDAP error code
- * @return a FedFsStatus code
- *
- * An entry at the NCE DN must already exist on this NSDB. Caller must
- * free "prefix" and "context" with free(3).
- *
- * Strategy:
- * 1. Start with an empty DN as the prefix
- * 2. Retrieve the server's namingContexts list
- * 3. Check if the NCE exists on the NSDB
- * 4. Loop over the namingContexts, matching against the putative NCE DN
- * 4a. If a match is found, use the matched namingContext
- * and the prefix formed so far
- * 4b. If no match was found, remove the left-most RDN from
- * the NCE DN, and append it to right end of the prefix
- * DN; then go back to 4.
- */
-FedFsStatus
-nsdb_split_nce_dn_s(nsdb_t host, const char *nce, char **context,
- char **prefix, unsigned int *ldap_err)
-{
- LDAPDN prefix_dn = NULL;
- LDAPDN tmp_dn = NULL;
- char **contexts = NULL;
- char *tmp = NULL;
- FedFsStatus retval;
- int i, rc;
-
- if (host->fn_ldap == NULL) {
- xlog(L_ERROR, "%s: NSDB not open", __func__);
- return FEDFS_ERR_INVAL;
- }
-
- if (context == NULL || prefix == NULL || ldap_err == NULL) {
- xlog(L_ERROR, "%s: Invalid parameter", __func__);
- return FEDFS_ERR_INVAL;
- }
-
- retval = nsdb_get_naming_contexts_s(host, &contexts, ldap_err);
- if (retval != FEDFS_OK)
- goto out;
-
- retval = nsdb_get_nce_dn_s(host, nce, &tmp_dn, ldap_err);
- if (retval != FEDFS_OK)
- goto out;
-
-again:
- for (i = 0; contexts[i] != NULL; i++) {
- _Bool result;
-
- result = nsdb_compare_dn_string(tmp_dn, contexts[i], ldap_err);
- if (*ldap_err != LDAP_SUCCESS) {
- retval = FEDFS_ERR_NSDB_LDAP_VAL;
- goto out;
- }
- if (result)
- goto match;
- }
-
- retval = nsdb_move_one_rdn(&tmp_dn, &prefix_dn, ldap_err);
- if (retval != FEDFS_OK)
- goto out;
- if (tmp_dn == NULL) {
- xlog(D_GENERAL, "%s: No matching namingContext found",
- __func__);
- /* Pretend user gave us a bogus "nce" string */
- retval = FEDFS_ERR_INVAL;
- goto out;
- }
- goto again;
-
-match:
- rc = ldap_dn2str(prefix_dn, &tmp, LDAP_DN_FORMAT_LDAPV3);
- if (rc != LDAP_SUCCESS) {
- *ldap_err = rc;
- retval = FEDFS_ERR_NSDB_LDAP_VAL;
- goto out;
- }
-
- *context = strdup(contexts[i]);
- *prefix = strdup(tmp);
- ber_memfree(tmp);
-
- if (*context == NULL || *prefix == NULL) {
- free(*prefix);
- free(*context);
- xlog(D_GENERAL, "%s: No memory", __func__);
- retval = FEDFS_ERR_SVRFAULT;
- goto out;
- }
-
- retval = FEDFS_OK;
-
-out:
- ldap_dnfree(tmp_dn);
- ldap_dnfree(prefix_dn);
- nsdb_free_string_array(contexts);
- xlog(D_CALL, "%s: returning %s",
- __func__, nsdb_display_fedfsstatus(retval));
- return retval;
-}
-
-/**
* See if "entry" ends with one of the items of "contexts"
*
* @param entry a NUL-terminated C string containing DN of some entry
Since we now store the full NCE DN in the naming context, nsdb_split_nce_dn_s() is no longer used. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> --- src/include/nsdb.h | 3 - src/libnsdb/fileserver.c | 227 ---------------------------------------------- 2 files changed, 0 insertions(+), 230 deletions(-)