mirror of
https://github.com/samba-team/samba.git
synced 2025-08-29 13:49:30 +03:00
@ -743,45 +743,3 @@ failed:
|
||||
tdb_unlockall(tdb);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
validate the integrity of all tdb hash chains. Useful when debugging
|
||||
*/
|
||||
int tdb_validate(struct tdb_context *tdb)
|
||||
{
|
||||
int h;
|
||||
for (h=-1;h<(int)tdb->header.hash_size;h++) {
|
||||
tdb_off_t rec_ptr;
|
||||
uint32_t count = 0;
|
||||
if (tdb_ofs_read(tdb, TDB_HASH_TOP(h), &rec_ptr) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed ofs_read at top of hash %d\n", h));
|
||||
return -1;
|
||||
}
|
||||
while (rec_ptr) {
|
||||
struct list_struct r;
|
||||
tdb_off_t size;
|
||||
|
||||
if (tdb_rec_read(tdb, rec_ptr, &r) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed rec_read h=%d rec_ptr=%u count=%u\n",
|
||||
h, rec_ptr, count));
|
||||
return -1;
|
||||
}
|
||||
if (tdb_ofs_read(tdb, rec_ptr + sizeof(r) + r.rec_len - sizeof(tdb_off_t), &size) == -1) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed ofs_read h=%d rec_ptr=%u count=%u\n",
|
||||
h, rec_ptr, count));
|
||||
return -1;
|
||||
}
|
||||
if (size != r.rec_len + sizeof(r)) {
|
||||
TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_validate: failed size check size=%u h=%d rec_ptr=%u count=%u\n",
|
||||
size, h, rec_ptr, count));
|
||||
return -1;
|
||||
}
|
||||
rec_ptr = r.next;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -157,7 +157,6 @@ int tdb_printfreelist(struct tdb_context *tdb);
|
||||
int tdb_validate_freelist(struct tdb_context *tdb, int *pnum_entries);
|
||||
int tdb_wipe_all(struct tdb_context *tdb);
|
||||
int tdb_freelist_size(struct tdb_context *tdb);
|
||||
int tdb_validate(struct tdb_context *tdb);
|
||||
|
||||
extern TDB_DATA tdb_null;
|
||||
|
||||
|
Reference in New Issue
Block a user