From patchwork Fri Oct 19 06:38:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Peter_M=C3=BCller?= X-Patchwork-Id: 1956 Return-Path: Received: from mail01.ipfire.org (mail01.i.ipfire.org [172.28.1.200]) by web02.i.ipfire.org (Postfix) with ESMTP id EA13B61DEA for ; Thu, 18 Oct 2018 21:39:01 +0200 (CEST) Received: from mail01.i.ipfire.org (localhost [IPv6:::1]) by mail01.ipfire.org (Postfix) with ESMTP id 529AC21A13DB; Thu, 18 Oct 2018 20:39:01 +0100 (BST) Received: from mx-nbg.link38.eu (mx-nbg.link38.eu [IPv6:2a03:4000:6:432c:1f9e:48:ac3:199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mx-nbg.link38.eu", Issuer "Let's Encrypt Authority X3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 1BF0C21A13D1 for ; Thu, 18 Oct 2018 20:38:58 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=link38.eu; s=201803; t=1539891536; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references; bh=itLk8gCOsKGturX9o7LBjMCBAEkeF9VR9mffsuuLrJ8=; b=msYwLnJApXTXWJLuZpnTEJXZwA+QNBkQs9aM3e9DzFSj48cMiSSGfnz02nS/Ynq/sR/btk SwaDdcqRO6aM2HlQiYfGTbdkHfnkqPdg5RG7CY2shD3Xnt19eo2LMQ3GvK0u8QkCzyhq5t nGiy0RnO8r89AjcZWOmDZ0tXIyX47oJON1rb8UogLqoeq2drpS4dtVlUSF4r5L8wPxp1tU byCR4+Poqe5zvOVIop5XNl+Ak/Lekwl09Cbharttd3UD6lsZw818BOirYuSAq2iexJEqbT ilvXtaQFcV5IW/D6UCeBH/xECq2VG7rORcZAe56DtpGGRFTH42LSn4Tg05hgIg== From: =?utf-8?q?Peter_M=C3=BCller?= To: development@lists.ipfire.org Subject: [PATCH] fix download routines in Pakfire if behind upstream proxy Date: Thu, 18 Oct 2018 21:38:54 +0200 Message-Id: <20181018193854.7389-1-peter.mueller@link38.eu> MIME-Version: 1.0 Authentication-Results: mail01.ipfire.org; dkim=pass header.d=link38.eu; dmarc=pass (policy=none) header.from=link38.eu; spf=pass smtp.mailfrom=peter.mueller@link38.eu X-Spamd-Result: default: False [-7.49 / 11.00]; ARC_NA(0.00)[]; R_DKIM_ALLOW(-0.20)[link38.eu]; FROM_HAS_DN(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2a03:4000:6:432c:1f9e:48:ac3:199]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; TO_DN_NONE(0.00)[]; RCVD_DKIM_ARC_DNSWL_MED(-0.50)[]; RCPT_COUNT_ONE(0.00)[1]; DKIM_TRACE(0.00)[link38.eu:+]; RCVD_IN_DNSWL_MED(-0.20)[9.9.1.0.3.c.a.0.8.4.0.0.e.9.f.1.c.2.3.4.6.0.0.0.0.0.0.4.3.0.a.2.list.dnswl.org : 127.0.6.2]; MID_CONTAINS_FROM(1.00)[]; MX_GOOD(-0.01)[cached: mx-nbg.link38.eu]; DMARC_POLICY_ALLOW(-0.50)[link38.eu,none]; RCVD_COUNT_ZERO(0.00)[0]; FROM_EQ_ENVFROM(0.00)[]; IP_SCORE(-3.78)[ip: (-9.91), ipnet: 2a03:4000::/32(-4.95), asn: 197540(-3.96), country: DE(-0.09)]; ASN(0.00)[asn:197540, ipnet:2a03:4000::/32, country:DE]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-3.00)[100.00%] X-Spam-Status: No, score=-7.49 X-Rspamd-Server: mail01.i.ipfire.org X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: IPFire development talk List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: development-bounces@lists.ipfire.org Sender: "Development" Using an array for setting both HTTP and HTTPS proxy settings in functions.pl does not seem to work, the queries are still transferred directly. Setting proxies with two code lines is boilerplate-style, but works much more robust. Returned file size is now checked against values indicating download errors (0 or empty), avoiding successful returns after failed downloads. Partially fixes #11900 Signed-off-by: Peter Müller --- src/pakfire/lib/functions.pl | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pakfire/lib/functions.pl b/src/pakfire/lib/functions.pl index 12a405bd7..291a111b9 100644 --- a/src/pakfire/lib/functions.pl +++ b/src/pakfire/lib/functions.pl @@ -157,10 +157,12 @@ sub fetchfile { if ($proxysettings{'UPSTREAM_PROXY'}) { logger("DOWNLOAD INFO: Upstream proxy: \"$proxysettings{'UPSTREAM_PROXY'}\""); if ($proxysettings{'UPSTREAM_USER'}) { - $ua->proxy([["http", "https"] => "http://$proxysettings{'UPSTREAM_USER'}:$proxysettings{'UPSTREAM_PASSWORD'}@"."$proxysettings{'UPSTREAM_PROXY'}/"]); + $ua->proxy("http" => "http://$proxysettings{'UPSTREAM_USER'}:$proxysettings{'UPSTREAM_PASSWORD'}\@$proxysettings{'UPSTREAM_PROXY'}/"); + $ua->proxy("https" => "http://$proxysettings{'UPSTREAM_USER'}:$proxysettings{'UPSTREAM_PASSWORD'}\@$proxysettings{'UPSTREAM_PROXY'}/"); logger("DOWNLOAD INFO: Logging in with: \"$proxysettings{'UPSTREAM_USER'}\" - \"$proxysettings{'UPSTREAM_PASSWORD'}\""); } else { - $ua->proxy([["http", "https"] => "http://$proxysettings{'UPSTREAM_PROXY'}/"]); + $ua->proxy("http" => "http://$proxysettings{'UPSTREAM_PROXY'}/"); + $ua->proxy("https" => "http://$proxysettings{'UPSTREAM_PROXY'}/"); } } @@ -180,7 +182,14 @@ sub fetchfile { my $result = $ua->head($url); my $remote_headers = $result->headers; $total_size = $remote_headers->content_length; - logger("DOWNLOAD INFO: $file has size of $total_size bytes"); + + # validate if file download was successful (size <= 0) + if ( $total_size eq "0" || not $total_size ) { + logger("DOWNLOAD ERROR: download of $file failed with size '$total_size' bytes"); + return 1; + } else { + logger("DOWNLOAD INFO: $file has size of $total_size bytes"); + } my $response = $ua->get($url, ':content_cb' => \&callback ); message("");