s3-dbwrap: Rewrite dbwrap_fallback_parse_record based on dbwrap_fetch_locked
[kai/samba.git] / source3 / lib / dbwrap / dbwrap.c
index 8ad6c946e93930af7292f4785c454064ded7a7f2..0635d76b2cba189327c1690c305a27b3d0b9b9a4 100644 (file)
@@ -65,14 +65,23 @@ static NTSTATUS dbwrap_fallback_parse_record(struct db_context *db, TDB_DATA key
                                                            void *private_data),
                                             void *private_data)
 {
+       struct db_record *rec;
        TDB_DATA data;
-       NTSTATUS status;
 
-       status = dbwrap_fetch(db, talloc_tos(), key, &data);
-       if (!NT_STATUS_IS_OK(status)) {
-               return status;
+       rec = dbwrap_fetch_locked(db, talloc_tos(), key);
+       if (rec == NULL) {
+               return NT_STATUS_NOT_FOUND;
+       }
+       data = dbwrap_record_get_value(rec);
+
+       data.dptr = talloc_memdup(talloc_tos(), data.dptr, data.dsize);
+       TALLOC_FREE(rec);
+       if (data.dptr == NULL) {
+               return NT_STATUS_NO_MEMORY;
        }
+
        parser(key, data, private_data);
+
        TALLOC_FREE(data.dptr);
        return NT_STATUS_OK;
 }