From 2ea23ceb416d2a6c84a752d5a36afaf754b7c644 Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Sat, 28 Aug 2021 05:38:42 +0200 Subject: [PATCH] Switch TLS conditional compilation to feature --- .github/workflows/publish.yml | 14 +++++++++++++- Cargo.toml | 9 +++++---- src/args.rs | 14 ++------------ src/config.rs | 35 +++++------------------------------ src/main.rs | 14 ++------------ 5 files changed, 27 insertions(+), 59 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 53480cd..064a0a0 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -32,6 +32,7 @@ jobs: cross: true strip: true compress: true + cargo_flags: "" - os: ubuntu-latest target: aarch64-unknown-linux-musl artifact_name: target/aarch64-unknown-linux-musl/release/miniserve @@ -39,6 +40,7 @@ jobs: cross: true strip: false compress: true + cargo_flags: "" - os: ubuntu-latest target: armv7-unknown-linux-musleabihf artifact_name: target/armv7-unknown-linux-musleabihf/release/miniserve @@ -46,6 +48,7 @@ jobs: cross: true strip: false compress: true + cargo_flags: "" - os: ubuntu-latest target: arm-unknown-linux-musleabihf artifact_name: target/arm-unknown-linux-musleabihf/release/miniserve @@ -53,6 +56,7 @@ jobs: cross: true strip: false compress: true + cargo_flags: "" - os: ubuntu-latest target: mips-unknown-linux-musl artifact_name: target/mips-unknown-linux-musl/release/miniserve @@ -60,6 +64,7 @@ jobs: cross: true strip: false compress: true + cargo_flags: "--no-default-features" - os: ubuntu-latest target: mipsel-unknown-linux-musl artifact_name: target/mipsel-unknown-linux-musl/release/miniserve @@ -67,6 +72,7 @@ jobs: cross: true strip: false compress: true + cargo_flags: "--no-default-features" - os: ubuntu-latest target: mips64-unknown-linux-gnuabi64 artifact_name: target/mips64-unknown-linux-gnuabi64/release/miniserve @@ -74,6 +80,7 @@ jobs: cross: true strip: false compress: false + cargo_flags: "--no-default-features" - os: ubuntu-latest target: mips64el-unknown-linux-gnuabi64 artifact_name: target/mips64el-unknown-linux-gnuabi64/release/miniserve @@ -81,6 +88,7 @@ jobs: cross: true strip: false compress: false + cargo_flags: "--no-default-features" - os: ubuntu-latest target: riscv64gc-unknown-linux-gnu artifact_name: target/riscv64gc-unknown-linux-gnu/release/miniserve @@ -88,6 +96,7 @@ jobs: cross: true strip: false compress: false + cargo_flags: "--no-default-features" - os: windows-latest target: x86_64-pc-windows-msvc artifact_name: target/x86_64-pc-windows-msvc/release/miniserve.exe @@ -95,6 +104,7 @@ jobs: cross: false strip: true compress: true + cargo_flags: "" - os: macos-latest target: x86_64-apple-darwin artifact_name: target/x86_64-apple-darwin/release/miniserve @@ -102,6 +112,7 @@ jobs: cross: false strip: true compress: true + cargo_flags: "" - os: ubuntu-latest target: x86_64-unknown-freebsd artifact_name: target/x86_64-unknown-freebsd/release/miniserve @@ -109,6 +120,7 @@ jobs: cross: true strip: false compress: false + cargo_flags: "" steps: - name: Checkout code @@ -124,7 +136,7 @@ jobs: uses: actions-rs/cargo@v1 with: command: build - args: --release --locked --target=${{ matrix.target }} + args: --release --locked --target=${{ matrix.target }} ${{ matrix.cargo_flags }} use-cross: ${{ matrix.cross }} - name: Compress binaries diff --git a/Cargo.toml b/Cargo.toml index 67701dd..38f018a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,14 +51,15 @@ httparse = "1" http = "0.2" bytes = "1" atty = "0.2" +rustls = { version = "0.18", optional = true } -# Use rustls only on architecturs supported by ring. +[features] +default = ["tls"] +# This feature allows us to use rustls only on architectures supported by ring. # See also https://github.com/briansmith/ring/issues/1182 # and https://github.com/briansmith/ring/issues/562 # and https://github.com/briansmith/ring/issues/1367 -[target.'cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64", target_arch = "arm"))'.dependencies] -rustls = "0.18" -actix-web = { version = "3", features = ["rustls"] } +tls = ["rustls", "actix-web/rustls"] [dev-dependencies] assert_cmd = "2" diff --git a/src/args.rs b/src/args.rs index b6bb092..cea5658 100644 --- a/src/args.rs +++ b/src/args.rs @@ -135,22 +135,12 @@ pub struct CliArgs { pub print_completions: Option, /// TLS certificate to use - #[cfg(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - ))] + #[cfg(feature = "tls")] #[structopt(long = "tls-cert", requires = "tls-key")] pub tls_cert: Option, /// TLS private key to use - #[cfg(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - ))] + #[cfg(feature = "tls")] #[structopt(long = "tls-key", requires = "tls-cert")] pub tls_key: Option, } diff --git a/src/config.rs b/src/config.rs index 66cd81a..e2b4c3a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -8,12 +8,7 @@ use std::{ use anyhow::{anyhow, Context, Result}; use http::HeaderMap; -#[cfg(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" -))] +#[cfg(feature = "tls")] use rustls::internal::pemfile::{certs, pkcs8_private_keys}; use crate::{args::CliArgs, auth::RequiredAuth}; @@ -102,20 +97,10 @@ pub struct MiniserveConfig { pub hide_version_footer: bool, /// If set, use provided rustls config for TLS - #[cfg(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - ))] + #[cfg(feature = "tls")] pub tls_rustls_config: Option, - #[cfg(not(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - )))] + #[cfg(not(feature = "tls"))] pub tls_rustls_config: Option<()>, } @@ -152,12 +137,7 @@ impl MiniserveConfig { _ => args.port, }; - #[cfg(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - ))] + #[cfg(feature = "tls")] let tls_rustls_server_config = if let (Some(tls_cert), Some(tls_key)) = (args.tls_cert, args.tls_key) { @@ -178,12 +158,7 @@ impl MiniserveConfig { None }; - #[cfg(not(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - )))] + #[cfg(not(feature = "tls"))] let tls_rustls_server_config = None; Ok(MiniserveConfig { diff --git a/src/main.rs b/src/main.rs index 9b3d732..c60e153 100644 --- a/src/main.rs +++ b/src/main.rs @@ -227,12 +227,7 @@ async fn run(miniserve_config: MiniserveConfig) -> Result<(), ContextualError> { .default_service(web::get().to(error_404)) }); - #[cfg(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - ))] + #[cfg(feature = "tls")] let srv = if let Some(tls_config) = miniserve_config.tls_rustls_config { srv.bind_rustls(socket_addresses.as_slice(), tls_config) .map_err(|e| ContextualError::IoError("Failed to bind server".to_string(), e))? @@ -245,12 +240,7 @@ async fn run(miniserve_config: MiniserveConfig) -> Result<(), ContextualError> { .run() }; - #[cfg(not(any( - target_arch = "x86", - target_arch = "x86_64", - target_arch = "aarch64", - target_arch = "arm" - )))] + #[cfg(not(feature = "tls"))] let srv = srv .bind(socket_addresses.as_slice()) .map_err(|e| ContextualError::IoError("Failed to bind server".to_string(), e))?