]> git.sur5r.net Git - openldap/commitdiff
More struct berval DNs
authorKurt Zeilenga <kurt@openldap.org>
Tue, 25 Dec 2001 19:48:26 +0000 (19:48 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Tue, 25 Dec 2001 19:48:26 +0000 (19:48 +0000)
32 files changed:
servers/slapd/acl.c
servers/slapd/add.c
servers/slapd/back-bdb/add.c
servers/slapd/back-bdb/delete.c
servers/slapd/back-bdb/dn2id.c
servers/slapd/back-bdb/init.c
servers/slapd/back-bdb/modrdn.c
servers/slapd/back-bdb/search.c
servers/slapd/back-ldap/search.c
servers/slapd/back-ldbm/add.c
servers/slapd/back-ldbm/delete.c
servers/slapd/back-ldbm/modrdn.c
servers/slapd/back-ldbm/search.c
servers/slapd/back-meta/search.c
servers/slapd/back-monitor/database.c
servers/slapd/back-monitor/init.c
servers/slapd/back-passwd/search.c
servers/slapd/back-shell/result.c
servers/slapd/back-sql/search.c
servers/slapd/backend.c
servers/slapd/backglue.c
servers/slapd/compare.c
servers/slapd/config.c
servers/slapd/configinfo.c
servers/slapd/delete.c
servers/slapd/modify.c
servers/slapd/modrdn.c
servers/slapd/proto-slap.h
servers/slapd/root_dse.c
servers/slapd/search.c
servers/slapd/slap.h
servers/slapd/tools/slapadd.c

index a81c8dd2bdfe206bc5c3cdf61bfb69e3def37089..321522d3ea0e8d787fcc3ee5518c299b4d2706f8 100644 (file)
@@ -117,7 +117,7 @@ access_allowed(
        assert( be != NULL );
 
        /* grant database root access */
-       if ( be != NULL && be_isroot( be, op->o_ndn.bv_val ) ) {
+       if ( be != NULL && be_isroot( be, &op->o_ndn ) ) {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "acl", LDAP_LEVEL_INFO,
                       "access_allowed: conn %d root access granted\n",
@@ -764,7 +764,7 @@ acl_mask(
                                buf[sizeof(buf) - 1] = 0;
                        }
 
-                       if (backend_group(be, conn, op, e, buf, op->o_ndn.bv_val,
+                       if (backend_group(be, conn, op, e, buf, &op->o_ndn,
                                b->a_group_oc, b->a_group_at) != 0)
                        {
                                continue;
@@ -1013,7 +1013,7 @@ acl_check_modlist(
        assert( be != NULL );
 
        /* short circuit root database access */
-       if ( be_isroot( be, op->o_ndn.bv_val ) ) {
+       if ( be_isroot( be, &op->o_ndn ) ) {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "acl", LDAP_LEVEL_DETAIL1,
                           "acl_check_modlist: conn %d  access granted to root user\n",
@@ -1213,9 +1213,8 @@ aci_set_gather (void *cookie, char *name, char *attr)
                        const char *text;
                        AttributeDescription *desc = NULL;
                        if (slap_str2ad(attr, &desc, &text) == LDAP_SUCCESS) {
-                               backend_attribute(cp->be, NULL /*cp->conn*/,
-                                                                       NULL /*cp->op*/, cp->e,
-                                                                       ndn, desc, &bvals);
+                               backend_attribute(cp->be, NULL, NULL,
+                                       cp->e, ndn, desc, &bvals);
                                if (bvals != NULL) {
                                        for (i = 0; bvals[i] != NULL; i++) { }
                                        vals = ch_calloc(i + 1, sizeof(char *));
@@ -1283,7 +1282,7 @@ aci_match_set (
                                && slap_str2ad(setat, &desc, &text) == LDAP_SUCCESS )
                        {
                                backend_attribute(be, NULL, NULL, e,
-                                                               subjdn, desc, &bvals);
+                                       subjdn, desc, &bvals);
                                if ( bvals != NULL ) {
                                        if ( bvals[0] != NULL )
                                                set = ch_strdup(bvals[0]->bv_val);
@@ -1517,7 +1516,7 @@ aci_group_member (
        if (grp_oc != NULL && grp_ad != NULL && grpdn != NULL) {
                string_expand(grpdn, 1024, subjdn, e->e_ndn, matches);
                if ( dn_normalize(grpdn) != NULL ) {
-                       rc = (backend_group(be, conn, op, e, grpdn, op->o_ndn.bv_val, grp_oc, grp_ad) == 0);
+                       rc = (backend_group(be, conn, op, e, grpdn, &op->o_ndn, grp_oc, grp_ad) == 0);
                }
        }
 
index c8d5b04d4ece8d285113ecd2ccb2ae60cdc8ad12..5bd01be842b0188880c9c65ebb71f478ecd11b42 100644 (file)
@@ -255,7 +255,7 @@ do_add( Connection *conn, Operation *op )
        }
 
        /* check for referrals */
-       rc = backend_check_referrals( be, conn, op, e->e_dn, e->e_ndn );
+       rc = backend_check_referrals( be, conn, op, &e->e_name, &e->e_nname );
        if ( rc != LDAP_SUCCESS ) {
                goto done;
        }
index 1812992318b5b82df1d9786442a820c1326edb85..905a856a284efab2f60a32c09ccd7b70e7438708 100644 (file)
@@ -192,7 +192,7 @@ retry:      rc = txn_abort( ltid );
                 *      must be adding entry to at suffix
                 *  or with parent ""
                 */
-               if ( !be_isroot( be, op->o_ndn.bv_val )) {
+               if ( !be_isroot( be, &op->o_ndn )) {
                        if ( be_issuffix( be, "" ) || be_isupdate( be, &op->o_ndn ) ) {
                                p = (Entry *)&slap_entry_root;
 
index 45e5cb5540619075a8e156eb0e70f7259fb5062c..9822076ef37b56a3efce4ae116f259242da0ce4c 100644 (file)
@@ -161,7 +161,7 @@ retry:      /* transaction retry */
 
        } else {
                /* no parent, must be root to delete */
-               if( ! be_isroot( be, op->o_ndn.bv_val ) ) {
+               if( ! be_isroot( be, &op->o_ndn ) ) {
                        if ( be_issuffix( be, "" ) || be_isupdate( be, &op->o_ndn ) ) {
                                p = (Entry *)&slap_entry_root;
 
index ca360779d5bcf6fb6f2e1a2a3ebda2be571d8eea..b35c7c5fe3315fd02c9b0451ecaee27e2bf8c072 100644 (file)
@@ -578,7 +578,7 @@ int bdb_build_tree(
         * Note that this code always uses be_suffix[0], so defining
         * multiple suffixes for a single backend won't work!
         */
-       bdb->bi_sufflen = strlen(be->be_suffix[0]);
+       bdb->bi_sufflen = be->be_suffix[0]->bv_len;
 
        rdns = ldap_explode_dn(be->be_nsuffix[0]->bv_val, 0);
        for (i=0; rdns[i]; i++);
@@ -639,7 +639,7 @@ int bdb_fix_dn(
 
        ptr--;
        nptr--;
-       strcpy(ptr, be->be_suffix[0]);
+       strcpy(ptr, be->be_suffix[0]->bv_val);
        strcpy(nptr, be->be_nsuffix[0]->bv_val);
 
        return 0;
index 0574375c08b606ad77630cfa98311dd6389eff40..8150c35b76f2b01232de1ab639dbd20f93bb04e5 100644 (file)
@@ -142,7 +142,7 @@ bdb_db_open( BackendDB *be )
 
        Debug( LDAP_DEBUG_ARGS,
                "bdb_db_open: %s\n",
-               be->be_suffix[0], 0, 0 );
+               be->be_suffix[0]->bv_val, 0, 0 );
 
        /* we should check existance of dbenv_home and db_directory */
 
@@ -164,7 +164,7 @@ bdb_db_open( BackendDB *be )
                bdb->bi_txn_cp = 0;
        }
 
-       bdb->bi_dbenv->set_errpfx( bdb->bi_dbenv, be->be_suffix[0] );
+       bdb->bi_dbenv->set_errpfx( bdb->bi_dbenv, be->be_suffix[0]->bv_val );
        bdb->bi_dbenv->set_errcall( bdb->bi_dbenv, bdb_errcall );
 
 #ifdef BDB_SUBDIRS
index 4ecca38f51c06951366926eb16cc336a20e08267..b92c60c7edb2abe13de3a8f28af8fa5878601d53 100644 (file)
@@ -212,7 +212,7 @@ retry:      /* transaction retry */
 
        } else {
                /* no parent, modrdn entry directly under root */
-               isroot = be_isroot( be, op->o_ndn.bv_val );
+               isroot = be_isroot( be, &op->o_ndn );
                if ( ! isroot ) {
                        if ( be_issuffix( be, "" ) || be_isupdate( be, &op->o_ndn ) ) {
 
@@ -328,7 +328,7 @@ retry:      /* transaction retry */
 
                } else {
                        if ( isroot == -1 ) {
-                               isroot = be_isroot( be, op->o_ndn.bv_val );
+                               isroot = be_isroot( be, &op->o_ndn );
                        }
                        
                        np_dn = ch_strdup( "" );
index 23af1f789e6d3cfabf5c09ada308c4da87343fa4..849077ba0e7954fc8289d4071ae9169d05971ddb 100644 (file)
@@ -157,7 +157,7 @@ bdb_search(
        }
 
        /* if not root, get appropriate limits */
-       if ( be_isroot( be, op->o_ndn.bv_val ) ) {
+       if ( be_isroot( be, &op->o_ndn ) ) {
                isroot = 1;
        } else {
                ( void ) get_limits( be, op->o_ndn.bv_val, &limit );
index d76ff98a308bd741f6d71b172ee90c9937ae9a8b..2801d7c1a23f8c2814761d73f1fdd4cb5273136b 100644 (file)
@@ -85,7 +85,7 @@ ldap_back_search(
        }
 
        /* if not root, get appropriate limits */
-       if ( be_isroot( be, op->o_ndn.bv_val ) ) {
+       if ( be_isroot( be, &op->o_ndn ) ) {
                isroot = 1;
        } else {
                ( void ) get_limits( be, op->o_ndn.bv_val, &limit );
index 797896ff2afbd2d2a9f3fa07fdb6e5fef74ef8d2..1b86663a2388e25055db7700ecbe4d19ff32f608 100644 (file)
@@ -205,7 +205,7 @@ ldbm_back_add(
                }
 
                /* no parent, must be adding entry to root */
-               if ( !be_isroot( be, op->o_ndn.bv_val ) ) {
+               if ( !be_isroot( be, &op->o_ndn ) ) {
                        if ( be_issuffix( be, "" ) || be_isupdate( be, &op->o_ndn ) ) {
                                p = (Entry *)&slap_entry_root;
                                
index 318fd673e891914818a80d3beaf3007b329fc228..f92bd24a4de8b94ebd479e5467e6bf0005b8489c 100644 (file)
@@ -153,7 +153,7 @@ ldbm_back_delete(
 
        } else {
                /* no parent, must be root to delete */
-               if( ! be_isroot( be, op->o_ndn.bv_val ) ) {
+               if( ! be_isroot( be, &op->o_ndn ) ) {
                        if ( be_issuffix( be, "" ) || be_isupdate( be, &op->o_ndn ) ) {
                                p = (Entry *)&slap_entry_root;
                                
index 1aa8cd40110e496ed6b052d8678e560a0e1484c3..151a032b4e2ab60b663b8f74e9b5e8c8dc4b99f4 100644 (file)
@@ -206,8 +206,8 @@ ldbm_back_modrdn(
 
        } else {
                /* no parent, must be root to modify rdn */
-               isroot = be_isroot( be, op->o_ndn.bv_val );
-               if ( ! be_isroot ) {
+               isroot = be_isroot( be, &op->o_ndn );
+               if ( ! isroot ) {
                        if ( be_issuffix( be, "" ) || be_isupdate( be, &op->o_ndn ) ) {
                                p = (Entry *)&slap_entry_root;
                                
@@ -382,10 +382,10 @@ ldbm_back_modrdn(
 
                        /* no parent, must be root to modify newSuperior */
                        if ( isroot == -1 ) {
-                               isroot = be_isroot( be, op->o_ndn.bv_val );
+                               isroot = be_isroot( be, &op->o_ndn );
                        }
 
-                       if ( ! be_isroot ) {
+                       if ( ! isroot ) {
                                if ( be_issuffix( be, "" ) || be_isupdate( be, &op->o_ndn ) ) {
                                        np = (Entry *)&slap_entry_root;
                                
index 991c8ac395cfb8bbf1601dcb60b8fc135f5651b7..031012433cc530093b96a933eeadc9d70b72ec92 100644 (file)
@@ -206,7 +206,7 @@ searchit:
        }
 
        /* if not root, get appropriate limits */
-       if ( be_isroot( be, op->o_ndn.bv_val ) ) {
+       if ( be_isroot( be, &op->o_ndn ) ) {
                isroot = 1;
        } else {
                ( void ) get_limits( be, op->o_ndn.bv_val, &limit );
index 2926af6c659b0c6cd43257c0b7306ebb1ec38bf9..4fa5390097e3121412705f07fe2eee170568930f 100644 (file)
@@ -149,7 +149,7 @@ meta_back_search(
        nbaselen = strlen( nbase );
 
        /* if not root, get appropriate limits */
-       if ( be_isroot( be, op->o_ndn.bv_val ) ) {
+       if ( be_isroot( be, &op->o_ndn ) ) {
                isroot = 1;
        } else {
                ( void ) get_limits( be, op->o_ndn.bv_val, &limit );
index 54ec297ac8df1623ff40185deb7afc72e89ba32e..030db2c5dd4f165be36b1de133de07822e2bad8a 100644 (file)
@@ -121,8 +121,7 @@ monitor_subsys_database_init(
                attr_merge( e, monitor_ad_desc, bv );
                
                for ( j = 0; be->be_suffix[j]; j++ ) {
-                       val.bv_val = be->be_suffix[j];
-                       val.bv_len = strlen( val.bv_val );
+                       val = *be->be_suffix[j];
 
                        attr_merge( e, ad_nc, bv );
                        attr_merge( e_database, ad_nc, bv );
index 1092e61c68877c7c6773c4a81451384d8fac63ee..6f214178aedea8e5ef0847ce20fa9f9ed87fc6df 100644 (file)
@@ -218,8 +218,9 @@ monitor_back_db_init(
        struct monitorinfo      *mi;
        Entry                   *e, *e_tmp;
        struct monitorentrypriv *mp;
-       int                     i;
-       char                    buf[1024], *ndn, *end_of_line;
+       int                     i, rc;
+       char                    buf[1024], *end_of_line;
+       struct berval   dn, *ndn;
        const char              *text;
        struct berval           val, *bv[2] = { &val, NULL };
 
@@ -241,10 +242,24 @@ monitor_back_db_init(
        }
        monitor_defined++;
 
-       ndn = ch_strdup( SLAPD_MONITOR_DN );
-       charray_add( &be->be_suffix, ndn );
-       dn_normalize( ndn );
-       ber_bvecadd( &be->be_nsuffix, ber_bvstr( ndn ) );
+       ndn = NULL;
+       dn.bv_val = SLAPD_MONITOR_DN;
+       dn.bv_len = sizeof( SLAPD_MONITOR_DN ) - 1;
+
+       rc = dnNormalize( NULL, &dn, &ndn );
+       if( rc != LDAP_SUCCESS ) {
+#ifdef NEW_LOGGING
+               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+                       "monitor DN \"" SLAPD_MONITOR_DN "\" backend is allowed\n" ));
+#else
+               Debug( LDAP_DEBUG_ANY,
+                       "monitor DN \"" SLAPD_MONITOR_DN "\" backend is allowed\n",
+                       0, 0, 0 );
+#endif
+               return -1;
+       }
+
+       ber_bvecadd( &be->be_nsuffix, ndn );
 
        mi = ( struct monitorinfo * )ch_calloc( sizeof( struct monitorinfo ), 1 );
        ldap_pvt_thread_mutex_init( &mi->mi_cache_mutex );
index 8a05ce281a129ce2166aeff04ccab8e0c3b92af4..1595547817b22edf4b25718c1bb9432e59831be0 100644 (file)
@@ -191,7 +191,7 @@ passwd_back_search(
                        int i;
                        for( i=0; be->be_nsuffix[i] != NULL; i++ ) {
                                if( dn_issuffix( nbase, be->be_nsuffix[i]->bv_val ) ) {
-                                       matched = be->be_suffix[i];
+                                       matched = be->be_suffix[i]->bv_val;
                                        break;
                                }
                        }
@@ -293,10 +293,13 @@ pw2entry( Backend *be, struct passwd *pw, char *rdn )
        attr_merge( e, ad_objectClass, vals );
 
        /* rdn attribute type should be a configuratable item */
-       sprintf( buf, "uid=%s,%s", pw->pw_name, be->be_suffix[0] );
-       e->e_dn = ch_strdup( buf );
-       e->e_ndn = ch_strdup( buf );
-       (void) dn_normalize( e->e_ndn );
+       sprintf( buf, "uid=%s,%s", pw->pw_name, be->be_suffix[0]->bv_val );
+       e->e_name.bv_val = ch_strdup( buf );
+       e->e_name.bv_len = strlen( e->e_name.bv_val );
+
+       e->e_nname.bv_val = ch_strdup( buf );
+       (void) dn_normalize( e->e_nname );
+       e->e_nname.bv_len = strlen( e->e_name.bv_val );
 
        val.bv_val = pw->pw_name;
        val.bv_len = strlen( pw->pw_name );
index f2dd0e45939f59eb340a40a11cf290d943816a35..5516118adf007e15ccd41a7dfbd696dfe2f4f7da 100644 (file)
@@ -111,6 +111,6 @@ print_suffixes(
        int     i;
 
        for ( i = 0; be->be_suffix[i] != NULL; i++ ) {
-               fprintf( fp, "suffix: %s\n", be->be_suffix[i] );
+               fprintf( fp, "suffix: %s\n", be->be_suffix[i].bv_val );
        }
 }
index 367f933fac986e17766f77c0c57f18fc20aeb2ce..23af5819d59c129e415e53049734ce8f44cfb7a9 100644 (file)
@@ -547,7 +547,7 @@ int backsql_search(BackendDB *be,Connection *conn,Operation *op,
  /* TimesTen : Pass it along to the lower level routines */ 
  srch_info.isTimesTen = bi->isTimesTen; 
  
- if (tlimit == 0 && be_isroot(be,op->o_ndn.bv_val))
+ if (tlimit == 0 && be_isroot(be,&op->o_ndn))
   {
    tlimit = -1;        /* allow root to set no limit */
   } 
@@ -558,7 +558,7 @@ int backsql_search(BackendDB *be,Connection *conn,Operation *op,
    stoptime = op->o_time + tlimit;
   }
   
- if (slimit == 0 && be_isroot(be,op->o_ndn.bv_val))
+ if (slimit == 0 && be_isroot(be,&op->o_ndn))
   {
    slimit = -1;        /* allow root to set no limit */
   }
index 88fd1f8118691760e7570f175dc7009b80a8918e..12951245cdccb3ad4ef23664d23f7a7b03d3bd3b 100644 (file)
@@ -241,11 +241,11 @@ int backend_startup(Backend *be)
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_DETAIL1,
                           "backend_startup:  starting \"%s\"\n",
-                          be->be_suffix[0] ));
+                          be->be_suffix[0]->bv_val ));
 #else
                Debug( LDAP_DEBUG_TRACE,
                        "backend_startup: starting \"%s\"\n",
-                       be->be_suffix[0], 0, 0 );
+                       be->be_suffix[0]->bv_val, 0, 0 );
 #endif
 
                if ( be->bd_info->bi_open ) {
@@ -417,7 +417,7 @@ int backend_destroy(void)
                        backendDB[i].bd_info->bi_db_destroy(
                                &backendDB[i] );
                }
-               charray_free( backendDB[i].be_suffix );
+               ber_bvecfree( backendDB[i].be_suffix );
                ber_bvecfree( backendDB[i].be_nsuffix );
                free( backendDB[i].be_rootdn.bv_val );
                free( backendDB[i].be_rootndn.bv_val );
@@ -594,11 +594,9 @@ be_issuffix(
 }
 
 int
-be_isroot( Backend *be, const char *ndn )
+be_isroot( Backend *be, struct berval *ndn )
 {
-       int rc;
-
-       if ( ndn == NULL || *ndn == '\0' ) {
+       if ( !ndn->bv_len ) {
                return( 0 );
        }
 
@@ -606,9 +604,7 @@ be_isroot( Backend *be, const char *ndn )
                return( 0 );
        }
 
-       rc = strcmp( be->be_rootndn.bv_val, ndn ) ? 0 : 1;
-
-       return(rc);
+       return strcmp( be->be_rootndn.bv_val, ndn->bv_val ) ? 0 : 1;
 }
 
 int
@@ -638,12 +634,16 @@ be_root_dn( Backend *be )
 int
 be_isroot_pw( Backend *be,
        Connection *conn,
-       const char *ndn,
+       const char *dn,
        struct berval *cred )
 {
        int result;
 
-       if ( ! be_isroot( be, ndn ) ) {
+       struct berval ndn;
+       ndn.bv_val = (char *) dn;
+       ndn.bv_len = dn ? strlen( dn ) : 0;
+
+       if ( ! be_isroot( be, &ndn ) ) {
                return 0;
        }
 
@@ -960,8 +960,8 @@ int backend_check_referrals(
        Backend *be,
        Connection *conn,
        Operation *op,
-       const char *dn,
-       const char *ndn )
+       struct berval *dn,
+       struct berval *ndn )
 {
        int rc = LDAP_SUCCESS;
 
@@ -969,7 +969,7 @@ int backend_check_referrals(
                const char *text;
 
                rc = be->be_chk_referrals( be,
-                       conn, op, dn, ndn, &text );
+                       conn, op, dn->bv_val, ndn->bv_val, &text );
 
                if( rc != LDAP_SUCCESS && rc != LDAP_REFERRAL ) {
                        send_ldap_result( conn, op, rc,
@@ -987,7 +987,7 @@ backend_group(
        Operation *op,
        Entry   *target,
        const char      *gr_ndn,
-       const char      *op_ndn,
+       struct berval *op_ndn,
        ObjectClass *group_oc,
        AttributeDescription *group_at
 )
@@ -1029,7 +1029,7 @@ backend_group(
 
        if( be->be_group ) {
                int res = be->be_group( be, conn, op,
-                       target, gr_ndn, op_ndn,
+                       target, gr_ndn, op_ndn->bv_val,
                        group_oc, group_at );
                
                if (op->o_tag != LDAP_REQ_BIND) {
@@ -1109,8 +1109,7 @@ Attribute *backend_operational(
         * add them to the attribute list
         */
        if ( ( opattrs || attrs ) && be && be->be_operational != NULL ) {
-               ( void )be->be_operational( be, conn, op, e, 
-                                           attrs, opattrs, ap );
+               ( void )be->be_operational( be, conn, op, e, attrs, opattrs, ap );
        }
 
        return a;
index 696ed48bb4e5bb54f0efe85665b8d84b3dd95553..8062fd42c7e9081932d2bae81ae4cb9f5ceb967a 100644 (file)
@@ -328,7 +328,7 @@ glue_back_search (
                        if (scope == LDAP_SCOPE_ONELEVEL && 
                                !strcmp (gi->n[i].pdn, ndn)) {
                                rc = be->be_search (be, conn, op,
-                                                   be->be_suffix[0],
+                                                   be->be_suffix[0]->bv_val,
                                                    be->be_nsuffix[0]->bv_val,
                                                    LDAP_SCOPE_BASE, deref,
                                        s2limit, t2limit, filter, filterstr,
@@ -336,7 +336,7 @@ glue_back_search (
                        } else if (scope == LDAP_SCOPE_SUBTREE &&
                                dnIsSuffix(be->be_nsuffix[0], &bv)) {
                                rc = be->be_search (be, conn, op,
-                                                   be->be_suffix[0],
+                                                   be->be_suffix[0]->bv_val,
                                                    be->be_nsuffix[0]->bv_val,
                                                    scope, deref,
                                        s2limit, t2limit, filter, filterstr,
index 163a4f538c59ae72785e87f8da0d3103b8634fd2..58cbe2a32d2bc8e9efad8f87658b958f89231526 100644 (file)
@@ -260,7 +260,7 @@ do_compare(
        }
 
        /* check for referrals */
-       rc = backend_check_referrals( be, conn, op, pdn->bv_val, ndn->bv_val );
+       rc = backend_check_referrals( be, conn, op, pdn, ndn );
        if ( rc != LDAP_SUCCESS ) {
                goto cleanup;
        }
index 81b9223c94881f5f571187af382ffea2d75d0feb..ad0449ece3130317064f9393838a3d1923d83803 100644 (file)
@@ -979,11 +979,11 @@ read_config( const char *fname )
                                LDAP_LOG(( "config", LDAP_LEVEL_INFO,
                                        "%s: line %d: suffix already served by a preceding "
                                        "backend \"%s\"\n", fname, lineno,
-                                       tmp_be->be_suffix[0] ));
+                                       tmp_be->be_suffix[0]->bv_val ));
 #else
                                Debug( LDAP_DEBUG_ANY, "%s: line %d: suffix "
                                        "already served by a preceeding backend \"%s\"\n",
-                                   fname, lineno, tmp_be->be_suffix[0] );
+                                   fname, lineno, tmp_be->be_suffix[0]->bv_val );
 #endif
                                ber_bvfree( pdn );
                                ber_bvfree( ndn );
@@ -1003,7 +1003,7 @@ read_config( const char *fname )
 #endif
                        }
 
-                       charray_add( &be->be_suffix, pdn->bv_val );
+                       ber_bvecadd( &be->be_suffix, pdn );
                        ber_bvecadd( &be->be_nsuffix, ndn );
 
                /* set database suffixAlias */
@@ -1107,12 +1107,12 @@ read_config( const char *fname )
                                LDAP_LOG(( "config", LDAP_LEVEL_INFO,
                                        "%s: line %d: suffixAlias served by a preceeding "
                                        "backend \"%s\"\n",
-                                       fname, lineno, tmp_be->be_suffix[0] ));
+                                       fname, lineno, tmp_be->be_suffix[0]->bv_val ));
 #else
                                Debug( LDAP_DEBUG_ANY,
                                        "%s: line %d: suffixAlias served by"
                                        "  a preceeding backend \"%s\"\n",
-                                       fname, lineno, tmp_be->be_suffix[0] );
+                                       fname, lineno, tmp_be->be_suffix[0]->bv_val );
 #endif
                                ber_bvfree( palias );
                                return -1;
@@ -1158,13 +1158,13 @@ read_config( const char *fname )
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "config", LDAP_LEVEL_INFO,
                                        "%s: line %d: suffixAlias derefs to a different backend "
-                                       "a preceeding backend \"%s\" (ignored)\n",
-                                       fname, lineno, tmp_be->be_suffix[0] ));
+                                       "a preceeding backend \"%s\"\n",
+                                       fname, lineno, tmp_be->be_suffix[0]->bv_val ));
 #else
                                Debug( LDAP_DEBUG_ANY,
                                        "%s: line %d: suffixAlias derefs to differnet backend"
-                                       "  a preceeding backend \"%s\" (ignored)\n",
-                                       fname, lineno, tmp_be->be_suffix[0] );
+                                       "  a preceeding backend \"%s\"\n",
+                                       fname, lineno, tmp_be->be_suffix[0]->bv_val );
 #endif
                                ber_bvfree( palias );
                                ber_bvfree( paliased );
index 51874a539f4ce5d3b28a3c33d0828cfec43b36c7..51c2b472fc6e845f3fffeeca138d6677f78f9909 100644 (file)
@@ -81,7 +81,7 @@ config_info(
                strcpy( buf, backends[i].be_type );
                for ( j = 0; backends[i].be_suffix[j] != NULL; j++ ) {
                        strcat( buf, " : " );
-                       strcat( buf, backends[i].be_suffix[j] );
+                       strcat( buf, backends[i].be_suffix[j]->bv_val );
                }
                val.bv_val = buf;
                val.bv_len = strlen( buf );
index 08c3d24686b52e93191f9365619da995abd5fc6b..e579d983714b7d146ecfb60d6ec0c0d48c1925a1 100644 (file)
@@ -163,7 +163,7 @@ do_delete(
        }
 
        /* check for referrals */
-       rc = backend_check_referrals( be, conn, op, pdn->bv_val, ndn->bv_val );
+       rc = backend_check_referrals( be, conn, op, pdn, ndn );
        if ( rc != LDAP_SUCCESS ) {
                goto cleanup;
        }
index 9b1ece0d29f39aeac59ddfcaa4d6945154cf0120..a1316fc983c4432cfec7fa30a9a545485434d102 100644 (file)
@@ -317,7 +317,7 @@ do_modify(
        }
 
        /* check for referrals */
-       rc = backend_check_referrals( be, conn, op, pdn->bv_val, ndn->bv_val );
+       rc = backend_check_referrals( be, conn, op, pdn, ndn );
        if ( rc != LDAP_SUCCESS ) {
                goto cleanup;
        }
index cb3d6238db1b32ae986e280dadbc8167d23ce2e0..b28bae6c107ccd66ab142f55557ad68d14893782 100644 (file)
@@ -343,7 +343,7 @@ do_modrdn(
        }
 
        /* check for referrals */
-       rc = backend_check_referrals( be, conn, op, pdn->bv_val, ndn->bv_val );
+       rc = backend_check_referrals( be, conn, op, pdn, ndn );
        if ( rc != LDAP_SUCCESS ) {
                goto cleanup;
        }
index 1f2ffdefc07661f7be67ddd42abdcd813152963f..e6822de7506987d4e3e2b9ac1de994b88d38d3b7 100644 (file)
@@ -88,13 +88,20 @@ LDAP_SLAPD_F (void) acl_free LDAP_P(( AccessControl *a ));
  * at.c
  */
 
-LDAP_SLAPD_F (void) at_config LDAP_P(( const char *fname, int lineno, int argc, char **argv ));
-LDAP_SLAPD_F (AttributeType *) at_find LDAP_P(( const char *name ));
-LDAP_SLAPD_F (int) at_find_in_list LDAP_P(( AttributeType *sat, AttributeType **list ));
-LDAP_SLAPD_F (int) at_append_to_list LDAP_P(( AttributeType *sat, AttributeType ***listp ));
-LDAP_SLAPD_F (int) at_delete_from_list LDAP_P(( int pos, AttributeType ***listp ));
+LDAP_SLAPD_F (void) at_config LDAP_P((
+       const char *fname, int lineno,
+       int argc, char **argv ));
+LDAP_SLAPD_F (AttributeType *) at_find LDAP_P((
+       const char *name ));
+LDAP_SLAPD_F (int) at_find_in_list LDAP_P((
+       AttributeType *sat, AttributeType **list ));
+LDAP_SLAPD_F (int) at_append_to_list LDAP_P((
+       AttributeType *sat, AttributeType ***listp ));
+LDAP_SLAPD_F (int) at_delete_from_list LDAP_P((
+       int pos, AttributeType ***listp ));
 LDAP_SLAPD_F (int) at_schema_info LDAP_P(( Entry *e ));
-LDAP_SLAPD_F (int) at_add LDAP_P(( LDAPAttributeType *at, const char **err ));
+LDAP_SLAPD_F (int) at_add LDAP_P((
+       LDAPAttributeType *at, const char **err ));
 
 LDAP_SLAPD_F (int) is_at_subtype LDAP_P((
        AttributeType *sub,
@@ -117,9 +124,12 @@ LDAP_SLAPD_F (Attribute *) attr_dup LDAP_P(( Attribute *a ));
 LDAP_SLAPD_F (int) attr_merge LDAP_P(( Entry *e,
        AttributeDescription *desc,
        struct berval **vals ));
-LDAP_SLAPD_F (Attribute *) attrs_find LDAP_P(( Attribute *a, AttributeDescription *desc ));
-LDAP_SLAPD_F (Attribute *) attr_find LDAP_P(( Attribute *a, AttributeDescription *desc ));
-LDAP_SLAPD_F (int) attr_delete LDAP_P(( Attribute **attrs, AttributeDescription *desc ));
+LDAP_SLAPD_F (Attribute *) attrs_find LDAP_P((
+       Attribute *a, AttributeDescription *desc ));
+LDAP_SLAPD_F (Attribute *) attr_find LDAP_P((
+       Attribute *a, AttributeDescription *desc ));
+LDAP_SLAPD_F (int) attr_delete LDAP_P((
+       Attribute **attrs, AttributeDescription *desc ));
 
 LDAP_SLAPD_F (void) attrs_free LDAP_P(( Attribute *a ));
 LDAP_SLAPD_F (Attribute *) attrs_dup LDAP_P(( Attribute *a ));
@@ -157,8 +167,10 @@ LDAP_SLAPD_F (BackendDB *) select_backend LDAP_P((
        int manageDSAit,
        int noSubordinates ));
 
-LDAP_SLAPD_F (int) be_issuffix LDAP_P(( Backend *be, const char *suffix ));
-LDAP_SLAPD_F (int) be_isroot LDAP_P(( Backend *be, const char *ndn ));
+LDAP_SLAPD_F (int) be_issuffix LDAP_P(( Backend *be,
+       const char *suffix ));
+LDAP_SLAPD_F (int) be_isroot LDAP_P(( Backend *be,
+       struct berval *ndn ));
 LDAP_SLAPD_F (int) be_isroot_pw LDAP_P(( Backend *be,
        Connection *conn, const char *ndn, struct berval *cred ));
 LDAP_SLAPD_F (int) be_isupdate LDAP_P(( Backend *be, struct berval *ndn ));
@@ -181,8 +193,8 @@ LDAP_SLAPD_F( int ) backend_check_referrals LDAP_P((
        BackendDB *be,
        Connection *conn,
        Operation *op,
-       const char *dn,
-       const char *ndn ));
+       struct berval *dn,
+       struct berval *ndn ));
 
 LDAP_SLAPD_F (int) backend_connection_init LDAP_P((Connection *conn));
 LDAP_SLAPD_F (int) backend_connection_destroy LDAP_P((Connection *conn));
@@ -192,7 +204,7 @@ LDAP_SLAPD_F (int) backend_group LDAP_P((BackendDB *be,
        Operation *op,
        Entry *target,
        const char *gr_ndn,
-       const char *op_ndn,
+       struct berval *op_ndn,
        ObjectClass *group_oc,
        AttributeDescription *group_at
 ));
@@ -304,15 +316,17 @@ LDAP_SLAPD_F (long) connection_init LDAP_P((
 
 LDAP_SLAPD_F (void) connection_closing LDAP_P(( Connection *c ));
 LDAP_SLAPD_F (int) connection_state_closing LDAP_P(( Connection *c ));
-LDAP_SLAPD_F (const char *) connection_state2str LDAP_P(( int state )) LDAP_GCCATTR((const));
+LDAP_SLAPD_F (const char *) connection_state2str LDAP_P(( int state ))
+       LDAP_GCCATTR((const));
 
 LDAP_SLAPD_F (int) connection_write LDAP_P((ber_socket_t s));
 LDAP_SLAPD_F (int) connection_read LDAP_P((ber_socket_t s));
 
 LDAP_SLAPD_F (unsigned long) connections_nextid(void);
 
-LDAP_SLAPD_F (Connection *) connection_first LDAP_P((ber_socket_t *));
-LDAP_SLAPD_F (Connection *) connection_next LDAP_P((Connection *, ber_socket_t *));
+LDAP_SLAPD_F (Connection *) connection_first LDAP_P(( ber_socket_t * ));
+LDAP_SLAPD_F (Connection *) connection_next LDAP_P((
+       Connection *, ber_socket_t *));
 LDAP_SLAPD_F (void) connection_done LDAP_P((Connection *));
 
 LDAP_SLAPD_F (void) connection2anonymous LDAP_P((Connection *));
@@ -406,7 +420,8 @@ typedef int (*SLAP_EXTOP_MAIN_FN) LDAP_P((
 typedef int (*SLAP_EXTOP_GETOID_FN) LDAP_P((
        int index, char *oid, int blen ));
 
-LDAP_SLAPD_F (int) load_extension LDAP_P((const void *module, const char *file_name));
+LDAP_SLAPD_F (int) load_extension LDAP_P((
+       const void *module, const char *file_name));
 LDAP_SLAPD_F (char *) get_supported_extension LDAP_P((int index));
 
 LDAP_SLAPD_F (int) load_extop LDAP_P((
@@ -449,7 +464,7 @@ LDAP_SLAPD_F (int) add_limits LDAP_P((
        Backend *be, int type, const char *pattern, 
        struct slap_limits_set *limit ));
 LDAP_SLAPD_F (int) parse_limits LDAP_P((
-        Backend *be, const char *fname, int lineno, int argc, char **argv ));
+       Backend *be, const char *fname, int lineno, int argc, char **argv ));
 LDAP_SLAPD_F (int) parse_limit LDAP_P(( const char *arg, 
        struct slap_limits_set *limit ));
 
@@ -690,8 +705,10 @@ LDAP_SLAPD_F (int) is_object_subclass LDAP_P((
        ObjectClass *sup ));
 
 
-LDAP_SLAPD_F (Syntax *) syn_find LDAP_P((const char *synname));
-LDAP_SLAPD_F (Syntax *) syn_find_desc LDAP_P((const char *syndesc, int *slen));
+LDAP_SLAPD_F (Syntax *) syn_find LDAP_P((
+       const char *synname ));
+LDAP_SLAPD_F (Syntax *) syn_find_desc LDAP_P((
+       const char *syndesc, int *slen ));
 #ifdef SLAPD_BINARY_CONVERSION
 LDAP_SLAPD_F (int) syn_add LDAP_P((
        LDAPSyntax *syn,
@@ -701,7 +718,7 @@ LDAP_SLAPD_F (int) syn_add LDAP_P((
        slap_syntax_transform_func *pretty,
        slap_syntax_transform_func *ber2str,
        slap_syntax_transform_func *str2ber,
-       const char **err));
+       const char **err ));
 #else
 LDAP_SLAPD_F (int) syn_add LDAP_P((
        LDAPSyntax *syn,
@@ -709,11 +726,11 @@ LDAP_SLAPD_F (int) syn_add LDAP_P((
        slap_syntax_validate_func *validate,
        slap_syntax_transform_func *normalize,
        slap_syntax_transform_func *pretty,
-       const char **err));
+       const char **err ));
 #endif
 
 LDAP_SLAPD_F (MatchingRule *) mr_find LDAP_P((const char *mrname));
-LDAP_SLAPD_F (int) mr_add LDAP_P((LDAPMatchingRule *mr,
+LDAP_SLAPD_F (int) mr_add LDAP_P(( LDAPMatchingRule *mr,
        unsigned usage,
        slap_mr_convert_func *convert,
        slap_mr_normalize_func *normalize,
@@ -721,7 +738,7 @@ LDAP_SLAPD_F (int) mr_add LDAP_P((LDAPMatchingRule *mr,
        slap_mr_indexer_func *indexer,
        slap_mr_filter_func *filter,
        MatchingRule * associated,
-       const char **err));
+       const char **err ));
 
 LDAP_SLAPD_F (int) register_syntax LDAP_P((
        const char *desc,
@@ -744,8 +761,10 @@ LDAP_SLAPD_F (int) schema_info LDAP_P(( Entry **entry, const char **text ));
 
 LDAP_SLAPD_F (int) is_entry_objectclass LDAP_P((
        Entry *, ObjectClass *oc ));
-#define is_entry_alias(e)              is_entry_objectclass((e), slap_schema.si_oc_alias)
-#define is_entry_referral(e)   is_entry_objectclass((e), slap_schema.si_oc_referral)
+#define is_entry_alias(e)              \
+       is_entry_objectclass((e), slap_schema.si_oc_alias)
+#define is_entry_referral(e)   \
+       is_entry_objectclass((e), slap_schema.si_oc_referral)
 
 
 /*
index cd0c20c9e5a025aeaed21f1bfddcd29980632c9e..f2ba8e027368a283cbcd866508943a9871b3ff76 100644 (file)
@@ -87,8 +87,7 @@ root_dse_info(
                if ( backends[i].be_glueflags & SLAP_GLUE_SUBORDINATE )
                        continue;
                for ( j = 0; backends[i].be_suffix[j] != NULL; j++ ) {
-                       val.bv_val = backends[i].be_suffix[j];
-                       val.bv_len = strlen( val.bv_val );
+                       val = *backends[i].be_suffix[j];
                        attr_merge( e, ad_namingContexts, vals );
                }
        }
index 5f8d78c0a689bad18d857ade47bc4bbd748b5086..a6d6e36c154453f51c5d32de89c753e03cf94080 100644 (file)
@@ -317,7 +317,7 @@ do_search(
        }
 
        /* check for referrals */
-       rc = backend_check_referrals( be, conn, op, pbase->bv_val, nbase->bv_val );
+       rc = backend_check_referrals( be, conn, op, pbase, nbase );
        if ( rc != LDAP_SUCCESS ) {
                goto return_results;
        }
index c72f119ace389bf9cdb274d84404b325050e0273..02b7d6f5a0101de4a2877f788b7db1b6b64161a1 100644 (file)
@@ -850,7 +850,7 @@ typedef struct slap_backend_db BackendDB;           /* per backend database */
 
 LDAP_SLAPD_V (int) nBackendInfo;
 LDAP_SLAPD_V (int) nBackendDB;
-LDAP_SLAPD_V (BackendInfo      *) backendInfo;
+LDAP_SLAPD_V (BackendInfo *) backendInfo;
 LDAP_SLAPD_V (BackendDB *) backendDB;
 
 LDAP_SLAPD_V (int) slapMode;   
@@ -889,9 +889,13 @@ struct slap_limits {
 #define SLAP_LIMITS_ANONYMOUS  0x0006
 #define SLAP_LIMITS_USERS      0x0007
        regex_t lm_dn_regex;            /* regex data for REGEX */
-       struct berval *lm_dn_pat;       /* ndn for EXACT, BASE, ONE, SUBTREE,
-                                        * CHILDREN; pattern for REGEX; NULL
-                                        * for ANONYMOUS, USERS */
+
+       /*
+        * normalized DN for EXACT, BASE, ONE, SUBTREE, CHILDREN;
+        * pattern for REGEX; NULL for ANONYMOUS, USERS
+        */
+       struct berval *lm_dn_pat;
+
        struct slap_limits_set  lm_limits;
 };
 
@@ -981,7 +985,7 @@ struct slap_backend_db {
        slap_ssf_set_t be_ssf_set;
 
        /* these should be renamed from be_ to bd_ */
-       char    **be_suffix;    /* the DN suffixes of data in this backend */
+       struct berval **be_suffix;      /* the DN suffixes of data in this backend */
        struct berval **be_nsuffix;     /* the normalized DN suffixes in this backend */
        struct berval **be_suffixAlias; /* pairs of DN suffix aliases and deref values */
        struct berval be_rootdn;        /* the magic "root" name (DN) for this db */
@@ -998,6 +1002,7 @@ struct slap_backend_db {
        char    *be_replogfile; /* replication log file (in master)        */
        struct berval be_update_ndn;    /* allowed to make changes (in replicas) */
        struct berval **be_update_refs; /* where to refer modifying clients to */
+       char    *be_realm;
        int     be_lastmod;     /* keep track of lastmodified{by,time}     */
 
 #define        SLAP_GLUE_INSTANCE      0x01    /* a glue backend */
@@ -1005,9 +1010,6 @@ struct slap_backend_db {
 #define        SLAP_GLUE_LINKED        0x04    /* child is connected to parent */
 
        int     be_glueflags;   /* */
-
-       char    *be_realm;
-
        void    *be_private;    /* anything the backend database needs     */
 };
 
index 2e9fdeca59a0398e7b17dddb918ee0f0ca011785..dd25c6cd2c71b0ae460a988c010f2caca4e1a668 100644 (file)
@@ -79,7 +79,7 @@ main( int argc, char **argv )
                        fprintf( stderr, "%s: line %d: "
                                "database (%s) not configured to hold \"%s\"\n",
                                progname, lineno,
-                               be ? be->be_suffix[0] : "<none>",
+                               be ? be->be_suffix[0]->bv_val : "<none>",
                                e->e_dn );
                        fprintf( stderr, "%s: line %d: "
                                "database (%s) not configured to hold \"%s\"\n",