[pacman-dev] [PATCH] libalpm: download signatures with a fetch callback

Guillaume Benoit guillaume at manjaro.org
Fri Apr 30 09:51:29 UTC 2021


Remove an unwanted break and download signatures when using a custom fetch callback.

---
  lib/libalpm/dload.c | 43 +++++++++++++++++++++++++++++++++++++------
  1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index a4c42f8d..6f33451a 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -877,9 +877,26 @@ int _alpm_download(alpm_handle_t *handle,
  			int success = 0;
   			if(payload->fileurl) {
-				if (handle->fetchcb(payload->fileurl, localpath, payload->force) != -1) {
-					success = 1;
-					break;
+				int ret;
+
+				ret = handle->fetchcb(payload->fileurl, localpath, payload->force);
+
+				if (ret != -1) {
+					/* Let's check if client requested downloading accompanion *.sig file */
+					if(payload->download_signature) {
+						char *sig_fileurl;
+
+						size_t sig_len = strlen(payload->fileurl) + 5;
+						MALLOC(sig_fileurl, sig_len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
+						snprintf(sig_fileurl, sig_len, "%s.sig", payload->fileurl);
+
+						ret = handle->fetchcb(sig_fileurl, localpath, payload->force);
+
+						free(sig_fileurl);
+					}
+					if (ret != -1) {
+						success = 1;
+					}
  				}
  			} else {
  				for(s = payload->servers; s; s = s->next) {
@@ -892,12 +909,26 @@ int _alpm_download(alpm_handle_t *handle,
  					snprintf(fileurl, len, "%s/%s", server, payload->filepath);
   					ret = handle->fetchcb(fileurl, localpath, payload->force);
-					free(fileurl);
   					if (ret != -1) {
-						success = 1;
-						break;
+						/* Let's check if client requested downloading accompanion *.sig file */
+						if(payload->download_signature) {
+							char *sig_fileurl;
+
+							size_t sig_len = strlen(fileurl) + 5;
+							MALLOC(sig_fileurl, sig_len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
+							snprintf(sig_fileurl, sig_len, "%s.sig", fileurl);
+
+							ret = handle->fetchcb(sig_fileurl, localpath, payload->force);
+
+							free(sig_fileurl);
+						}
+						if (ret != -1) {
+							success = 1;
+							break;
+						}
  					}
+					free(fileurl);
  				}
  			}
  			if(!success && !payload->errors_ok) {
-- 
2.31.1


More information about the pacman-dev mailing list