]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Revert "regdb: use dbwrap->fetch() instead of fetch_locked() for readonly access"
authorMichael Adam <obnox@samba.org>
Sun, 30 Mar 2008 00:25:45 +0000 (01:25 +0100)
committerMichael Adam <obnox@samba.org>
Sun, 30 Mar 2008 01:05:34 +0000 (03:05 +0200)
This reverts commit 4e2be189e97f653b75bd88135a631ce0f42db267.

Metze, this broke the registry (reg_api layer), but I don't yet know
exactly how and why. By the way, the locks there had the purpose of
fetching the seqnum that really matches the data.

This needs some more thought / debugging. But I wanted to have
the tree in a working state again.

Michael

source/registry/reg_backend_db.c

index ad1706829559fdcbc45066bcaa44ac41534d3426..06f3d1acb38a2cc2d8f3987341110156926620b0 100644 (file)
@@ -706,7 +706,7 @@ int regdb_fetch_keys(const char *key, REGSUBKEY_CTR *ctr)
        fstring subkeyname;
        int ret = -1;
        TALLOC_CTX *frame = talloc_stackframe();
-       TDB_DATA value;
+       struct db_record *rec;
 
        DEBUG(11,("regdb_fetch_keys: Enter key => [%s]\n", key ? key : "NULL"));
 
@@ -722,16 +722,16 @@ int regdb_fetch_keys(const char *key, REGSUBKEY_CTR *ctr)
        }
        strupper_m(path);
 
-       ret = regdb->fetch(regdb, frame, string_term_tdb_data(path), &value);
-       if (ret != 0) {
+       rec = regdb->fetch_locked(regdb, frame, string_term_tdb_data(path));
+       if (rec == NULL) {
                ret = 0;
                goto fail;
        }
 
        ctr->seqnum = regdb_get_seqnum();
 
-       buf = value.dptr;
-       buflen = value.dsize;
+       buf = rec->value.dptr;
+       buflen = rec->value.dsize;
 
        if ( !buf ) {
                DEBUG(5,("regdb_fetch_keys: tdb lookup failed to locate key [%s]\n", key));
@@ -841,8 +841,8 @@ int regdb_fetch_values( const char* key, REGVAL_CTR *values )
 {
        char *keystr = NULL;
        TALLOC_CTX *ctx = talloc_stackframe();
+       struct db_record *rec;
        int ret = 0;
-       TDB_DATA value;
 
        DEBUG(10,("regdb_fetch_values: Looking for value of key [%s] \n", key));
 
@@ -855,20 +855,19 @@ int regdb_fetch_values( const char* key, REGVAL_CTR *values )
                goto done;
        }
 
-       ret = regdb->fetch(regdb, ctx, string_term_tdb_data(keystr), &value);
-       if (ret != 0) {
-               ret = 0;
+       rec = regdb->fetch_locked(regdb, ctx, string_term_tdb_data(keystr));
+       if (rec == NULL) {
                goto done;
        }
 
        values->seqnum = regdb_get_seqnum();
 
-       if (!value.dptr) {
+       if (!rec->value.dptr) {
                /* all keys have zero values by default */
                goto done;
        }
 
-       regdb_unpack_values(values, value.dptr, value.dsize);
+       regdb_unpack_values(values, rec->value.dptr, rec->value.dsize);
        ret = regval_ctr_numvals(values);
 
 done: