summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/be_sync.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm/be_sync.c')
-rw-r--r--lib/libalpm/be_sync.c167
1 files changed, 1 insertions, 166 deletions
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 86015ab6..82018e15 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -136,172 +136,7 @@ valid:
return 0;
}
-int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
-{
- char *syncpath;
- const char *dbext;
- alpm_list_t *i;
- int updated = 0;
- int ret = -1;
- mode_t oldmask;
- alpm_handle_t *handle;
- int siglevel;
-
- /* Sanity checks */
- ASSERT(db != NULL, return -1);
- handle = db->handle;
- handle->pm_errno = ALPM_ERR_OK;
- ASSERT(db != handle->db_local, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
- ASSERT(db->servers != NULL, RET_ERR(handle, ALPM_ERR_SERVER_NONE, -1));
-
- if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
- return 0;
- }
-
- syncpath = get_sync_dir(handle);
- if(!syncpath) {
- 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);
-
- siglevel = alpm_db_get_siglevel(db);
-
- /* attempt to grab a lock */
- if(_alpm_handle_lock(handle)) {
- free(syncpath);
- umask(oldmask);
- RET_ERR(handle, ALPM_ERR_HANDLE_LOCK, -1);
- }
-
- dbext = db->handle->dbext;
-
- for(i = db->servers; i; i = i->next) {
- const char *server = i->data, *final_db_url = NULL;
- struct dload_payload payload = {0};
- size_t len;
- int sig_ret = 0;
-
- /* set hard upper limit of 128MiB */
- payload.max_size = 128 * 1024 * 1024;
-
- /* print server + filename into a buffer */
- len = strlen(server) + strlen(db->treename) + strlen(dbext) + 2;
- MALLOC(payload.fileurl, len,
- {
- free(syncpath);
- umask(oldmask);
- RET_ERR(handle, ALPM_ERR_MEMORY, -1);
- }
- );
- snprintf(payload.fileurl, len, "%s/%s%s", server, db->treename, dbext);
- payload.handle = handle;
- payload.force = force;
- payload.unlink_on_fail = 1;
-
- ret = _alpm_download(&payload, syncpath, NULL, &final_db_url);
- _alpm_dload_payload_reset(&payload);
- updated = (updated || ret == 0);
-
- if(ret != -1 && updated && (siglevel & ALPM_SIG_DATABASE)) {
- /* an existing sig file is no good at this point */
- char *sigpath = _alpm_sigpath(handle, _alpm_db_path(db));
- if(!sigpath) {
- ret = -1;
- break;
- }
- unlink(sigpath);
- free(sigpath);
-
-
- /* check if the final URL from internal downloader looks reasonable */
- if(final_db_url != NULL) {
- if(strlen(final_db_url) < 3
- || strcmp(final_db_url + strlen(final_db_url) - strlen(dbext),
- dbext) != 0) {
- final_db_url = NULL;
- }
- }
-
- /* if we downloaded a DB, we want the .sig from the same server */
- if(final_db_url != NULL) {
- /* print final_db_url into a buffer (leave space for .sig) */
- len = strlen(final_db_url) + 5;
- } else {
- /* print server + filename into a buffer (leave space for separator and .sig) */
- len = strlen(server) + strlen(db->treename) + strlen(dbext) + 6;
- }
-
- MALLOC(payload.fileurl, len,
- {
- free(syncpath);
- umask(oldmask);
- RET_ERR(handle, ALPM_ERR_MEMORY, -1);
- }
- );
-
- if(final_db_url != NULL) {
- snprintf(payload.fileurl, len, "%s.sig", final_db_url);
- } else {
- snprintf(payload.fileurl, len, "%s/%s%s.sig", server, db->treename, dbext);
- }
-
- payload.handle = handle;
- payload.force = 1;
- payload.errors_ok = (siglevel & ALPM_SIG_DATABASE_OPTIONAL);
-
- /* set hard upper limit of 16KiB */
- payload.max_size = 16 * 1024;
-
- sig_ret = _alpm_download(&payload, syncpath, NULL, NULL);
- /* errors_ok suppresses error messages, but not the return code */
- sig_ret = payload.errors_ok ? 0 : sig_ret;
- _alpm_dload_payload_reset(&payload);
- }
-
- if(ret != -1 && sig_ret != -1) {
- break;
- }
- }
-
- if(updated) {
- /* Cache needs to be rebuilt */
- _alpm_db_free_pkgcache(db);
-
- /* clear all status flags regarding validity/existence */
- db->status &= ~DB_STATUS_VALID;
- db->status &= ~DB_STATUS_INVALID;
- db->status &= ~DB_STATUS_EXISTS;
- db->status &= ~DB_STATUS_MISSING;
-
- /* if the download failed skip validation to preserve the download error */
- if(ret != -1 && sync_db_validate(db) != 0) {
- /* pm_errno should be set */
- ret = -1;
- }
- }
-
- if(ret == -1) {
- /* pm_errno was set by the download code */
- _alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync db: %s\n",
- alpm_strerror(handle->pm_errno));
- } else {
- handle->pm_errno = ALPM_ERR_OK;
- }
-
- _alpm_handle_unlock(handle);
- free(syncpath);
- umask(oldmask);
- return ret;
-}
-
-int SYMEXPORT alpm_dbs_update(alpm_handle_t *handle, alpm_list_t *dbs, int force) {
+int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force) {
char *syncpath;
const char *dbext = handle->dbext;
alpm_list_t *i;