Commit Graph

2485 Commits

Author SHA1 Message Date
Thomas Eizinger
2eedc23b82 chore(snownet): embed more context in WireGuard errors (#9687) 2025-06-26 15:49:07 +00:00
Thomas Eizinger
46931e0a68 chore(connlib): display WireGuardError using fmt::Display (#9686)
We've since added an `fmt::Display` implementation for these errors in
our `boringtun` fork so we can make use of it in our error
implementation.
2025-06-26 14:47:36 +00:00
Thomas Eizinger
5f38ccaeab feat(gateway): free TCP NAT bindings on RSTs (#9682)
Whenever we see a TCP packet with the RST bit set, we clear the current
NAT binding and move it to the `expired` list.
2025-06-26 14:20:01 +00:00
Thomas Eizinger
6fc2ebe576 chore(gateway): log on startup (#9684)
As with some of our other applications, it is useful to know when they
restart and which version is running. Adding a log on INFO on startup
solves this.
2025-06-26 13:59:09 +00:00
Thomas Eizinger
eddc4b95fb docs(connlib): explain why DNS resource NAT needs L4 component (#9675) 2025-06-25 20:26:07 +00:00
Thomas Eizinger
f435510dab fix(connlib): wait for room join before sending messages (#9656)
To avoid race conditions, we wait for all room joins on the WebSocket to
be successful before sending any messages to the portal. This requires
us to split room join messages from other messages so we can still send
them separately.

Resolves: #9647
2025-06-25 17:34:53 +00:00
Thomas Eizinger
bf03e13cf0 feat(gateway): vary DNS resource NAT TTL by protocol (#9655)
Instead of a 1 minute TTL for all connections, we vary the TTL based on
the protocol being used. For TCP, that is 2 hours. For UDP and ICMP, we
use 2 minutes.

Resolves: #9645
2025-06-25 17:24:40 +00:00
Thomas Eizinger
d5be185ae4 chore(rust): remove telemetry spans and events (#9634)
Originally, we introduced these to gather some data from logs / warnings
that we considered to be too spammy. We've since merged a
burst-protection that will at most submit the same event once every 5
minutes.

The data from the telemetry spans themselves have not been used at all.
2025-06-25 17:15:57 +00:00
Thomas Eizinger
6972d4d62a test(windows): sleep before asserting on keyring (#9670)
I suspect that the new Windows runners are "too fast" and we hit a race
condition in the use of the keyring on Windows which causes failing CI
jobs. The attempt to fix this is to sleep for 1 seconds before every
assert in the test.
2025-06-25 17:05:30 +00:00
Thomas Eizinger
3b972643b1 feat(rust): stream logs to Sentry when enabled in PostHog (#9635)
Sentry has a new "Logs" feature where we can stream logs directly to
Sentry. Doing this for all Clients and Gateways would be way too much
data to collect though.

In order to aid debugging from customer installations, we add a
PostHog-managed feature flag that - if set to `true` - enables the
streaming of logs to Sentry. This feature flag is evaluated every time
the telemetry context is initialised:

- For all FFI usages of connlib, this happens every time a new session
is created.
- For the Windows/Linux Tunnel service, this also happens every time we
create a new session.
- For the Headless Client and Gateway, it happens on startup and
afterwards, every minute. The feature-flag context itself is only
checked every 5 minutes though so it might take up to 5 minutes before
this takes effect.

The default value - like all feature flags - is `false`. Therefore, if
there is any issue with the PostHog service, we will fallback to the
previous behaviour where logs are simply stored locally.

Resolves: #9600
2025-06-25 16:14:14 +00:00
Jamil
b68d037ef4 fix(deps): remove unused android-client-ffi dep (#9662)
fixes
https://github.com/firezone/firezone/actions/runs/15859533881/job/44713030395
2025-06-24 21:13:53 +00:00
Thomas Eizinger
4be73da21c fix(gateway): reply with cookie when rate limit is hit (#9657)
WireGuard implements a rate-limit mechanism when the number of handshake
initiations increases a certain limit. This is important because
handshakes involve asymmetric cryptography and are cryptographically
expensive. To prevent DoS attacks where other peers repeatedly ask for
new handshakes, the rate limiter implements a cookie mechanism where -
when under load - the remote peer needs to include a given cookie in new
handshakes. This cookie is tied to the peer's IP address to prevent it
from being reused by other peers.

Up until now, we have not been passing the sender's IP address to
`boringtun` and therefore, the only option when the rate limit was hit
was to error with `UnderLoad`.

By passing the source IP of the packet, `boringtun` can engage in the
cookie-reply mechanism and therefore avoid the `UnderLoad` error.

Resolves: #9643
2025-06-24 11:33:38 +00:00
Thomas Eizinger
91edd11a47 feat(gateway): send $identify event with account-slug (#9658)
When we receive the `account_slug` from the portal, the Gateway now
sends a `$identify` event to PostHog. This will allow us to target
Gateways with feature-flags based on the account they are connected to.
2025-06-24 11:31:56 +00:00
Thomas Eizinger
d376a122e4 feat(telemetry): send account_slug to PostHog (#9636)
In order to more easily target customers with certain feature flags, we
include the `account_slug` in the `$identify` event to PostHog. This
will allow us to create Cohorts in PostHog and enable / disable feature
flags for all installations of Firezone for a particular customer.
2025-06-24 09:00:24 +00:00
Thomas Eizinger
3c0e866e77 feat(connlib): listen on 52625 by default (#9593)
Presently, `connlib` always just lets the OS pick a random port for our
UDP socket. This works well in many cases but has the downside that IF
network admins would like to aid in the process of establishing direct
connections, they cannot open a specific port because it is always
random.

It doesn't cost us anything to try and bind to a particular port (here
52625) and fallback to a random one if something is listening there.

The port 52625 was chosen because:

- It is within the ephemeral port range and will therefore never be
registered to anything else.
- It is an palindrome and therefore easy to remember.
- When typing FIRE on a phone keypad, it you get the numbers 3473. 52625
is the port at the offset 3473 from the ephemeral port range.

In order for this port to be useful in establishing direct connections,
we generate optimistic candidates based on existing remote candidates by
combining the IP of all server-reflexive candidates with the port of all
host candidates.

This patch deliberately does not publicly announce this feature in the
docs or the changelog so we can first gather experience with it in our
own test environment.

Resolves: #9559
2025-06-24 08:41:08 +00:00
Thomas Eizinger
a91dda139f feat(connlib): only conditionally hash firezone ID (#9633)
A bit of legacy that we have inherited around our Firezone ID is that
the ID stored on the user's device is sha'd before being passed to the
portal as the "external ID". This makes it difficult to correlate IDs in
Sentry and PostHog with the data we have in the portal. For Sentry and
PostHog, we submit the raw UUID stored on the user's device.

As a first step in overcoming this, we embed an "external ID" in those
services as well IF the provided Firezone ID is a valid UUID. This will
allow us to immediately correlate those events.

As a second step, we automatically generate all new Firezone IDs for the
Windows and Linux Client as `hex(sha256(uuid))`. These won't parse as
valid UUIDs and therefore will be submitted as is to the portal.

As a third step, we update all documentation around generating Firezone
IDs to use `uuidgen | sha256` instead of just `uuidgen`. This is
effectively the equivalent of (2) but for the Headless Client and
Gateway where the Firezone ID can be configured via environment
variables.

Resolves: #9382

---------

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2025-06-24 07:05:48 +00:00
Thomas Eizinger
686918f1d1 chore(rust): bump str0m (#9591)
The latest `main` of str0m undoes a breaking change in the constructor
of `Candidate::relayed` by flipping the parameters back. This will make
it easier to upgrade to the latest release once it is out.
2025-06-24 06:57:55 +00:00
Thomas Eizinger
1bd3d2a382 chore(gateway): remove NAT64/46 module (#9626)
This has been disabled for several releases now and is not causing any
problems in production. We can therefore safely remove it.

It is about time we do this because our tests are actually still testing
the variant without the feature flag and therefore deviate from what we
do in production. We therefore have to convert the tests as well. Doing
so uncovered a minor problem in our ICMP error parsing code: We
attempted to parse the payload of an ICMP error as a fully-valid layer 4
header (e.g. TCP header or UDP header). However, per the RFC a node only
needs to embed the first 8 bytes of the original packet in an ICMPv4
error. That is not enough to parse a valid TCP header as those are at
least 20 bytes.

I don't expect this to be a huge problem in production right now though.
We only use this code to parse ICMP errors arriving on the Gateway and I
_think_ most devices actually include more than 8 bytes. This only
surfaced because we are very strict with only embedding exactly 8 bytes
when we generate an ICMP error.

Additionally, we change our ICMP errors to be sent from the resource IP
rather than the Gateway's TUN device. Given that we perform NAT on these
IPs anyway, I think this can still be argued to be RFC conform. The
_proxy_ IP which we are trying to contact can be reached but it cannot
be routed further. Therefore the destination is unreachable, yet the
source of this error is the proxy IP itself. I think this is actually
more correct than sending the packets from the Gateway's TUN device
because the TUN device itself is not a routing hop per-se: its IP won't
ever show up in the routing path.
2025-06-24 06:48:30 +00:00
Thomas Eizinger
950afd9b2d chore(gateway): set account-slug in telemetry context (#9545)
This PR adds an optional field `account_slug` to the Gateway's init
message. If populated, we will use this field to set the account-slug in
the telemetry context. This will allow us to know, which customers a
particular Sentry issue is related to.
2025-06-23 18:52:39 +00:00
Thomas Eizinger
7a344836a2 fix(rust): use rust-lld linker for MSVC (#9641)
The latest VisualStudio version shipped a bug in the MSVC linker that
cannot handle symbols above a certain size. Switching to the Rust linker
fixes this issue.

Related: https://github.com/rust-lang/rust/issues/141626
2025-06-24 01:55:36 +10:00
Thomas Eizinger
94651093cb chore(rust): remove unused Dockerfile-rpm (#9624) 2025-06-23 05:29:18 +10:00
Thomas Eizinger
fccf5021e6 fix(relay): don't fail event-loop on interrupt (#9592)
When profiling the relay, certain syscalls may get interrupted by the
kernel. At present, this crashes the relay which makes profiling
impossible.

Co-authored-by: Antoine Labarussias <antoinelabarussias@gmail.com>
2025-06-20 18:42:57 +00:00
Jamil
081b075f2c chore: bump gui, apple, gateway (#9586)
The new publish automation still [has some
kinks](https://github.com/firezone/firezone/actions/runs/15764891111) so
publishing this manually.
2025-06-19 12:29:46 -07:00
Thomas Eizinger
c8a4a20818 feat(snownet): increase ICE timeout (#9569)
Some of our users are facing issues on what looks to be very unreliable
network connections. At present, we consider a connection dead if we
don't receive a response within 9.25 seconds. Cutting a connection and
re-establishing it _should_ not be a problem in general and TCP
connections happening through Firezone should resume gracefully. Further
work on whether that is actually the case is due in #9531. Until then,
we increase the ICE timeout to ~15s.

Related: #9526
2025-06-18 22:16:32 +00:00
Thomas Eizinger
650cf893ba feat(snownet): decrease idle connection ICE timeout (#9570)
Any well-behaved NAT should keep the port mappings of an established UDP
connection open for 120s, even without seeing any traffic. Not all NATs
in the wild are well-behaved though and a discarded port mapping causes
connectivity loss for customers.

To combat these situations, we decrease the timer for STUN probes on
idle connections from 60s to 25s.

Related: #9526
2025-06-18 16:53:26 +00:00
dependabot[bot]
68379bf9e3 build(deps): bump clap from 4.5.39 to 4.5.40 in /rust (#9544)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.39 to 4.5.40.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.5.40] - 2025-06-09</h2>
<h3>Features</h3>
<ul>
<li>Support quoted ids in <code>arg!()</code> macro (e.g.
<code>arg!(&quot;check-config&quot;: ...)</code>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="cff27dbf57"><code>cff27db</code></a>
chore: Release</li>
<li><a
href="4ef41249f1"><code>4ef4124</code></a>
docs: Update changelog</li>
<li><a
href="ca896175c1"><code>ca89617</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/5848">#5848</a>
from jennings/jennings/push-xolwzyoornps</li>
<li><a
href="99b6391ee9"><code>99b6391</code></a>
fix(complete): Fix PowerShell dynamic completion</li>
<li>See full diff in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.39...clap_complete-v4.5.40">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.39&new-version=4.5.40)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-18 05:03:54 +00:00
Thomas Eizinger
d3ff59ab84 chore(rust): bump str0m (#9564)
The recent changes to str0m include a bug fix for network constellations
where both peers are behind symmetric NAT and therefore need a
relay-relay candidate pair to succeed. In the current version, such
candidate pairs would erroneously be rejected as redundant with host
candidates.

Fixes: #9514
2025-06-17 22:04:13 +00:00
Thomas Eizinger
faeb958882 refactor: use UniFFI for Android FFI (#9415)
To make our FFI layer between Android and Rust safer, we adopt the
UniFFI tool from Mozilla. UniFFI allows us to create a dedicated crate
(here `client-ffi`) that contains Rust structs annotated with various
attributes. These macros then generate code at compile time that is
built into the shared object. Using a dedicated CLI from the UniFFI
project, we can then generate Kotlin bindings from this shared object.

The primary motivation for this effort is memory safety across the FFI
boundary. Most importantly, we want to ensure that:

- The session pointer is not used after it has been free'd
- Disconnecting the session frees the pointer
- Freeing the session does not happen as part of a callback as that
triggers a cyclic dependency on the Rust side (callbacks are executed on
a runtime and that runtime is dropped as part of dropping the session)

To achieve all of these goals, we move away from callbacks altogether.
UniFFI has great support for async functions. We leverage this support
to expose a `suspend fn` to Android that returns `Event`s. These events
map to the current callback functions. Internally, these events are read
from a channel with a capacity of 1000 events. It is therefore not very
time-critical that the app reads from this channel. `connlib` will
happily continue even if the channel is full. 1000 events should be more
than sufficient though in case the host app cannot immediately process
them. We don't send events very often after all.

This event-based design has major advantages: It allows us to make use
of `AutoCloseable` on the Kotlin side, meaning the `session` pointer is
only ever accessed as part of a `use` block and automatically closed
(and therefore free'd) at the end of the block.

To communicate with the session, we introduce a `TunnelCommand` which
represents all actions that the host app can send to `connlib`. These
are passed through a channel to the `suspend fn` which continuously
listens for events and commands.

Resolves: #9499
Related: #3959

---------

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com>
2025-06-17 21:48:34 +00:00
Thomas Eizinger
f3dcd06115 chore(snownet): document current ICE timeouts with tests (#9558)
This ensures we always know, what the ICE timeouts of the agent are.
With the backoff implemented in the agent, it is not trivial to compute
this from the input parameters.
2025-06-17 21:38:08 +00:00
Thomas Eizinger
92f8c8820f chore(gui-client): configure eslint (#9550)
Resolves: #9546
2025-06-17 20:46:39 +00:00
Thomas Eizinger
43db1e63e2 chore(telemetry): rate limit identical events to 1 per 5min (#9551)
It is in the nature of our application that errors may occur in rapid
succession if anything in the packet processing path fails. Most of the
time, these repeated errors don't add any additional information so
reporting one of them to Sentry is more than enough.

To achieve this, we add a `before_send` callback that utilizes a
concurrent cache with an upper bound of 10000 items and a TTL of 5
minutes. In other words, if we have submitted an event to Sentry that
had the exact same message in the last 5 minutes, we will not send it.

Internally, `moka` uses a concurrent hash map and therefore, the key is
hashed and not actually stored. Hash codes are u64, meaning the memory
footprint of this cache is only ~ 64kb (not accounting for constant
overhead of the cache internals).
2025-06-17 16:48:48 +00:00
Thomas Eizinger
cc50d58d8c chore(client,gateway): log portal connection hiccups on INFO (#9557)
These don't happen very often so are safe to log on INFO. That is the
default log level and it is useful to see, why we are re-connecting to
the portal.
2025-06-17 14:01:34 +00:00
Jamil
9701cfca0f chore: publish gui 1.5.3 (#9547) 2025-06-17 10:04:04 +00:00
dependabot[bot]
3ef9b4334e build(deps): bump libc from 0.2.172 to 0.2.173 in /rust (#9543)
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.172 to 0.2.173.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/releases">libc's
releases</a>.</em></p>
<blockquote>
<h2>0.2.173</h2>
<h3>Added</h3>
<ul>
<li>AIX: Add an AIX triple to Cargo.toml for doc (<a
href="https://redirect.github.com/rust-lang/libc/pull/4475">#4475</a>)</li>
<li>FreeBSD: Add the <code>SO_SPLICE</code> socket option support for
FreeBSD &gt;= 14.2 (<a
href="https://redirect.github.com/rust-lang/libc/pull/4451">#4451</a>)</li>
<li>Linux GNU: Prepare for supporting <code>_TIME_BITS=64</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4433">#4433</a>)</li>
<li>Linux: Add constant PACKET_IGNORE_OUTGOING (<a
href="https://redirect.github.com/rust-lang/libc/pull/4319">#4319</a>)</li>
<li>Linux: Add constants and types for <code>nsfs</code> ioctls (<a
href="https://redirect.github.com/rust-lang/libc/pull/4436">#4436</a>)</li>
<li>Linux: Add constants for Memory-Deny-Write-Execute
<code>prctls</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4400">#4400</a>)</li>
<li>Linux: Add constants from <code>linux/cn_proc.h</code> and
<code>linux/connector.h</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4434">#4434</a>)</li>
<li>Linux: Add new flags for <code>pwritev2</code> and
<code>preadv2</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4452">#4452</a>)</li>
<li>Linux: Add pid_type enum values (<a
href="https://redirect.github.com/rust-lang/libc/pull/4403">#4403</a>)</li>
<li>Linux: Update pidfd constants and types (Linux 6.9-6.15) (<a
href="https://redirect.github.com/rust-lang/libc/pull/4402">#4402</a>)</li>
<li>Loongarch64 musl: Define the <code>MADV_SOFT_OFFLINE</code> constant
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4448">#4448</a>)</li>
<li>Musl: Add new fields since 1.2.0/1.2.2 to <code>struct
tcp_info</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4443">#4443</a>)</li>
<li>Musl: Prepare for supporting v1.2.3 (<a
href="https://redirect.github.com/rust-lang/libc/pull/4443">#4443</a>)</li>
<li>NuttX: Add <code>arc4random</code> and <code>arc4random_buf</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4464">#4464</a>)</li>
<li>RISC-V Musl: Add <code>MADV_SOFT_OFFLINE</code> definition (<a
href="https://redirect.github.com/rust-lang/libc/pull/4447">#4447</a>)</li>
<li>Redox: Define SCM_RIGHTS (<a
href="https://redirect.github.com/rust-lang/libc/pull/4440">#4440</a>)</li>
<li>VxWorks: Add missing UTIME defines and TASK_RENAME_LENGTH (<a
href="https://redirect.github.com/rust-lang/libc/pull/4407">#4407</a>)</li>
<li>Windows: Add more <code>time.h</code> functions (<a
href="https://redirect.github.com/rust-lang/libc/pull/4427">#4427</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Redox: Update <code>SA_</code> constants. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4426">#4426</a>)</li>
<li>Redox: make <code>CMSG_ALIGN</code>, <code>CMSG_LEN</code>, and
<code>CMSG_SPACE</code> const functions (<a
href="https://redirect.github.com/rust-lang/libc/pull/4441">#4441</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>AIX: Enable libc-test and fix definitions/declarations. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4450">#4450</a>)</li>
<li>Emscripten: Fix querying emcc on windows (use emcc.bat) (<a
href="https://redirect.github.com/rust-lang/libc/pull/4248">#4248</a>)</li>
<li>Hurd: Fix build from missing <code>fpos_t</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4472">#4472</a>)</li>
<li>Loongarch64 Musl: Fix the <code>struct ipc_perm</code> bindings (<a
href="https://redirect.github.com/rust-lang/libc/pull/4384">#4384</a>)</li>
<li>Musl: Fix the <code>O_LARGEFILE</code> constant value. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4443">#4443</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/blob/0.2.173/CHANGELOG.md">libc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/libc/compare/0.2.172...0.2.173">0.2.173</a>
- 2025-06-09</h2>
<h3>Added</h3>
<ul>
<li>AIX: Add an AIX triple to Cargo.toml for doc (<a
href="https://redirect.github.com/rust-lang/libc/pull/4475">#4475</a>)</li>
<li>FreeBSD: Add the <code>SO_SPLICE</code> socket option support for
FreeBSD &gt;= 14.2 (<a
href="https://redirect.github.com/rust-lang/libc/pull/4451">#4451</a>)</li>
<li>Linux GNU: Prepare for supporting <code>_TIME_BITS=64</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4433">#4433</a>)</li>
<li>Linux: Add constant PACKET_IGNORE_OUTGOING (<a
href="https://redirect.github.com/rust-lang/libc/pull/4319">#4319</a>)</li>
<li>Linux: Add constants and types for <code>nsfs</code> ioctls (<a
href="https://redirect.github.com/rust-lang/libc/pull/4436">#4436</a>)</li>
<li>Linux: Add constants for Memory-Deny-Write-Execute
<code>prctls</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4400">#4400</a>)</li>
<li>Linux: Add constants from <code>linux/cn_proc.h</code> and
<code>linux/connector.h</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4434">#4434</a>)</li>
<li>Linux: Add new flags for <code>pwritev2</code> and
<code>preadv2</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4452">#4452</a>)</li>
<li>Linux: Add pid_type enum values (<a
href="https://redirect.github.com/rust-lang/libc/pull/4403">#4403</a>)</li>
<li>Linux: Update pidfd constants and types (Linux 6.9-6.15) (<a
href="https://redirect.github.com/rust-lang/libc/pull/4402">#4402</a>)</li>
<li>Loongarch64 musl: Define the <code>MADV_SOFT_OFFLINE</code> constant
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4448">#4448</a>)</li>
<li>Musl: Add new fields since 1.2.0/1.2.2 to <code>struct
tcp_info</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4443">#4443</a>)</li>
<li>Musl: Prepare for supporting v1.2.3 (<a
href="https://redirect.github.com/rust-lang/libc/pull/4443">#4443</a>)</li>
<li>NuttX: Add <code>arc4random</code> and <code>arc4random_buf</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4464">#4464</a>)</li>
<li>RISC-V Musl: Add <code>MADV_SOFT_OFFLINE</code> definition (<a
href="https://redirect.github.com/rust-lang/libc/pull/4447">#4447</a>)</li>
<li>Redox: Define SCM_RIGHTS (<a
href="https://redirect.github.com/rust-lang/libc/pull/4440">#4440</a>)</li>
<li>VxWorks: Add missing UTIME defines and TASK_RENAME_LENGTH (<a
href="https://redirect.github.com/rust-lang/libc/pull/4407">#4407</a>)</li>
<li>Windows: Add more <code>time.h</code> functions (<a
href="https://redirect.github.com/rust-lang/libc/pull/4427">#4427</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Redox: Update <code>SA_</code> constants. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4426">#4426</a>)</li>
<li>Redox: make <code>CMSG_ALIGN</code>, <code>CMSG_LEN</code>, and
<code>CMSG_SPACE</code> const functions (<a
href="https://redirect.github.com/rust-lang/libc/pull/4441">#4441</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>AIX: Enable libc-test and fix definitions/declarations. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4450">#4450</a>)</li>
<li>Emscripten: Fix querying emcc on windows (use emcc.bat) (<a
href="https://redirect.github.com/rust-lang/libc/pull/4248">#4248</a>)</li>
<li>Hurd: Fix build from missing <code>fpos_t</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4472">#4472</a>)</li>
<li>Loongarch64 Musl: Fix the <code>struct ipc_perm</code> bindings (<a
href="https://redirect.github.com/rust-lang/libc/pull/4384">#4384</a>)</li>
<li>Musl: Fix the <code>O_LARGEFILE</code> constant value. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4443">#4443</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9288ec0123"><code>9288ec0</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libc/issues/4486">#4486</a>
from tgross35/fix-no-publish</li>
<li><a
href="6787debbcf"><code>6787deb</code></a>
Fix publishing on the <code>libc-0.2</code> branch</li>
<li><a
href="1c5b5538c8"><code>1c5b553</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libc/issues/4481">#4481</a>
from tgross35/release</li>
<li><a
href="2d0dfd33ba"><code>2d0dfd3</code></a>
chore: release libc 0.2.173</li>
<li><a
href="92347ec8c9"><code>92347ec</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libc/issues/4476">#4476</a>
from tgross35/backport-scotch-bonnet</li>
<li><a
href="1a418edf7c"><code>1a418ed</code></a>
lints: Remove <code>allow(dead_code)</code></li>
<li><a
href="7be1a7a7d8"><code>7be1a7a</code></a>
lints: Remove <code>allow(redundant_semicolons)</code></li>
<li><a
href="53301c2052"><code>53301c2</code></a>
lints: Warn rather than deny by default</li>
<li><a
href="6595c614b4"><code>6595c61</code></a>
Add AIX triple to Cargo.toml for doc.</li>
<li><a
href="600d8adc21"><code>600d8ad</code></a>
Add ctest-next stub and expected dependencies</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libc/compare/0.2.172...0.2.173">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libc&package-manager=cargo&previous-version=0.2.172&new-version=0.2.173)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 19:18:00 +00:00
dependabot[bot]
5b70e2a0d1 build(deps): bump reqwest from 0.12.19 to 0.12.20 in /rust (#9540)
Bumps [reqwest](https://github.com/seanmonstar/reqwest) from 0.12.19 to
0.12.20.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/seanmonstar/reqwest/releases">reqwest's
releases</a>.</em></p>
<blockquote>
<h2>v0.12.20</h2>
<h2>Highlights</h2>
<ul>
<li>Add <code>ClientBuilder::tcp_user_timeout(Duration)</code> option to
set <code>TCP_USER_TIMEOUT</code>.</li>
<li>Fix proxy headers only using the first matched proxy.</li>
<li>(wasm) Fix re-adding <code>Error::is_status()</code>.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>fix(client): apply authorization header to first matching proxy only
by <a href="https://github.com/0x676e67"><code>@​0x676e67</code></a> in
<a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2714">seanmonstar/reqwest#2714</a></li>
<li>wasm: re-add Error::is_status() by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2720">seanmonstar/reqwest#2720</a></li>
<li>properly match error variants in test by <a
href="https://github.com/Ruben2424"><code>@​Ruben2424</code></a> in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2721">seanmonstar/reqwest#2721</a></li>
<li>refactor: reduce size of Pending request future by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2725">seanmonstar/reqwest#2725</a></li>
<li>feat: add tcp_user_timeout builder option by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2724">seanmonstar/reqwest#2724</a></li>
<li>refactor: use hyper-util Socks connectors by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2726">seanmonstar/reqwest#2726</a></li>
<li>Remove some unused dependencies by <a
href="https://github.com/DaniPopes"><code>@​DaniPopes</code></a> in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2716">seanmonstar/reqwest#2716</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/DaniPopes"><code>@​DaniPopes</code></a>
made their first contribution in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2716">seanmonstar/reqwest#2716</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/seanmonstar/reqwest/compare/v0.12.19...v0.12.20">https://github.com/seanmonstar/reqwest/compare/v0.12.19...v0.12.20</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/seanmonstar/reqwest/blob/master/CHANGELOG.md">reqwest's
changelog</a>.</em></p>
<blockquote>
<h2>v0.12.20</h2>
<ul>
<li>Add <code>ClientBuilder::tcp_user_timeout(Duration)</code> option to
set <code>TCP_USER_TIMEOUT</code>.</li>
<li>Fix proxy headers only using the first matched proxy.</li>
<li>(wasm) Fix re-adding <code>Error::is_status()</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="099ae80e87"><code>099ae80</code></a>
v0.12.20</li>
<li><a
href="4bccf41060"><code>4bccf41</code></a>
chore: remove some unused dependencies (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2716">#2716</a>)</li>
<li><a
href="92487709d6"><code>9248770</code></a>
refactor: use hyper-util Socks connectors (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2726">#2726</a>)</li>
<li><a
href="334837c1ff"><code>334837c</code></a>
feat: add tcp_user_timeout builder option (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2724">#2724</a>)</li>
<li><a
href="13487fb602"><code>13487fb</code></a>
refactor: reduce size of Pending request future (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2725">#2725</a>)</li>
<li><a
href="a26879dfef"><code>a26879d</code></a>
tests: properly match http3 error variants (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2721">#2721</a>)</li>
<li><a
href="65102c99ab"><code>65102c9</code></a>
wasm: re-add Error::is_status() (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2720">#2720</a>)</li>
<li><a
href="f94c5cd556"><code>f94c5cd</code></a>
fix(proxy): apply headers to first matching proxy only (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2714">#2714</a>)</li>
<li>See full diff in <a
href="https://github.com/seanmonstar/reqwest/compare/v0.12.19...v0.12.20">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=reqwest&package-manager=cargo&previous-version=0.12.19&new-version=0.12.20)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 19:16:32 +00:00
dependabot[bot]
42854ef148 build(deps): bump windows from 0.61.1 to 0.61.3 in /rust in the windows group (#9541)
Bumps the windows group in /rust with 1 update:
[windows](https://github.com/microsoft/windows-rs).

Updates `windows` from 0.61.1 to 0.61.3
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/microsoft/windows-rs/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=windows&package-manager=cargo&previous-version=0.61.1&new-version=0.61.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 19:16:22 +00:00
dependabot[bot]
7b2fb13067 build(deps): bump syn from 2.0.101 to 2.0.103 in /rust (#9542)
Bumps [syn](https://github.com/dtolnay/syn) from 2.0.101 to 2.0.103.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/syn/releases">syn's
releases</a>.</em></p>
<blockquote>
<h2>2.0.103</h2>
<ul>
<li>Insert parentheses around binary operation with attribute (<a
href="https://redirect.github.com/dtolnay/syn/issues/1871">#1871</a>)</li>
</ul>
<h2>2.0.102</h2>
<ul>
<li>Fix printing of nested Expr::Index and Expr::Tuple in non-full mode
(<a
href="https://redirect.github.com/dtolnay/syn/issues/1869">#1869</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="85d427679f"><code>85d4276</code></a>
Release 2.0.103</li>
<li><a
href="6f7b0f39b3"><code>6f7b0f3</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/1871">#1871</a>
from dtolnay/binaryattr</li>
<li><a
href="89f88facd1"><code>89f88fa</code></a>
Correctly track bailouts in parenthesized binary expressions</li>
<li><a
href="0e07372e40"><code>0e07372</code></a>
Add binary operator attribute bailout test</li>
<li><a
href="ca8d876bde"><code>ca8d876</code></a>
Insert parentheses around binary operation with attribute</li>
<li><a
href="5be0f7121f"><code>5be0f71</code></a>
Add binary operator attribute tests</li>
<li><a
href="026bb3cf32"><code>026bb3c</code></a>
Discard paren attrs in unparenthesize test</li>
<li><a
href="217dd626aa"><code>217dd62</code></a>
Preserve attributes of Expr::Paren in FlattenParens</li>
<li><a
href="ef977c1059"><code>ef977c1</code></a>
Update test suite to nightly-2025-06-11</li>
<li><a
href="b1cc55995d"><code>b1cc559</code></a>
Release 2.0.102</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/syn/compare/2.0.101...2.0.103">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=syn&package-manager=cargo&previous-version=2.0.101&new-version=2.0.103)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 19:16:18 +00:00
dependabot[bot]
e91e4fd936 build(deps): bump nix from 0.29.0 to 0.30.1 in /rust (#9268)
Bumps [nix](https://github.com/nix-rust/nix) from 0.29.0 to 0.30.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/nix-rust/nix/blob/master/CHANGELOG.md">nix's
changelog</a>.</em></p>
<blockquote>
<h2>[0.30.1] - 2025-05-04</h2>
<h3>Fixed</h3>
<ul>
<li>doc.rs build
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2634">#2634</a>)</li>
</ul>
<h2>[0.30.0] - 2025-04-29</h2>
<h3>Added</h3>
<ul>
<li>Add socket option <code>IPV6_PKTINFO</code> for BSDs/Linux/Android,
also
<code>IPV6_RECVPKTINFO</code> for DragonFlyBSD
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2113">#2113</a>)</li>
<li>Add <code>fcntl</code>'s <code>F_PREALLOCATE</code> constant for
Apple targets.
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2393">#2393</a>)</li>
<li>Improve support for extracting the TTL / Hop Limit from incoming
packets
and support for DSCP (ToS / Traffic Class).
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2425">#2425</a>)</li>
<li>Add socket option IP_TOS (nix::sys::socket::sockopt::IpTos)
IPV6_TCLASS
(nix::sys::socket::sockopt::Ipv6TClass) on Android/FreeBSD
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2464">#2464</a>)</li>
<li>Add <code>SeekData</code> and <code>SeekHole</code> to
<code>Whence</code> for hurd and apple targets
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2473">#2473</a>)</li>
<li>Add <code>From</code> trait implementation between
<code>SocketAddr</code> and <code>Sockaddr</code>,
<code>Sockaddr6</code> (<a
href="https://redirect.github.com/nix-rust/nix/pull/2474">#2474</a>)</li>
<li>Added wrappers for <code>posix_spawn</code> API
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2475">#2475</a>)</li>
<li>Add the support for Emscripten.
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2477">#2477</a>)</li>
<li>Add fcntl constant <code>F_RDADVISE</code> for Apple target
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2480">#2480</a>)</li>
<li>Add fcntl constant <code>F_RDAHEAD</code> for Apple target
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2482">#2482</a>)</li>
<li>Add <code>F_LOG2PHYS</code> and <code>F_LOG2PHYS_EXT</code> for
Apple target
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2483">#2483</a>)</li>
<li><code>MAP_SHARED_VALIDATE</code> was added for all linux targets.
&amp; <code>MAP_SYNC</code> was added
for linux with the exclusion of mips architecures, and uclibc
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2499">#2499</a>)</li>
<li>Add
<code>getregs()</code>/<code>getregset()</code>/<code>setregset()</code>
for Linux/musl/aarch64
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2502">#2502</a>)</li>
<li>Add FcntlArgs <code>F_TRANSFEREXTENTS</code> constant for Apple
targets
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2504">#2504</a>)</li>
<li>Add <code>MapFlags::MAP_STACK</code> in <code>sys::man</code> for
netbsd
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2526">#2526</a>)</li>
<li>Add support for <code>libc::LOCAL_PEERTOKEN</code> in
<code>getsockopt</code>.
(<a
href="https://redirect.github.com/nix-rust/nix/pull/2529">#2529</a>)</li>
<li>Add support for <code>syslog</code>, <code>openlog</code>,
<code>closelog</code> on all <code>unix</code>.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3cf9007216"><code>3cf9007</code></a>
chore: drop 0.30.1</li>
<li><a
href="2845ab9e4e"><code>2845ab9</code></a>
Compile sys::mman on Redox (<a
href="https://redirect.github.com/nix-rust/nix/issues/2637">#2637</a>)</li>
<li><a
href="fccb4abfc8"><code>fccb4ab</code></a>
Fix fuchsia target triple to unbreak docs.rs build (<a
href="https://redirect.github.com/nix-rust/nix/issues/2634">#2634</a>)</li>
<li><a
href="b834171547"><code>b834171</code></a>
ci: disable hurd (<a
href="https://redirect.github.com/nix-rust/nix/issues/2638">#2638</a>)</li>
<li><a
href="9c97e1df15"><code>9c97e1d</code></a>
Clippy cleanup: dangerous_implicit_autorefs and
uninlined_format_args</li>
<li><a
href="989291d5bf"><code>989291d</code></a>
chore: release 0.30.0</li>
<li><a
href="6a1c5b8d5b"><code>6a1c5b8</code></a>
Remove Copy from PollFd (<a
href="https://redirect.github.com/nix-rust/nix/issues/2631">#2631</a>)</li>
<li><a
href="eba0f41bff"><code>eba0f41</code></a>
chore: pin libc to 0.2.171 &amp; bump CI image (<a
href="https://redirect.github.com/nix-rust/nix/issues/2632">#2632</a>)</li>
<li><a
href="b561476e1d"><code>b561476</code></a>
socket::sockopt AttachReusePortCbpf for Linux addition. (<a
href="https://redirect.github.com/nix-rust/nix/issues/2621">#2621</a>)</li>
<li><a
href="684b79edb6"><code>684b79e</code></a>
Add sockopt::PeerPidfd (SO_PEERPIDFD) sockopt support to socket::sockopt
(<a
href="https://redirect.github.com/nix-rust/nix/issues/2620">#2620</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/nix-rust/nix/compare/v0.29.0...v0.30.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nix&package-manager=cargo&previous-version=0.29.0&new-version=0.30.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2025-06-15 20:34:52 +00:00
Jamil
2a96102db4 refactor(gui-client): introduce custom ReactRouterSidebarItem (#9508)
This cleans up some changes left over from #9505 by using a custom
component.
2025-06-15 17:41:24 +00:00
Thomas Eizinger
3660f53150 fix(gui-client): remove bad hook dependencies (#9537)
The removed hook dependencies are invalid because the side-effect
specified in `useEffect` does in fact not depend on them. However, as a
result of these dependencies, the `useEffect` closure appears to run in
an end-less loop, constantly sending the `update_state` command to the
backend which in turn re-sends all state to the frontend, causing a
massive CPU and memory spike.

Resolves: #9519
2025-06-15 17:09:07 +00:00
Jamil
5e3c240501 chore: publish gui 1.5.2 (#9516) 2025-06-12 17:16:04 +00:00
Thomas Eizinger
60bdbb39cb refactor(gui-client): move change listeners to tunnel service (#8160)
At present, listening for DNS server change and network change events is
handled in the GUI client. Upon an event, a message is sent to the
tunnel service which then applies the new state to `connlib`.

We can avoid some of this boilerplate by moving these listeners to the
tunnel service as part of the handler. As a result, we get a few
improvements:

- We don't need to ignore these events if we don't have a session
because the lifetime of these listeners is tied to the IPC handler on
the service side.
- We need fewer IPC messages
- We can retry the connection directly from within the tunnel service in
case we have no Internet at the time of startup
- We can more easily model out the state machine of a connlib session in
the tunnel service
- On Linux, this means we no longer shell out to `resolvectl` from the
GUI process, unifying access to the "resolvers" from the tunnel service
- On Windows, we no longer need admin privileges on the GUI client for
optimized network-change detection. This now happens in the Tunnel
process which already runs as admin.

Resolves: #9465
2025-06-11 06:18:14 +00:00
Jamil
1295adc727 fix(gui-client): fix minor frontend issues in app window (#9505)
- removes `NavLink` in favor of using the `href` prop on `SidebarItem`.
This fixes vertical spacing between sidebar items (it was inconsistent)
and DOM structure issues caused by setting `NavLink` as a direct child
of `<SidebarItemGroup>`.
- adds `cursor-pointer` to all `<Button>`s
- adds `cursor-pointer` to the `<SidebarCollapse>`

### Before

<img width="1238" alt="Screenshot 2025-06-10 at 7 57 37 PM"
src="https://github.com/user-attachments/assets/2e5e66f2-d4c1-48b7-b81d-1803de2442fc"
/>


### After

<img width="1238" alt="Screenshot 2025-06-10 at 7 57 55 PM"
src="https://github.com/user-attachments/assets/aa676fc1-124a-4e33-859d-da8f3eaad211"
/>
2025-06-11 05:53:09 +00:00
Jamil
e1ac9e4912 fix(rust): relax assertion on cloudflare tcp response (#9506)
In #9498, the Cloudflare response was updated to match what appears to
be a transient change on their end. It looks like this has changed
again, so to prevent this from breaking CI in the future we relax the
assertion.
2025-06-10 19:51:18 -07:00
Thomas Eizinger
182a560091 fix(telemetry): don't log events for local and CI env (#9492)
Avoids spamming PostHog with events from our CI or other instances of
the docker-compose setup.
2025-06-10 14:34:20 +00:00
Thomas Eizinger
1fa345aa5e test(rust): adapt response from Cloudflare proxy (#9498)
It appears that Cloudflare changed the response that it is sending for
the 1.1.1.1 IP so we need to adapt our integration test for packet loops
in order to make CI pass.
2025-06-10 14:18:07 +00:00
dependabot[bot]
5a04405212 build(deps): bump smallvec from 1.15.0 to 1.15.1 in /rust (#9483)
Bumps [smallvec](https://github.com/servo/rust-smallvec) from 1.15.0 to
1.15.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/servo/rust-smallvec/releases">smallvec's
releases</a>.</em></p>
<blockquote>
<h2>v1.15.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Shrink code produced by <code>smallvec![]</code>. by <a
href="https://github.com/nnethercote"><code>@​nnethercote</code></a> in
<a
href="https://redirect.github.com/servo/rust-smallvec/pull/386">servo/rust-smallvec#386</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/servo/rust-smallvec/compare/v1.15.0...v1.15.1">https://github.com/servo/rust-smallvec/compare/v1.15.0...v1.15.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d0f47a3ea9"><code>d0f47a3</code></a>
Version 1.15.1</li>
<li><a
href="d682405159"><code>d682405</code></a>
Shrink code produced by <code>smallvec![]</code>.</li>
<li>See full diff in <a
href="https://github.com/servo/rust-smallvec/compare/v1.15.0...v1.15.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=smallvec&package-manager=cargo&previous-version=1.15.0&new-version=1.15.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 10:41:33 +00:00
dependabot[bot]
c7a720957a build(deps): bump os_info from 3.11.0 to 3.12.0 in /rust (#9484)
Bumps [os_info](https://github.com/stanislav-tkach/os_info) from 3.11.0
to 3.12.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/stanislav-tkach/os_info/releases">os_info's
releases</a>.</em></p>
<blockquote>
<h2>os_info 3.12.0</h2>
<ul>
<li>
<p>Cygwin support has been added. (<a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/405">#405</a>)</p>
</li>
<li>
<p>macOS version detection has been updated to read the
<code>SystemVersion.plist</code> file. (<a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/406">#406</a>)</p>
</li>
<li>
<p>macOS bitness detection has been updated to avoid using the
<code>getconf</code> command. (<a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/407">#407</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/stanislav-tkach/os_info/blob/master/CHANGELOG.md">os_info's
changelog</a>.</em></p>
<blockquote>
<h2>[3.12.0] (2025-06-08)</h2>
<ul>
<li>
<p>Cygwin support has been added. (<a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/405">#405</a>)</p>
</li>
<li>
<p>macOS version detection has been updated to read the
<code>SystemVersion.plist</code>
file. (<a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/406">#406</a>)</p>
</li>
<li>
<p>macOS bitness detection has been updated to avoid using the
<code>getconf</code>
command. (<a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/407">#407</a>)</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="70a4d893aa"><code>70a4d89</code></a>
Merge pull request <a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/408">#408</a>
from stanislav-tkach/3-12</li>
<li><a
href="39c996cd1d"><code>39c996c</code></a>
Markdown</li>
<li><a
href="e8b5eab128"><code>e8b5eab</code></a>
Spellcheck</li>
<li><a
href="d224489609"><code>d224489</code></a>
Update changelog</li>
<li><a
href="3494e22877"><code>3494e22</code></a>
Release the 3.12 version</li>
<li><a
href="131b6aa56a"><code>131b6aa</code></a>
Merge pull request <a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/406">#406</a>
from davidkna/macos-version-from-file</li>
<li><a
href="c5fc908154"><code>c5fc908</code></a>
Merge pull request <a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/407">#407</a>
from davidkna/patch-1</li>
<li><a
href="eb8e02299a"><code>eb8e022</code></a>
Merge pull request <a
href="https://redirect.github.com/stanislav-tkach/os_info/issues/405">#405</a>
from Berrysoft/dev/cygwin</li>
<li><a
href="a317f52a67"><code>a317f52</code></a>
MacOS: Attempt to derive bitness from arch</li>
<li><a
href="260280e4fe"><code>260280e</code></a>
Use SystemVersion.plist for macOS ProductVersion</li>
<li>Additional commits viewable in <a
href="https://github.com/stanislav-tkach/os_info/compare/v3.11.0...v3.12.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=os_info&package-manager=cargo&previous-version=3.11.0&new-version=3.12.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 10:40:48 +00:00
Thomas Eizinger
ae4816d2a6 refactor(gui-client): reduce duplication for sending requests (#9476) 2025-06-09 10:37:23 +00:00
Thomas Eizinger
9210ed2a97 fix(gui-client): don't say "signed in" without a connlib session (#9477)
With the introduction of the "connect on start" configuration option, we
introduced a bug where the GUI client said "Signed in as ..." even
though we did not have a `connlib` session. The tray-menu handles this
state correctly and clicking sign out and sign in restores Firezone to a
functional state.

This disparity happened because we assumed that having a token means we
must have a session.

To fix this, we introduce a new `SessionViewModel` that combines the
state of the auth session and the `connlib` state. Only if we have both
do we infer that we are "signed in". This also requires us to introduce
an intermediary state where we are "loading". This is represented as a
spinner in the UI.

Last but not least, this also removes the automated hiding of the client
window. In a prior design, the only job of this window was to show the
"Sign in" button so it wasn't useful beyond clicking that. Now that we
show more things in this window, automatically hiding it might confuse
the user.

Here is what this new design looks like:

[Login
flow](https://github.com/user-attachments/assets/276e390b-4837-48e2-aaf1-eea007472816)

As a result of other improvements around "zero-click sign-in", the user
often doesn't even have to switch to the browser window because sign-in
happens in the background. Unfortunately, the tab still remains open but
that is outside of our control (at least on Linux).
2025-06-09 09:41:18 +00:00