From 487eaef12d79f2011b121fcf7c32c6101cdd0567 Mon Sep 17 00:00:00 2001 From: errorxyz Date: Mon, 9 Dec 2024 22:25:28 +0530 Subject: [PATCH 1/6] add LocalRedirector.unavailable_reason() --- mitmproxy-rs/mitmproxy_rs/tun.pyi | 1 - mitmproxy-rs/src/lib.rs | 2 +- mitmproxy-rs/src/server/local_redirector.rs | 24 ++++++++++++++- mitmproxy-rs/src/server/mod.rs | 2 +- mitmproxy-rs/src/server/tun.rs | 33 +++++++++++---------- 5 files changed, 42 insertions(+), 20 deletions(-) diff --git a/mitmproxy-rs/mitmproxy_rs/tun.pyi b/mitmproxy-rs/mitmproxy_rs/tun.pyi index 52d898e8..99652906 100644 --- a/mitmproxy-rs/mitmproxy_rs/tun.pyi +++ b/mitmproxy-rs/mitmproxy_rs/tun.pyi @@ -4,7 +4,6 @@ from collections.abc import Awaitable, Callable from typing import final from . import Stream -def unavailable_reason() -> str | None: ... async def create_tun_interface( handle_tcp_stream: Callable[[Stream], Awaitable[None]], handle_udp_stream: Callable[[Stream], Awaitable[None]], diff --git a/mitmproxy-rs/src/lib.rs b/mitmproxy-rs/src/lib.rs index fbe3cebb..a44c885d 100644 --- a/mitmproxy-rs/src/lib.rs +++ b/mitmproxy-rs/src/lib.rs @@ -62,7 +62,7 @@ mod mitmproxy_rs { #[pymodule] mod tun { #[pymodule_export] - use crate::server::{create_tun_interface, unavailable_reason, TunInterface}; + use crate::server::{create_tun_interface, TunInterface}; } #[pymodule] diff --git a/mitmproxy-rs/src/server/local_redirector.rs b/mitmproxy-rs/src/server/local_redirector.rs index 554e2d4d..e3666b21 100644 --- a/mitmproxy-rs/src/server/local_redirector.rs +++ b/mitmproxy-rs/src/server/local_redirector.rs @@ -11,6 +11,9 @@ use std::path::Path; #[cfg(windows)] use std::path::PathBuf; +#[cfg(target_os = "linux")] +use nix::unistd; + use crate::server::base::Server; use tokio::sync::mpsc; @@ -62,6 +65,25 @@ impl LocalRedirector { self.server.wait_closed(py) } + /// Returns a `str` describing why local redirect mode is unavailable, or `None` if it is available. + /// + /// Reasons for unavailability may be an unsupported platform, or missing privileges. + #[staticmethod] + pub fn unavailable_reason() -> Option { + #[cfg(any(windows, target_os = "macos"))] + return None; + + #[cfg(target_os = "linux")] + if !unistd::geteuid().is_root() { + Some(String::from("mitmproxy is not running as root")) + } else { + return None; + } + + #[cfg(not(any(windows, target_os = "macos", target_os = "linux")))] + Some(String::from("OS not supported for local redirect mode")) + } + pub fn __repr__(&self) -> String { format!("Local Redirector({})", self.spec) } @@ -135,6 +157,6 @@ pub fn start_local_redirector( } #[cfg(not(any(windows, target_os = "macos")))] Err(pyo3::exceptions::PyNotImplementedError::new_err( - "OS proxy mode is only available on Windows and macOS", + LocalRedirector::unavailable_reason(), )) } diff --git a/mitmproxy-rs/src/server/mod.rs b/mitmproxy-rs/src/server/mod.rs index 2b1aa8d8..cfc29981 100644 --- a/mitmproxy-rs/src/server/mod.rs +++ b/mitmproxy-rs/src/server/mod.rs @@ -5,6 +5,6 @@ mod udp; mod wireguard; pub use local_redirector::{start_local_redirector, LocalRedirector}; -pub use tun::{create_tun_interface, unavailable_reason, TunInterface}; +pub use tun::{create_tun_interface, TunInterface}; pub use udp::{start_udp_server, UdpServer}; pub use wireguard::{start_wireguard_server, WireGuardServer}; diff --git a/mitmproxy-rs/src/server/tun.rs b/mitmproxy-rs/src/server/tun.rs index 4525a4f9..1cb40336 100644 --- a/mitmproxy-rs/src/server/tun.rs +++ b/mitmproxy-rs/src/server/tun.rs @@ -31,6 +31,22 @@ impl TunInterface { self.server.wait_closed(py) } + /// Returns a `str` describing why tun mode is unavailable, or `None` if TUN mode is available. + /// + /// Reasons for unavailability may be an unsupported platform, or missing privileges. + #[staticmethod] + pub fn unavailable_reason() -> Option { + #[cfg(target_os = "linux")] + if !unistd::geteuid().is_root() { + Some(String::from("mitmproxy is not running as root")) + } else { + None + } + + #[cfg(not(target_os = "linux"))] + Some(String::from("OS not supported for TUN proxy mode")) + } + pub fn __repr__(&self) -> String { format!("TunInterface({})", self.tun_name) } @@ -62,22 +78,7 @@ pub fn create_tun_interface( } #[cfg(not(target_os = "linux"))] Err(pyo3::exceptions::PyNotImplementedError::new_err( - unavailable_reason(), + TunInterface::unavailable_reason(), )) } -/// Returns a `str` describing why tun mode is unavailable, or `None` if TUN mode is available. -/// -/// Reasons for unavailability may be an unsupported platform, or missing privileges. -#[pyfunction] -pub fn unavailable_reason() -> Option { - #[cfg(target_os = "linux")] - if !unistd::geteuid().is_root() { - Some(String::from("mitmproxy is not running as root")) - } else { - None - } - - #[cfg(not(target_os = "linux"))] - Some(String::from("OS not supported for TUN proxy mode")) -} From c1dc4628e03c2c96d0a6c01a0dfa07571f917453 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:52:39 +0000 Subject: [PATCH 2/6] [autofix.ci] apply automated fixes --- mitmproxy-rs/src/server/tun.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/mitmproxy-rs/src/server/tun.rs b/mitmproxy-rs/src/server/tun.rs index 1cb40336..261287bd 100644 --- a/mitmproxy-rs/src/server/tun.rs +++ b/mitmproxy-rs/src/server/tun.rs @@ -81,4 +81,3 @@ pub fn create_tun_interface( TunInterface::unavailable_reason(), )) } - From 7d8718d2e31d6fed8891f77d04c54ce5e3420223 Mon Sep 17 00:00:00 2001 From: errorxyz Date: Wed, 11 Dec 2024 01:28:13 +0530 Subject: [PATCH 3/6] add methods to .pyi file --- mitmproxy-rs/mitmproxy_rs/local.pyi | 1 + mitmproxy-rs/mitmproxy_rs/tun.pyi | 1 + 2 files changed, 2 insertions(+) diff --git a/mitmproxy-rs/mitmproxy_rs/local.pyi b/mitmproxy-rs/mitmproxy_rs/local.pyi index d10514c0..cde5e26a 100644 --- a/mitmproxy-rs/mitmproxy_rs/local.pyi +++ b/mitmproxy-rs/mitmproxy_rs/local.pyi @@ -15,3 +15,4 @@ class LocalRedirector: def set_intercept(self, spec: str) -> None: ... def close(self) -> None: ... async def wait_closed(self) -> None: ... + def unavailable_reason() -> str | None: ... diff --git a/mitmproxy-rs/mitmproxy_rs/tun.pyi b/mitmproxy-rs/mitmproxy_rs/tun.pyi index 99652906..31ba1f3f 100644 --- a/mitmproxy-rs/mitmproxy_rs/tun.pyi +++ b/mitmproxy-rs/mitmproxy_rs/tun.pyi @@ -15,3 +15,4 @@ class TunInterface: def close(self) -> None: ... async def wait_closed(self) -> None: ... def __repr__(self) -> str: ... + def unavailable_reason() -> str | None: ... From f2607619cd5a9fa585aa7a46fa2a7e3accd1fde0 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 19:59:20 +0000 Subject: [PATCH 4/6] [autofix.ci] apply automated fixes --- mitmproxy-rs/src/server/local_redirector.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitmproxy-rs/src/server/local_redirector.rs b/mitmproxy-rs/src/server/local_redirector.rs index e3666b21..62e62a6b 100644 --- a/mitmproxy-rs/src/server/local_redirector.rs +++ b/mitmproxy-rs/src/server/local_redirector.rs @@ -77,7 +77,7 @@ impl LocalRedirector { if !unistd::geteuid().is_root() { Some(String::from("mitmproxy is not running as root")) } else { - return None; + None } #[cfg(not(any(windows, target_os = "macos", target_os = "linux")))] From af0caa3aa16a917699df31b8e0d0aed8de2e973a Mon Sep 17 00:00:00 2001 From: errorxyz Date: Wed, 11 Dec 2024 01:33:22 +0530 Subject: [PATCH 5/6] mark method as static --- mitmproxy-rs/mitmproxy_rs/local.pyi | 1 + mitmproxy-rs/mitmproxy_rs/tun.pyi | 1 + 2 files changed, 2 insertions(+) diff --git a/mitmproxy-rs/mitmproxy_rs/local.pyi b/mitmproxy-rs/mitmproxy_rs/local.pyi index cde5e26a..a524cf46 100644 --- a/mitmproxy-rs/mitmproxy_rs/local.pyi +++ b/mitmproxy-rs/mitmproxy_rs/local.pyi @@ -15,4 +15,5 @@ class LocalRedirector: def set_intercept(self, spec: str) -> None: ... def close(self) -> None: ... async def wait_closed(self) -> None: ... + @staticmethod def unavailable_reason() -> str | None: ... diff --git a/mitmproxy-rs/mitmproxy_rs/tun.pyi b/mitmproxy-rs/mitmproxy_rs/tun.pyi index 31ba1f3f..0b8cf979 100644 --- a/mitmproxy-rs/mitmproxy_rs/tun.pyi +++ b/mitmproxy-rs/mitmproxy_rs/tun.pyi @@ -15,4 +15,5 @@ class TunInterface: def close(self) -> None: ... async def wait_closed(self) -> None: ... def __repr__(self) -> str: ... + @staticmethod def unavailable_reason() -> str | None: ... From 07f3ed5c7822d553a80bf77d5bd80c543a3f450a Mon Sep 17 00:00:00 2001 From: errorxyz Date: Wed, 11 Dec 2024 02:06:57 +0530 Subject: [PATCH 6/6] comment out linux stuff --- mitmproxy-rs/src/server/local_redirector.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/mitmproxy-rs/src/server/local_redirector.rs b/mitmproxy-rs/src/server/local_redirector.rs index 62e62a6b..dc0500d2 100644 --- a/mitmproxy-rs/src/server/local_redirector.rs +++ b/mitmproxy-rs/src/server/local_redirector.rs @@ -11,9 +11,6 @@ use std::path::Path; #[cfg(windows)] use std::path::PathBuf; -#[cfg(target_os = "linux")] -use nix::unistd; - use crate::server::base::Server; use tokio::sync::mpsc; @@ -73,14 +70,14 @@ impl LocalRedirector { #[cfg(any(windows, target_os = "macos"))] return None; - #[cfg(target_os = "linux")] - if !unistd::geteuid().is_root() { - Some(String::from("mitmproxy is not running as root")) - } else { - None - } + // #[cfg(target_os = "linux")] + // if !unistd::geteuid().is_root() { + // Some(String::from("mitmproxy is not running as root")) + // } else { + // None + // } - #[cfg(not(any(windows, target_os = "macos", target_os = "linux")))] + #[cfg(not(any(windows, target_os = "macos")))] Some(String::from("OS not supported for local redirect mode")) }