mirror of
git://git.gnupg.org/gnupg.git
synced 2025-02-07 17:33:02 +01:00
gpg: Auto-fix a broken trustdb with just the version record.
* g10/tdbio.c (get_trusthashrec): Create hashtable on error. GnuPG-bug-id: 3839 Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
a750ebebf3
commit
eb68c2d3d1
14
g10/tdbio.c
14
g10/tdbio.c
@ -990,6 +990,20 @@ get_trusthashrec (ctrl_t ctrl)
|
|||||||
log_fatal (_("%s: error reading version record: %s\n"),
|
log_fatal (_("%s: error reading version record: %s\n"),
|
||||||
db_name, gpg_strerror (rc) );
|
db_name, gpg_strerror (rc) );
|
||||||
|
|
||||||
|
if (!vr.r.ver.trusthashtbl)
|
||||||
|
{
|
||||||
|
/* Oops: the trustdb is corrupt because the hashtable is
|
||||||
|
* always created along with the version record. However,
|
||||||
|
* if something went initially wrong it may happen that
|
||||||
|
* there is just the version record. We try to fix it here.
|
||||||
|
* If we can't do that we return 0 - this is the version
|
||||||
|
* record and thus the actual read will detect the mismatch
|
||||||
|
* and bail out. Note that create_hashtable updates VR. */
|
||||||
|
take_write_lock ();
|
||||||
|
if (lseek (db_fd, 0, SEEK_END) == TRUST_RECORD_LEN)
|
||||||
|
create_hashtable (ctrl, &vr, 0);
|
||||||
|
release_write_lock ();
|
||||||
|
}
|
||||||
trusthashtbl = vr.r.ver.trusthashtbl;
|
trusthashtbl = vr.r.ver.trusthashtbl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user