Files
firezone/rust/connlib/shared/Cargo.toml
Reactor Scram a10d76c525 chore(linux): revert /etc/resolv.conf on exit if we changed it to control DNS (#4148)
This isn't really user-facing, so I marked it down from `feat` to
`chore`. Closes #3817

- If we exit gracefully, `/etc/resolv.conf` is reverted
- We always keep the `.before-firezone` backup in case we lose power and
the revert transaction is corrupted or rolled back
- We use a magic header to detect whether the last run was a crash or
not. If Firezone crashes and the user wants to modify their default DNS,
they need to delete that header so that Firezone won't accidentally
revert its backup and trash their change.
- All error variants for this module replaced with `anyhow::Error` since
they were never matched by callers.

I ran `cargo mutants` locally and it helped me validate the unit tests
and it picked up a `match` branch that I forgot to delete.

```[tasklist]
- [x] (Failed: Integration tests didn't like it) ~~Add the system default resolvers below Firezone's sentinels~~
- [x] `tracing::info` "Last run crashed" if we have to revert the file at startup
```

---------

Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
2024-03-18 16:29:25 +00:00

75 lines
2.7 KiB
TOML

[package]
name = "connlib-shared"
# mark:automatic-version
version = "1.0.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
mock = []
[dependencies]
anyhow = "1.0.80"
# Will be needed to safely modify `/etc/resolv.conf`
atomicwrites = "0.4.3"
secrecy = { workspace = true, features = ["serde", "bytes"] }
base64 = { version = "0.22", default-features = false, features = ["std"] }
boringtun = { workspace = true }
chrono = { workspace = true }
futures = { version = "0.3", default-features = false, features = ["std", "async-await", "executor"] }
futures-util = { version = "0.3", default-features = false, features = ["std", "async-await", "async-await-macro"] }
ip_network = { version = "0.4", default-features = false, features = ["serde"] }
# Needed to mark functions as exempt from `cargo-mutants` testing
mutants = "0.0.3"
os_info = { version = "3", default-features = false }
parking_lot = "0.12"
rand = { version = "0.8", default-features = false, features = ["std"] }
rand_core = { version = "0.6.4", default-features = false, features = ["std"] }
resolv-conf = "0.7.0"
serde = { version = "1.0", default-features = false, features = ["derive", "std"] }
serde_json = { version = "1.0", default-features = false, features = ["std"] }
thiserror = { version = "1.0", default-features = false }
tokio = { version = "1.36", default-features = false, features = ["fs", "rt", "rt-multi-thread"]}
tokio-stream = { version = "0.1", features = ["time"] }
tokio-tungstenite = { version = "0.21", default-features = false, features = ["connect", "handshake", "rustls-tls-webpki-roots"] }
tracing = { workspace = true }
tracing-appender = "0.2"
url = { version = "2.4.1", default-features = false }
uuid = { version = "1.7", default-features = false, features = ["std", "v4", "serde"] }
ring = "0.17"
hickory-resolver = { workspace = true }
domain = { workspace = true }
libc = "0.2"
dns-lookup = { workspace = true }
known-folders = "1.1.0"
snownet = { workspace = true }
phoenix-channel = { workspace = true }
# Needed for Android logging until tracing is working
log = "0.4"
[dev-dependencies]
anyhow = "1.0"
itertools = "0.12"
tempfile = "3.10.1"
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies]
swift-bridge = { workspace = true }
[target.'cfg(target_os = "android")'.dependencies]
tracing-android = "0.2"
[target.'cfg(target_os = "linux")'.dependencies]
rtnetlink = { workspace = true }
# Windows tunnel dependencies
[target.'cfg(target_os = "windows")'.dependencies]
wintun = "0.4.0"
# Windows Win32 API
[target.'cfg(windows)'.dependencies.windows]
version = "0.54.0"
features = [
"Win32_Foundation",
]