Skip to content

Commit f497102

Browse files
committed
update: fix mac static link
1 parent 8285cff commit f497102

File tree

13 files changed

+1359
-30
lines changed

13 files changed

+1359
-30
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ members = [
88

99
[workspace.dependencies]
1010
lazy_static = "1.4.0"
11-
reqwest = { version = "0.11.25", features = ["multipart", "blocking", "cookies"] }
11+
reqwest = { version = "0.11.25", features = [
12+
"multipart",
13+
"blocking",
14+
"cookies",
15+
] }
1216
tokio = { version = "1.36.0", features = ["full"] }
1317
anyhow = "1.0.81"
1418
dotenvy = "0.15.7"
@@ -18,3 +22,4 @@ sudo = "0.6.0"
1822
serde = { version = "1.0.197", features = ["derive"] }
1923
serde_json = "1.0.114"
2024
home = "0.5.9"
25+
libc = "0.2.153"

crates/openconnect-core/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ anyhow = { workspace = true }
1313
ctrlc = "3.4.2"
1414
dotenvy = { workspace = true }
1515
lazy_static = "1.4.0"
16-
libc = "0.2.153"
16+
libc = { workspace = true }
1717
openconnect-sys = { path = "../openconnect-sys" }
1818
reqwest = { workspace = true }
1919
thiserror = { workspace = true }

crates/openconnect-gui/src-tauri/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ serde_json = { workspace = true }
3535
sudo = { workspace = true }
3636
thiserror = { workspace = true }
3737
tokio = { workspace = true }
38+
libc = { workspace = true }
3839
url = "2.5.0"
3940

4041
[patch.crates-io]

crates/openconnect-gui/src-tauri/src/main.rs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
mod oidc;
55
mod state;
6+
use std::os::unix::fs::PermissionsExt;
7+
68
use openconnect_core::storage::{StoredConfigs, StoredConfigsJson};
79
use state::AppState;
810
use tauri::Manager;
@@ -63,11 +65,23 @@ async fn get_stored_configs() -> anyhow::Result<StoredConfigsJson, String> {
6365
}
6466

6567
fn main() {
66-
#[cfg(not(target_os = "windows"))]
68+
#[cfg(target_os = "linux")]
6769
{
6870
sudo::escalate_if_needed().unwrap();
6971
}
7072

73+
#[cfg(target_os = "macos")]
74+
{
75+
#[cfg(debug_assertions)]
76+
sudo::escalate_if_needed().unwrap();
77+
78+
unsafe {
79+
if libc::geteuid() != 0 && openconnect_core::helper_reluanch_as_root() == 1 {
80+
std::process::exit(0);
81+
}
82+
}
83+
}
84+
7185
tauri::Builder::default()
7286
.register_uri_scheme_protocol("oidcvpn", |app, _req| {
7387
let _app_state: tauri::State<'_, AppState> = app.state();
@@ -78,6 +92,30 @@ fn main() {
7892
.body(b"Authenticated, close this window and return to the application.".to_vec())
7993
})
8094
.setup(|app| {
95+
#[cfg(not(target_os = "windows"))]
96+
{
97+
let resource_path = app
98+
.path_resolver()
99+
.resolve_resource("vpnc-scripts/vpnc-script")
100+
.expect("failed to resolve resource");
101+
102+
let file = std::fs::OpenOptions::new()
103+
.write(false)
104+
.create(false)
105+
.append(false)
106+
.read(true)
107+
.open(resource_path)
108+
.expect("failed to open file");
109+
110+
let permissions = file.metadata().unwrap().permissions();
111+
let is_executable = permissions.mode() & 0o111 != 0;
112+
if !is_executable {
113+
let mut permissions = permissions;
114+
permissions.set_mode(0o755);
115+
file.set_permissions(permissions).unwrap();
116+
}
117+
}
118+
81119
AppState::handle(app);
82120
Ok(())
83121
})

crates/openconnect-gui/src-tauri/src/state.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,8 @@ impl AppState {
180180

181181
pub async fn disconnect(&self) -> anyhow::Result<()> {
182182
if let Some(client) = self.client.read().await.as_ref() {
183-
client.disconnect();
183+
let client = client.clone();
184+
tauri::async_runtime::spawn_blocking(move || client.disconnect()).await?;
184185
}
185186

186187
// self.client.write().await.take(); // TODO: wait a few seconds and drop the client

crates/openconnect-gui/src-tauri/tauri.conf.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"tauri": {
1313
"macOSPrivateApi": true,
1414
"allowlist": {
15+
"fs": {
16+
"scope": ["$RESOURCE/*"]
17+
},
1518
"all": false,
1619
"shell": {
1720
"all": false,
@@ -51,6 +54,9 @@
5154
5255
"icons/icon.icns",
5356
"icons/icon.ico"
57+
],
58+
"resources": [
59+
"vpnc-scripts/*"
5460
]
5561
}
5662
}

0 commit comments

Comments
 (0)