---
 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

Reply via email to