]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/suffixmassage.c
Free IDL_CACHE locks
[openldap] / servers / slapd / back-ldap / suffixmassage.c
index f4a31c1f785c3bbef8494e167c65b20969f4d767..53193a2025577b8fbeae0f5d8d450302e0a6c236 100644 (file)
@@ -47,10 +47,10 @@ ldap_back_dn_massage(
 {
        int rc = 0;
 
-       switch (rewrite_session( dc->li->rwinfo, dc->ctx, dn->bv_val, dc->conn, 
+       switch (rewrite_session( dc->rwmap->rwm_rw, dc->ctx, (dn->bv_len ? dn->bv_val : ""), dc->conn, 
                                &res->bv_val )) {
        case REWRITE_REGEXEC_OK:
-               if ( res->bv_val != NULL && res->bv_val[ 0 ] != '\0' ) {
+               if ( res->bv_val != NULL ) {
                        res->bv_len = strlen( res->bv_val );
                } else {
                        *res = *dn;
@@ -62,6 +62,7 @@ ldap_back_dn_massage(
                Debug( LDAP_DEBUG_ARGS,
                        "[rw] %s: \"%s\" -> \"%s\"\n", dc->ctx, dn->bv_val, res->bv_val );              
 #endif /* !NEW_LOGGING */
+               rc = LDAP_SUCCESS;
                break;
                
        case REWRITE_REGEXEC_UNWILLING:
@@ -69,7 +70,7 @@ ldap_back_dn_massage(
                        dc->rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
                        dc->rs->sr_text = "Operation not allowed";
                }
-               rc = -1;
+               rc = LDAP_UNWILLING_TO_PERFORM;
                break;
                
        case REWRITE_REGEXEC_ERR:
@@ -77,7 +78,7 @@ ldap_back_dn_massage(
                        dc->rs->sr_err = LDAP_OTHER;
                        dc->rs->sr_text = "Rewrite error";
                }
-               rc = -1;
+               rc = LDAP_OTHER;
                break;
        }
        return rc;
@@ -92,12 +93,12 @@ ldap_back_dn_massage(
 int
 ldap_back_dn_massage(
        dncookie *dc,
-       struct berval *dn,
+       struct berval *odn,
        struct berval *res
 )
 {
        int     i, src, dst;
-       struct berval pretty = {0,NULL};
+       struct berval pretty = {0,NULL}, *dn = odn;
 
        assert( res );
 
@@ -106,7 +107,7 @@ ldap_back_dn_massage(
                res->bv_len = 0;
                return 0;
        }
-       if ( dc->li == NULL || dc->li->suffix_massage == NULL ) {
+       if ( dc->rwmap == NULL || dc->rwmap->rwm_suffix_massage == NULL ) {
                *res = *dn;
                return 0;
        }
@@ -120,14 +121,14 @@ ldap_back_dn_massage(
                /* DN from remote server may be in arbitrary form.
                 * Pretty it so we can parse reliably.
                 */
-               dnPretty2( NULL, dn, &pretty );
+               dnPretty2( NULL, dn, &pretty, NULL );
                if (pretty.bv_val) dn = &pretty;
        }
 
        for ( i = 0;
-               dc->li->suffix_massage[i].bv_val != NULL;
+               dc->rwmap->rwm_suffix_massage[i].bv_val != NULL;
                i += 4 ) {
-               int aliasLength = dc->li->suffix_massage[i+src].bv_len;
+               int aliasLength = dc->rwmap->rwm_suffix_massage[i+src].bv_len;
                int diff = dn->bv_len - aliasLength;
 
                if ( diff < 0 ) {
@@ -139,15 +140,15 @@ ldap_back_dn_massage(
                        /* At a DN Separator */
                }
 
-               if ( !strcmp( dc->li->suffix_massage[i+src].bv_val, &dn->bv_val[diff] ) ) {
-                       res->bv_len = diff + dc->li->suffix_massage[i+dst].bv_len;
+               if ( !strcmp( dc->rwmap->rwm_suffix_massage[i+src].bv_val, &dn->bv_val[diff] ) ) {
+                       res->bv_len = diff + dc->rwmap->rwm_suffix_massage[i+dst].bv_len;
                        res->bv_val = ch_malloc( res->bv_len + 1 );
                        strncpy( res->bv_val, dn->bv_val, diff );
-                       strcpy( &res->bv_val[diff], dc->li->suffix_massage[i+dst].bv_val );
+                       strcpy( &res->bv_val[diff], dc->rwmap->rwm_suffix_massage[i+dst].bv_val );
 #ifdef NEW_LOGGING
-                                       LDAP_LOG ( BACK_LDAP, ARGS, 
-                                               "ldap_back_dn_massage: converted \"%s\" to \"%s\"\n",
-                                               dn->bv_val, res->bv_val, 0 );
+                       LDAP_LOG ( BACK_LDAP, ARGS, 
+                               "ldap_back_dn_massage: converted \"%s\" to \"%s\"\n",
+                               dn->bv_val, res->bv_val, 0 );
 #else
                        Debug( LDAP_DEBUG_ARGS,
                                "ldap_back_dn_massage:"
@@ -157,13 +158,14 @@ ldap_back_dn_massage(
                        break;
                }
        }
+       if (pretty.bv_val) {
+               ch_free(pretty.bv_val);
+               dn = odn;
+       }
        /* Nothing matched, just return the original DN */
        if (res->bv_val == NULL) {
                *res = *dn;
        }
-       if (pretty.bv_val) {
-               ch_free(pretty.bv_val);
-       }
 
        return 0;
 }