From patchwork Wed Apr 15 16:48:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Preston X-Patchwork-Id: 1271336 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=busybox.net (client-ip=140.211.166.137; helo=fraxinus.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dmarc=permerror header.from=codethink.co.uk Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 492SxF2S8Rz9s71 for ; Thu, 16 Apr 2020 02:49:05 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id CDBF784483; Wed, 15 Apr 2020 16:49:03 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sVSrCXTNBc-e; Wed, 15 Apr 2020 16:49:02 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id 8DBBD83F0F; Wed, 15 Apr 2020 16:49:02 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id 3259D1BF9BA for ; Wed, 15 Apr 2020 16:48:56 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 2F87987364 for ; Wed, 15 Apr 2020 16:48:56 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QOWq41DwK6pD for ; Wed, 15 Apr 2020 16:48:55 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from imap3.hz.codethink.co.uk (imap3.hz.codethink.co.uk [176.9.8.87]) by hemlock.osuosl.org (Postfix) with ESMTPS id 2ABED8739E for ; Wed, 15 Apr 2020 16:48:55 +0000 (UTC) Received: from [167.98.27.226] (helo=ts007-build.ts005.codethink.co.uk) by imap3.hz.codethink.co.uk with esmtpsa (Exim 4.92 #3 (Debian)) id 1jOlDY-0005f3-TT; Wed, 15 Apr 2020 17:48:53 +0100 From: Thomas Preston To: buildroot@buildroot.org Date: Wed, 15 Apr 2020 17:48:45 +0100 Message-Id: <20200415164846.122126-5-thomas.preston@codethink.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200415164846.122126-1-thomas.preston@codethink.co.uk> References: <20200415164846.122126-1-thomas.preston@codethink.co.uk> MIME-Version: 1.0 Subject: [Buildroot] [PATCH v2 4/5] download: Add SFTP support (not FTPS) X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: unixmania@gmail.com, michael.drake@codethink.co.uk, yann.morin.1998@free.fr, Thomas Preston Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Add Secure File Transfer Program (SFTP) support using a simple wrapper. SFTP is a common protocol used to transfer files securely between enterprises, but it is not currently supported in Buildroot because all of the packages are usually available via HTTP, git or some other download method. SFTP is similar to FTP but it preforms all operations over an encrypted SSH transport. Signed-off-by: Thomas Preston Signed-off-by: Michael Drake --- Config.in | 4 ++++ package/pkg-download.mk | 1 + support/download/dl-wrapper | 2 +- support/download/sftp | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100755 support/download/sftp diff --git a/Config.in b/Config.in index 48fd36ff98..2050dd7a03 100644 --- a/Config.in +++ b/Config.in @@ -114,6 +114,10 @@ config BR2_SCP string "Secure copy (scp) command" default "scp" +config BR2_SFTP + string "Secure file transfer (sftp) command" + default "sftp" + config BR2_HG string "Mercurial (hg) command" default "hg" diff --git a/package/pkg-download.mk b/package/pkg-download.mk index de619ba90a..88790fe46e 100644 --- a/package/pkg-download.mk +++ b/package/pkg-download.mk @@ -15,6 +15,7 @@ export BZR := $(call qstrip,$(BR2_BZR)) export GIT := $(call qstrip,$(BR2_GIT)) export HG := $(call qstrip,$(BR2_HG)) export SCP := $(call qstrip,$(BR2_SCP)) +export SFTP := $(call qstrip,$(BR2_SFTP)) export LOCALFILES := $(call qstrip,$(BR2_LOCALFILES)) DL_WRAPPER = support/download/dl-wrapper diff --git a/support/download/dl-wrapper b/support/download/dl-wrapper index 3315bd410e..6cf0b89cba 100755 --- a/support/download/dl-wrapper +++ b/support/download/dl-wrapper @@ -88,7 +88,7 @@ main() { backend_urlencode="${uri%%+*}" backend="${backend_urlencode%|*}" case "${backend}" in - git|svn|cvs|bzr|file|scp|hg) ;; + git|svn|cvs|bzr|file|scp|hg|sftp) ;; *) backend="wget" ;; esac uri=${uri#*+} diff --git a/support/download/sftp b/support/download/sftp new file mode 100755 index 0000000000..8aeb91e0e8 --- /dev/null +++ b/support/download/sftp @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +# We want to catch any unexpected failure, and exit immediately +set -e + +# Download helper for sftp, to be called from the download wrapper script +# +# Options: +# -q Be quiet. +# -o FILE Copy to local file FILE. +# -f FILE Copy from remote file FILE. +# -u URI Download file at URI. +# +# Environment: +# SFTP : the sftp command to call + +verbose= +while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do + case "${OPT}" in + q) verbose=-q;; + o) output="${OPTARG}";; + f) filename="${OPTARG}";; + u) uri="${OPTARG}";; + :) printf "option '%s' expects a mandatory argument\n" "${OPTARG}"; exit 1;; + \?) printf "unknown option '%s'\n" "${OPTARG}" >&2; exit 1;; + esac +done + +shift $((OPTIND-1)) # Get rid of our options + +# Caller needs to single-quote its arguments to prevent them from +# being expanded a second time (in case there are spaces in them) +_sftp() { + eval ${SFTP} "${@}" +} + +_sftp ${verbose} "${@}" "'${uri}/${filename}'" "'${output}'"