diff options
Diffstat (limited to 'lib/libalpm/handle.c')
-rw-r--r-- | lib/libalpm/handle.c | 247 |
1 files changed, 152 insertions, 95 deletions
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c index 586aad1e..39b3b600 100644 --- a/lib/libalpm/handle.c +++ b/lib/libalpm/handle.c @@ -27,9 +27,7 @@ #include <limits.h> #include <sys/types.h> #include <syslog.h> -#include <time.h> #include <sys/stat.h> -#include <errno.h> /* libalpm */ #include "handle.h" @@ -48,7 +46,9 @@ pmhandle_t *_alpm_handle_new() CALLOC(handle, 1, sizeof(pmhandle_t), RET_ERR(PM_ERR_MEMORY, NULL)); - return(handle); + handle->sigverify = PM_PGP_VERIFY_OPTIONAL; + + return handle; } void _alpm_handle_free(pmhandle_t *handle) @@ -69,6 +69,11 @@ void _alpm_handle_free(pmhandle_t *handle) closelog(); } +#ifdef HAVE_LIBCURL + /* release curl handle */ + curl_easy_cleanup(handle->curl); +#endif + /* free memory */ _alpm_trans_free(handle->trans); FREE(handle->root); @@ -77,17 +82,19 @@ void _alpm_handle_free(pmhandle_t *handle) FREE(handle->logfile); FREE(handle->lockfile); FREE(handle->arch); + FREE(handle->signaturedir); FREELIST(handle->dbs_sync); FREELIST(handle->noupgrade); FREELIST(handle->noextract); FREELIST(handle->ignorepkg); FREELIST(handle->ignoregrp); FREE(handle); + } alpm_cb_log SYMEXPORT alpm_option_get_logcb() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -96,7 +103,7 @@ alpm_cb_log SYMEXPORT alpm_option_get_logcb() alpm_cb_download SYMEXPORT alpm_option_get_dlcb() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -105,7 +112,7 @@ alpm_cb_download SYMEXPORT alpm_option_get_dlcb() alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -114,7 +121,7 @@ alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb() alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -123,7 +130,7 @@ alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb() const char SYMEXPORT *alpm_option_get_root() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -132,7 +139,7 @@ const char SYMEXPORT *alpm_option_get_root() const char SYMEXPORT *alpm_option_get_dbpath() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -141,7 +148,7 @@ const char SYMEXPORT *alpm_option_get_dbpath() alpm_list_t SYMEXPORT *alpm_option_get_cachedirs() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -150,7 +157,7 @@ alpm_list_t SYMEXPORT *alpm_option_get_cachedirs() const char SYMEXPORT *alpm_option_get_logfile() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -159,16 +166,25 @@ const char SYMEXPORT *alpm_option_get_logfile() const char SYMEXPORT *alpm_option_get_lockfile() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } return handle->lockfile; } +const char SYMEXPORT *alpm_option_get_signaturedir() +{ + if(handle == NULL) { + pm_errno = PM_ERR_HANDLE_NULL; + return NULL; + } + return handle->signaturedir; +} + int SYMEXPORT alpm_option_get_usesyslog() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return -1; } @@ -177,7 +193,7 @@ int SYMEXPORT alpm_option_get_usesyslog() alpm_list_t SYMEXPORT *alpm_option_get_noupgrades() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -186,7 +202,7 @@ alpm_list_t SYMEXPORT *alpm_option_get_noupgrades() alpm_list_t SYMEXPORT *alpm_option_get_noextracts() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -195,7 +211,7 @@ alpm_list_t SYMEXPORT *alpm_option_get_noextracts() alpm_list_t SYMEXPORT *alpm_option_get_ignorepkgs() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -204,7 +220,7 @@ alpm_list_t SYMEXPORT *alpm_option_get_ignorepkgs() alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -213,7 +229,7 @@ alpm_list_t SYMEXPORT *alpm_option_get_ignoregrps() const char SYMEXPORT *alpm_option_get_arch() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -222,7 +238,7 @@ const char SYMEXPORT *alpm_option_get_arch() int SYMEXPORT alpm_option_get_usedelta() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return -1; } @@ -231,7 +247,7 @@ int SYMEXPORT alpm_option_get_usedelta() int SYMEXPORT alpm_option_get_checkspace() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return -1; } @@ -240,7 +256,7 @@ int SYMEXPORT alpm_option_get_checkspace() pmdb_t SYMEXPORT *alpm_option_get_localdb() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } @@ -249,47 +265,39 @@ pmdb_t SYMEXPORT *alpm_option_get_localdb() alpm_list_t SYMEXPORT *alpm_option_get_syncdbs() { - if (handle == NULL) { + if(handle == NULL) { pm_errno = PM_ERR_HANDLE_NULL; return NULL; } return handle->dbs_sync; } -void SYMEXPORT alpm_option_set_logcb(alpm_cb_log cb) +int SYMEXPORT alpm_option_set_logcb(alpm_cb_log cb) { - if (handle == NULL) { - pm_errno = PM_ERR_HANDLE_NULL; - return; - } + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->logcb = cb; + return 0; } -void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb) +int SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb) { - if (handle == NULL) { - pm_errno = PM_ERR_HANDLE_NULL; - return; - } + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->dlcb = cb; + return 0; } -void SYMEXPORT alpm_option_set_fetchcb(alpm_cb_fetch cb) +int SYMEXPORT alpm_option_set_fetchcb(alpm_cb_fetch cb) { - if (handle == NULL) { - pm_errno = PM_ERR_HANDLE_NULL; - return; - } + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->fetchcb = cb; + return 0; } -void SYMEXPORT alpm_option_set_totaldlcb(alpm_cb_totaldl cb) +int SYMEXPORT alpm_option_set_totaldlcb(alpm_cb_totaldl cb) { - if (handle == NULL) { - pm_errno = PM_ERR_HANDLE_NULL; - return; - } + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->totaldlcb = cb; + return 0; } int SYMEXPORT alpm_option_set_root(const char *root) @@ -304,18 +312,18 @@ int SYMEXPORT alpm_option_set_root(const char *root) if(!root) { pm_errno = PM_ERR_WRONG_ARGS; - return(-1); + return -1; } if(stat(root, &st) == -1 || !S_ISDIR(st.st_mode)) { pm_errno = PM_ERR_NOT_A_DIR; - return(-1); + return -1; } realroot = calloc(PATH_MAX+1, sizeof(char)); if(!realpath(root, realroot)) { FREE(realroot); pm_errno = PM_ERR_NOT_A_DIR; - return(-1); + return -1; } /* verify root ends in a '/' */ @@ -331,7 +339,7 @@ int SYMEXPORT alpm_option_set_root(const char *root) handle->root[rootlen-1] = '/'; FREE(realroot); _alpm_log(PM_LOG_DEBUG, "option 'root' = %s\n", handle->root); - return(0); + return 0; } int SYMEXPORT alpm_option_set_dbpath(const char *dbpath) @@ -345,11 +353,11 @@ int SYMEXPORT alpm_option_set_dbpath(const char *dbpath) ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(!dbpath) { pm_errno = PM_ERR_WRONG_ARGS; - return(-1); + return -1; } if(stat(dbpath, &st) == -1 || !S_ISDIR(st.st_mode)) { pm_errno = PM_ERR_NOT_A_DIR; - return(-1); + return -1; } /* verify dbpath ends in a '/' */ dbpathlen = strlen(dbpath); @@ -371,7 +379,7 @@ int SYMEXPORT alpm_option_set_dbpath(const char *dbpath) handle->lockfile = calloc(lockfilelen, sizeof(char)); snprintf(handle->lockfile, lockfilelen, "%s%s", handle->dbpath, lf); _alpm_log(PM_LOG_DEBUG, "option 'lockfile' = %s\n", handle->lockfile); - return(0); + return 0; } int SYMEXPORT alpm_option_add_cachedir(const char *cachedir) @@ -384,7 +392,7 @@ int SYMEXPORT alpm_option_add_cachedir(const char *cachedir) ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(!cachedir) { pm_errno = PM_ERR_WRONG_ARGS; - return(-1); + return -1; } /* don't stat the cachedir yet, as it may not even be needed. we can * fail later if it is needed and the path is invalid. */ @@ -399,14 +407,15 @@ int SYMEXPORT alpm_option_add_cachedir(const char *cachedir) newcachedir[cachedirlen-1] = '/'; handle->cachedirs = alpm_list_add(handle->cachedirs, newcachedir); _alpm_log(PM_LOG_DEBUG, "option 'cachedir' = %s\n", newcachedir); - return(0); + return 0; } -void SYMEXPORT alpm_option_set_cachedirs(alpm_list_t *cachedirs) +int SYMEXPORT alpm_option_set_cachedirs(alpm_list_t *cachedirs) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(handle->cachedirs) FREELIST(handle->cachedirs); - if(cachedirs) handle->cachedirs = cachedirs; + handle->cachedirs = cachedirs; + return 0; } int SYMEXPORT alpm_option_remove_cachedir(const char *cachedir) @@ -427,9 +436,9 @@ int SYMEXPORT alpm_option_remove_cachedir(const char *cachedir) FREE(newcachedir); if(vdata != NULL) { FREE(vdata); - return(1); + return 1; } - return(0); + return 0; } int SYMEXPORT alpm_option_set_logfile(const char *logfile) @@ -441,7 +450,7 @@ int SYMEXPORT alpm_option_set_logfile(const char *logfile) ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(!logfile) { pm_errno = PM_ERR_WRONG_ARGS; - return(-1); + return -1; } handle->logfile = strdup(logfile); @@ -456,26 +465,47 @@ int SYMEXPORT alpm_option_set_logfile(const char *logfile) handle->logstream = NULL; } _alpm_log(PM_LOG_DEBUG, "option 'logfile' = %s\n", handle->logfile); - return(0); + return 0; +} + +int SYMEXPORT alpm_option_set_signaturedir(const char *signaturedir) +{ + ALPM_LOG_FUNC; + + if(!signaturedir) { + pm_errno = PM_ERR_WRONG_ARGS; + return -1; + } + + if(handle->signaturedir) { + FREE(handle->signaturedir); + } + handle->signaturedir = strdup(signaturedir); + + _alpm_log(PM_LOG_DEBUG, "option 'signaturedir' = %s\n", handle->signaturedir); + return 0; } -void SYMEXPORT alpm_option_set_usesyslog(int usesyslog) +int SYMEXPORT alpm_option_set_usesyslog(int usesyslog) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->usesyslog = usesyslog; + return 0; } -void SYMEXPORT alpm_option_add_noupgrade(const char *pkg) +int SYMEXPORT alpm_option_add_noupgrade(const char *pkg) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->noupgrade = alpm_list_add(handle->noupgrade, strdup(pkg)); + return 0; } -void SYMEXPORT alpm_option_set_noupgrades(alpm_list_t *noupgrade) +int SYMEXPORT alpm_option_set_noupgrades(alpm_list_t *noupgrade) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(handle->noupgrade) FREELIST(handle->noupgrade); - if(noupgrade) handle->noupgrade = noupgrade; + handle->noupgrade = noupgrade; + return 0; } int SYMEXPORT alpm_option_remove_noupgrade(const char *pkg) @@ -485,22 +515,24 @@ int SYMEXPORT alpm_option_remove_noupgrade(const char *pkg) handle->noupgrade = alpm_list_remove_str(handle->noupgrade, pkg, &vdata); if(vdata != NULL) { FREE(vdata); - return(1); + return 1; } - return(0); + return 0; } -void SYMEXPORT alpm_option_add_noextract(const char *pkg) +int SYMEXPORT alpm_option_add_noextract(const char *pkg) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->noextract = alpm_list_add(handle->noextract, strdup(pkg)); + return 0; } -void SYMEXPORT alpm_option_set_noextracts(alpm_list_t *noextract) +int SYMEXPORT alpm_option_set_noextracts(alpm_list_t *noextract) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(handle->noextract) FREELIST(handle->noextract); - if(noextract) handle->noextract = noextract; + handle->noextract = noextract; + return 0; } int SYMEXPORT alpm_option_remove_noextract(const char *pkg) @@ -510,22 +542,24 @@ int SYMEXPORT alpm_option_remove_noextract(const char *pkg) handle->noextract = alpm_list_remove_str(handle->noextract, pkg, &vdata); if(vdata != NULL) { FREE(vdata); - return(1); + return 1; } - return(0); + return 0; } -void SYMEXPORT alpm_option_add_ignorepkg(const char *pkg) +int SYMEXPORT alpm_option_add_ignorepkg(const char *pkg) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->ignorepkg = alpm_list_add(handle->ignorepkg, strdup(pkg)); + return 0; } -void SYMEXPORT alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs) +int SYMEXPORT alpm_option_set_ignorepkgs(alpm_list_t *ignorepkgs) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(handle->ignorepkg) FREELIST(handle->ignorepkg); - if(ignorepkgs) handle->ignorepkg = ignorepkgs; + handle->ignorepkg = ignorepkgs; + return 0; } int SYMEXPORT alpm_option_remove_ignorepkg(const char *pkg) @@ -535,22 +569,24 @@ int SYMEXPORT alpm_option_remove_ignorepkg(const char *pkg) handle->ignorepkg = alpm_list_remove_str(handle->ignorepkg, pkg, &vdata); if(vdata != NULL) { FREE(vdata); - return(1); + return 1; } - return(0); + return 0; } -void SYMEXPORT alpm_option_add_ignoregrp(const char *grp) +int SYMEXPORT alpm_option_add_ignoregrp(const char *grp) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->ignoregrp = alpm_list_add(handle->ignoregrp, strdup(grp)); + return 0; } -void SYMEXPORT alpm_option_set_ignoregrps(alpm_list_t *ignoregrps) +int SYMEXPORT alpm_option_set_ignoregrps(alpm_list_t *ignoregrps) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(handle->ignoregrp) FREELIST(handle->ignoregrp); - if(ignoregrps) handle->ignoregrp = ignoregrps; + handle->ignoregrp = ignoregrps; + return 0; } int SYMEXPORT alpm_option_remove_ignoregrp(const char *grp) @@ -560,28 +596,49 @@ int SYMEXPORT alpm_option_remove_ignoregrp(const char *grp) handle->ignoregrp = alpm_list_remove_str(handle->ignoregrp, grp, &vdata); if(vdata != NULL) { FREE(vdata); - return(1); + return 1; } - return(0); + return 0; } -void SYMEXPORT alpm_option_set_arch(const char *arch) +int SYMEXPORT alpm_option_set_arch(const char *arch) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); if(handle->arch) FREE(handle->arch); - if(arch) handle->arch = strdup(arch); + if(arch) { + handle->arch = strdup(arch); + } else { + handle->arch = NULL; + } + return 0; } -void SYMEXPORT alpm_option_set_usedelta(int usedelta) +int SYMEXPORT alpm_option_set_usedelta(int usedelta) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->usedelta = usedelta; + return 0; } -void SYMEXPORT alpm_option_set_checkspace(int checkspace) +int SYMEXPORT alpm_option_set_checkspace(int checkspace) { - ASSERT(handle != NULL, RET_ERR_VOID(PM_ERR_HANDLE_NULL)); + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); handle->checkspace = checkspace; + return 0; +} + +int SYMEXPORT alpm_option_set_default_sigverify(pgp_verify_t level) +{ + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1)); + ASSERT(level != PM_PGP_VERIFY_UNKNOWN, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + handle->sigverify = level; + return 0; +} + +pgp_verify_t SYMEXPORT alpm_option_get_default_sigverify() +{ + ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, PM_PGP_VERIFY_UNKNOWN)); + return handle->sigverify; } /* vim: set ts=2 sw=2 noet: */ |