diff options
author | Andrew Tridgell <tridge@samba.org> | 2009-09-15 10:00:24 -0700 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2009-09-15 10:00:24 -0700 |
commit | 62dd3aadd7ee9a8abbdd42caaa140105b1b1e8d9 (patch) | |
tree | fd76884c7bc49f5fc3af30bf3ff27e7dd2eca21a /source4/lib/ldb/ldb_tdb/ldb_pack.c | |
parent | 209c278f1fdb315ebf6c83e164e518cc6737480e (diff) | |
download | samba-62dd3aadd7ee9a8abbdd42caaa140105b1b1e8d9.tar.gz samba-62dd3aadd7ee9a8abbdd42caaa140105b1b1e8d9.tar.bz2 samba-62dd3aadd7ee9a8abbdd42caaa140105b1b1e8d9.zip |
s4-ldb: cope better with corruption of tdb records
When doing an indexed search if we hit a corrupt record we abandoned
the indexed search and did a full search. The problem was that we
might have sent some records to the caller already, which means the
caller ended up with duplicate records. Fix this by returning a search
error if indexing returns an error and we have given any records to
the caller.
Diffstat (limited to 'source4/lib/ldb/ldb_tdb/ldb_pack.c')
-rw-r--r-- | source4/lib/ldb/ldb_tdb/ldb_pack.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/source4/lib/ldb/ldb_tdb/ldb_pack.c b/source4/lib/ldb/ldb_tdb/ldb_pack.c index 5640e7053c..e7aeb47e72 100644 --- a/source4/lib/ldb/ldb_tdb/ldb_pack.c +++ b/source4/lib/ldb/ldb_tdb/ldb_pack.c @@ -236,6 +236,10 @@ int ltdb_unpack_data(struct ldb_module *module, errno = EIO; goto failed; } + if (len == 0) { + errno = EIO; + goto failed; + } message->elements[i].flags = 0; message->elements[i].name = talloc_strndup(message->elements, (char *)p, len); if (message->elements[i].name == NULL) { |