[pacman-dev] [PATCH 2/2] pacman: Add XferClientCert and XferClientKey options.

Maarten de Vries maarten at de-vri.es
Wed Nov 14 16:37:14 UTC 2018


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


More information about the pacman-dev mailing list