Enable privileged only on linux

This commit is contained in:
Prabhpreet Dua
2024-06-13 17:34:48 +05:30
parent a75d7a53e0
commit 96bed38ad0
2 changed files with 54 additions and 48 deletions

View File

@@ -1,57 +1,64 @@
#![cfg(target_os = "linux")] fn main() {
use std::io::{stdin, stdout, Read, Write}; #[cfg(target_os = "linux")]
use std::result::Result; 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),
} }
fn main() -> Result<(), BrokerAppError> { #[cfg(target_os = "linux")]
let mut broker = BrokerServer::new(wg::NetlinkWireGuardBroker::new()?); pub mod linux {
use std::io::{stdin, stdout, Read, Write};
use std::result::Result;
let mut stdin = stdin().lock(); use rosenpass_wireguard_broker::api::msgs;
let mut stdout = stdout().lock(); use rosenpass_wireguard_broker::api::server::BrokerServer;
loop { use rosenpass_wireguard_broker::brokers::netlink as wg;
// Read the message length
let mut len = [0u8; 8];
stdin.read_exact(&mut len)?;
// Parse the message length #[derive(thiserror::Error, Debug)]
let len = u64::from_le_bytes(len); pub enum BrokerAppError {
if (len as usize) > msgs::REQUEST_MSG_BUFFER_SIZE { #[error(transparent)]
return Err(BrokerAppError::OversizedMessage(len)); 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 pub fn main() -> Result<(), BrokerAppError> {
let mut req_buf = [0u8; msgs::REQUEST_MSG_BUFFER_SIZE]; let mut broker = BrokerServer::new(wg::NetlinkWireGuardBroker::new()?);
let req_buf = &mut req_buf[..(len as usize)];
stdin.read_exact(req_buf)?;
// Process the message let mut stdin = stdin().lock();
let mut res_buf = [0u8; msgs::RESPONSE_MSG_BUFFER_SIZE]; let mut stdout = stdout().lock();
let res = match broker.handle_message(req_buf, &mut res_buf) { loop {
Ok(len) => &res_buf[..len], // Read the message length
Err(e) => { let mut len = [0u8; 8];
eprintln!("Error processing message for wireguard PSK broker: {e:?}"); stdin.read_exact(&mut len)?;
continue;
// 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 // Read the message itself
stdout.write_all(&(res.len() as u64).to_le_bytes())?; let mut req_buf = [0u8; msgs::REQUEST_MSG_BUFFER_SIZE];
stdout.write_all(&res)?; let req_buf = &mut req_buf[..(len as usize)];
stdout.flush()?; 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()?;
}
} }
} }

View File

@@ -1,4 +1,3 @@
#![cfg(target_os = "linux")]
use std::process::Stdio; use std::process::Stdio;
use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::io::{AsyncReadExt, AsyncWriteExt};