Distinguish between database that failed to verify and that are missing. Signed-off-by: Allan McRae <allan@archlinux.org> --- lib/libalpm/alpm.h | 1 + lib/libalpm/be_sync.c | 14 ++++++++++++-- lib/libalpm/db.h | 1 + lib/libalpm/error.c | 2 ++ src/pacman/conf.c | 2 +- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 28608bd..b8aab76 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -1246,6 +1246,7 @@ typedef enum _alpm_errno_t { ALPM_ERR_DB_NOT_FOUND, ALPM_ERR_DB_INVALID, ALPM_ERR_DB_INVALID_SIG, + ALPM_ERR_DB_MISSING_SIG, ALPM_ERR_DB_VERSION, ALPM_ERR_DB_WRITE, ALPM_ERR_DB_REMOVE, diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index 65d2331..72589ef 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -76,8 +76,13 @@ static int sync_db_validate(alpm_db_t *db) if(db->status & DB_STATUS_VALID || db->status & DB_STATUS_MISSING) { return 0; } + if(db->status & DB_STATUS_INVALID) { - db->handle->pm_errno = ALPM_ERR_DB_INVALID_SIG; + if(db->status & DB_STATUS_MISSING_SIG) { + db->handle->pm_errno = ALPM_ERR_DB_MISSING_SIG; + } else { + db->handle->pm_errno = ALPM_ERR_DB_INVALID_SIG; + } return -1; } @@ -121,7 +126,12 @@ static int sync_db_validate(alpm_db_t *db) if(ret) { db->status &= ~DB_STATUS_VALID; db->status |= DB_STATUS_INVALID; - db->handle->pm_errno = ALPM_ERR_DB_INVALID_SIG; + if(db->handle->pm_errno == ALPM_ERR_SIG_MISSING) { + db->status |= DB_STATUS_MISSING_SIG; + db->handle->pm_errno = ALPM_ERR_DB_MISSING_SIG; + } else { + db->handle->pm_errno = ALPM_ERR_DB_INVALID_SIG; + } return 1; } } diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index e4d9f71..909c66f 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -48,6 +48,7 @@ enum _alpm_dbstatus_t { DB_STATUS_INVALID = (1 << 1), DB_STATUS_EXISTS = (1 << 2), DB_STATUS_MISSING = (1 << 3), + DB_STATUS_MISSING_SIG = (1 << 4), DB_STATUS_LOCAL = (1 << 10), DB_STATUS_PKGCACHE = (1 << 11), diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c index 8622180..bf085e4 100644 --- a/lib/libalpm/error.c +++ b/lib/libalpm/error.c @@ -72,6 +72,8 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err) return _("invalid or corrupted database"); case ALPM_ERR_DB_INVALID_SIG: return _("invalid or corrupted database (PGP signature)"); + case ALPM_ERR_DB_MISSING_SIG: + return _("database missing required signature"); case ALPM_ERR_DB_VERSION: return _("database is incorrect version"); case ALPM_ERR_DB_WRITE: diff --git a/src/pacman/conf.c b/src/pacman/conf.c index aa27559..42b59bd 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -774,7 +774,7 @@ static int finish_section(struct section_t *section, int parse_options) } /* if we are not looking at options sections only, register a db */ - db = alpm_register_syncdb(config->handle, section->name, section->siglevel, config->op_s_upgrade); + db = alpm_register_syncdb(config->handle, section->name, section->siglevel, config->op_s_sync); if(db == NULL) { pm_printf(ALPM_LOG_ERROR, _("could not register '%s' database (%s)\n"), section->name, alpm_strerror(alpm_errno(config->handle))); -- 1.8.3.3