--- etc/pacman.conf.in | 2 ++ src/pacman/conf.c | 22 ++++++++++++++++++++++ src/pacman/conf.h | 2 ++ 3 files changed, 26 insertions(+) diff --git a/etc/pacman.conf.in b/etc/pacman.conf.in index 8e967fbb..3285e8ae 100644 --- a/etc/pacman.conf.in +++ b/etc/pacman.conf.in @@ -16,6 +16,8 @@ #GPGDir = @sysconfdir@/pacman.d/gnupg/ #HookDir = @sysconfdir@/pacman.d/hooks/ HoldPkg = pacman glibc +#XferClientCert = /root/certificate.pem +#XferClientKey = /root/key.pem #XferCommand = /usr/bin/curl -L -C - -f -o %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled diff --git a/src/pacman/conf.c b/src/pacman/conf.c index 29f69052..63380650 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -150,6 +150,8 @@ int config_free(config_t *oldconfig) free(oldconfig->gpgdir); FREELIST(oldconfig->hookdirs); FREELIST(oldconfig->cachedirs); + free(oldconfig->xferclientcert); + free(oldconfig->xferclientkey); free(oldconfig->xfercommand); free(oldconfig->print_format); free(oldconfig->arch); @@ -567,6 +569,12 @@ static int _parse_options(const char *key, char *value, config->logfile = strdup(value); pm_printf(ALPM_LOG_DEBUG, "config: logfile: %s\n", value); } + } else if(strcmp(key, "XferClientCert") == 0) { + config->xferclientcert = strdup(value); + pm_printf(ALPM_LOG_DEBUG, "config: xferclientcert: %s\n", value); + } else if(strcmp(key, "XferClientKey") == 0) { + config->xferclientkey = strdup(value); + pm_printf(ALPM_LOG_DEBUG, "config: xferclientkey: %s\n", value); } else if(strcmp(key, "XferCommand") == 0) { config->xfercommand = strdup(value); pm_printf(ALPM_LOG_DEBUG, "config: xfercommand: %s\n", value); @@ -753,6 +761,20 @@ static int setup_libalpm(void) register_repo(i->data); } + ret = alpm_option_set_dlclientcert(handle, config->xferclientcert); + if(ret != 0) { + pm_printf(ALPM_LOG_ERROR, _("problem setting dlclientcert '%s' (%s)\n"), + config->xferclientcert, alpm_strerror(alpm_errno(handle))); + return ret; + } + + ret = alpm_option_set_dlclientkey(handle, config->xferclientkey); + if(ret != 0) { + pm_printf(ALPM_LOG_ERROR, _("problem setting dlclientkey '%s' (%s)\n"), + config->xferclientkey, alpm_strerror(alpm_errno(handle))); + return ret; + } + if(config->xfercommand) { alpm_option_set_fetchcb(handle, download_with_xfercommand); } else if(!(alpm_capabilities() & ALPM_CAPABILITY_DOWNLOADER)) { diff --git a/src/pacman/conf.h b/src/pacman/conf.h index ababf2e0..c7a426da 100644 --- a/src/pacman/conf.h +++ b/src/pacman/conf.h @@ -125,6 +125,8 @@ typedef struct __config_t { alpm_list_t *noupgrade; alpm_list_t *noextract; alpm_list_t *overwrite_files; + char *xferclientcert; + char *xferclientkey; char *xfercommand; /* our connection to libalpm */ -- 2.19.1