From c748eadc80593c3941b55b1d4ec6e46899abd295 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 7 Jun 2011 23:08:06 -0500 Subject: Allow invalid sync DBs to be returned by the library They are placeholders, but important for things like trying to re-sync a database missing a signature. By using the alpm_db_validity() method at the right time, a client can take the appropriate action with these invalid databases as necessary. In pacman's case, we disallow just about anything that involves looking at a sync database outside of an '-Sy' operation (although we do check the validity immediately after). A few operations are still permitted- '-Q' ops that don't touch sync databases as well as '-R'. Signed-off-by: Dan McGee --- src/pacman/util.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/pacman/util.c') diff --git a/src/pacman/util.c b/src/pacman/util.c index 28beaca3..c367d36e 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -49,9 +49,12 @@ #include "callback.h" -int trans_init(alpm_transflag_t flags) +int trans_init(alpm_transflag_t flags, int check_valid) { int ret; + + check_syncdbs(0, check_valid); + if(config->print) { ret = alpm_trans_init(config->handle, flags, NULL, NULL, NULL); } else { @@ -101,6 +104,31 @@ int needs_root(void) } } +int check_syncdbs(size_t need_repos, int check_valid) +{ + int ret = 0; + alpm_list_t *i; + alpm_list_t *sync_dbs = alpm_option_get_syncdbs(config->handle); + + if(need_repos && sync_dbs == NULL) { + pm_printf(ALPM_LOG_ERROR, _("no usable package repositories configured.\n")); + return 1; + } + + if(check_valid) { + /* ensure all known dbs are valid */ + for(i = sync_dbs; i; i = alpm_list_next(i)) { + alpm_db_t *db = i->data; + if(alpm_db_get_valid(db)) { + pm_printf(ALPM_LOG_ERROR, _("database '%s' is not valid (%s)\n"), + alpm_db_get_name(db), alpm_strerror(alpm_errno(config->handle))); + ret = 1; + } + } + } + return ret; +} + /* discard unhandled input on the terminal's input buffer */ static int flush_term_input(void) { #ifdef HAVE_TCFLUSH -- cgit v1.2.3