diff options
author | Sebastian Lackner <sebastian@fds-team.de> | 2015-07-04 18:39:42 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2015-08-08 02:45:09 +0200 |
commit | 578035075108a90d20f084f077badf05d1c8527c (patch) | |
tree | a6213e7ec05487053d5b7c25879c35f30e6f7808 | |
parent | ae97082e98b6c3984799ba9f3f6ccc6ef5da6034 (diff) | |
download | pacman-578035075108a90d20f084f077badf05d1c8527c.tar.gz pacman-578035075108a90d20f084f077badf05d1c8527c.tar.xz |
libalpm: Force update when database is marked as corrupted.
When a database and its signature is updated non-atomically on a server,
there is a window where a user may update the database but grab the old
signature. The database is marked as invalid by libalpm, which can be
fixed by forcing a refresh (assuming the server has caught up and the
user realizes what has happened) or with a future update of the repo.
Work around this by forcing a repository refresh whenever a database is
invalid.
Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r-- | lib/libalpm/be_sync.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index 621321d1..25c8cbec 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -198,6 +198,11 @@ int SYMEXPORT alpm_db_update(int force, alpm_db_t *db) return -1; } + /* force update of invalid databases to fix potential mismatched database/signature */ + if(db->status & DB_STATUS_INVALID) { + force = 1; + } + /* make sure we have a sane umask */ oldmask = umask(0022); |