From bdad414c90d14c3b996c0228e43f1b30fad926cd Mon Sep 17 00:00:00 2001 From: Alice Michaela Bowman <121826205+AliceOrunitia@users.noreply.github.com> Date: Mon, 17 Jun 2024 15:48:19 +0200 Subject: [PATCH] Add cargo-test runner for macos x86-64 (#348) * added cargo-test runner for macos 86-64 --------- Co-authored-by: Prabhpreet Dua <615318+prabhpreet@users.noreply.github.com> --- .github/workflows/qc.yaml | 7 +- Cargo.lock | 14 ++++ Cargo.toml | 2 +- wireguard-broker/Cargo.toml | 2 + wireguard-broker/src/bin/priviledged.rs | 101 +++++++++++++----------- wireguard-broker/src/brokers/mod.rs | 2 +- wireguard-broker/src/brokers/netlink.rs | 2 + 7 files changed, 82 insertions(+), 48 deletions(-) diff --git a/.github/workflows/qc.yaml b/.github/workflows/qc.yaml index e70e32c..6304fad 100644 --- a/.github/workflows/qc.yaml +++ b/.github/workflows/qc.yaml @@ -110,7 +110,12 @@ jobs: - run: RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --document-private-items cargo-test: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-13] + # - ubuntu is x86-64 + # - macos-13 is also x86-64 architecture steps: - uses: actions/checkout@v3 - uses: actions/cache@v3 diff --git a/Cargo.lock b/Cargo.lock index c3e14d7..705a58a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1066,6 +1066,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "home" version = "0.5.9" @@ -2325,6 +2331,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "take-until" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4e17d8598067a8c134af59cd33c1c263470e089924a11ab61cf61690919fe3b" + [[package]] name = "tempfile" version = "3.10.1" @@ -2857,8 +2869,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ba4e9811befc20af3b6efb15924a7238ee5e8e8706a196576462a00b9f1af1" dependencies = [ "derive_builder 0.10.2", + "hex", "libc", "neli", + "take-until", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index c4c3c35..74d6d19 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,6 +77,6 @@ procspawn = {version = "1.0.0", features= ["test-support"]} #Broker dependencies (might need cleanup or changes) -wireguard-uapi = "3.0.0" +wireguard-uapi = { version = "3.0.0", features = ["xplatform"] } command-fds = "0.2.3" rustix = { version = "0.38.27", features = ["net"] } diff --git a/wireguard-broker/Cargo.toml b/wireguard-broker/Cargo.toml index 7809b29..88ac205 100644 --- a/wireguard-broker/Cargo.toml +++ b/wireguard-broker/Cargo.toml @@ -44,6 +44,7 @@ path = "src/bin/priviledged.rs" test = false doc = false required-features=["enable_broker_api"] +cfg = { target_os = "linux" } [[bin]] name = "rosenpass-wireguard-broker-socket-handler" @@ -51,3 +52,4 @@ test = false path = "src/bin/socket_handler.rs" doc = false required-features=["enable_broker_api"] +cfg = { target_os = "linux" } diff --git a/wireguard-broker/src/bin/priviledged.rs b/wireguard-broker/src/bin/priviledged.rs index d62970d..131b9ad 100644 --- a/wireguard-broker/src/bin/priviledged.rs +++ b/wireguard-broker/src/bin/priviledged.rs @@ -1,56 +1,67 @@ -use std::io::{stdin, stdout, Read, Write}; -use std::result::Result; +fn main() { + #[cfg(target_os = "linux")] + linux::main().unwrap(); -use rosenpass_wireguard_broker::api::msgs; -use rosenpass_wireguard_broker::api::server::BrokerServer; -use rosenpass_wireguard_broker::brokers::netlink as wg; - -#[derive(thiserror::Error, Debug)] -pub enum BrokerAppError { - #[error(transparent)] - IoError(#[from] std::io::Error), - #[error(transparent)] - WgConnectError(#[from] wg::ConnectError), - #[error(transparent)] - WgSetPskError(#[from] wg::SetPskError), - #[error("Oversized message {}; something about the request is fatally wrong", .0)] - OversizedMessage(u64), + #[cfg(not(target_os = "linux"))] + panic!("This binary is only supported on Linux"); } -fn main() -> Result<(), BrokerAppError> { - let mut broker = BrokerServer::new(wg::NetlinkWireGuardBroker::new()?); +#[cfg(target_os = "linux")] +pub mod linux { + use std::io::{stdin, stdout, Read, Write}; + use std::result::Result; - let mut stdin = stdin().lock(); - let mut stdout = stdout().lock(); - loop { - // Read the message length - let mut len = [0u8; 8]; - stdin.read_exact(&mut len)?; + use rosenpass_wireguard_broker::api::msgs; + use rosenpass_wireguard_broker::api::server::BrokerServer; + use rosenpass_wireguard_broker::brokers::netlink as wg; - // Parse the message length - let len = u64::from_le_bytes(len); - if (len as usize) > msgs::REQUEST_MSG_BUFFER_SIZE { - return Err(BrokerAppError::OversizedMessage(len)); - } + #[derive(thiserror::Error, Debug)] + pub enum BrokerAppError { + #[error(transparent)] + IoError(#[from] std::io::Error), + #[error(transparent)] + WgConnectError(#[from] wg::ConnectError), + #[error(transparent)] + WgSetPskError(#[from] wg::SetPskError), + #[error("Oversized message {}; something about the request is fatally wrong", .0)] + OversizedMessage(u64), + } - // Read the message itself - let mut req_buf = [0u8; msgs::REQUEST_MSG_BUFFER_SIZE]; - let req_buf = &mut req_buf[..(len as usize)]; - stdin.read_exact(req_buf)?; + pub fn main() -> Result<(), BrokerAppError> { + let mut broker = BrokerServer::new(wg::NetlinkWireGuardBroker::new()?); - // Process the message - let mut res_buf = [0u8; msgs::RESPONSE_MSG_BUFFER_SIZE]; - let res = match broker.handle_message(req_buf, &mut res_buf) { - Ok(len) => &res_buf[..len], - Err(e) => { - eprintln!("Error processing message for wireguard PSK broker: {e:?}"); - continue; + let mut stdin = stdin().lock(); + let mut stdout = stdout().lock(); + loop { + // Read the message length + let mut len = [0u8; 8]; + stdin.read_exact(&mut len)?; + + // Parse the message length + let len = u64::from_le_bytes(len); + if (len as usize) > msgs::REQUEST_MSG_BUFFER_SIZE { + return Err(BrokerAppError::OversizedMessage(len)); } - }; - // Write the response - stdout.write_all(&(res.len() as u64).to_le_bytes())?; - stdout.write_all(&res)?; - stdout.flush()?; + // Read the message itself + let mut req_buf = [0u8; msgs::REQUEST_MSG_BUFFER_SIZE]; + let req_buf = &mut req_buf[..(len as usize)]; + stdin.read_exact(req_buf)?; + + // Process the message + let mut res_buf = [0u8; msgs::RESPONSE_MSG_BUFFER_SIZE]; + let res = match broker.handle_message(req_buf, &mut res_buf) { + Ok(len) => &res_buf[..len], + Err(e) => { + eprintln!("Error processing message for wireguard PSK broker: {e:?}"); + continue; + } + }; + + // Write the response + stdout.write_all(&(res.len() as u64).to_le_bytes())?; + stdout.write_all(&res)?; + stdout.flush()?; + } } } diff --git a/wireguard-broker/src/brokers/mod.rs b/wireguard-broker/src/brokers/mod.rs index 90832a9..7c5d3fa 100644 --- a/wireguard-broker/src/brokers/mod.rs +++ b/wireguard-broker/src/brokers/mod.rs @@ -1,6 +1,6 @@ #[cfg(feature = "enable_broker_api")] pub mod mio_client; -#[cfg(feature = "enable_broker_api")] +#[cfg(all(feature = "enable_broker_api", target_os = "linux"))] pub mod netlink; pub mod native_unix; diff --git a/wireguard-broker/src/brokers/netlink.rs b/wireguard-broker/src/brokers/netlink.rs index 7cfd2ee..4c8ffda 100644 --- a/wireguard-broker/src/brokers/netlink.rs +++ b/wireguard-broker/src/brokers/netlink.rs @@ -1,3 +1,5 @@ +#![cfg(target_os = "linux")] + use std::fmt::Debug; use wireguard_uapi::linux as wg;