]> git.sur5r.net Git - openldap/commitdiff
Some more (incomplete) struct berval conversion
authorHoward Chu <hyc@openldap.org>
Wed, 26 Dec 2001 23:26:17 +0000 (23:26 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 26 Dec 2001 23:26:17 +0000 (23:26 +0000)
12 files changed:
servers/slapd/back-bdb/add.c
servers/slapd/back-bdb/bind.c
servers/slapd/back-bdb/compare.c
servers/slapd/back-bdb/delete.c
servers/slapd/back-bdb/dn2entry.c
servers/slapd/back-bdb/dn2id.c
servers/slapd/back-bdb/modify.c
servers/slapd/back-bdb/modrdn.c
servers/slapd/back-bdb/passwd.c
servers/slapd/back-bdb/proto-bdb.h
servers/slapd/back-bdb/referral.c
servers/slapd/back-bdb/search.c

index 33a2e2f08eb63b878394b637e0a990ebe4900d2b..47d9be2fa217311994a4a940781a9fd3056df973 100644 (file)
@@ -93,13 +93,17 @@ retry:      rc = txn_abort( ltid );
         * If the parent does not exist, only allow the "root" user to
         * add the entry.
         */
-       pdn = dn_parent( be, e->e_ndn );
+       pdn = dn_parent( be, e->e_nname.bv_val );
 
        if( pdn != NULL && *pdn != '\0' ) {
                Entry *matched = NULL;
+               struct berval pbv;
+
+               pbv.bv_val = pdn;
+               pbv.bv_len = e->e_nname.bv_len - (pdn - e->e_nname.bv_val);
 
                /* get parent */
-               rc = bdb_dn2entry( be, ltid, pdn, &p, &matched, 0 );
+               rc = bdb_dn2entry( be, ltid, &pbv, &p, &matched, 0 );
 
                switch( rc ) {
                case 0:
index 04be2e37e4c6d312f20e1349e9ded54d930c3343..fb43f683fc53ad48fa48556a4fd2c964de9fc877 100644 (file)
@@ -43,7 +43,7 @@ bdb_bind(
        Debug( LDAP_DEBUG_ARGS, "==> bdb_bind: dn: %s\n", dn->bv_val, 0, 0);
 
        /* get entry */
-       rc = bdb_dn2entry( be, NULL, ndn->bv_val, &e, &matched, 0 );
+       rc = bdb_dn2entry( be, NULL, ndn, &e, &matched, 0 );
 
        switch(rc) {
        case DB_NOTFOUND:
index ce394d387bac8dd06f5794cfcf323b82a2c81861..b339141ac6429c9795f7311b05a7fe6395ee675c 100644 (file)
@@ -32,7 +32,7 @@ bdb_compare(
        int             manageDSAit = get_manageDSAit( op );
 
        /* get entry */
-       rc = bdb_dn2entry( be, NULL, ndn->bv_val, &e, &matched, 0 );
+       rc = bdb_dn2entry( be, NULL, ndn, &e, &matched, 0 );
 
        switch( rc ) {
        case DB_NOTFOUND:
index 442a992a6993fbd6bcc146f16eda91a1f10b5387..0d93ff95a095815a5246afac70ab3387d4f7771d 100644 (file)
@@ -71,7 +71,7 @@ retry:        /* transaction retry */
        op->o_private = &opinfo;
 
        /* get entry for read/modify/write */
-       rc = bdb_dn2entry( be, ltid, ndn->bv_val, &e, &matched, DB_RMW );
+       rc = bdb_dn2entry( be, ltid, ndn, &e, &matched, DB_RMW );
 
        switch( rc ) {
        case 0:
@@ -120,8 +120,12 @@ retry:     /* transaction retry */
        pdn = dn_parent( be, ndn->bv_val );
 
        if( pdn != NULL && *pdn != '\0' ) {
+               struct berval pbv;
+
+               pbv.bv_len = ndn->bv_len - (pdn - ndn->bv_val);
+               pbv.bv_val = pdn;
                /* get parent */
-               rc = bdb_dn2entry( be, ltid, pdn, &p, NULL, 0 );
+               rc = bdb_dn2entry( be, ltid, &pbv, &p, NULL, 0 );
 
                switch( rc ) {
                case 0:
@@ -208,7 +212,7 @@ retry:      /* transaction retry */
                goto done;
        }
 
-       rc = bdb_dn2id_children( be, ltid, e->e_ndn );
+       rc = bdb_dn2id_children( be, ltid, &e->e_nname );
        if( rc != DB_NOTFOUND ) {
                switch( rc ) {
                case DB_LOCK_DEADLOCK:
index 5ad00ac20977efb39d0df482f89a043069048704..b95ae4ea6a9bf80b19d636fc213b4d5b48fe6f97 100644 (file)
@@ -21,7 +21,7 @@ int
 bdb_dn2entry(
        BackendDB       *be,
        DB_TXN *tid,
-       const char *dn,
+       struct berval *dn,
        Entry **e,
        Entry **matched,
        int flags )
@@ -31,7 +31,7 @@ bdb_dn2entry(
        char    *matchedDN = NULL;
 
        Debug(LDAP_DEBUG_TRACE, "bdb_dn2entry(\"%s\")\n",
-               dn, 0, 0 );
+               dn->bv_val, 0, 0 );
 
        *e = NULL;
 
index a2d688392966df9be2536e5e37a8caa71ff4309e..c764d5f3fece607ff9e3f492b80e59e4b9e15d1f 100644 (file)
@@ -194,7 +194,7 @@ int
 bdb_dn2id(
        BackendDB       *be,
        DB_TXN *txn,
-       const char      *dn,
+       struct berval   *dn,
        ID *id )
 {
        int             rc;
@@ -202,13 +202,13 @@ bdb_dn2id(
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        DB *db = bdb->bi_dn2id->bdi_db;
 
-       Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id( \"%s\" )\n", dn, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id( \"%s\" )\n", dn->bv_val, 0, 0 );
 
        DBTzero( &key );
-       key.size = strlen( dn ) + 2;
+       key.size = dn->bv_len + 2;
        key.data = ch_malloc( key.size );
        ((char *)key.data)[0] = DN_BASE_PREFIX;
-       AC_MEMCPY( &((char *)key.data)[1], dn, key.size - 1 );
+       AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 );
 
        /* store the ID */
        DBTzero( &data );
@@ -235,7 +235,7 @@ int
 bdb_dn2id_matched(
        BackendDB       *be,
        DB_TXN *txn,
-       const char      *in,
+       struct berval   *in,
        ID *id,
        char **matchedDN )
 {
@@ -243,14 +243,16 @@ bdb_dn2id_matched(
        DBT             key, data;
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        DB *db = bdb->bi_dn2id->bdi_db;
-       const char *dn = in;
+       char            *buf, *dn;
 
-       Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_matched( \"%s\" )\n", dn, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_matched( \"%s\" )\n", in->bv_val, 0, 0 );
 
        DBTzero( &key );
-       key.size = strlen( dn ) + 2;
-       key.data = ch_malloc( key.size );
-       ((char *)key.data)[0] = DN_BASE_PREFIX;
+       key.size = in->bv_len + 2;
+       buf = ch_malloc( key.size );
+       key.data = buf;
+       dn = buf+1;
+       AC_MEMCPY( dn, in->bv_val, key.size - 1 );
 
        /* store the ID */
        DBTzero( &data );
@@ -261,7 +263,7 @@ bdb_dn2id_matched(
        *matchedDN = NULL;
 
        while(1) {
-               AC_MEMCPY( &((char *)key.data)[1], dn, key.size - 1 );
+               dn[-1] = DN_BASE_PREFIX;
 
                *id = NOID;
 
@@ -278,8 +280,9 @@ bdb_dn2id_matched(
                                break;
                        }
 
+                       key.size -= pdn - dn;
                        dn = pdn;
-                       key.size = strlen( dn ) + 2;
+                       key.data = pdn - 1;
 
                } else if ( rc == 0 ) {
                        if( data.size != sizeof( ID ) ) {
@@ -289,7 +292,7 @@ bdb_dn2id_matched(
                                        (long) sizeof(ID), (long) data.size, 0 );
                        }
 
-                       if( in != dn ) {
+                       if( dn != buf+1 ) {
                                *matchedDN = (char *) dn;
                        }
 
@@ -306,7 +309,7 @@ bdb_dn2id_matched(
                }
        }
 
-       ch_free( key.data );
+       ch_free( buf );
        return rc;
 }
 
@@ -314,7 +317,7 @@ int
 bdb_dn2id_children(
        BackendDB       *be,
        DB_TXN *txn,
-       const char *dn )
+       struct berval *dn )
 {
        int             rc;
        DBT             key, data;
@@ -323,13 +326,13 @@ bdb_dn2id_children(
        ID              id;
 
        Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_children( %s )\n",
-               dn, 0, 0 );
+               dn->bv_val, 0, 0 );
 
        DBTzero( &key );
-       key.size = strlen( dn ) + 2;
+       key.size = dn->bv_len + 2;
        key.data = ch_malloc( key.size );
        ((char *)key.data)[0] = DN_ONE_PREFIX;
-       AC_MEMCPY( &((char *)key.data)[1], dn, key.size - 1 );
+       AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 );
 
        /* we actually could do a empty get... */
        DBTzero( &data );
@@ -352,7 +355,7 @@ bdb_dn2id_children(
 int
 bdb_dn2idl(
        BackendDB       *be,
-       const char      *dn,
+       struct berval   *dn,
        int prefix,
        ID *ids )
 {
@@ -361,19 +364,19 @@ bdb_dn2idl(
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        DB *db = bdb->bi_dn2id->bdi_db;
 
-       Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2idl( \"%s\" )\n", dn, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2idl( \"%s\" )\n", dn->bv_val, 0, 0 );
 
-       if (prefix == DN_SUBTREE_PREFIX && be_issuffix(be, dn))
+       if (prefix == DN_SUBTREE_PREFIX && be_issuffix(be, dn->bv_val))
        {
                BDB_IDL_ALL(bdb, ids);
                return 0;
        }
 
        DBTzero( &key );
-       key.size = strlen( dn ) + 2;
+       key.size = dn->bv_len + 2;
        key.data = ch_malloc( key.size );
        ((char *)key.data)[0] = prefix;
-       AC_MEMCPY( &((char *)key.data)[1], dn, key.size - 1 );
+       AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 );
 
        rc = bdb_idl_fetch_key( be, db, NULL, &key, ids );
 
@@ -562,8 +565,6 @@ 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 = be->be_suffix[0]->bv_len;
-
        rdns = ldap_explode_dn(be->be_nsuffix[0]->bv_val, 0);
        for (i=0; rdns[i]; i++);
        bdb->bi_nrdns = i;
@@ -603,16 +604,18 @@ int bdb_fix_dn(
        
        ldap_pvt_thread_rdwr_rlock(&bdb->bi_tree_rdwr);
        o = bdb_find_id_node(id, bdb->bi_tree);
-       rlen = bdb->bi_sufflen + 1;
+       rlen = be->be_suffix[0]->bv_len + 1;
        nrlen = be->be_nsuffix[0]->bv_len + 1;
        for (n = o; n; n=n->i_parent) {
                rlen += n->i_rdn->rdn.bv_len + 1;
                nrlen += n->i_rdn->nrdn.bv_len + 1;
        }
-       e->e_dn = ch_malloc(rlen + nrlen);
-       e->e_ndn = e->e_dn + rlen;
-       ptr = e->e_dn;
-       nptr = e->e_ndn;
+       e->e_name.bv_len = rlen - 1;
+       e->e_nname.bv_len = nrlen - 1;
+       e->e_name.bv_val = ch_malloc(rlen + nrlen);
+       e->e_nname.bv_val = e->e_name.bv_val + rlen;
+       ptr = e->e_name.bv_val;
+       nptr = e->e_nname.bv_val;
        for (n = o; n; n=n->i_parent) {
                ptr = slap_strcopy(ptr, n->i_rdn->rdn.bv_val);
                *ptr++ = ',';
@@ -739,7 +742,7 @@ int
 bdb_dn2id_matched(
        BackendDB       *be,
        DB_TXN *txn,
-       const char      *in,
+       struct berval   *in,
        ID *id,
        char **matchedDN )
 {
@@ -752,12 +755,12 @@ bdb_dn2id_matched(
                return DB_NOTFOUND;
 
        p = bdb->bi_troot;
-       if (be_issuffix(be, in)) {
+       if (be_issuffix(be, in->bv_val)) {
                *id = p->i_id;
                return 0;
        }
 
-       rdns = ldap_explode_dn(in, 0);
+       rdns = ldap_explode_dn(in->bv_val, 0);
        for (i=0; rdns[i]; i++);
        i -= bdb->bi_nrdns;
        if (i < 0)
@@ -796,7 +799,7 @@ int
 bdb_dn2id(
        BackendDB       *be,
        DB_TXN *txn,
-       const char      *dn,
+       struct berval   *dn,
        ID *id )
 {
        return bdb_dn2id_matched(be, txn, dn, id, NULL);
@@ -806,7 +809,7 @@ int
 bdb_dn2id_children(
        BackendDB       *be,
        DB_TXN *txn,
-       const char *dn )
+       struct berval   *dn )
 {
        int             rc;
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
@@ -860,7 +863,7 @@ insert_sub(
 int
 bdb_dn2idl(
        BackendDB       *be,
-       const char      *dn,
+       struct berval   *dn,
        int prefix,
        ID *ids )
 {
@@ -869,7 +872,7 @@ bdb_dn2idl(
        ID              id;
        idNode          *n;
 
-       if (prefix == DN_SUBTREE_PREFIX && be_issuffix(be, dn)) {
+       if (prefix == DN_SUBTREE_PREFIX && be_issuffix(be, dn->bv_val)) {
                BDB_IDL_ALL(bdb, ids);
                return 0;
        }
index 47ee9f247ef127d55750777d21bad36fa59c06d6..a22713c7553d78956037e309fa9c158a3aaa6d01 100644 (file)
@@ -208,7 +208,7 @@ retry:      /* transaction retry */
        op->o_private = &opinfo;
 
        /* get entry */
-       rc = bdb_dn2entry( be, ltid, ndn->bv_val, &e, &matched, 0 );
+       rc = bdb_dn2entry( be, ltid, ndn, &e, &matched, 0 );
 
        if ( rc != 0 ) {
                Debug( LDAP_DEBUG_TRACE,
index 91b6a00cb37df88f7cdd64e273f8050d301be754..a30440f53667bff6fcf0c823ffb5cc94062f3855 100644 (file)
@@ -105,7 +105,7 @@ retry:      /* transaction retry */
        op->o_private = &opinfo;
 
        /* get entry */
-       rc = bdb_dn2entry( be, ltid, ndn->bv_val, &e, &matched, 0 );
+       rc = bdb_dn2entry( be, ltid, ndn, &e, &matched, 0 );
 
        switch( rc ) {
        case 0:
index 450a7d32739cb350550726e81ec9f39b8a377f50..7da1adc28e8619c9084aea4fe3f98e7f91703257 100644 (file)
@@ -38,7 +38,7 @@ bdb_exop_passwd(
        struct berval *id = NULL;
        struct berval *new = NULL;
 
-       char *dn;
+       struct berval *dn;
 
        assert( reqoid != NULL );
        assert( strcmp( LDAP_EXOP_X_MODIFY_PASSWD, reqoid ) == 0 );
@@ -73,12 +73,12 @@ bdb_exop_passwd(
                goto done;
        }
 
-       dn = id ? id->bv_val : op->o_dn.bv_val;
+       dn = id ? id : &op->o_dn;
 
        Debug( LDAP_DEBUG_TRACE, "bdb_exop_passwd: \"%s\"%s\n",
-               dn, id ? " (proxy)" : "", 0 );
+               dn->bv_val, id ? " (proxy)" : "", 0 );
 
-       if( dn == NULL || dn[0] == '\0' ) {
+       if( dn->bv_len == 0 ) {
                *text = "No password is associated with the Root DSE";
                rc = LDAP_OPERATIONS_ERROR;
                goto done;
index 5323b643b9a6a5451198a8c7341a24aed4c27afd..5861142f89d34299b56cec75bee1b24481941e19 100644 (file)
@@ -58,7 +58,7 @@ bdb_db_cache(
  * dn2entry.c
  */
 int bdb_dn2entry LDAP_P(( BackendDB *be, DB_TXN *tid,
-       const char *dn, Entry **e, Entry **matched, int flags ));
+       struct berval *dn, Entry **e, Entry **matched, int flags ));
 
 /*
  * dn2id.c
@@ -66,13 +66,13 @@ int bdb_dn2entry LDAP_P(( BackendDB *be, DB_TXN *tid,
 int bdb_dn2id(
        BackendDB *be,
        DB_TXN *tid,
-       const char *dn,
+       struct berval *dn,
        ID *id );
 
 int bdb_dn2id_matched(
        BackendDB *be,
        DB_TXN *tid,
-       const char *dn,
+       struct berval *dn,
        ID *id,
        char **matchedDN );
 
@@ -91,12 +91,12 @@ int bdb_dn2id_delete(
 int bdb_dn2id_children(
        BackendDB *be,
        DB_TXN *tid,
-       const char *dn );
+       struct berval *dn );
 
 int
 bdb_dn2idl(
        BackendDB       *be,
-       const char      *dn,
+       struct berval   *dn,
        int prefix,
        ID *ids );
 
index 7a827ed2b619276a131269476718f3f4a56894e7..941a34d04256f83d1077b2be1db7ecec24337e5a 100644 (file)
@@ -36,7 +36,7 @@ bdb_referrals(
        } 
 
        /* get entry */
-       rc = bdb_dn2entry( be, NULL, ndn->bv_val, &e, &matched, 0 );
+       rc = bdb_dn2entry( be, NULL, ndn, &e, &matched, 0 );
 
        switch(rc) {
        case DB_NOTFOUND:
index d930f9d09c424e3f4cc0fbc99115d7458317946a..66772e42a49f508524fdb1d6b32ff18120f83b85 100644 (file)
@@ -78,7 +78,7 @@ bdb_search(
        } else
 #endif
        {
-               rc = bdb_dn2entry( be, NULL, nbase->bv_val, &e, &matched, 0 );
+               rc = bdb_dn2entry( be, NULL, nbase, &e, &matched, 0 );
        }
 
        switch(rc) {