From b0ba0d7227b40fff58422244c9d63f2b9316b959 Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:16:33 -0700 Subject: [PATCH 01/39] Update README.md --- README.md | 193 ++++++++---------------------------------------------- 1 file changed, 27 insertions(+), 166 deletions(-) diff --git a/README.md b/README.md index e881ce8101..c1dbb0a47f 100644 --- a/README.md +++ b/README.md @@ -1,197 +1,58 @@ ZeroTier - Global Area Networking ====== -*This document is written for a software developer audience. For information on using ZeroTier, see the: [Website](https://www.zerotier.com), [Documentation Site](https://docs.zerotier.com), and [Discussion Forum](https://discuss.zerotier.com).* +# ZeroTier \- Global Area Networking ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and applications to communicate as if they all reside in the same physical data center or cloud region. -This is accomplished by combining a cryptographically addressed and secure peer to peer network (termed VL1) with an Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring. +This is accomplished by combining a cryptographically addressed and secure peer-to-peer network (termed VL1) with an Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring. -All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer to peer, though we offer free (but slow) relaying for users who cannot establish peer to peer connections. +All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer-to-peer, though we offer free (but slow) relaying for users who cannot establish peer-to-peer connections. -The goals and design principles of ZeroTier are inspired by among other things the original [Google BeyondCorp](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43231.pdf) paper and the [Jericho Forum](https://en.wikipedia.org/wiki/Jericho_Forum) with its notion of "deperimeterization." +Visit [ZeroTier’s site](https://www.zerotier.com/) or [ZeroTier's documentation](https://docs.zerotier.com) for more information and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in the Google Play and Apple app stores. -Visit [ZeroTier's site](https://www.zerotier.com/) for more information and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in the Google Play and Apple app stores. +## Project Layout -ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](LICENSE.txt) and the [ZeroTier pricing page](https://www.zerotier.com/pricing) for details. ZeroTier is free to use internally in businesses and academic institutions and for non-commercial purposes. Certain types of commercial use such as building closed-source apps and devices based on ZeroTier or offering ZeroTier network controllers and network management as a SaaS service require a commercial license. +* artwork/: icons, logos, etc. -A small amount of third party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](AUTHORS.md) for a list of third party code, where it is included, and the licenses that apply to it. All of the third party code in ZeroTier is liberally licensed (MIT, BSD, Apache, public domain, etc.). +* attic/: old stuff and experimental code that we want to keep around for reference. -### Getting Started +* controller/: the reference network controller implementation, which is built and included by default on desktop and server build targets. -Everything in the ZeroTier world is controlled by two types of identifier: 40-bit/10-digit *ZeroTier addresses* and 64-bit/16-digit *network IDs*. These identifiers are easily distinguished by their length. A ZeroTier address identifies a node or "device" (laptop, phone, server, VM, app, etc.) while a network ID identifies a virtual Ethernet network that can be joined by devices. +* debian/: files for building Debian packages on Linux. -ZeroTier addresses can be thought of as port numbers on an enormous planet-wide enterprise Ethernet smart switch supporting VLANs. Network IDs are VLAN IDs to which these ports may be assigned. A single port can be assigned to more than one VLAN. +* doc/: manual pages and other documentation. -A ZeroTier address looks like `8056c2e21c` and a network ID looks like `8056c2e21c000001`. Network IDs are composed of the ZeroTier address of that network's primary controller and an arbitrary 24-bit ID that identifies the network on this controller. Network controllers are roughly analogous to SDN controllers in SDN protocols like [OpenFlow](https://en.wikipedia.org/wiki/OpenFlow), though as with the analogy between VXLAN and VL2 this should not be read to imply that the protocols or design are the same. You can use our convenient and inexpensive SaaS hosted controllers at [my.zerotier.com](https://my.zerotier.com/) or [run your own controller](controller/) if you don't mind messing around with JSON configuration files or writing scripts to do so. +* ext/: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files. -### Project Layout +* include/: include files for the ZeroTier core. -The base path contains the ZeroTier One service main entry point (`one.cpp`), self test code, makefiles, etc. +* java/: a JNI wrapper used with our Android mobile app. - - `artwork/`: icons, logos, etc. - - `attic/`: old stuff and experimental code that we want to keep around for reference. - - `controller/`: the reference network controller implementation, which is built and included by default on desktop and server build targets. - - `debian/`: files for building Debian packages on Linux. - - `doc/`: manual pages and other documentation. - - `ext/`: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files. - - `include/`: include files for the ZeroTier core. - - `java/`: a JNI wrapper used with our Android mobile app. (The whole Android app is not open source but may be made so in the future.) - - `node/`: the ZeroTier virtual Ethernet switch core, which is designed to be entirely separate from the rest of the code and able to be built as a stand-alone OS-independent library. Note to developers: do not use C++11 features in here, since we want this to build on old embedded platforms that lack C++11 support. C++11 can be used elsewhere. - - `osdep/`: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. - - `rule-compiler/`: JavaScript rules language compiler for defining network-level rules. - - `service/`: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks for desktops, laptops, servers, VMs, and containers. - - `windows/`: Visual Studio solution files, Windows service code, and the Windows task bar app UI. - - `zeroidc/`: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (This part is written in Rust, and more Rust will be appearing in this repository in the future.) +* node/: the ZeroTier virtual Ethernet switch core. Note: do not use C++11 features in here, since we want this to build on old embedded platforms. -### Contributing +* osdep/: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. -Please do pull requests off of the `dev` branch. +* rule-compiler/: JavaScript rules language compiler for defining network-level rules. -Releases are done by merging `dev` into `main` and then tagging and doing builds. +* service/: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks. -### Build and Platform Notes +* windows/: Visual Studio solution files, Windows service code, and the Windows task bar app UI. -To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/`. +* zeroidc/: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (Written in Rust) - - **Mac** - - Xcode command line tools for macOS 10.13 or newer are required. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **Linux** - - The minimum compiler versions required are GCC/G++ 8.x or CLANG/CLANG++ 5.x. - - Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **Windows** - - Visual Studio 2022 on Windows 10 or newer. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **FreeBSD** - - GNU make is required. Type `gmake` to build. - - `binutils` is required. Type `pkg install binutils` to install. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **OpenBSD** - - There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through `/dev/tap3`). - - GNU make is required. Type `gmake` to build. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. +## License -Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few aspects of the build environment. It's a good idea to try this on novel platforms or architectures. +ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](http://LICENSE.txt) and the [ZeroTier pricing page](https://www.zerotier.com/pricing) for details. ZeroTier is free to use internally in businesses and academic institutions and for non-commercial purposes. Certain types of commercial use, such as building closed-source apps and devices based on ZeroTier or offering ZeroTier network controllers and network management as a SaaS service, require a commercial license. -### Running +A small amount of third-party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](http://AUTHORS.md) for a list of third-party code, where it is included, and the licenses that apply to it. All of the third-party code in ZeroTier is liberally licensed (MIT, BSD, Apache, public domain, etc.). -Running *zerotier-one* with `-h` option will show help. +## Additional Resources -On Linux and BSD, if you built from source, you can start the service with: +* [User Documentation](https://docs.zerotier.com) - sudo ./zerotier-one -d +* [API Reference](http://service/README.md) -On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. +* [Network Controller](http://controller/README.md) -A home folder for your system will automatically be created. - -The service is controlled via the JSON API, which by default is available at `127.0.0.1:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. - -Here's where home folders live (by default) on each OS: - - * **Linux**: `/var/lib/zerotier-one` - * **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one` - * **Mac**: `/Library/Application Support/ZeroTier/One` - * **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if Windows is installed with a non-standard drive letter assignment or layout.) - -### Basic Troubleshooting - -For most users, it just works. - -If you are running a local system firewall, we recommend adding a rules permitting zerotier. If you installed binaries for Windows this should be done automatically. Other platforms might require manual editing of local firewall rules depending on your configuration. - -See the [documentation site](https://docs.zerotier.com/zerotier/troubleshooting) for more information. - -The Mac firewall can be found under "Security" in System Preferences. Linux has a variety of firewall configuration systems and tools. - -On CentOS check `/etc/sysconfig/iptables` for IPTables rules. For other distributions consult your distribution's documentation. You'll also have to check the UIs or documentation for commercial third party firewall applications like Little Snitch (Mac), McAfee Firewall Enterprise (Windows), etc. if you are running any of those. Some corporate environments might have centrally managed firewall software, so you might also have to contact IT. - -ZeroTier One peers will automatically locate each other and communicate directly over a local wired LAN *if UDP port 9993 inbound is open*. If that port is filtered, they won't be able to see each others' LAN announcement packets. If you're experiencing poor performance between devices on the same physical network, check their firewall settings. Without LAN auto-location peers must attempt "loopback" NAT traversal, which sometimes fails and in any case requires that every packet traverse your external router twice. - -Users behind certain types of firewalls and "symmetric" NAT devices may not be able to connect to external peers directly at all. ZeroTier has limited support for port prediction and will *attempt* to traverse symmetric NATs, but this doesn't always work. If P2P connectivity fails you'll be bouncing UDP packets off our relay servers resulting in slower performance. Some NAT router(s) have a configurable NAT mode, and setting this to "full cone" will eliminate this problem. If you do this you may also see a magical improvement for things like VoIP phones, Skype, BitTorrent, WebRTC, certain games, etc., since all of these use NAT traversal techniques similar to ours. - -If a firewall between you and the Internet blocks ZeroTier's UDP traffic, you will fall back to last-resort TCP tunneling to rootservers over port 443 (https impersonation). This will work almost anywhere but is *very slow* compared to UDP or direct peer to peer connectivity. - -Additional help can be found in our [knowledge base](https://zerotier.atlassian.net/wiki/spaces/SD/overview). - -### Prometheus Metrics - -Prometheus Metrics are available at the `/metrics` API endpoint. This endpoint is protected by an API key stored in `metricstoken.secret` to prevent unwanted information leakage. Information that could be gleaned from the metrics include joined networks and peers your instance is talking to. - -Access control is via the ZeroTier control interface itself and `metricstoken.secret`. This can be sent as a bearer auth token, via the `X-ZT1-Auth` HTTP header field, or appended to the URL as `?auth=`. You can see the current metrics via `cURL` with the following command: - - // Linux - curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics - - // macOS - curl -H "X-ZT1-Auth: $(sudo cat /Library/Application\ Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics - - // Windows PowerShell (Admin) - Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:\ProgramData\ZeroTier\One\metricstoken.secret)"; } -Uri http://localhost:9993/metrics - -To configure a scrape job in Prometheus on the machine ZeroTier is running on, add this to your Prometheus `scrape_config`: - - - job_name: zerotier-one - honor_labels: true - scrape_interval: 15s - metrics_path: /metrics - static_configs: - - targets: - - 127.0.0.1:9993 - labels: - group: zerotier-one - node_id: $YOUR_10_CHARACTER_NODE_ID - authorization: - credentials: $YOUR_METRICS_TOKEN_SECRET - -If neither of these methods are desirable, it is probably possible to distribute metrics via [Prometheus Proxy](https://github.com/pambrose/prometheus-proxy) or some other tool. Note: We have not tested this internally, but will probably work with the correct configuration. - -Metrics are also available on disk in ZeroTier's working directory: - - // Linux - /var/lib/zerotier-one/metrics.prom - - // macOS - /Library/Application\ Support/ZeroTier/One/metrics.prom - - //Windows - C:\ProgramData\ZeroTier\One\metrics.prom - -#### Available Metrics - -| Metric Name | Labels | Metric Type | Description | -| --- | --- | --- | --- | -| zt_packet | packet_type, direction | Counter | ZeroTier packet type counts | -| zt_packet_error | error_type, direction | Counter | ZeroTier packet errors| -| zt_data | protocol, direction | Counter | number of bytes ZeroTier has transmitted or received | -| zt_num_networks | | Gauge | number of networks this instance is joined to | -| zt_network_multicast_groups_subscribed | network_id | Gauge | number of multicast groups networks are subscribed to | -| zt_network_packets | network_id, direction | Counter | number of incoming/outgoing packets per network | -| zt_peer_latency | node_id | Histogram | peer latency (ms) | -| zt_peer_path_count | node_id, status | Gauge | number of paths to peer | -| zt_peer_packets | node_id, direction | Counter | number of packets to/from a peer | -| zt_peer_packet_errors | node_id | Counter | number of incoming packet errors from a peer | - -If there are other metrics you'd like to see tracked, ask us in an Issue or send us a Pull Request! - -### HTTP / App server - -There is a static http file server suitable for hosting Single Page Apps at http://localhost:9993/app/ - -Use `zerotier-cli info -j` to find your zerotier-one service's homeDir - -``` sh -cd $ZT_HOME -sudo mkdir -p app/app1 -sudo mkdir -p app/appB -echo 'appA

hello world A' | sudo tee app/appA/index.html -echo 'app2

hello world 2' | sudo tee app/app2/index.html -curl -sL http://localhost:9993/app/appA http://localhost:9993/app/app2 -``` - -Then visit [http://localhost:9993/app/app1/](http://localhost:9993/app/app1/) and [http://localhost:9993/app/appB/](http://localhost:9993/app/appB/) - -Requests to paths don't exist return the app root index.html, as is customary for SPAs. -If you want, you can write some javascript that talks to the service or controller [api](https://docs.zerotier.com/service/v1). +* [Commercial Support](https://www.zerotier.com/contact) \ No newline at end of file From be5baa76b905538158581ec639b1baa934b5d2b6 Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:14:06 -0700 Subject: [PATCH 02/39] Update README.md --- README.md | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index c1dbb0a47f..e0d6f0dc7a 100644 --- a/README.md +++ b/README.md @@ -11,35 +11,51 @@ All ZeroTier traffic is encrypted end-to-end using secret keys that only you con Visit [ZeroTier’s site](https://www.zerotier.com/) or [ZeroTier's documentation](https://docs.zerotier.com) for more information and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in the Google Play and Apple app stores. -## Project Layout +### Build and Platform Notes -* artwork/: icons, logos, etc. +To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/`. -* attic/: old stuff and experimental code that we want to keep around for reference. + - **Mac** + - Xcode command line tools for macOS 10.13 or newer are required. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **Linux** + - The minimum compiler versions required are GCC/G++ 8.x or CLANG/CLANG++ 5.x. + - Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **Windows** + - Visual Studio 2022 on Windows 10 or newer. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **FreeBSD** + - GNU make is required. Type `gmake` to build. + - `binutils` is required. Type `pkg install binutils` to install. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **OpenBSD** + - There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through `/dev/tap3`). + - GNU make is required. Type `gmake` to build. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. -* controller/: the reference network controller implementation, which is built and included by default on desktop and server build targets. +Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few aspects of the build environment. It's a good idea to try this on novel platforms or architectures. -* debian/: files for building Debian packages on Linux. +### Running -* doc/: manual pages and other documentation. +Running *zerotier-one* with `-h` option will show help. -* ext/: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files. +On Linux and BSD, if you built from source, you can start the service with: -* include/: include files for the ZeroTier core. + sudo ./zerotier-one -d -* java/: a JNI wrapper used with our Android mobile app. +On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. -* node/: the ZeroTier virtual Ethernet switch core. Note: do not use C++11 features in here, since we want this to build on old embedded platforms. +A home folder for your system will automatically be created. -* osdep/: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. +The service is controlled via the JSON API, which by default is available at `127.0.0.1:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. -* rule-compiler/: JavaScript rules language compiler for defining network-level rules. +Here's where home folders live (by default) on each OS: -* service/: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks. - -* windows/: Visual Studio solution files, Windows service code, and the Windows task bar app UI. - -* zeroidc/: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (Written in Rust) + * **Linux**: `/var/lib/zerotier-one` + * **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one` + * **Mac**: `/Library/Application Support/ZeroTier/One` + * **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if Windows is installed with a non-standard drive letter assignment or layout.) ## License From 5d18a575184d754d6630f75d8d4adda2c9e991fe Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Sep 2025 19:17:11 -0400 Subject: [PATCH 03/39] Include controller on debian. --- debian/changelog | 6 ++++++ debian/rules | 2 +- debian/rules.wheezy | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 01ef8cf656..84b78f6976 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +zerotier-one (1.16.0-2) unstable; urgency=medium + + * Fix build settings to include controller. + + -- Adam Ierymenko Thu, 12 Sep 2025 01:00:00 -0700 + zerotier-one (1.16.0) unstable; urgency=medium * See RELEASE-NOTES.md for release notes. diff --git a/debian/rules b/debian/rules index 81fde680b1..56382eab4c 100644 --- a/debian/rules +++ b/debian/rules @@ -7,7 +7,7 @@ CXXFLAGS=-O3 -fstack-protector-strong dh $@ --with systemd override_dh_auto_build: - make + make ZT_OFFICIAL=1 ZT_NONFREE=1 all override_dh_systemd_start: dh_systemd_start --restart-after-upgrade diff --git a/debian/rules.wheezy b/debian/rules.wheezy index 55e2647a29..832ad9afee 100644 --- a/debian/rules.wheezy +++ b/debian/rules.wheezy @@ -7,5 +7,5 @@ CXXFLAGS=-O3 -fstack-protector dh $@ override_dh_auto_build: - make -j 2 + make -j 2 ZT_OFFICIAL=1 ZT_NONFREE=1 all From 692162861038ea24fac01f840c194e7956fb07c7 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Sep 2025 19:17:37 -0400 Subject: [PATCH 04/39] RPM too --- zerotier-one.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zerotier-one.spec b/zerotier-one.spec index 5d24c23664..2ef6c1dbe0 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -107,7 +107,7 @@ rm -f %{name}-%{version} %build %if "%{?dist}" != ".el6" -make ZT_USE_MINIUPNPC=1 %{?_smp_mflags} one +make ZT_USE_MINIUPNPC=1 %{?_smp_mflags} ZT_OFFICIAL=1 ZT_NONFREE=1 one %endif %pre From a28a6d1bf5c817001da0c4fe3775fa47e77545b9 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Sat, 13 Sep 2025 11:07:36 -0400 Subject: [PATCH 05/39] Build fix. --- make-linux.mk | 8 ++++---- zerotier-one.spec | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/make-linux.mk b/make-linux.mk index 5ac8a7d951..77d3e0b1a4 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -341,10 +341,10 @@ ifeq ($(ZT_STATIC),1) endif # For building an official semi-static binary on CentOS 7 -ifeq ($(ZT_OFFICIAL),1) - CORE_OBJS+=ext/misc/linux-old-glibc-compat.o - override LDFLAGS+=-Wl,--wrap=memcpy -static-libstdc++ -endif +#ifeq ($(ZT_OFFICIAL),1) +# CORE_OBJS+=ext/misc/linux-old-glibc-compat.o +# override LDFLAGS+=-Wl,--wrap=memcpy -static-libstdc++ +#endif ifeq ($(ZT_CONTROLLER),1) override CXXFLAGS+=-Wall -Wno-deprecated -std=c++17 -pthread $(INCLUDES) -DNDEBUG $(DEFS) diff --git a/zerotier-one.spec b/zerotier-one.spec index 2ef6c1dbe0..ffb010c240 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -102,7 +102,7 @@ ln -s %{getenv:PWD} %{name}-%{version} mkdir -p SOURCES tar --exclude=%{name}-%{version}/.git --exclude=%{name}-%{version}/%{name}-%{version} -czf SOURCES/%{name}-%{version}.tar.gz %{name}-%{version}/* rm -f %{name}-%{version} -# cp -a %{getenv:PWD}/* . +cp -a %{getenv:PWD}/* . %endif %build From 4f2717c244840ff18b7d2899ff85136d0c8c7ccb Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Thu, 18 Sep 2025 14:29:09 -0700 Subject: [PATCH 06/39] added build.md Drastically shortened main readme and linked out to build notes instead. Clarified licensing info to just match license.txt. --- README.md | 76 ++++++++++++----------------------------------- build.md | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 57 deletions(-) create mode 100644 build.md diff --git a/README.md b/README.md index e0d6f0dc7a..fcd3f2c51a 100644 --- a/README.md +++ b/README.md @@ -3,72 +3,34 @@ ZeroTier - Global Area Networking # ZeroTier \- Global Area Networking -ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and applications to communicate as if they all reside in the same physical data center or cloud region. - -This is accomplished by combining a cryptographically addressed and secure peer-to-peer network (termed VL1) with an Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring. - -All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer-to-peer, though we offer free (but slow) relaying for users who cannot establish peer-to-peer connections. - -Visit [ZeroTier’s site](https://www.zerotier.com/) or [ZeroTier's documentation](https://docs.zerotier.com) for more information and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in the Google Play and Apple app stores. - -### Build and Platform Notes - -To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/`. - - - **Mac** - - Xcode command line tools for macOS 10.13 or newer are required. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **Linux** - - The minimum compiler versions required are GCC/G++ 8.x or CLANG/CLANG++ 5.x. - - Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **Windows** - - Visual Studio 2022 on Windows 10 or newer. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **FreeBSD** - - GNU make is required. Type `gmake` to build. - - `binutils` is required. Type `pkg install binutils` to install. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **OpenBSD** - - There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through `/dev/tap3`). - - GNU make is required. Type `gmake` to build. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - -Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few aspects of the build environment. It's a good idea to try this on novel platforms or architectures. +## Quick Links -### Running +* [ZeroTier Documentation](https://docs.zerotier.com) - **Start here for downloads, installation, and usage** +* [Corporate Site](https://www.zerotier.com/) +* [Downloads](https://www.zerotier.com/download/) +* [Architecture Overview](architecture.md) +* [Build and Project Information](build.md) +* [Service API Reference](service/README.md) +* [Network Controller](controller/README.md) +* [Commercial Support](https://www.zerotier.com/contact) +* [License Information](#license) -Running *zerotier-one* with `-h` option will show help. +## About -On Linux and BSD, if you built from source, you can start the service with: - - sudo ./zerotier-one -d - -On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. +ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and applications to communicate as if they all reside in the same physical data center or cloud region. -A home folder for your system will automatically be created. +This is accomplished by combining a cryptographically addressed and secure peer-to-peer network (termed VL1) with an Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring. -The service is controlled via the JSON API, which by default is available at `127.0.0.1:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. +All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer-to-peer, though we offer free (but slow) relaying for users who cannot establish peer-to-peer connections. -Here's where home folders live (by default) on each OS: +Apps for Android and iOS are available for free in the Google Play and Apple app stores. - * **Linux**: `/var/lib/zerotier-one` - * **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one` - * **Mac**: `/Library/Application Support/ZeroTier/One` - * **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if Windows is installed with a non-standard drive letter assignment or layout.) +For repository layout, build instructions, platform requirements, and information about running ZeroTier, see [build.md](build.md). ## License -ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](http://LICENSE.txt) and the [ZeroTier pricing page](https://www.zerotier.com/pricing) for details. ZeroTier is free to use internally in businesses and academic institutions and for non-commercial purposes. Certain types of commercial use, such as building closed-source apps and devices based on ZeroTier or offering ZeroTier network controllers and network management as a SaaS service, require a commercial license. - -A small amount of third-party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](http://AUTHORS.md) for a list of third-party code, where it is included, and the licenses that apply to it. All of the third-party code in ZeroTier is liberally licensed (MIT, BSD, Apache, public domain, etc.). - -## Additional Resources - -* [User Documentation](https://docs.zerotier.com) - -* [API Reference](http://service/README.md) +See [LICENSE-MPL.txt](LICENSE-MPL.txt) for all code in node/, osdep/. service/, and everywhere else except ext/ and nonfree/. -* [Network Controller](http://controller/README.md) +See [nonfree/LICENSE.md](nonfree/LICENSE.md) for all non-free ("source available") portions of this repository. -* [Commercial Support](https://www.zerotier.com/contact) \ No newline at end of file +Code in ext/ is external code included for build convenience or backward compatibility and retains its original license. diff --git a/build.md b/build.md new file mode 100644 index 0000000000..84710fe44d --- /dev/null +++ b/build.md @@ -0,0 +1,88 @@ +# ZeroTier Build and Project Information + +## Build and Platform Notes + +### Basic Build Instructions + +To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/`. + +### Platform Requirements + +#### Mac +- Xcode command line tools for macOS 10.13 or newer are required. +- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + +#### Linux +- The minimum compiler versions required are GCC/G++ 8.x or CLANG/CLANG++ 5.x. +- Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. +- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + +#### Windows +- Visual Studio 2022 on Windows 10 or newer. +- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + +#### FreeBSD +- GNU make is required. Type `gmake` to build. +- `binutils` is required. Type `pkg install binutils` to install. +- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + +#### OpenBSD +- There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through `/dev/tap3`). +- GNU make is required. Type `gmake` to build. +- Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + +### Testing + +Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few aspects of the build environment. It's a good idea to try this on novel platforms or architectures. + +## Running ZeroTier + +Running *zerotier-one* with `-h` option will show help. + +On Linux and BSD, if you built from source, you can start the service with: + + sudo ./zerotier-one -d + +On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. + +A home folder for your system will automatically be created. + +The service is controlled via the JSON API, which by default is available at `127.0.0.1:9993`. It also listens on `0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. + +## Directory Structure + +### Home Folder Locations + +ZeroTier stores its configuration and state files in platform-specific locations: + +* **Linux**: `/var/lib/zerotier-one` +* **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one` +* **Mac**: `/Library/Application Support/ZeroTier/One` +* **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if Windows is installed with a non-standard drive letter assignment or layout.) + +### Project Structure + +The repository is organized as follows: + +- **node/** - Core ZeroTier networking code +- **osdep/** - Operating system dependent code +- **service/** - Service implementation and API +- **controller/** - Network controller implementation +- **ext/** - External code included for build convenience (retains original licenses) +- **nonfree/** - Source available (non-free) portions +- **windows/** - Windows-specific Visual Studio solution files + +### Build System + +The project supports various build targets and platforms: +- Standard build: `make` +- Self-test build: `make selftest` +- Platform-specific requirements: + - FreeBSD/OpenBSD: Use `gmake` (GNU make) + - Windows: Visual Studio solution in `windows/` + +### License Structure + +- **node/**, **osdep/**, **service/**: Licensed under MPL-2.0 (see LICENSE-MPL.txt) +- **nonfree/**: Non-free "source available" code (see nonfree/LICENSE.md) +- **ext/**: External code with original licenses retained \ No newline at end of file From f2d4a882d978dedc47f5b23f0608e810e3f103ae Mon Sep 17 00:00:00 2001 From: Luke Souter <37121526+Fightersbane@users.noreply.github.com> Date: Tue, 23 Sep 2025 10:20:49 -0700 Subject: [PATCH 07/39] removed duplicate title, added build link, fixed controller link --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fcd3f2c51a..ec119e8d75 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,13 @@ -ZeroTier - Global Area Networking -====== - -# ZeroTier \- Global Area Networking +# ZeroTier - Global Area Networking ## Quick Links * [ZeroTier Documentation](https://docs.zerotier.com) - **Start here for downloads, installation, and usage** +* [How to build](build.md) - **Build instructions and platform requirements** * [Corporate Site](https://www.zerotier.com/) * [Downloads](https://www.zerotier.com/download/) -* [Architecture Overview](architecture.md) -* [Build and Project Information](build.md) * [Service API Reference](service/README.md) -* [Network Controller](controller/README.md) +* [Network Controller](nonfree/controller/README.md) * [Commercial Support](https://www.zerotier.com/contact) * [License Information](#license) From 45773f0b6e393b405c0f8bec2be78a7e7f1a5404 Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Mon, 3 Nov 2025 10:19:10 -0800 Subject: [PATCH 08/39] Ensure members in PacketMultiplexer are initialized _enabled is set to true by setUpPostDecodeReceiveThreads(), so disabled until then, but the constructor wasn't initializing it. _concurrency is not being used before being set but for safety's sake, ensure it has a starting value as well. Also, remove the vestigial _rxThreadCount, which is no longer used. --- node/PacketMultiplexer.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/node/PacketMultiplexer.hpp b/node/PacketMultiplexer.hpp index cd8093fe60..4d70d82f0b 100644 --- a/node/PacketMultiplexer.hpp +++ b/node/PacketMultiplexer.hpp @@ -44,15 +44,14 @@ class PacketMultiplexer { std::vector*> _rxPacketQueues; - unsigned int _concurrency; + unsigned int _concurrency = 0; // pool std::vector _rxPacketVector; std::vector _rxPacketThreads; Mutex _rxPacketVector_m, _rxPacketThreads_m; std::vector _rxThreads; - unsigned int _rxThreadCount; - bool _enabled; + bool _enabled = false; }; } // namespace ZeroTier From f231561276db3f4291b76ada94fbf4a907a44ef7 Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Mon, 3 Nov 2025 17:48:04 -0800 Subject: [PATCH 09/39] Stop and restart the Prometheus worker thread when daemonizing Also use _Exit() instead of returning from main() to avoid duplicate cleanup/flusing/etc. --- .../core/include/prometheus/save_to_file.h | 10 ++++++++++ one.cpp | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ext/prometheus-cpp-lite-1.0/core/include/prometheus/save_to_file.h b/ext/prometheus-cpp-lite-1.0/core/include/prometheus/save_to_file.h index 26bd0c95cc..d181b13589 100644 --- a/ext/prometheus-cpp-lite-1.0/core/include/prometheus/save_to_file.h +++ b/ext/prometheus-cpp-lite-1.0/core/include/prometheus/save_to_file.h @@ -50,6 +50,16 @@ namespace prometheus { public: SaveToFile() = default; + void stop() { + must_die = true; + worker_thread.join(); + } + + void restart() { + must_die = false; + worker_thread = std::thread(&SaveToFile::worker_function, this); + } + ~SaveToFile() { must_die = true; worker_thread.join(); diff --git a/one.cpp b/one.cpp index 0e2ac4cfa3..8c67a3af25 100644 --- a/one.cpp +++ b/one.cpp @@ -2330,14 +2330,18 @@ int main(int argc, char** argv) } #endif // !ZT_ONE_NO_ROOT_CHECK if (runAsDaemon) { + prometheus::simpleapi::saver.stop(); + long p = (long)fork(); if (p < 0) { fprintf(stderr, "%s: could not fork" ZT_EOL_S, argv[0]); return 1; } else if (p > 0) - return 0; // forked + _Exit(0); // forked // else p == 0, so we are daemonized + + prometheus::simpleapi::saver.restart(); } #endif // __UNIX_LIKE__ From 616698fa91c67906851e18c55835831bb5c1aa25 Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Wed, 5 Nov 2025 10:42:12 -0800 Subject: [PATCH 10/39] Ensure erase() is called after std::unique() Without this the duplicates are just moved to the end of the collection, but not actually erased. --- osdep/BSDEthernetTap.cpp | 4 ++-- osdep/MacKextEthernetTap.cpp | 2 +- osdep/NetBSDEthernetTap.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osdep/BSDEthernetTap.cpp b/osdep/BSDEthernetTap.cpp index 36e70ca7c5..82ac07d1a2 100644 --- a/osdep/BSDEthernetTap.cpp +++ b/osdep/BSDEthernetTap.cpp @@ -339,7 +339,7 @@ std::vector BSDEthernetTap::ips() const freeifaddrs(ifa); std::sort(r.begin(), r.end()); - std::unique(r.begin(), r.end()); + r.erase(std::unique(r.begin(), r.end()), r.end()); _ifaddrs = r; @@ -394,7 +394,7 @@ void BSDEthernetTap::scanMulticastGroups(std::vector& added, std newGroups.push_back(MulticastGroup::deriveMulticastGroupForAddressResolution(*ip)); std::sort(newGroups.begin(), newGroups.end()); - std::unique(newGroups.begin(), newGroups.end()); + newGroups.erase(std::unique(newGroups.begin(), newGroups.end()), newGroups.end()); for (std::vector::iterator m(newGroups.begin()); m != newGroups.end(); ++m) { if (! std::binary_search(_multicastGroups.begin(), _multicastGroups.end(), *m)) diff --git a/osdep/MacKextEthernetTap.cpp b/osdep/MacKextEthernetTap.cpp index 707858fd9b..3997429291 100644 --- a/osdep/MacKextEthernetTap.cpp +++ b/osdep/MacKextEthernetTap.cpp @@ -607,7 +607,7 @@ void MacKextEthernetTap::scanMulticastGroups(std::vector& added, newGroups.push_back(MulticastGroup::deriveMulticastGroupForAddressResolution(*ip)); std::sort(newGroups.begin(), newGroups.end()); - std::unique(newGroups.begin(), newGroups.end()); + newGroups.erase(std::unique(newGroups.begin(), newGroups.end()), newGroups.end()); for (std::vector::iterator m(newGroups.begin()); m != newGroups.end(); ++m) { if (! std::binary_search(_multicastGroups.begin(), _multicastGroups.end(), *m)) diff --git a/osdep/NetBSDEthernetTap.cpp b/osdep/NetBSDEthernetTap.cpp index 666a387f65..aa923bdb36 100644 --- a/osdep/NetBSDEthernetTap.cpp +++ b/osdep/NetBSDEthernetTap.cpp @@ -316,7 +316,7 @@ std::vector NetBSDEthernetTap::ips() const freeifaddrs(ifa); std::sort(r.begin(), r.end()); - std::unique(r.begin(), r.end()); + r.erase(std::unique(r.begin(), r.end()), r.end()); return r; } @@ -367,7 +367,7 @@ void NetBSDEthernetTap::scanMulticastGroups(std::vector& added, newGroups.push_back(MulticastGroup::deriveMulticastGroupForAddressResolution(*ip)); std::sort(newGroups.begin(), newGroups.end()); - std::unique(newGroups.begin(), newGroups.end()); + newGroups.erase(std::unique(newGroups.begin(), newGroups.end()), newGroups.end()); for (std::vector::iterator m(newGroups.begin()); m != newGroups.end(); ++m) { if (! std::binary_search(_multicastGroups.begin(), _multicastGroups.end(), *m)) From 48311896f873c1a3ecc413895a6906eb1c46fb3d Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Mon, 3 Nov 2025 21:21:47 -0800 Subject: [PATCH 11/39] Allow metrics to be disabled --- service/OneService.cpp | 9 +++++++++ service/README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/service/OneService.cpp b/service/OneService.cpp index 41d7905165..cd275aa23a 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -2931,6 +2931,15 @@ class OneServiceImpl : public OneService { _allowManagementFrom.push_back(nw); } } + + bool disableMetrics = OSUtils::jsonBool(settings["disableMetrics"], false); + if (disableMetrics) { + std::shared_ptr registry; + prometheus::simpleapi::saver.set_registry(registry); + } + else { + prometheus::simpleapi::saver.set_registry(prometheus::simpleapi::registry_ptr); + } } #if ZT_VAULT_SUPPORT diff --git a/service/README.md b/service/README.md index 94e920a583..19a3f80b56 100644 --- a/service/README.md +++ b/service/README.md @@ -41,7 +41,8 @@ Settings available in `local.conf` (this is not valid JSON, and JSON does not al "allowManagementFrom": [ "NETWORK/bits", ...] |null, /* If non-NULL, allow JSON/HTTP management from this IP network. Default is 127.0.0.1 only. */ "bind": [ "ip",... ], /* If present and non-null, bind to these IPs instead of to each interface (wildcard IP allowed) */ "allowTcpFallbackRelay": true|false, /* Allow or disallow establishment of TCP relay connections (true by default) */ - "multipathMode": 0|1|2 /* multipath mode: none (0), random (1), proportional (2) */ + "multipathMode": 0|1|2, /* multipath mode: none (0), random (1), proportional (2) */ + "disableMetrics": true|false /* If true, disable the collection of metrics in metrics.prom. */ } } ``` From 1d9f06d4ac9c9af5e04a0f1ca5a4e944dd363047 Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Thu, 6 Nov 2025 05:18:26 -0800 Subject: [PATCH 12/39] Disable metrics by default --- RELEASE-NOTES.md | 4 ++++ service/OneService.cpp | 11 +++++------ service/README.md | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 5cecf3400e..1f35513891 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,6 +1,10 @@ ZeroTier Release Notes ====== +## WORK-IN-PROGRESS + + * Metrics collection is now disabled by default. It can be enabled via the `enableMetrics` setting in `local.conf`. + ## 2025-08-21 -- Version 1.16.0 * License Changes diff --git a/service/OneService.cpp b/service/OneService.cpp index cd275aa23a..d207bd495d 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -988,7 +988,6 @@ class OneServiceImpl : public OneService { _ports[1] = 0; _ports[2] = 0; - prometheus::simpleapi::saver.set_registry(prometheus::simpleapi::registry_ptr); prometheus::simpleapi::saver.set_delay(std::chrono::seconds(5)); prometheus::simpleapi::saver.set_out_file(_homePath + ZT_PATH_SEPARATOR + "metrics.prom"); @@ -2932,13 +2931,13 @@ class OneServiceImpl : public OneService { } } - bool disableMetrics = OSUtils::jsonBool(settings["disableMetrics"], false); - if (disableMetrics) { - std::shared_ptr registry; - prometheus::simpleapi::saver.set_registry(registry); + bool enableMetrics = OSUtils::jsonBool(settings["enableMetrics"], false); + if (enableMetrics) { + prometheus::simpleapi::saver.set_registry(prometheus::simpleapi::registry_ptr); } else { - prometheus::simpleapi::saver.set_registry(prometheus::simpleapi::registry_ptr); + std::shared_ptr registry; + prometheus::simpleapi::saver.set_registry(registry); } } diff --git a/service/README.md b/service/README.md index 19a3f80b56..3c9c8045a8 100644 --- a/service/README.md +++ b/service/README.md @@ -42,7 +42,7 @@ Settings available in `local.conf` (this is not valid JSON, and JSON does not al "bind": [ "ip",... ], /* If present and non-null, bind to these IPs instead of to each interface (wildcard IP allowed) */ "allowTcpFallbackRelay": true|false, /* Allow or disallow establishment of TCP relay connections (true by default) */ "multipathMode": 0|1|2, /* multipath mode: none (0), random (1), proportional (2) */ - "disableMetrics": true|false /* If true, disable the collection of metrics in metrics.prom. */ + "enableMetrics": true|false /* If true, enable the collection of metrics in metrics.prom. */ } } ``` From fb162084f59ff41aceefc8e59c41e31a328e6476 Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Wed, 5 Nov 2025 06:12:41 -0800 Subject: [PATCH 13/39] Fix assignment vs comparison typo At the same time, ensure a newline is written after the error message. --- one.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/one.cpp b/one.cpp index 8c67a3af25..ebd2d9ae32 100644 --- a/one.cpp +++ b/one.cpp @@ -1278,9 +1278,9 @@ static int cli(int argc, char** argv) return 0; } - BOOL err = WriteFile(file, dump.str().c_str(), dump.str().size(), NULL, NULL); - if (err = FALSE) { - fprintf(stderr, "Error writing file"); + BOOL ok = WriteFile(file, dump.str().c_str(), dump.str().size(), NULL, NULL); + if (ok == FALSE) { + fprintf(stderr, "Error writing file\n"); return 1; } CloseHandle(file); From 9e53fe4b12eeb24fa716d8824567860420eab60b Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Wed, 5 Nov 2025 06:58:29 -0800 Subject: [PATCH 14/39] Avoid using the same source and destination in snprintf() It's undefined to write to a buffer you're reading from in snprintf(). On modern glibc and musl versions, this results in the string "/zerotier_dump.txt" being generated, i.e. in the root directory. Use a new variable to hold the string dump. This is done for MacOS as well. On Sequoia, at least, it's not necessary, as it handles overlapping objects fine, but this is more future-proof. At the same time, include a specific error message when the dumpfile can't be opened to help users track down problems. Also, truncate the file so that new writes don't potentially leave stale data. --- one.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/one.cpp b/one.cpp index 8c67a3af25..29179e7d28 100644 --- a/one.cpp +++ b/one.cpp @@ -1196,12 +1196,13 @@ static int cli(int argc, char** argv) return 0; } - snprintf((char*)path, sizeof(path), "%s%szerotier_dump.txt", (char*)path, ZT_PATH_SEPARATOR_S); + char dumpfile[PATH_MAX]; + snprintf(dumpfile, sizeof(dumpfile), "%s%szerotier_dump.txt", (char*)path, ZT_PATH_SEPARATOR_S); - fprintf(stdout, "Writing dump to: %s\n", path); - int fd = open((char*)path, O_CREAT | O_RDWR, 0664); + fprintf(stdout, "Writing dump to: %s\n", dumpfile); + int fd = open(dumpfile, O_CREAT | O_WRONLY | O_TRUNC, 0664); if (fd == -1) { - fprintf(stderr, "Error creating file.\n"); + perror("Error creating file"); return 1; } write(fd, dump.str().c_str(), dump.str().size()); @@ -1346,12 +1347,15 @@ static int cli(int argc, char** argv) } close(sock); char cwd[16384]; - getcwd(cwd, sizeof(cwd)); - snprintf(cwd, sizeof(cwd), "%s%szerotier_dump.txt", cwd, ZT_PATH_SEPARATOR_S); - fprintf(stdout, "Writing dump to: %s\n", cwd); - int fd = open(cwd, O_CREAT | O_RDWR, 0664); + if (getcwd(cwd, sizeof(cwd)) == nullptr) { + strcpy(cwd, "."); + } + char dumpfile[sizeof(cwd) + 32]; + snprintf(dumpfile, sizeof(dumpfile), "%s%szerotier_dump.txt", cwd, ZT_PATH_SEPARATOR_S); + fprintf(stdout, "Writing dump to: %s\n", dumpfile); + int fd = open(dumpfile, O_CREAT | O_WRONLY | O_TRUNC, 0664); if (fd == -1) { - fprintf(stderr, "Error creating file.\n"); + perror("Error creating file"); return 1; } write(fd, dump.str().c_str(), dump.str().size()); From 595a70c5ed8c7bef71edc54257e162efa1b348bc Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 10 Nov 2025 09:38:59 -0800 Subject: [PATCH 15/39] Remove old multipathMode setting --- service/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/service/README.md b/service/README.md index 3c9c8045a8..5ecbb4e1f8 100644 --- a/service/README.md +++ b/service/README.md @@ -41,7 +41,6 @@ Settings available in `local.conf` (this is not valid JSON, and JSON does not al "allowManagementFrom": [ "NETWORK/bits", ...] |null, /* If non-NULL, allow JSON/HTTP management from this IP network. Default is 127.0.0.1 only. */ "bind": [ "ip",... ], /* If present and non-null, bind to these IPs instead of to each interface (wildcard IP allowed) */ "allowTcpFallbackRelay": true|false, /* Allow or disallow establishment of TCP relay connections (true by default) */ - "multipathMode": 0|1|2, /* multipath mode: none (0), random (1), proportional (2) */ "enableMetrics": true|false /* If true, enable the collection of metrics in metrics.prom. */ } } From 4f6b9038f15132a8750018a24feddf55e54ac911 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 1 Dec 2025 14:32:11 -0800 Subject: [PATCH 16/39] Disable debug logging for the HTTP API library This just quiets things down a little since the HTTP library produces so much verbose text. --- service/OneService.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/OneService.cpp b/service/OneService.cpp index d207bd495d..227b575f7e 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -2609,8 +2609,8 @@ class OneServiceImpl : public OneService { _controlPlaneV6.set_pre_routing_handler(authCheck); #if ZT_DEBUG == 1 - _controlPlane.set_logger([](const httplib::Request& req, const httplib::Response& res) { fprintf(stderr, "%s", http_log(req, res).c_str()); }); - _controlPlaneV6.set_logger([](const httplib::Request& req, const httplib::Response& res) { fprintf(stderr, "%s", http_log(req, res).c_str()); }); + //_controlPlane.set_logger([](const httplib::Request& req, const httplib::Response& res) { fprintf(stderr, "%s", http_log(req, res).c_str()); }); + //_controlPlaneV6.set_logger([](const httplib::Request& req, const httplib::Response& res) { fprintf(stderr, "%s", http_log(req, res).c_str()); }); #endif if (_primaryPort == 0) { fprintf(stderr, "unable to determine local control port"); From 23429264426c7d77ff1552796287132ebffeff17 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Dec 2025 14:17:21 -0500 Subject: [PATCH 17/39] All version bumps but Windows. --- debian/changelog | 6 ++++++ ext/installfiles/mac/ZeroTier One.pkgproj | 2 +- version.h | 2 +- zerotier-one.spec | 5 ++++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index 84b78f6976..57d6b2ac45 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +zerotier-one (1.16.1) unstable; urgency=medium + + * See RELEASE-NOTES.md for release notes. + + -- Adam Ierymenko Mon, 12 Dec 2025 01:00:00 -0700 + zerotier-one (1.16.0-2) unstable; urgency=medium * Fix build settings to include controller. diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index 56ae6ea28a..5abe96455b 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -702,7 +702,7 @@ USE_HFS+_COMPRESSION VERSION - 1.16.0 + 1.16.1 TYPE 0 diff --git a/version.h b/version.h index 3cfa04ffa2..b0e5bb00e9 100644 --- a/version.h +++ b/version.h @@ -22,7 +22,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 0 +#define ZEROTIER_ONE_VERSION_REVISION 1 /** * Build version diff --git a/zerotier-one.spec b/zerotier-one.spec index ffb010c240..be57e77236 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -1,5 +1,5 @@ Name: zerotier-one -Version: 1.16.0 +Version: 1.16.1 Release: 1%{?dist} Summary: ZeroTier network virtualization service @@ -155,6 +155,9 @@ chmod 0755 $RPM_BUILD_ROOT/etc/init.d/zerotier-one %endif %changelog +* Fri Dec 12 2025 Adam Ierymenko - 1.16.1 +- see https://github.com/zerotier/ZeroTierOne for release notes + * Wed Oct 23 2024 Adam Ierymenko - 1.14.2 - see https://github.com/zerotier/ZeroTierOne for release notes From 22b47f851ee3a21d22715bfd0cbcedb84b90817c Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 12 Dec 2025 14:43:40 -0500 Subject: [PATCH 18/39] 1.16.1 Windows bump --- ext/installfiles/windows/ZeroTier One.aip | 8 +- .../windows/ZeroTier One.back.aip | 558 ------------------ 2 files changed, 4 insertions(+), 562 deletions(-) delete mode 100644 ext/installfiles/windows/ZeroTier One.back.aip diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index b787dac154..8a84ad4344 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -21,10 +21,10 @@ - + - + @@ -62,7 +62,7 @@ - + @@ -515,7 +515,7 @@ - + diff --git a/ext/installfiles/windows/ZeroTier One.back.aip b/ext/installfiles/windows/ZeroTier One.back.aip deleted file mode 100644 index 9ad8182773..0000000000 --- a/ext/installfiles/windows/ZeroTier One.back.aip +++ /dev/null @@ -1,558 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 9c2bd25d86d487ace3b5dc38ef83eca8b409da5a Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Mon, 22 Dec 2025 12:50:02 -0800 Subject: [PATCH 19/39] Add a couple entries to the release notes The date still needs to be updated when this is actually released. --- RELEASE-NOTES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 1f35513891..270ec24b15 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,9 +1,11 @@ ZeroTier Release Notes ====== -## WORK-IN-PROGRESS +## XXXX-XX-XX -- Version 1.16.1 * Metrics collection is now disabled by default. It can be enabled via the `enableMetrics` setting in `local.conf`. + * Fix for an issue where metrics were not being recorded while running in daemon mode. + * Fix debug dumpfile being written to the root directory. ## 2025-08-21 -- Version 1.16.0 From a77009e4f04f6e18aeecdced75ab20e61890b34d Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 22 Dec 2025 16:50:13 -0500 Subject: [PATCH 20/39] notes --- RELEASE-NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 270ec24b15..d3441c8859 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -6,6 +6,7 @@ ZeroTier Release Notes * Metrics collection is now disabled by default. It can be enabled via the `enableMetrics` setting in `local.conf`. * Fix for an issue where metrics were not being recorded while running in daemon mode. * Fix debug dumpfile being written to the root directory. + * Minor bug fixes in Mac and BSD tun/tap code. ## 2025-08-21 -- Version 1.16.0 From d2b4b6e91dc6a130d85d48a6c73799bb5e6346ff Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 22 Dec 2025 17:49:15 -0500 Subject: [PATCH 21/39] Add date to release notes. --- RELEASE-NOTES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index d3441c8859..7a866b4793 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,7 +1,7 @@ ZeroTier Release Notes ====== -## XXXX-XX-XX -- Version 1.16.1 +## 2025-12-22 -- Version 1.16.1 * Metrics collection is now disabled by default. It can be enabled via the `enableMetrics` setting in `local.conf`. * Fix for an issue where metrics were not being recorded while running in daemon mode. From 294af67370b7a16d81de0a37994cde367297437f Mon Sep 17 00:00:00 2001 From: "dimitriy.dade" Date: Wed, 25 Feb 2026 17:00:20 -0500 Subject: [PATCH 22/39] Updating versions that were flagged as vulnerable by Dependabot --- rustybits/Cargo.lock | 81 ++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/rustybits/Cargo.lock b/rustybits/Cargo.lock index ba8d1f8367..ff9fecfb3b 100644 --- a/rustybits/Cargo.lock +++ b/rustybits/Cargo.lock @@ -230,17 +230,11 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cbindgen" @@ -756,6 +750,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1038,7 +1038,18 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", ] [[package]] @@ -1544,11 +1555,11 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "lru" -version = "0.16.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" +checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -1673,11 +1684,10 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" dependencies = [ - "byteorder", "lazy_static", "libm", "num-integer", @@ -1690,9 +1700,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-integer" @@ -2441,9 +2451,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.8" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" dependencies = [ "const-oid", "digest", @@ -2678,10 +2688,11 @@ checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -2695,11 +2706,20 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -3239,29 +3259,30 @@ dependencies = [ [[package]] name = "time" -version = "0.3.43" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", + "itoa", "num-conv", "powerfmt", - "serde", + "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" -version = "0.2.24" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", From eac140aa73ff6255f0d535fb1f7c82bc22e432c3 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 2 Mar 2026 13:14:16 -0800 Subject: [PATCH 23/39] Update use of ztc_controller table for changes in progress in CV1. --- .gitignore | 3 +++ nonfree/controller/CV1.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index f5befd99f3..0c92b5afc0 100755 --- a/.gitignore +++ b/.gitignore @@ -141,3 +141,6 @@ __pycache__ *.pyc *_source.tar.bz2 snap/.snapcraft + +# local Claude configurations +.claude/*.local.* \ No newline at end of file diff --git a/nonfree/controller/CV1.cpp b/nonfree/controller/CV1.cpp index cf4496ad1f..dfe8eece66 100644 --- a/nonfree/controller/CV1.cpp +++ b/nonfree/controller/CV1.cpp @@ -1130,22 +1130,22 @@ void CV1::heartbeat() std::string build = std::to_string(ZEROTIER_ONE_VERSION_BUILD); std::string now = std::to_string(ts); std::string host_port = std::to_string(_listenPort); - std::string use_redis = (_rc != NULL) ? "true" : "false"; + std::string notification_transport = (_rc != NULL) ? "redis" : "postgres"; std::string redis_mem_status = (_redisMemberStatus) ? "true" : "false"; try { pqxx::work w { *c->c }; pqxx::result res = w.exec0( - "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis, redis_member_status) " + "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, notification_transport, redis_member_status) " "VALUES (" + w.quote(controllerId) + ", " + w.quote(hostname) + ", TO_TIMESTAMP(" + now + "::double precision/1000), " + w.quote(publicIdentity) + ", " + major + ", " + minor + ", " + rev + ", " + build + ", " + host_port + ", " - + use_redis + ", " + redis_mem_status + + w.quote(notification_transport) + ", " + redis_mem_status + ") " "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " "v_rev = EXCLUDED.v_rev, v_build = EXCLUDED.v_rev, host_port = EXCLUDED.host_port, " - "use_redis = EXCLUDED.use_redis, redis_member_status = EXCLUDED.redis_member_status"); + "notification_transport = EXCLUDED.notification_transport, redis_member_status = EXCLUDED.redis_member_status"); w.commit(); } catch (std::exception& e) { From 7f47b2ba8f54d7bac2cce64ee2e13d25a1af80a5 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 2 Mar 2026 14:07:53 -0800 Subject: [PATCH 24/39] update dockerfile to get around go stdlib bug in controller build --- ext/central-controller-docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/central-controller-docker/Dockerfile b/ext/central-controller-docker/Dockerfile index 29670ec687..c739b03956 100644 --- a/ext/central-controller-docker/Dockerfile +++ b/ext/central-controller-docker/Dockerfile @@ -3,8 +3,8 @@ FROM registry.zerotier.com/zerotier/ctlbuild:2025-07-14 AS builder ADD . /ZeroTierOne RUN export PATH=$PATH:~/.cargo/bin && cd ZeroTierOne && make clean && make central-controller -j8 -FROM golang:bookworm AS go_base -RUN go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest +FROM golang:1.24.1-bookworm AS go_base +RUN GONOSUMDB=* GOFLAGS='-p=1' go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest FROM registry.zerotier.com/zerotier/ctlrun:2025-07-14 AS run_base COPY --from=builder /ZeroTierOne/zerotier-one /usr/local/bin/zerotier-one From 8f1b213994513cb766bfb657205ab5e976b0070d Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 2 Mar 2026 14:08:02 -0800 Subject: [PATCH 25/39] still use `use_redis` column --- nonfree/controller/CV1.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/nonfree/controller/CV1.cpp b/nonfree/controller/CV1.cpp index dfe8eece66..986ccde81d 100644 --- a/nonfree/controller/CV1.cpp +++ b/nonfree/controller/CV1.cpp @@ -1131,21 +1131,22 @@ void CV1::heartbeat() std::string now = std::to_string(ts); std::string host_port = std::to_string(_listenPort); std::string notification_transport = (_rc != NULL) ? "redis" : "postgres"; + std::string use_redis = (_rc != NULL) ? "true" : "false"; std::string redis_mem_status = (_redisMemberStatus) ? "true" : "false"; try { pqxx::work w { *c->c }; pqxx::result res = w.exec0( - "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, notification_transport, redis_member_status) " + "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis, notification_transport, redis_member_status) " "VALUES (" + w.quote(controllerId) + ", " + w.quote(hostname) + ", TO_TIMESTAMP(" + now + "::double precision/1000), " + w.quote(publicIdentity) + ", " + major + ", " + minor + ", " + rev + ", " + build + ", " + host_port + ", " - + w.quote(notification_transport) + ", " + redis_mem_status + + w.quote(use_redis) + ", " + w.quote(notification_transport) + ", " + redis_mem_status + ") " "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " "v_rev = EXCLUDED.v_rev, v_build = EXCLUDED.v_rev, host_port = EXCLUDED.host_port, " - "notification_transport = EXCLUDED.notification_transport, redis_member_status = EXCLUDED.redis_member_status"); + "use_redis = EXCLUDED.use_redis, notification_transport = EXCLUDED.notification_transport, redis_member_status = EXCLUDED.redis_member_status"); w.commit(); } catch (std::exception& e) { From 936801a51b554a17bf7c68fe18e33e0ecd6322b6 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 2 Mar 2026 14:08:07 -0800 Subject: [PATCH 26/39] update gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 0c92b5afc0..22c01d9000 100755 --- a/.gitignore +++ b/.gitignore @@ -91,6 +91,7 @@ debian/zerotier-one*.debhelper debian/*.log debian/zerotier-one.substvars root-watcher/config.json +build/ # Java/Android/JNI build droppings java/obj/ @@ -106,6 +107,7 @@ windows/WinUI/bin/ windows/ZeroTierOne/Debug/ /ext/installfiles/windows/chocolatey/zerotier-one/*.nupkg + # Miscellaneous mac/Xcode droppings .Trashes *.swp From 91428eacae021bdc67609acf250350795a947886 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Mar 2026 10:51:13 -0800 Subject: [PATCH 27/39] add github action for creating CV1 controller images --- .github/workflows/central-controller-cv1.yaml | 83 +++++++++++++++++++ make-linux.mk | 6 ++ 2 files changed, 89 insertions(+) create mode 100644 .github/workflows/central-controller-cv1.yaml diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml new file mode 100644 index 0000000000..5010ad770b --- /dev/null +++ b/.github/workflows/central-controller-cv1.yaml @@ -0,0 +1,83 @@ +name: Central Controller CV1 Build and Push + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + central_controller: + name: Central Controller CV1 Build + strategy: + matrix: + runner: [gha-runner-x64, gha-runner-arm64] + runs-on: ${{ matrix.runner }} + steps: + - name: checkout + uses: actions/checkout@v4 + + - name: GCP Auth + uses: google-github-actions/auth@v2 + with: + credentials_json: ${{ secrets.DOCKER_REGISTRY_WRITER}} + + - name: Set up GCloud CLI + uses: google-github-actions/setup-gcloud@v2 + + - name: Docker Auth + run: gcloud auth configure-docker us-central1-docker.pkg.dev --quiet + + - name: Get branch name and sanitize + id: branch + run: | + BRANCH_NAME="${GITHUB_REF##*/}" + SANITIZED_BRANCH="${BRANCH_NAME//\//-}" + echo "branch_name=$SANITIZED_BRANCH" >> $GITHUB_OUTPUT + + - name: Get short git commit SHA + id: sha + run: | + calculatedSha=$(git rev-parse --short ${{ github.sha }}) + echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV + + - name: Build & Push Docker Image + run: | + make central-controller-docker-${{ runner.arch }} --no-print-directory + + multi-arch-docker: + runs-on: gha-runner-x64 + needs: central_controller + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: GCP Auth + uses: google-github-actions/auth@v2 + with: + credentials_json: ${{ secrets.DOCKER_REGISTRY_WRITER}} + + - name: Set up GCloud CLI + uses: google-github-actions/setup-gcloud@v2 + + - name: Docker Auth + run: gcloud auth configure-docker us-central1-docker.pkg.dev --quiet + + - name: Get branch name and sanitize + id: branch + run: | + BRANCH_NAME="${GITHUB_REF##*/}" + SANITIZED_BRANCH="${BRANCH_NAME//\//-}" + echo "branch_name=$SANITIZED_BRANCH" >> $GITHUB_OUTPUT + + - name: Get short git commit SHA + id: sha + run: | + calculatedSha=$(git rev-parse --short ${{ github.sha }}) + echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV + + - name: Create and push multi-arch manifest + run: | + docker manifest create us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} \ + --amend us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-X64 \ + --amend us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-ARM64 + docker manifest push us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} diff --git a/make-linux.mk b/make-linux.mk index 77d3e0b1a4..10780fdcb2 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -472,6 +472,12 @@ central-controller-docker: _buildx FORCE docker buildx build --platform linux/amd64,linux/arm64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} -f ext/central-controller-docker/Dockerfile --build-arg git_branch=`git name-rev --name-only HEAD` . --push @echo Image: registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} +central-controller-docker-X64: FORCE + docker build --platform linux/amd64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP}-amd64 -f ext/central-controller-docker/Dockerfile . --push + +central-controller-docker-ARM64: FORCE + docker build --platform linux/arm64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP}-arm64 -f ext/central-controller-docker/Dockerfile . --push + centralv2-controller-docker: _buildx FORCE docker buildx build --platform linux/amd64,linux/arm64 --no-cache -t us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:$(shell git rev-parse --short HEAD) -f ext/central-controller-docker/Dockerfile --build-arg git_branch=`git name-rev --name-only HEAD` . --push @echo Image: us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:$(shell git rev-parse --short HEAD) From e81053aed7d56a69e9e64a7683f856af9fc93836 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Mar 2026 10:57:46 -0800 Subject: [PATCH 28/39] fix build --- .github/workflows/central-controller-cv1.yaml | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml index 5010ad770b..0ae6693719 100644 --- a/.github/workflows/central-controller-cv1.yaml +++ b/.github/workflows/central-controller-cv1.yaml @@ -16,16 +16,8 @@ jobs: - name: checkout uses: actions/checkout@v4 - - name: GCP Auth - uses: google-github-actions/auth@v2 - with: - credentials_json: ${{ secrets.DOCKER_REGISTRY_WRITER}} - - - name: Set up GCloud CLI - uses: google-github-actions/setup-gcloud@v2 - - name: Docker Auth - run: gcloud auth configure-docker us-central1-docker.pkg.dev --quiet + run: echo "${{ secrets.PORTUS_PW }}" | docker login registry.zerotier.com -u ${{ secrets.PORTUS_USER }} --password-stdin - name: Get branch name and sanitize id: branch @@ -51,16 +43,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: GCP Auth - uses: google-github-actions/auth@v2 - with: - credentials_json: ${{ secrets.DOCKER_REGISTRY_WRITER}} - - - name: Set up GCloud CLI - uses: google-github-actions/setup-gcloud@v2 - - name: Docker Auth - run: gcloud auth configure-docker us-central1-docker.pkg.dev --quiet + run: echo "${{ secrets.PORTUS_PW }}" | docker login registry.zerotier.com -u ${{ secrets.PORTUS_USER }} --password-stdin - name: Get branch name and sanitize id: branch From 97db0101122705df2f720dffe5e186c698129f7c Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Mar 2026 11:12:19 -0800 Subject: [PATCH 29/39] fix multi-arch manifest --- .github/workflows/central-controller-cv1.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml index 0ae6693719..85a6b410a2 100644 --- a/.github/workflows/central-controller-cv1.yaml +++ b/.github/workflows/central-controller-cv1.yaml @@ -61,7 +61,7 @@ jobs: - name: Create and push multi-arch manifest run: | - docker manifest create us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} \ - --amend us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-X64 \ - --amend us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-ARM64 - docker manifest push us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} + docker manifest create registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} \ + --amend registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-X64 \ + --amend registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-ARM64 + docker manifest push registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} From 34777b6bb430b6b6e54e36fb006b7a41fa8f2207 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Mar 2026 11:35:51 -0800 Subject: [PATCH 30/39] another fix for multi-arch builds --- .github/workflows/central-controller-cv1.yaml | 2 +- make-linux.mk | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml index 85a6b410a2..5c3e391d66 100644 --- a/.github/workflows/central-controller-cv1.yaml +++ b/.github/workflows/central-controller-cv1.yaml @@ -34,7 +34,7 @@ jobs: - name: Build & Push Docker Image run: | - make central-controller-docker-${{ runner.arch }} --no-print-directory + docker build --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-${{ runner.arch }}-amd64 -f ext/central-controller-docker/Dockerfile . --push multi-arch-docker: runs-on: gha-runner-x64 diff --git a/make-linux.mk b/make-linux.mk index 10780fdcb2..07f197f6a1 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -475,13 +475,6 @@ central-controller-docker: _buildx FORCE central-controller-docker-X64: FORCE docker build --platform linux/amd64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP}-amd64 -f ext/central-controller-docker/Dockerfile . --push -central-controller-docker-ARM64: FORCE - docker build --platform linux/arm64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP}-arm64 -f ext/central-controller-docker/Dockerfile . --push - -centralv2-controller-docker: _buildx FORCE - docker buildx build --platform linux/amd64,linux/arm64 --no-cache -t us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:$(shell git rev-parse --short HEAD) -f ext/central-controller-docker/Dockerfile --build-arg git_branch=`git name-rev --name-only HEAD` . --push - @echo Image: us-central1-docker.pkg.dev/zerotier-421eb9/docker-images/ztcentral-controller:$(shell git rev-parse --short HEAD) - debug: FORCE make ZT_DEBUG=1 one make ZT_DEBUG=1 selftest From e918ec44d5fd3f7e3f613dabd5aee6c70757f214 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Mar 2026 11:47:09 -0800 Subject: [PATCH 31/39] one last fix --- .github/workflows/central-controller-cv1.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml index 5c3e391d66..6a680ef507 100644 --- a/.github/workflows/central-controller-cv1.yaml +++ b/.github/workflows/central-controller-cv1.yaml @@ -34,7 +34,7 @@ jobs: - name: Build & Push Docker Image run: | - docker build --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-${{ runner.arch }}-amd64 -f ext/central-controller-docker/Dockerfile . --push + docker build --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-${{ runner.arch }} -f ext/central-controller-docker/Dockerfile . --push multi-arch-docker: runs-on: gha-runner-x64 From a2340bf60cb70d34f8a3ac4bfd16492aa337d4b5 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 4 Mar 2026 11:58:43 -0800 Subject: [PATCH 32/39] add --provenance false to avoid `$IMAGE is a manifest list` error --- .github/workflows/central-controller-cv1.yaml | 2 +- make-linux.mk | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml index 6a680ef507..6fcdbcfbe6 100644 --- a/.github/workflows/central-controller-cv1.yaml +++ b/.github/workflows/central-controller-cv1.yaml @@ -34,7 +34,7 @@ jobs: - name: Build & Push Docker Image run: | - docker build --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-${{ runner.arch }} -f ext/central-controller-docker/Dockerfile . --push + docker build --provenance false --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-${{ runner.arch }} -f ext/central-controller-docker/Dockerfile . --push multi-arch-docker: runs-on: gha-runner-x64 diff --git a/make-linux.mk b/make-linux.mk index 07f197f6a1..f8e2520c2c 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -472,9 +472,6 @@ central-controller-docker: _buildx FORCE docker buildx build --platform linux/amd64,linux/arm64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} -f ext/central-controller-docker/Dockerfile --build-arg git_branch=`git name-rev --name-only HEAD` . --push @echo Image: registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} -central-controller-docker-X64: FORCE - docker build --platform linux/amd64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP}-amd64 -f ext/central-controller-docker/Dockerfile . --push - debug: FORCE make ZT_DEBUG=1 one make ZT_DEBUG=1 selftest From aa586efbb5f830a9667e418249b58d255023aa55 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 17 Apr 2026 13:50:49 -0700 Subject: [PATCH 33/39] query fix --- nonfree/controller/CV1.cpp | 584 ++++++++++++++++++------------------- 1 file changed, 282 insertions(+), 302 deletions(-) diff --git a/nonfree/controller/CV1.cpp b/nonfree/controller/CV1.cpp index 986ccde81d..451ae00f16 100644 --- a/nonfree/controller/CV1.cpp +++ b/nonfree/controller/CV1.cpp @@ -203,9 +203,7 @@ bool CV1::waitForReady() } bool CV1::isReady() -{ - return ((_ready == 2) && (_connected)); -} +{ return ((_ready == 2) && (_connected)); } bool CV1::save(nlohmann::json& record, bool notifyListeners) { @@ -339,9 +337,7 @@ void CV1::nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const } void CV1::nodeIsOnline(const uint64_t networkId, const uint64_t memberId, const InetAddress& physicalAddress) -{ - this->nodeIsOnline(networkId, memberId, physicalAddress, "unknown/unknown"); -} +{ this->nodeIsOnline(networkId, memberId, physicalAddress, "unknown/unknown"); } AuthInfo CV1::getSSOAuthInfo(const nlohmann::json& member, const std::string& redirectURL) { @@ -383,22 +379,20 @@ AuthInfo CV1::getSSOAuthInfo(const nlohmann::json& member, const std::string& re pqxx::row count = w.exec_params1("SELECT count(id) FROM ztc_member WHERE id = $1 AND network_id = $2 AND deleted = false", memberId, networkId); if (count[0].as() == 1) { // get active nonce, if exists. - pqxx::result r = w.exec_params( - "SELECT nonce FROM ztc_sso_expiry " - "WHERE network_id = $1 AND member_id = $2 " - "AND ((NOW() AT TIME ZONE 'UTC') <= authentication_expiry_time) AND ((NOW() AT TIME ZONE 'UTC') <= nonce_expiration)", - networkId, - memberId); + pqxx::result r = w.exec_params("SELECT nonce FROM ztc_sso_expiry " + "WHERE network_id = $1 AND member_id = $2 " + "AND ((NOW() AT TIME ZONE 'UTC') <= authentication_expiry_time) AND ((NOW() AT TIME ZONE 'UTC') <= nonce_expiration)", + networkId, + memberId); if (r.size() == 0) { // no active nonce. // find an unused nonce, if one exists. - pqxx::result r = w.exec_params( - "SELECT nonce FROM ztc_sso_expiry " - "WHERE network_id = $1 AND member_id = $2 " - "AND authentication_expiry_time IS NULL AND ((NOW() AT TIME ZONE 'UTC') <= nonce_expiration)", - networkId, - memberId); + pqxx::result r = w.exec_params("SELECT nonce FROM ztc_sso_expiry " + "WHERE network_id = $1 AND member_id = $2 " + "AND authentication_expiry_time IS NULL AND ((NOW() AT TIME ZONE 'UTC') <= nonce_expiration)", + networkId, + memberId); if (r.size() == 1) { // we have an existing nonce. Use it @@ -412,14 +406,13 @@ AuthInfo CV1::getSSOAuthInfo(const nlohmann::json& member, const std::string& re Utils::hex(nonceBytes, sizeof(nonceBytes), nonceBuf); nonce = std::string(nonceBuf); - pqxx::result ir = w.exec_params0( - "INSERT INTO ztc_sso_expiry " - "(nonce, nonce_expiration, network_id, member_id) VALUES " - "($1, TO_TIMESTAMP($2::double precision/1000), $3, $4)", - nonce, - OSUtils::now() + 300000, - networkId, - memberId); + pqxx::result ir = w.exec_params0("INSERT INTO ztc_sso_expiry " + "(nonce, nonce_expiration, network_id, member_id) VALUES " + "($1, TO_TIMESTAMP($2::double precision/1000), $3, $4)", + nonce, + OSUtils::now() + 300000, + networkId, + memberId); w.commit(); } @@ -439,17 +432,16 @@ AuthInfo CV1::getSSOAuthInfo(const nlohmann::json& member, const std::string& re exit(7); } - r = w.exec_params( - "SELECT oc.client_id, oc.authorization_endpoint, oc.issuer, oc.provider, oc.sso_impl_version " - "FROM ztc_network AS n " - "INNER JOIN ztc_org o " - " ON o.owner_id = n.owner_id " - "LEFT OUTER JOIN ztc_network_oidc_config noc " - " ON noc.network_id = n.id " - "LEFT OUTER JOIN ztc_oidc_config oc " - " ON noc.client_id = oc.client_id AND oc.org_id = o.org_id " - "WHERE n.id = $1 AND n.sso_enabled = true", - networkId); + r = w.exec_params("SELECT oc.client_id, oc.authorization_endpoint, oc.issuer, oc.provider, oc.sso_impl_version " + "FROM ztc_network AS n " + "INNER JOIN ztc_org o " + " ON o.owner_id = n.owner_id " + "LEFT OUTER JOIN ztc_network_oidc_config noc " + " ON noc.network_id = n.id " + "LEFT OUTER JOIN ztc_oidc_config oc " + " ON noc.client_id = oc.client_id AND oc.org_id = o.org_id " + "WHERE n.id = $1 AND n.sso_enabled = true", + networkId); std::string client_id = ""; std::string authorization_endpoint = ""; @@ -482,15 +474,14 @@ AuthInfo CV1::getSSOAuthInfo(const nlohmann::json& member, const std::string& re if (info.version == 0) { char url[2048] = { 0 }; - OSUtils::ztsnprintf( - url, - sizeof(authenticationURL), - "%s?response_type=id_token&response_mode=form_post&scope=openid+email+profile&redirect_uri=%s&nonce=%s&state=%s&client_id=%s", - authorization_endpoint.c_str(), - url_encode(redirectURL).c_str(), - nonce.c_str(), - state_hex, - client_id.c_str()); + OSUtils::ztsnprintf(url, + sizeof(authenticationURL), + "%s?response_type=id_token&response_mode=form_post&scope=openid+email+profile&redirect_uri=%s&nonce=%s&state=%s&client_id=%s", + authorization_endpoint.c_str(), + url_encode(redirectURL).c_str(), + nonce.c_str(), + state_hex, + client_id.c_str()); info.authenticationURL = std::string(url); } else if (info.version == 1) { @@ -501,15 +492,14 @@ AuthInfo CV1::getSSOAuthInfo(const nlohmann::json& member, const std::string& re info.ssoState = std::string(state_hex) + "_" + networkId; info.centralAuthURL = redirectURL; #ifdef ZT_DEBUG - fprintf( - stderr, - "ssoClientID: %s\nissuerURL: %s\nssoNonce: %s\nssoState: %s\ncentralAuthURL: %s\nprovider: %s\n", - info.ssoClientID.c_str(), - info.issuerURL.c_str(), - info.ssoNonce.c_str(), - info.ssoState.c_str(), - info.centralAuthURL.c_str(), - provider.c_str()); + fprintf(stderr, + "ssoClientID: %s\nissuerURL: %s\nssoNonce: %s\nssoState: %s\ncentralAuthURL: %s\nprovider: %s\n", + info.ssoClientID.c_str(), + info.issuerURL.c_str(), + info.ssoNonce.c_str(), + info.ssoState.c_str(), + info.centralAuthURL.c_str(), + provider.c_str()); #endif } } @@ -558,26 +548,25 @@ void CV1::initializeNetworks() std::unordered_set networkSet; char qbuf[2048] = { 0 }; - sprintf( - qbuf, - "SELECT n.id, (EXTRACT(EPOCH FROM n.creation_time AT TIME ZONE 'UTC')*1000)::bigint as creation_time, n.capabilities, " - "n.enable_broadcast, (EXTRACT(EPOCH FROM n.last_modified AT TIME ZONE 'UTC')*1000)::bigint AS last_modified, n.mtu, n.multicast_limit, n.name, n.private, n.remote_trace_level, " - "n.remote_trace_target, n.revision, n.rules, n.tags, n.v4_assign_mode, n.v6_assign_mode, n.sso_enabled, (CASE WHEN n.sso_enabled THEN noc.client_id ELSE NULL END) as client_id, " - "(CASE WHEN n.sso_enabled THEN oc.authorization_endpoint ELSE NULL END) as authorization_endpoint, " - "(CASE WHEN n.sso_enabled THEN oc.provider ELSE NULL END) as provider, d.domain, d.servers, " - "ARRAY(SELECT CONCAT(host(ip_range_start),'|', host(ip_range_end)) FROM ztc_network_assignment_pool WHERE network_id = n.id) AS assignment_pool, " - "ARRAY(SELECT CONCAT(host(address),'/',bits::text,'|',COALESCE(host(via), 'NULL'))FROM ztc_network_route WHERE network_id = n.id) AS routes " - "FROM ztc_network n " - "LEFT OUTER JOIN ztc_org o " - " ON o.owner_id = n.owner_id " - "LEFT OUTER JOIN ztc_network_oidc_config noc " - " ON noc.network_id = n.id " - "LEFT OUTER JOIN ztc_oidc_config oc " - " ON noc.client_id = oc.client_id AND oc.org_id = o.org_id " - "LEFT OUTER JOIN ztc_network_dns d " - " ON d.network_id = n.id " - "WHERE deleted = false AND controller_id = '%s'", - _myAddressStr.c_str()); + sprintf(qbuf, + "SELECT n.id, (EXTRACT(EPOCH FROM n.creation_time AT TIME ZONE 'UTC')*1000)::bigint as creation_time, n.capabilities, " + "n.enable_broadcast, (EXTRACT(EPOCH FROM n.last_modified AT TIME ZONE 'UTC')*1000)::bigint AS last_modified, n.mtu, n.multicast_limit, n.name, n.private, n.remote_trace_level, " + "n.remote_trace_target, n.revision, n.rules, n.tags, n.v4_assign_mode, n.v6_assign_mode, n.sso_enabled, (CASE WHEN n.sso_enabled THEN noc.client_id ELSE NULL END) as client_id, " + "(CASE WHEN n.sso_enabled THEN oc.authorization_endpoint ELSE NULL END) as authorization_endpoint, " + "(CASE WHEN n.sso_enabled THEN oc.provider ELSE NULL END) as provider, d.domain, d.servers, " + "ARRAY(SELECT CONCAT(host(ip_range_start),'|', host(ip_range_end)) FROM ztc_network_assignment_pool WHERE network_id = n.id) AS assignment_pool, " + "ARRAY(SELECT CONCAT(host(address),'/',bits::text,'|',COALESCE(host(via), 'NULL'))FROM ztc_network_route WHERE network_id = n.id) AS routes " + "FROM ztc_network n " + "LEFT OUTER JOIN ztc_org o " + " ON o.owner_id = n.owner_id " + "LEFT OUTER JOIN ztc_network_oidc_config noc " + " ON noc.network_id = n.id " + "LEFT OUTER JOIN ztc_oidc_config oc " + " ON noc.client_id = oc.client_id AND oc.org_id = o.org_id " + "LEFT OUTER JOIN ztc_network_dns d " + " ON d.network_id = n.id " + "WHERE deleted = false AND controller_id = '%s'", + _myAddressStr.c_str()); auto c = _pool->borrow(); auto c2 = _pool->borrow(); pqxx::work w { *c->c }; @@ -585,55 +574,54 @@ void CV1::initializeNetworks() fprintf(stderr, "Load networks from psql...\n"); auto stream = pqxx::stream_from::query(w, qbuf); - std::tuple< - std::string // network ID - , - std::optional // creationTime - , - std::optional // capabilities - , - std::optional // enableBroadcast - , - std::optional // lastModified - , - std::optional // mtu - , - std::optional // multicastLimit - , - std::optional // name - , - bool // private - , - std::optional // remoteTraceLevel - , - std::optional // remoteTraceTarget - , - std::optional // revision - , - std::optional // rules - , - std::optional // tags - , - std::optional // v4AssignMode - , - std::optional // v6AssignMode - , - std::optional // ssoEnabled - , - std::optional // clientId - , - std::optional // authorizationEndpoint - , - std::optional // ssoProvider - , - std::optional // domain - , - std::optional // servers - , - std::string // assignmentPoolString - , - std::string // routeString - > + std::tuple // creationTime + , + std::optional // capabilities + , + std::optional // enableBroadcast + , + std::optional // lastModified + , + std::optional // mtu + , + std::optional // multicastLimit + , + std::optional // name + , + bool // private + , + std::optional // remoteTraceLevel + , + std::optional // remoteTraceTarget + , + std::optional // revision + , + std::optional // rules + , + std::optional // tags + , + std::optional // v4AssignMode + , + std::optional // v6AssignMode + , + std::optional // ssoEnabled + , + std::optional // clientId + , + std::optional // authorizationEndpoint + , + std::optional // ssoProvider + , + std::optional // domain + , + std::optional // servers + , + std::string // assignmentPoolString + , + std::string // routeString + > row; uint64_t count = 0; @@ -872,31 +860,30 @@ void CV1::initializeMembers() } char qbuf[2048]; - sprintf( - qbuf, - "SELECT m.id, m.network_id, m.active_bridge, m.authorized, m.capabilities, " - "(EXTRACT(EPOCH FROM m.creation_time AT TIME ZONE 'UTC')*1000)::bigint, m.identity, " - "(EXTRACT(EPOCH FROM m.last_authorized_time AT TIME ZONE 'UTC')*1000)::bigint, " - "(EXTRACT(EPOCH FROM m.last_deauthorized_time AT TIME ZONE 'UTC')*1000)::bigint, " - "m.remote_trace_level, m.remote_trace_target, m.tags, m.v_major, m.v_minor, m.v_rev, m.v_proto, " - "m.no_auto_assign_ips, m.revision, m.sso_exempt, " - "(CASE WHEN n.sso_enabled = TRUE AND m.sso_exempt = FALSE THEN " - " ( " - " SELECT (EXTRACT(EPOCH FROM e.authentication_expiry_time)*1000)::bigint " - " FROM ztc_sso_expiry e " - " INNER JOIN ztc_network n1 " - " ON n1.id = e.network_id AND n1.deleted = TRUE " - " WHERE e.network_id = m.network_id AND e.member_id = m.id AND n.sso_enabled = TRUE AND e.authentication_expiry_time IS NOT NULL " - " ORDER BY e.authentication_expiry_time DESC LIMIT 1 " - " ) " - " ELSE NULL " - " END) AS authentication_expiry_time, " - "ARRAY(SELECT DISTINCT address FROM ztc_member_ip_assignment WHERE member_id = m.id AND network_id = m.network_id) AS assigned_addresses " - "FROM ztc_member m " - "INNER JOIN ztc_network n " - " ON n.id = m.network_id " - "WHERE n.controller_id = '%s' AND n.deleted = FALSE AND m.deleted = FALSE", - _myAddressStr.c_str()); + sprintf(qbuf, + "SELECT m.id, m.network_id, m.active_bridge, m.authorized, m.capabilities, " + "(EXTRACT(EPOCH FROM m.creation_time AT TIME ZONE 'UTC')*1000)::bigint, m.identity, " + "(EXTRACT(EPOCH FROM m.last_authorized_time AT TIME ZONE 'UTC')*1000)::bigint, " + "(EXTRACT(EPOCH FROM m.last_deauthorized_time AT TIME ZONE 'UTC')*1000)::bigint, " + "m.remote_trace_level, m.remote_trace_target, m.tags, m.v_major, m.v_minor, m.v_rev, m.v_proto, " + "m.no_auto_assign_ips, m.revision, m.sso_exempt, " + "(CASE WHEN n.sso_enabled = TRUE AND m.sso_exempt = FALSE THEN " + " ( " + " SELECT (EXTRACT(EPOCH FROM e.authentication_expiry_time)*1000)::bigint " + " FROM ztc_sso_expiry e " + " INNER JOIN ztc_network n1 " + " ON n1.id = e.network_id AND n1.deleted = TRUE " + " WHERE e.network_id = m.network_id AND e.member_id = m.id AND n.sso_enabled = TRUE AND e.authentication_expiry_time IS NOT NULL " + " ORDER BY e.authentication_expiry_time DESC LIMIT 1 " + " ) " + " ELSE NULL " + " END) AS authentication_expiry_time, " + "ARRAY(SELECT DISTINCT address FROM ztc_member_ip_assignment WHERE member_id = m.id AND network_id = m.network_id) AS assigned_addresses " + "FROM ztc_member m " + "INNER JOIN ztc_network n " + " ON n.id = m.network_id " + "WHERE n.controller_id = '%s' AND n.deleted = FALSE AND m.deleted = FALSE", + _myAddressStr.c_str()); auto c = _pool->borrow(); auto c2 = _pool->borrow(); pqxx::work w { *c->c }; @@ -904,49 +891,48 @@ void CV1::initializeMembers() fprintf(stderr, "Load members from psql...\n"); auto stream = pqxx::stream_from::query(w, qbuf); - std::tuple< - std::string // memberId - , - std::string // memberId - , - std::optional // activeBridge - , - std::optional // authorized - , - std::optional // capabilities - , - std::optional // creationTime - , - std::optional // identity - , - std::optional // lastAuthorizedTime - , - std::optional // lastDeauthorizedTime - , - std::optional // remoteTraceLevel - , - std::optional // remoteTraceTarget - , - std::optional // tags - , - std::optional // vMajor - , - std::optional // vMinor - , - std::optional // vRev - , - std::optional // vProto - , - std::optional // noAutoAssignIps - , - std::optional // revision - , - std::optional // ssoExempt - , - std::optional // authenticationExpiryTime - , - std::string // assignedAddresses - > + std::tuple // activeBridge + , + std::optional // authorized + , + std::optional // capabilities + , + std::optional // creationTime + , + std::optional // identity + , + std::optional // lastAuthorizedTime + , + std::optional // lastDeauthorizedTime + , + std::optional // remoteTraceLevel + , + std::optional // remoteTraceTarget + , + std::optional // tags + , + std::optional // vMajor + , + std::optional // vMinor + , + std::optional // vRev + , + std::optional // vProto + , + std::optional // noAutoAssignIps + , + std::optional // revision + , + std::optional // ssoExempt + , + std::optional // authenticationExpiryTime + , + std::string // assignedAddresses + > row; uint64_t count = 0; @@ -1137,16 +1123,15 @@ void CV1::heartbeat() try { pqxx::work w { *c->c }; - pqxx::result res = w.exec0( - "INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis, notification_transport, redis_member_status) " - "VALUES (" - + w.quote(controllerId) + ", " + w.quote(hostname) + ", TO_TIMESTAMP(" + now + "::double precision/1000), " + w.quote(publicIdentity) + ", " + major + ", " + minor + ", " + rev + ", " + build + ", " + host_port + ", " - + w.quote(use_redis) + ", " + w.quote(notification_transport) + ", " + redis_mem_status - + ") " - "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " - "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " - "v_rev = EXCLUDED.v_rev, v_build = EXCLUDED.v_rev, host_port = EXCLUDED.host_port, " - "use_redis = EXCLUDED.use_redis, notification_transport = EXCLUDED.notification_transport, redis_member_status = EXCLUDED.redis_member_status"); + pqxx::result res = w.exec0("INSERT INTO ztc_controller (id, cluster_host, last_alive, public_identity, v_major, v_minor, v_rev, v_build, host_port, use_redis, notification_transport, redis_member_status) " + "VALUES (" + + w.quote(controllerId) + ", " + w.quote(hostname) + ", TO_TIMESTAMP(" + now + "::double precision/1000), " + w.quote(publicIdentity) + ", " + major + ", " + minor + ", " + rev + ", " + build + + ", " + host_port + ", " + w.quote(use_redis) + ", " + w.quote(notification_transport) + ", " + redis_mem_status + + ") " + "ON CONFLICT (id) DO UPDATE SET cluster_host = EXCLUDED.cluster_host, last_alive = EXCLUDED.last_alive, " + "public_identity = EXCLUDED.public_identity, v_major = EXCLUDED.v_major, v_minor = EXCLUDED.v_minor, " + "v_rev = EXCLUDED.v_rev, v_build = EXCLUDED.v_build, host_port = EXCLUDED.host_port, " + "use_redis = EXCLUDED.use_redis, notification_transport = EXCLUDED.notification_transport, redis_member_status = EXCLUDED.redis_member_status"); w.commit(); } catch (std::exception& e) { @@ -1463,58 +1448,56 @@ void CV1::commitThread() if (membercount == 0) { // new member isNewMember = true; - pqxx::result res = w.exec_params0( - "INSERT INTO ztc_member (id, network_id, active_bridge, authorized, capabilities, " - "identity, last_authorized_time, last_deauthorized_time, no_auto_assign_ips, " - "remote_trace_level, remote_trace_target, revision, tags, v_major, v_minor, v_rev, v_proto) " - "VALUES ($1, $2, $3, $4, $5, $6, " - "TO_TIMESTAMP($7::double precision/1000), TO_TIMESTAMP($8::double precision/1000), " - "$9, $10, $11, $12, $13, $14, $15, $16, $17)", - memberId, - networkId, - (bool)config["activeBridge"], - (bool)config["authorized"], - OSUtils::jsonDump(config["capabilities"], -1), - OSUtils::jsonString(config["identity"], ""), - (uint64_t)config["lastAuthorizedTime"], - (uint64_t)config["lastDeauthorizedTime"], - (bool)config["noAutoAssignIps"], - (int)config["remoteTraceLevel"], - target, - (uint64_t)config["revision"], - OSUtils::jsonDump(config["tags"], -1), - (int)config["vMajor"], - (int)config["vMinor"], - (int)config["vRev"], - (int)config["vProto"]); + pqxx::result res = w.exec_params0("INSERT INTO ztc_member (id, network_id, active_bridge, authorized, capabilities, " + "identity, last_authorized_time, last_deauthorized_time, no_auto_assign_ips, " + "remote_trace_level, remote_trace_target, revision, tags, v_major, v_minor, v_rev, v_proto) " + "VALUES ($1, $2, $3, $4, $5, $6, " + "TO_TIMESTAMP($7::double precision/1000), TO_TIMESTAMP($8::double precision/1000), " + "$9, $10, $11, $12, $13, $14, $15, $16, $17)", + memberId, + networkId, + (bool)config["activeBridge"], + (bool)config["authorized"], + OSUtils::jsonDump(config["capabilities"], -1), + OSUtils::jsonString(config["identity"], ""), + (uint64_t)config["lastAuthorizedTime"], + (uint64_t)config["lastDeauthorizedTime"], + (bool)config["noAutoAssignIps"], + (int)config["remoteTraceLevel"], + target, + (uint64_t)config["revision"], + OSUtils::jsonDump(config["tags"], -1), + (int)config["vMajor"], + (int)config["vMinor"], + (int)config["vRev"], + (int)config["vProto"]); } else { // existing member - pqxx::result res = w.exec_params0( - "UPDATE ztc_member " - "SET active_bridge = $3, authorized = $4, capabilities = $5, identity = $6, " - "last_authorized_time = TO_TIMESTAMP($7::double precision/1000), " - "last_deauthorized_time = TO_TIMESTAMP($8::double precision/1000), " - "no_auto_assign_ips = $9, remote_trace_level = $10, remote_trace_target= $11, " - "revision = $12, tags = $13, v_major = $14, v_minor = $15, v_rev = $16, v_proto = $17 " - "WHERE id = $1 AND network_id = $2", - memberId, - networkId, - (bool)config["activeBridge"], - (bool)config["authorized"], - OSUtils::jsonDump(config["capabilities"], -1), - OSUtils::jsonString(config["identity"], ""), - (uint64_t)config["lastAuthorizedTime"], - (uint64_t)config["lastDeauthorizedTime"], - (bool)config["noAutoAssignIps"], - (int)config["remoteTraceLevel"], - target, - (uint64_t)config["revision"], - OSUtils::jsonDump(config["tags"], -1), - (int)config["vMajor"], - (int)config["vMinor"], - (int)config["vRev"], - (int)config["vProto"]); + pqxx::result res = w.exec_params0("UPDATE ztc_member " + "SET active_bridge = $3, authorized = $4, capabilities = $5, identity = $6, " + "last_authorized_time = TO_TIMESTAMP($7::double precision/1000), " + "last_deauthorized_time = TO_TIMESTAMP($8::double precision/1000), " + "no_auto_assign_ips = $9, remote_trace_level = $10, remote_trace_target= $11, " + "revision = $12, tags = $13, v_major = $14, v_minor = $15, v_rev = $16, v_proto = $17 " + "WHERE id = $1 AND network_id = $2", + memberId, + networkId, + (bool)config["activeBridge"], + (bool)config["authorized"], + OSUtils::jsonDump(config["capabilities"], -1), + OSUtils::jsonString(config["identity"], ""), + (uint64_t)config["lastAuthorizedTime"], + (uint64_t)config["lastDeauthorizedTime"], + (bool)config["noAutoAssignIps"], + (int)config["remoteTraceLevel"], + target, + (uint64_t)config["revision"], + OSUtils::jsonDump(config["tags"], -1), + (int)config["vMajor"], + (int)config["vMinor"], + (int)config["vRev"], + (int)config["vProto"]); } if (! isNewMember) { @@ -1545,16 +1528,15 @@ void CV1::commitThread() w.commit(); if (_smee != NULL && isNewMember) { - pqxx::row row = w.exec_params1( - "SELECT " - " count(h.hook_id) " - "FROM " - " ztc_hook h " - " INNER JOIN ztc_org o ON o.org_id = h.org_id " - " INNER JOIN ztc_network n ON n.owner_id = o.owner_id " - " WHERE " - "n.id = $1 ", - networkId); + pqxx::row row = w.exec_params1("SELECT " + " count(h.hook_id) " + "FROM " + " ztc_hook h " + " INNER JOIN ztc_org o ON o.org_id = h.org_id " + " INNER JOIN ztc_network n ON n.owner_id = o.owner_id " + " WHERE " + "n.id = $1 ", + networkId); int64_t hookCount = row[0].as(); if (hookCount > 0) { notifyNewMember(networkId, memberId); @@ -1606,41 +1588,40 @@ void CV1::commitThread() // the owner_id to the "first" global admin in the user DB if the record // did not previously exist. If the record already exists owner_id is left // unchanged, so owner_id should be left out of the update clause. - pqxx::result res = w.exec_params0( - "INSERT INTO ztc_network (id, creation_time, owner_id, controller_id, capabilities, enable_broadcast, " - "last_modified, mtu, multicast_limit, name, private, " - "remote_trace_level, remote_trace_target, rules, rules_source, " - "tags, v4_assign_mode, v6_assign_mode, sso_enabled) VALUES (" - "$1, TO_TIMESTAMP($5::double precision/1000), " - "(SELECT user_id AS owner_id FROM ztc_global_permissions WHERE authorize = true AND del = true AND modify = true AND read = true LIMIT 1)," - "$2, $3, $4, TO_TIMESTAMP($5::double precision/1000), " - "$6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17) " - "ON CONFLICT (id) DO UPDATE set controller_id = EXCLUDED.controller_id, " - "capabilities = EXCLUDED.capabilities, enable_broadcast = EXCLUDED.enable_broadcast, " - "last_modified = EXCLUDED.last_modified, mtu = EXCLUDED.mtu, " - "multicast_limit = EXCLUDED.multicast_limit, name = EXCLUDED.name, " - "private = EXCLUDED.private, remote_trace_level = EXCLUDED.remote_trace_level, " - "remote_trace_target = EXCLUDED.remote_trace_target, rules = EXCLUDED.rules, " - "rules_source = EXCLUDED.rules_source, tags = EXCLUDED.tags, " - "v4_assign_mode = EXCLUDED.v4_assign_mode, v6_assign_mode = EXCLUDED.v6_assign_mode, " - "sso_enabled = EXCLUDED.sso_enabled", - id, - _myAddressStr, - OSUtils::jsonDump(config["capabilities"], -1), - (bool)config["enableBroadcast"], - OSUtils::now(), - (int)config["mtu"], - (int)config["multicastLimit"], - OSUtils::jsonString(config["name"], ""), - (bool)config["private"], - (int)config["remoteTraceLevel"], - remoteTraceTarget, - OSUtils::jsonDump(config["rules"], -1), - rulesSource, - OSUtils::jsonDump(config["tags"], -1), - OSUtils::jsonDump(config["v4AssignMode"], -1), - OSUtils::jsonDump(config["v6AssignMode"], -1), - OSUtils::jsonBool(config["ssoEnabled"], false)); + pqxx::result res = w.exec_params0("INSERT INTO ztc_network (id, creation_time, owner_id, controller_id, capabilities, enable_broadcast, " + "last_modified, mtu, multicast_limit, name, private, " + "remote_trace_level, remote_trace_target, rules, rules_source, " + "tags, v4_assign_mode, v6_assign_mode, sso_enabled) VALUES (" + "$1, TO_TIMESTAMP($5::double precision/1000), " + "(SELECT user_id AS owner_id FROM ztc_global_permissions WHERE authorize = true AND del = true AND modify = true AND read = true LIMIT 1)," + "$2, $3, $4, TO_TIMESTAMP($5::double precision/1000), " + "$6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17) " + "ON CONFLICT (id) DO UPDATE set controller_id = EXCLUDED.controller_id, " + "capabilities = EXCLUDED.capabilities, enable_broadcast = EXCLUDED.enable_broadcast, " + "last_modified = EXCLUDED.last_modified, mtu = EXCLUDED.mtu, " + "multicast_limit = EXCLUDED.multicast_limit, name = EXCLUDED.name, " + "private = EXCLUDED.private, remote_trace_level = EXCLUDED.remote_trace_level, " + "remote_trace_target = EXCLUDED.remote_trace_target, rules = EXCLUDED.rules, " + "rules_source = EXCLUDED.rules_source, tags = EXCLUDED.tags, " + "v4_assign_mode = EXCLUDED.v4_assign_mode, v6_assign_mode = EXCLUDED.v6_assign_mode, " + "sso_enabled = EXCLUDED.sso_enabled", + id, + _myAddressStr, + OSUtils::jsonDump(config["capabilities"], -1), + (bool)config["enableBroadcast"], + OSUtils::now(), + (int)config["mtu"], + (int)config["multicastLimit"], + OSUtils::jsonString(config["name"], ""), + (bool)config["private"], + (int)config["remoteTraceLevel"], + remoteTraceTarget, + OSUtils::jsonDump(config["rules"], -1), + rulesSource, + OSUtils::jsonDump(config["tags"], -1), + OSUtils::jsonDump(config["v4AssignMode"], -1), + OSUtils::jsonDump(config["v6AssignMode"], -1), + OSUtils::jsonBool(config["ssoEnabled"], false)); res = w.exec_params0("DELETE FROM ztc_network_assignment_pool WHERE network_id = $1", 0); @@ -1650,12 +1631,11 @@ void CV1::commitThread() std::string start = (*i)["ipRangeStart"]; std::string end = (*i)["ipRangeEnd"]; - res = w.exec_params0( - "INSERT INTO ztc_network_assignment_pool (network_id, ip_range_start, ip_range_end) " - "VALUES ($1, $2, $3)", - id, - start, - end); + res = w.exec_params0("INSERT INTO ztc_network_assignment_pool (network_id, ip_range_start, ip_range_end) " + "VALUES ($1, $2, $3)", + id, + start, + end); } res = w.exec_params0("DELETE FROM ztc_network_route WHERE network_id = $1", id); From 484d9e0d8c44e1a0e7db3e764f6106ca2d374e80 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 27 Apr 2026 11:31:02 -0700 Subject: [PATCH 34/39] cargo update --- rustybits/Cargo.lock | 1448 +++++++++++++++++++++--------------------- 1 file changed, 722 insertions(+), 726 deletions(-) diff --git a/rustybits/Cargo.lock b/rustybits/Cargo.lock index ff9fecfb3b..36b5004f7d 100644 --- a/rustybits/Cargo.lock +++ b/rustybits/Cargo.lock @@ -2,26 +2,11 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -32,12 +17,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -58,15 +37,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "async-trait" @@ -76,7 +55,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -104,14 +83,14 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "axum" -version = "0.8.4" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "itoa", @@ -120,8 +99,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "sync_wrapper 1.0.2", "tower", "tower-layer", @@ -130,18 +108,17 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.2" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper 1.0.2", "tower-layer", "tower-service", @@ -153,24 +130,9 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "instant", - "rand 0.8.5", -] - -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", + "rand 0.8.6", ] [[package]] @@ -199,9 +161,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.0" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bitflags" @@ -211,9 +173,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "block-buffer" @@ -226,9 +188,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" @@ -257,9 +219,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.35" +version = "1.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" +checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", "shlex", @@ -267,17 +229,16 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", @@ -307,6 +268,15 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -412,7 +382,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -421,8 +391,18 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", ] [[package]] @@ -436,7 +416,20 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.106", + "syn 2.0.117", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.117", ] [[package]] @@ -445,9 +438,20 @@ version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -477,12 +481,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -500,10 +504,10 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8" dependencies = [ - "darling", + "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -513,27 +517,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ + "convert_case", "proc-macro2", "quote", - "syn 2.0.106", + "rustc_version", + "syn 2.0.117", "unicode-xid", ] @@ -557,7 +563,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -648,22 +654,22 @@ dependencies = [ [[package]] name = "enum-iterator" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c280b9e6b3ae19e152d8e31cf47f18389781e119d4013a2a2bb0180e5facc635" +checksum = "a4549325971814bda7a44061bf3fe7e487d447cba01e4220a4b454d630d7a016" dependencies = [ "enum-iterator-derive", ] [[package]] name = "enum-iterator-derive" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -675,7 +681,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -686,29 +692,30 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.6" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" dependencies = [ "serde", + "serde_core", "typeid", ] [[package]] name = "errno" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "ff" @@ -728,9 +735,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "find-msvc-tools" -version = "0.1.0" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fixedbitset" @@ -750,12 +757,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - [[package]] name = "foreign-types" version = "0.3.2" @@ -782,15 +783,18 @@ dependencies = [ [[package]] name = "fragile" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" +checksum = "8878864ba14bb86e818a412bfd6f18f9eabd4ec0f008a28e8f7eb61db532fcf9" +dependencies = [ + "futures-core", +] [[package]] name = "futures" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" dependencies = [ "futures-channel", "futures-core", @@ -803,9 +807,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", "futures-sink", @@ -813,15 +817,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", @@ -830,19 +834,19 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -858,15 +862,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" @@ -876,9 +880,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-channel", "futures-core", @@ -888,15 +892,14 @@ dependencies = [ "futures-task", "memchr", "pin-project-lite", - "pin-utils", "slab", ] [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -905,65 +908,72 @@ dependencies = [ [[package]] name = "gethostname" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi", - "wasi 0.14.3+wasi-0.2.4", + "r-efi 5.3.0", + "wasip2", "wasm-bindgen", ] [[package]] -name = "gimli" -version = "0.31.1" +name = "getrandom" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] [[package]] name = "governor" -version = "0.10.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444405bbb1a762387aa22dd569429533b54a1d8759d35d3b64cb39b0293eaa19" +checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" dependencies = [ "cfg-if", "dashmap", "futures-sink", "futures-timer", "futures-util", - "getrandom 0.3.3", - "hashbrown 0.15.5", + "getrandom 0.3.4", + "no-std-compat", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand 0.9.2", + "rand 0.9.4", "smallvec", "spinning_top", "web-time", @@ -992,7 +1002,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.11.0", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", @@ -1001,17 +1011,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", - "indexmap 2.11.0", + "http 1.4.0", + "indexmap 2.14.0", "slab", "tokio", "tokio-util", @@ -1038,19 +1048,14 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.1.5", + "foldhash", ] [[package]] name = "hashbrown" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash 0.2.0", -] +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" [[package]] name = "heck" @@ -1113,12 +1118,11 @@ dependencies = [ [[package]] name = "http" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", - "fnv", "itoa", ] @@ -1140,7 +1144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http 1.4.0", ] [[package]] @@ -1151,7 +1155,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", "pin-project-lite", ] @@ -1194,22 +1198,21 @@ dependencies = [ [[package]] name = "hyper" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "httparse", "httpdate", "itoa", "pin-project-lite", - "pin-utils", "smallvec", "tokio", "want", @@ -1221,7 +1224,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.7.0", + "hyper 1.9.0", "hyper-util", "pin-project-lite", "tokio", @@ -1243,20 +1246,19 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body 1.0.1", - "hyper 1.7.0", + "hyper 1.9.0", "libc", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.3", "tokio", "tower-service", "tracing", @@ -1264,9 +1266,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.63" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1274,7 +1276,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.2", ] [[package]] @@ -1288,12 +1290,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1301,9 +1304,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1314,11 +1317,10 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", @@ -1329,42 +1331,38 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ - "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", - "potential_utf", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "2.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", - "stable_deref_trait", - "tinystr", "writeable", "yoke", "zerofrom", @@ -1372,6 +1370,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -1412,13 +1416,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.17.0", "serde", + "serde_core", ] [[package]] @@ -1432,29 +1437,18 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" +checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" dependencies = [ "rustversion", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags 2.9.4", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" -version = "2.11.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "itertools" @@ -1476,16 +1470,18 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.78" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -1513,53 +1509,58 @@ dependencies = [ "spin", ] +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + [[package]] name = "libc" -version = "0.2.175" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libm" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "linux-raw-sys" -version = "0.9.4" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru" -version = "0.16.3" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dc47f592c06f33f8e3aea9591776ec7c9f9e4124778ff8a3c3b87159f7e593" +checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.15.5", ] [[package]] @@ -1579,9 +1580,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.7.5" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "mime" @@ -1589,24 +1590,15 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - [[package]] name = "mio" -version = "1.0.4" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -1632,7 +1624,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -1643,9 +1635,9 @@ checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "native-tls" -version = "0.2.14" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", @@ -1653,11 +1645,17 @@ dependencies = [ "openssl-probe", "openssl-sys", "schannel", - "security-framework 2.11.1", + "security-framework", "security-framework-sys", "tempfile", ] +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + [[package]] name = "nonzero_ext" version = "0.3.0" @@ -1666,20 +1664,20 @@ checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] name = "ntapi" -version = "0.4.1" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" dependencies = [ "winapi", ] [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1693,16 +1691,16 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.5", + "rand 0.8.6", "smallvec", "zeroize", ] [[package]] name = "num-conv" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-integer" @@ -1742,9 +1740,9 @@ checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f" dependencies = [ "base64 0.13.1", "chrono", - "getrandom 0.2.16", + "getrandom 0.2.17", "http 0.2.12", - "rand 0.8.5", + "rand 0.8.6", "reqwest", "serde", "serde_json", @@ -1754,39 +1752,11 @@ dependencies = [ "url", ] -[[package]] -name = "objc2-core-foundation" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" -dependencies = [ - "bitflags 2.9.4", -] - -[[package]] -name = "objc2-io-kit" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" -dependencies = [ - "libc", - "objc2-core-foundation", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "openidconnect" @@ -1805,7 +1775,7 @@ dependencies = [ "oauth2", "p256", "p384", - "rand 0.8.5", + "rand 0.8.6", "rsa", "serde", "serde-value", @@ -1822,11 +1792,11 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "f38c4372413cdaaf3cc79dd92d29d7d9f5ab09b51b10dded508fb90bb70b9222" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.1", "cfg-if", "foreign-types", "libc", @@ -1843,20 +1813,20 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "openssl-probe" -version = "0.1.6" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "13ce1245cd07fcc4cfdb438f7507b0c7e4f3849a69fd84d52374c66d83741bb6" dependencies = [ "cc", "libc", @@ -1874,7 +1844,7 @@ dependencies = [ "futures-sink", "js-sys", "pin-project-lite", - "thiserror 2.0.16", + "thiserror 2.0.18", "tracing", ] @@ -1913,9 +1883,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -1923,15 +1893,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -1956,7 +1926,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.11.0", + "indexmap 2.14.0", ] [[package]] @@ -1970,35 +1940,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkcs1" @@ -2023,30 +1987,30 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.4" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -2068,9 +2032,9 @@ dependencies = [ [[package]] name = "predicates" -version = "3.1.3" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" +checksum = "ada8f2932f28a27ee7b70dd6c1c39ea0675c55a36879ab92f3a715eaa1e63cfe" dependencies = [ "anstyle", "predicates-core", @@ -2078,15 +2042,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" +checksum = "cad38746f3166b4031b1a0d39ad9f954dd291e7854fcc0eed52ee41a0b50d144" [[package]] name = "predicates-tree" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" +checksum = "d0de1b847b39c8131db0467e9df1ff60e6d0562ab8e9a16e568ad0fdb372e2f2" dependencies = [ "predicates-core", "termtree", @@ -2099,7 +2063,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -2113,9 +2077,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] @@ -2146,7 +2110,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.106", + "syn 2.0.117", "tempfile", ] @@ -2160,7 +2124,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -2228,16 +2192,16 @@ dependencies = [ "libc", "once_cell", "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "web-sys", "winapi", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -2248,11 +2212,17 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -2261,12 +2231,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -2286,7 +2256,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.3", + "rand_core 0.9.5", ] [[package]] @@ -2295,61 +2265,61 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] name = "rand_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] name = "raw-cpuid" -version = "11.5.0" +version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" +checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.1", ] [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.1", ] [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "regex" -version = "1.11.2" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", @@ -2359,9 +2329,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", @@ -2370,9 +2340,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" @@ -2432,7 +2402,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -2469,12 +2439,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc_version" version = "0.4.1" @@ -2487,7 +2451,7 @@ dependencies = [ [[package]] name = "rustfsm" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" dependencies = [ "rustfsm_procmacro", "rustfsm_trait", @@ -2496,38 +2460,38 @@ dependencies = [ [[package]] name = "rustfsm_procmacro" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" dependencies = [ "derive_more", "proc-macro2", "quote", "rustfsm_trait", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "rustfsm_trait" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" [[package]] name = "rustix" -version = "1.0.8" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" dependencies = [ "log", "once_cell", @@ -2540,14 +2504,14 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" dependencies = [ "openssl-probe", "rustls-pki-types", "schannel", - "security-framework 3.3.0", + "security-framework", ] [[package]] @@ -2561,18 +2525,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.12.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" -version = "0.103.4" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "ring", "rustls-pki-types", @@ -2587,17 +2551,17 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2614,9 +2578,9 @@ dependencies = [ [[package]] name = "schemars" -version = "1.0.4" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" dependencies = [ "dyn-clone", "ref-cast", @@ -2646,24 +2610,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.1" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.9.4", - "core-foundation 0.9.4", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" -dependencies = [ - "bitflags 2.9.4", + "bitflags 2.11.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -2672,9 +2623,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", @@ -2682,9 +2633,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" @@ -2723,29 +2674,31 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "serde_json" -version = "1.0.143" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] name = "serde_path_to_error" -version = "0.1.17" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" dependencies = [ "itoa", "serde", + "serde_core", ] [[package]] @@ -2771,19 +2724,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.0", + "indexmap 2.14.0", "schemars 0.9.0", - "schemars 1.0.4", - "serde", - "serde_derive", + "schemars 1.2.1", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -2791,14 +2743,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" dependencies = [ - "darling", + "darling 0.23.0", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -2829,10 +2781,11 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -2848,21 +2801,21 @@ dependencies = [ [[package]] name = "siphasher" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" [[package]] name = "slab" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slotmap" -version = "1.0.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" dependencies = [ "version_check", ] @@ -2899,12 +2852,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2934,9 +2887,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "strsim" @@ -2969,9 +2922,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -2998,20 +2951,19 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "sysinfo" -version = "0.37.0" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753" +checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" dependencies = [ + "core-foundation-sys", "libc", "memchr", "ntapi", - "objc2-core-foundation", - "objc2-io-kit", "windows", ] @@ -3038,21 +2990,21 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.21.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.4.2", "once_cell", "rustix", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "temporal-client" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" dependencies = [ "anyhow", "async-trait", @@ -3063,16 +3015,16 @@ dependencies = [ "derive_more", "futures-retry", "futures-util", - "http 1.3.1", + "http 1.4.0", "http-body-util", - "hyper 1.7.0", + "hyper 1.9.0", "hyper-util", "opentelemetry", "parking_lot", "slotmap", "temporal-sdk-core-api", "temporal-sdk-core-protos", - "thiserror 2.0.16", + "thiserror 2.0.18", "tokio", "tonic", "tower", @@ -3084,7 +3036,7 @@ dependencies = [ [[package]] name = "temporal-sdk" version = "0.1.0-alpha.1" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" dependencies = [ "anyhow", "async-trait", @@ -3106,7 +3058,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" dependencies = [ "anyhow", "async-trait", @@ -3130,7 +3082,7 @@ dependencies = [ "pin-project", "prost", "prost-wkt-types", - "rand 0.9.2", + "rand 0.9.4", "ringbuf", "rustfsm", "serde", @@ -3141,7 +3093,7 @@ dependencies = [ "temporal-client", "temporal-sdk-core-api", "temporal-sdk-core-protos", - "thiserror 2.0.16", + "thiserror 2.0.18", "tokio", "tokio-stream", "tokio-util", @@ -3155,7 +3107,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core-api" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" dependencies = [ "async-trait", "derive_builder", @@ -3164,7 +3116,7 @@ dependencies = [ "prost", "serde_json", "temporal-sdk-core-protos", - "thiserror 2.0.16", + "thiserror 2.0.18", "tonic", "tracing", "tracing-core", @@ -3174,7 +3126,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core-protos" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" +source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" dependencies = [ "anyhow", "base64 0.22.1", @@ -3184,10 +3136,10 @@ dependencies = [ "prost-wkt", "prost-wkt-build", "prost-wkt-types", - "rand 0.9.2", + "rand 0.9.4", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.18", "tonic", "tonic-build", "uuid", @@ -3219,11 +3171,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.18", ] [[package]] @@ -3234,18 +3186,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -3290,9 +3242,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -3300,33 +3252,30 @@ dependencies = [ [[package]] name = "tokio" -version = "1.47.1" +version = "1.52.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", - "socket2 0.6.0", + "socket2 0.6.3", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] @@ -3341,9 +3290,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -3351,9 +3300,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" dependencies = [ "futures-core", "pin-project-lite", @@ -3362,9 +3311,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.16" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -3392,11 +3341,11 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "h2 0.4.12", - "http 1.3.1", + "h2 0.4.13", + "http 1.4.0", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.9.0", "hyper-timeout", "hyper-util", "percent-encoding", @@ -3424,18 +3373,18 @@ dependencies = [ "prost-build", "prost-types", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", - "indexmap 2.11.0", + "indexmap 2.14.0", "pin-project-lite", "slab", "sync_wrapper 1.0.2", @@ -3460,9 +3409,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -3471,20 +3420,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -3492,9 +3441,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" dependencies = [ "matchers", "nu-ansi-term", @@ -3521,15 +3470,15 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.18.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "typetag" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f22b40dd7bfe8c14230cf9702081366421890435b2d625fa92b4acc4c3de6f" +checksum = "be2212c8a9b9bcfca32024de14998494cf9a5dfa59ea1b829de98bac374b86bf" dependencies = [ "erased-serde", "inventory", @@ -3540,26 +3489,26 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35f5380909ffc31b4de4f4bdf96b877175a016aa2ca98cee39fcfd8c4d53d952" +checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-width" @@ -3581,14 +3530,15 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", + "serde_derive", ] [[package]] @@ -3599,11 +3549,11 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.18.1" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.4.2", "js-sys", "wasm-bindgen", ] @@ -3648,59 +3598,51 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.3+wasi-0.2.4" +name = "wasip2" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] -name = "wasm-bindgen" -version = "0.2.101" +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", + "wit-bindgen 0.51.0", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.101" +name = "wasm-bindgen" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.51" +version = "0.4.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" +checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" dependencies = [ - "cfg-if", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.101" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3708,31 +3650,65 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.101" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.101" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.14.0", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.1", + "hashbrown 0.15.5", + "indexmap 2.14.0", + "semver", +] + [[package]] name = "web-sys" -version = "0.3.78" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" +checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" dependencies = [ "js-sys", "wasm-bindgen", @@ -3772,102 +3748,112 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.61.3" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" dependencies = [ - "windows-collections", - "windows-core", - "windows-future", - "windows-link", - "windows-numerics", + "windows-core 0.57.0", + "windows-targets 0.52.6", ] [[package]] -name = "windows-collections" -version = "0.2.0" +name = "windows-core" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" dependencies = [ - "windows-core", + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.60.2", + "windows-interface 0.59.3", "windows-link", - "windows-result", + "windows-result 0.4.1", "windows-strings", ] [[package]] -name = "windows-future" -version = "0.2.1" +name = "windows-implement" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ - "windows-core", - "windows-link", - "windows-threading", + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-numerics" -version = "0.2.0" +name = "windows-result" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" dependencies = [ - "windows-core", - "windows-link", + "windows-targets 0.52.6", ] [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] @@ -3892,20 +3878,11 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-targets 0.53.3", + "windows-link", ] [[package]] @@ -3932,39 +3909,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", -] - -[[package]] -name = "windows-threading" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" -dependencies = [ - "windows-link", -] - [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -3977,12 +3928,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -3995,12 +3940,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -4013,24 +3952,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -4043,12 +3970,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -4061,12 +3982,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -4079,12 +3994,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -4097,12 +4006,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - [[package]] name = "winreg" version = "0.50.0" @@ -4115,23 +4018,110 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.0" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.14.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.1", + "indexmap 2.14.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.14.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "yoke" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -4139,54 +4129,54 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", "synstructure", ] @@ -4209,15 +4199,15 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -4226,9 +4216,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -4237,11 +4227,17 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.1" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.117", ] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" From d678338b2804bba9f9dca91385f6a4701fb3b8a7 Mon Sep 17 00:00:00 2001 From: Chris Spiegel Date: Thu, 21 May 2026 15:21:38 -0700 Subject: [PATCH 35/39] Update some Rust dependencies --- rustybits/Cargo.lock | 335 ++++++++++++++++++++------------ rustybits/smeeclient/Cargo.toml | 6 +- 2 files changed, 215 insertions(+), 126 deletions(-) diff --git a/rustybits/Cargo.lock b/rustybits/Cargo.lock index 36b5004f7d..7ba2806b91 100644 --- a/rustybits/Cargo.lock +++ b/rustybits/Cargo.lock @@ -186,6 +186,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.20.2" @@ -219,9 +228,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.61" +version = "1.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" dependencies = [ "find-msvc-tools", "shlex", @@ -244,7 +253,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -456,9 +465,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "e6361d5c062261c78a176addb82d4c821ae42bed6089de0e12603cd25de2059c" dependencies = [ "cfg-if", "crossbeam-utils", @@ -618,9 +627,9 @@ dependencies = [ [[package]] name = "either" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "elliptic-curve" @@ -757,6 +766,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -874,9 +889,9 @@ checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-timer" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" @@ -913,7 +928,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ "rustix", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -958,9 +973,9 @@ dependencies = [ [[package]] name = "governor" -version = "0.8.1" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" +checksum = "9efcab3c1958580ff1f25a2a41be1668f7603d849bb63af523b208a3cc1223b8" dependencies = [ "cfg-if", "dashmap", @@ -968,7 +983,7 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.4", - "no-std-compat", + "hashbrown 0.16.1", "nonzero_ext", "parking_lot", "portable-atomic", @@ -1011,9 +1026,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" dependencies = [ "atomic-waker", "bytes", @@ -1045,17 +1060,26 @@ name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.2.0", ] [[package]] name = "hashbrown" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" [[package]] name = "heck" @@ -1206,7 +1230,7 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2 0.4.13", + "h2 0.4.14", "http 1.4.0", "http-body 1.0.1", "httparse", @@ -1395,9 +1419,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", @@ -1421,7 +1445,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.17.0", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -1476,9 +1500,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.95" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" dependencies = [ "cfg-if", "futures-util", @@ -1556,11 +1580,11 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru" -version = "0.13.0" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.16.1", ] [[package]] @@ -1650,12 +1674,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - [[package]] name = "nonzero_ext" version = "0.3.0" @@ -1698,9 +1716,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-integer" @@ -1752,6 +1770,25 @@ dependencies = [ "url", ] +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.1", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "libc", + "objc2-core-foundation", +] + [[package]] name = "once_cell" version = "1.21.4" @@ -1792,15 +1829,14 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.78" +version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38c4372413cdaaf3cc79dd92d29d7d9f5ab09b51b10dded508fb90bb70b9222" +checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ "bitflags 2.11.1", "cfg-if", "foreign-types", "libc", - "once_cell", "openssl-macros", "openssl-sys", ] @@ -1824,9 +1860,9 @@ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" -version = "0.9.114" +version = "0.9.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13ce1245cd07fcc4cfdb438f7507b0c7e4f3849a69fd84d52374c66d83741bb6" +checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" dependencies = [ "cc", "libc", @@ -1901,7 +1937,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -1940,18 +1976,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.11" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.11" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", "quote", @@ -2451,7 +2487,7 @@ dependencies = [ [[package]] name = "rustfsm" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "rustfsm_procmacro", "rustfsm_trait", @@ -2460,7 +2496,7 @@ dependencies = [ [[package]] name = "rustfsm_procmacro" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "derive_more", "proc-macro2", @@ -2472,7 +2508,7 @@ dependencies = [ [[package]] name = "rustfsm_trait" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" [[package]] name = "rustix" @@ -2489,9 +2525,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.39" +version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2c118cb077cca2822033836dfb1b975355dfb784b5e8da48f7b6c5db74e60e" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "log", "once_cell", @@ -2679,9 +2715,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.149" +version = "1.0.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" dependencies = [ "itoa", "memchr", @@ -2724,11 +2760,12 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.18.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" +checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" dependencies = [ "base64 0.22.1", + "bs58", "chrono", "hex", "indexmap 1.9.3", @@ -2743,9 +2780,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.18.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" +checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" dependencies = [ "darling 0.23.0", "proc-macro2", @@ -2801,9 +2838,9 @@ dependencies = [ [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" @@ -2956,14 +2993,15 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.33.1" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +checksum = "16607d5caffd1c07ce073528f9ed972d88db15dd44023fa57142963be3feb11f" dependencies = [ - "core-foundation-sys", "libc", "memchr", "ntapi", + "objc2-core-foundation", + "objc2-io-kit", "windows", ] @@ -3004,7 +3042,7 @@ dependencies = [ [[package]] name = "temporal-client" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "async-trait", @@ -3036,7 +3074,7 @@ dependencies = [ [[package]] name = "temporal-sdk" version = "0.1.0-alpha.1" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "async-trait", @@ -3058,7 +3096,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "async-trait", @@ -3107,7 +3145,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core-api" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "async-trait", "derive_builder", @@ -3126,7 +3164,7 @@ dependencies = [ [[package]] name = "temporal-sdk-core-protos" version = "0.1.0" -source = "git+https://github.com/temporalio/sdk-core?branch=master#23f495a68f4d025e88c4a6859579587079f5460c" +source = "git+https://github.com/temporalio/sdk-core?rev=4614dcb8f4ffd2cb244eb0a19d7485c896e3459e#4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" dependencies = [ "anyhow", "base64 0.22.1", @@ -3250,11 +3288,26 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" -version = "1.52.1" +version = "1.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" dependencies = [ "bytes", "libc", @@ -3341,7 +3394,7 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "h2 0.4.13", + "h2 0.4.14", "http 1.4.0", "http-body 1.0.1", "http-body-util", @@ -3476,9 +3529,9 @@ checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "typetag" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2212c8a9b9bcfca32024de14998494cf9a5dfa59ea1b829de98bac374b86bf" +checksum = "c5a897b12c6c1151ad0b138b8db50252dc301f93bc3b027db05eec82aeed298c" dependencies = [ "erased-serde", "inventory", @@ -3489,9 +3542,9 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27a7a9b72ba121f6f1f6c3632b85604cac41aedb5ddc70accbebb6cac83de846" +checksum = "cf808357c6ed7e13ba0f3277ec8d8f21b2d501274895104263985330c726c1c5" dependencies = [ "proc-macro2", "quote", @@ -3617,9 +3670,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" dependencies = [ "cfg-if", "once_cell", @@ -3630,9 +3683,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.68" +version = "0.4.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" dependencies = [ "js-sys", "wasm-bindgen", @@ -3640,9 +3693,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3650,9 +3703,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" dependencies = [ "bumpalo", "proc-macro2", @@ -3663,9 +3716,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.118" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" dependencies = [ "unicode-ident", ] @@ -3706,9 +3759,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.95" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" dependencies = [ "js-sys", "wasm-bindgen", @@ -3748,24 +3801,37 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.57.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", ] [[package]] name = "windows-core" -version = "0.57.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -3774,22 +3840,22 @@ version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-implement 0.60.2", - "windows-interface 0.59.3", - "windows-link", + "windows-implement", + "windows-interface", + "windows-link 0.2.1", "windows-result 0.4.1", - "windows-strings", + "windows-strings 0.5.1", ] [[package]] -name = "windows-implement" -version = "0.57.0" +name = "windows-future" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", ] [[package]] @@ -3805,9 +3871,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.57.0" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -3815,15 +3881,10 @@ dependencies = [ ] [[package]] -name = "windows-interface" -version = "0.59.3" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" @@ -3831,13 +3892,23 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + [[package]] name = "windows-result" -version = "0.1.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.52.6", + "windows-link 0.1.3", ] [[package]] @@ -3846,7 +3917,16 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -3855,7 +3935,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -3882,7 +3962,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -3916,6 +3996,15 @@ dependencies = [ "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -4161,9 +4250,9 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" dependencies = [ "zerofrom-derive", ] diff --git a/rustybits/smeeclient/Cargo.toml b/rustybits/smeeclient/Cargo.toml index 6f32da35d6..61cf11e039 100644 --- a/rustybits/smeeclient/Cargo.toml +++ b/rustybits/smeeclient/Cargo.toml @@ -10,9 +10,9 @@ crate-type = ["staticlib", "rlib"] [dependencies] serde = { version = "1", features = ["derive"] } -temporal-sdk = { git = "https://github.com/temporalio/sdk-core", branch = "master" } -temporal-client = { git = "https://github.com/temporalio/sdk-core", branch = "master", features = ["telemetry"] } -temporal-sdk-core-protos = { git = "https://github.com/temporalio/sdk-core", branch = "master" } +temporal-sdk = { git = "https://github.com/temporalio/sdk-core", rev = "4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" } +temporal-client = { git = "https://github.com/temporalio/sdk-core", rev = "4614dcb8f4ffd2cb244eb0a19d7485c896e3459e", features = ["telemetry"] } +temporal-sdk-core-protos = { git = "https://github.com/temporalio/sdk-core", rev = "4614dcb8f4ffd2cb244eb0a19d7485c896e3459e" } tokio = { version = "1.43", features = ["full"] } url = { version = "2" } uuid = { version = "1.4", features = ["v4"] } From f87d5477f69df5eb2647cc759cb8f4c5ba018590 Mon Sep 17 00:00:00 2001 From: dimitriy-dade Date: Fri, 22 May 2026 11:39:10 -0400 Subject: [PATCH 36/39] Merging 1.16.2 from Private to Public --- .github/workflows/build.yml | 2 +- RELEASE-NOTES.md | 10 +- ext/installfiles/windows/ZeroTier One.aip | 1083 ++++++++++----------- include/ZeroTierOne.h | 2 +- node/Capability.hpp | 3 +- node/Identity.hpp | 6 +- node/InetAddress.cpp | 4 +- node/InetAddress.hpp | 46 +- node/Network.hpp | 14 +- node/NetworkConfig.cpp | 1 - node/NetworkConfig.hpp | 4 +- node/Node.cpp | 15 +- node/PacketMultiplexer.cpp | 3 +- one.cpp | 24 +- osdep/LinuxEthernetTap.cpp | 2 +- osdep/LinuxNetLink.cpp | 4 + osdep/ManagedRoute.cpp | 29 +- osdep/OSUtils.cpp | 48 +- osdep/OSUtils.hpp | 3 + osdep/Phy.hpp | 3 - osdep/Thread.hpp | 20 +- service/OneService.cpp | 55 +- version.h | 2 +- 23 files changed, 693 insertions(+), 690 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fee6dd338f..de636b8b9e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -90,7 +90,7 @@ jobs: build_windows: - runs-on: windows-latest + runs-on: windows-2022 steps: - name: gitconfig run: | diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 7a866b4793..ddabde155b 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,8 +1,16 @@ ZeroTier Release Notes ====== -## 2025-12-22 -- Version 1.16.1 +## 2026-05-20 -- Version 1.16.2 + + * Fixed line endings for the zttap300.inf for the Windows ARM x64 install. + * Internal updates to the central controller (CV1) including schema changes and a multi-architecture Docker build pipeline. + * Increased `ZT_MAX_NETWORK_SPECIALISTS` from 256 to 512 to accommodate users with large networks that exceeded the previous limit. The network config dictionary capacity was raised correspondingly. + * Resolved intermittent multi-minute delays when leaving one network and joining another under Windows. + * Compiler warning cleanup across the codebase, covering GCC 14, Clang 18, and Clang 21. +## 2025-12-22 -- Version 1.16.1 + * Metrics collection is now disabled by default. It can be enabled via the `enableMetrics` setting in `local.conf`. * Fix for an issue where metrics were not being recorded while running in daemon mode. * Fix debug dumpfile being written to the root directory. diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index 8a84ad4344..49cb0a6387 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -1,545 +1,542 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index 1f09c99c76..04541773c6 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -135,7 +135,7 @@ extern "C" { /** * Maximum number of "specialists" on a network -- bridges, relays, etc. */ -#define ZT_MAX_NETWORK_SPECIALISTS 256 +#define ZT_MAX_NETWORK_SPECIALISTS 512 /** * Maximum number of multicast group subscriptions per network diff --git a/node/Capability.hpp b/node/Capability.hpp index e1541e8094..8bb50c56d4 100644 --- a/node/Capability.hpp +++ b/node/Capability.hpp @@ -58,7 +58,6 @@ class Capability : public Credential { Capability() : _nwid(0), _ts(0), _id(0), _maxCustodyChainLength(0), _ruleCount(0) { memset(_rules, 0, sizeof(_rules)); - memset(_custody, 0, sizeof(_custody)); } /** @@ -513,7 +512,7 @@ class Capability : public Credential { Address to; Address from; ECC::Signature signature; - } _custody[ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH]; + } _custody[ZT_MAX_CAPABILITY_CUSTODY_CHAIN_LENGTH] = {}; }; } // namespace ZeroTier diff --git a/node/Identity.hpp b/node/Identity.hpp index 7016aee862..bcd8c52a7c 100644 --- a/node/Identity.hpp +++ b/node/Identity.hpp @@ -35,7 +35,7 @@ namespace ZeroTier { */ class Identity { public: - Identity() : _privateKey((ECC::Private*)0) + Identity() : _publicKey{0}, _privateKey{(ECC::Private*)0} { } @@ -43,14 +43,14 @@ class Identity { { } - Identity(const char* str) : _privateKey((ECC::Private*)0) + Identity(const char* str) : _publicKey{0}, _privateKey{(ECC::Private*)0} { if (! fromString(str)) { throw ZT_EXCEPTION_INVALID_SERIALIZED_DATA_INVALID_TYPE; } } - template Identity(const Buffer& b, unsigned int startAt = 0) : _privateKey((ECC::Private*)0) + template Identity(const Buffer& b, unsigned int startAt = 0) : _publicKey{0}, _privateKey{(ECC::Private*)0} { deserialize(b, startAt); } diff --git a/node/InetAddress.cpp b/node/InetAddress.cpp index 81a49e69ee..fe3f607ebc 100644 --- a/node/InetAddress.cpp +++ b/node/InetAddress.cpp @@ -160,7 +160,7 @@ InetAddress::IpScope InetAddress::ipScope() const void InetAddress::set(const void* ipBytes, unsigned int ipLen, unsigned int port) { - memset(this, 0, sizeof(InetAddress)); + memset(static_cast(this), 0, sizeof(InetAddress)); if (ipLen == 4) { uint32_t ipb[1]; memcpy(ipb, ipBytes, 4); @@ -215,7 +215,7 @@ bool InetAddress::fromString(const char* ipSlashPort) { char buf[64]; - memset(this, 0, sizeof(InetAddress)); + memset(static_cast(this), 0, sizeof(InetAddress)); if (! *ipSlashPort) { return true; diff --git a/node/InetAddress.hpp b/node/InetAddress.hpp index fbbe25dee2..e1dfc7e471 100644 --- a/node/InetAddress.hpp +++ b/node/InetAddress.hpp @@ -74,15 +74,15 @@ struct InetAddress : public sockaddr_storage { InetAddress() { - memset(this, 0, sizeof(InetAddress)); + memset(static_cast(this), 0, sizeof(InetAddress)); } InetAddress(const InetAddress& a) { - memcpy(this, &a, sizeof(InetAddress)); + memcpy(static_cast(this), &a, sizeof(InetAddress)); } InetAddress(const InetAddress* a) { - memcpy(this, a, sizeof(InetAddress)); + memcpy(static_cast(this), a, sizeof(InetAddress)); } InetAddress(const struct sockaddr_storage& ss) { @@ -132,7 +132,7 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const InetAddress& a) { if (&a != this) { - memcpy(this, &a, sizeof(InetAddress)); + memcpy(static_cast(this), &a, sizeof(InetAddress)); } return *this; } @@ -140,7 +140,7 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const InetAddress* a) { if (a != this) { - memcpy(this, a, sizeof(InetAddress)); + memcpy(static_cast(this), a, sizeof(InetAddress)); } return *this; } @@ -148,7 +148,7 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr_storage& ss) { if (reinterpret_cast(&ss) != this) { - memcpy(this, &ss, sizeof(InetAddress)); + memcpy(static_cast(this), &ss, sizeof(InetAddress)); } return *this; } @@ -156,7 +156,7 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr_storage* ss) { if (reinterpret_cast(ss) != this) { - memcpy(this, ss, sizeof(InetAddress)); + memcpy(static_cast(this), ss, sizeof(InetAddress)); } return *this; } @@ -164,8 +164,8 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr_in& sa) { if (reinterpret_cast(&sa) != this) { - memset(this, 0, sizeof(InetAddress)); - memcpy(this, &sa, sizeof(struct sockaddr_in)); + memset(static_cast(this), 0, sizeof(InetAddress)); + memcpy(static_cast(this), &sa, sizeof(struct sockaddr_in)); } return *this; } @@ -173,8 +173,8 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr_in* sa) { if (reinterpret_cast(sa) != this) { - memset(this, 0, sizeof(InetAddress)); - memcpy(this, sa, sizeof(struct sockaddr_in)); + memset(static_cast(this), 0, sizeof(InetAddress)); + memcpy(static_cast(this), sa, sizeof(struct sockaddr_in)); } return *this; } @@ -182,8 +182,8 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr_in6& sa) { if (reinterpret_cast(&sa) != this) { - memset(this, 0, sizeof(InetAddress)); - memcpy(this, &sa, sizeof(struct sockaddr_in6)); + memset(static_cast(this), 0, sizeof(InetAddress)); + memcpy(static_cast(this), &sa, sizeof(struct sockaddr_in6)); } return *this; } @@ -191,8 +191,8 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr_in6* sa) { if (reinterpret_cast(sa) != this) { - memset(this, 0, sizeof(InetAddress)); - memcpy(this, sa, sizeof(struct sockaddr_in6)); + memset(static_cast(this), 0, sizeof(InetAddress)); + memcpy(static_cast(this), sa, sizeof(struct sockaddr_in6)); } return *this; } @@ -200,13 +200,13 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr& sa) { if (reinterpret_cast(&sa) != this) { - memset(this, 0, sizeof(InetAddress)); + memset(static_cast(this), 0, sizeof(InetAddress)); switch (sa.sa_family) { case AF_INET: - memcpy(this, &sa, sizeof(struct sockaddr_in)); + memcpy(static_cast(this), &sa, sizeof(struct sockaddr_in)); break; case AF_INET6: - memcpy(this, &sa, sizeof(struct sockaddr_in6)); + memcpy(static_cast(this), &sa, sizeof(struct sockaddr_in6)); break; } } @@ -216,13 +216,13 @@ struct InetAddress : public sockaddr_storage { inline InetAddress& operator=(const struct sockaddr* sa) { if (reinterpret_cast(sa) != this) { - memset(this, 0, sizeof(InetAddress)); + memset(static_cast(this), 0, sizeof(InetAddress)); switch (sa->sa_family) { case AF_INET: - memcpy(this, sa, sizeof(struct sockaddr_in)); + memcpy(static_cast(this), sa, sizeof(struct sockaddr_in)); break; case AF_INET6: - memcpy(this, sa, sizeof(struct sockaddr_in6)); + memcpy(static_cast(this), sa, sizeof(struct sockaddr_in6)); break; } } @@ -513,7 +513,7 @@ struct InetAddress : public sockaddr_storage { */ inline void zero() { - memset(this, 0, sizeof(InetAddress)); + memset(static_cast(this), 0, sizeof(InetAddress)); } /** @@ -635,7 +635,7 @@ struct InetAddress : public sockaddr_storage { template inline unsigned int deserialize(const Buffer& b, unsigned int startAt = 0) { - memset(this, 0, sizeof(InetAddress)); + memset(static_cast(this), 0, sizeof(InetAddress)); unsigned int p = startAt; switch (b[p++]) { case 0: diff --git a/node/Network.hpp b/node/Network.hpp index 4e417fe879..3a6cd270e1 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -479,15 +479,11 @@ class Network { int64_t _lastConfigUpdate; struct _IncomingConfigChunk { - _IncomingConfigChunk() - { - memset(this, 0, sizeof(_IncomingConfigChunk)); - } - uint64_t ts; - uint64_t updateId; - uint64_t haveChunkIds[ZT_NETWORK_MAX_UPDATE_CHUNKS]; - unsigned long haveChunks; - unsigned long haveBytes; + uint64_t ts = 0; + uint64_t updateId = 0; + uint64_t haveChunkIds[ZT_NETWORK_MAX_UPDATE_CHUNKS]{}; + unsigned long haveChunks = 0; + unsigned long haveBytes = 0; Dictionary data; }; _IncomingConfigChunk _incomingConfigChunks[ZT_NETWORK_MAX_INCOMING_UPDATES]; diff --git a/node/NetworkConfig.cpp b/node/NetworkConfig.cpp index 7660f953b2..d388f57bc7 100644 --- a/node/NetworkConfig.cpp +++ b/node/NetworkConfig.cpp @@ -50,7 +50,6 @@ NetworkConfig::NetworkConfig() name[0] = 0; memset(specialists, 0, sizeof(uint64_t) * ZT_MAX_NETWORK_SPECIALISTS); memset(routes, 0, sizeof(ZT_VirtualNetworkRoute) * ZT_MAX_NETWORK_ROUTES); - memset(staticIps, 0, sizeof(InetAddress) * ZT_MAX_ZT_ASSIGNED_ADDRESSES); memset(rules, 0, sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES); memset(&dns, 0, sizeof(ZT_VirtualNetworkDNS)); memset(authenticationURL, 0, sizeof(authenticationURL)); diff --git a/node/NetworkConfig.hpp b/node/NetworkConfig.hpp index cba9b1232f..50dfaa385d 100644 --- a/node/NetworkConfig.hpp +++ b/node/NetworkConfig.hpp @@ -80,7 +80,7 @@ namespace ZeroTier { // Dictionary capacity needed for max size network config #define ZT_NETWORKCONFIG_DICT_CAPACITY \ - (4096 + (sizeof(ZT_VirtualNetworkConfig)) + (sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES) + (sizeof(Capability) * ZT_MAX_NETWORK_CAPABILITIES) + (sizeof(Tag) * ZT_MAX_NETWORK_TAGS) \ + ((4096 + 2048) + (sizeof(ZT_VirtualNetworkConfig)) + (sizeof(ZT_VirtualNetworkRule) * ZT_MAX_NETWORK_RULES) + (sizeof(Capability) * ZT_MAX_NETWORK_CAPABILITIES) + (sizeof(Tag) * ZT_MAX_NETWORK_TAGS) \ + (sizeof(CertificateOfOwnership) * ZT_MAX_CERTIFICATES_OF_OWNERSHIP)) // Dictionary capacity needed for max size network meta-data @@ -562,7 +562,7 @@ class NetworkConfig { /** * Static IP assignments */ - InetAddress staticIps[ZT_MAX_ZT_ASSIGNED_ADDRESSES]; + InetAddress staticIps[ZT_MAX_ZT_ASSIGNED_ADDRESSES] = {}; /** * Base network rules diff --git a/node/Node.cpp b/node/Node.cpp index f704ff09aa..c6b46fb713 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -472,6 +472,10 @@ ZT_ResultCode Node::leave(uint64_t nwid, void** uptr, void* tptr) { ZT_VirtualNetworkConfig ctmp; void** nUserPtr = (void**)0; + // Keep a local SharedPtr to the network so we can call the destroy + // callback after releasing the lock, without leaving a window during + // which _networks still contains a destroyed-but-not-erased entry. + SharedPtr nwHold; { Mutex::Lock _l(_networks_m); SharedPtr* nw = _networks.get(nwid); @@ -485,16 +489,19 @@ ZT_ResultCode Node::leave(uint64_t nwid, void** uptr, void* tptr) (*nw)->externalConfig(&ctmp); (*nw)->destroy(); nUserPtr = (*nw)->userPtr(); + + // Move the SharedPtr out and erase the map entry atomically with + // destroy(), under the same lock. From here on _networks does not + // contain this nwid; a concurrent join() will construct fresh. + nwHold = *nw; + _networks.erase(nwid); } if (nUserPtr) { RR->node->configureVirtualNetworkPort(tptr, nwid, nUserPtr, ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY, &ctmp); } - { - Mutex::Lock _l(_networks_m); - _networks.erase(nwid); - } + // nwHold goes out of scope here, finally releasing the Network. uint64_t tmp[2]; tmp[0] = nwid; diff --git a/node/PacketMultiplexer.cpp b/node/PacketMultiplexer.cpp index 673b9a3c1d..d396dcab1d 100644 --- a/node/PacketMultiplexer.cpp +++ b/node/PacketMultiplexer.cpp @@ -67,7 +67,6 @@ void PacketMultiplexer::setUpPostDecodeReceiveThreads(unsigned int concurrency, #endif _enabled = true; _concurrency = concurrency; - bool _enablePinning = cpuPinningEnabled; for (unsigned int i = 0; i < _concurrency; ++i) { fprintf(stderr, "Reserved queue for thread %d\n", i); @@ -76,7 +75,7 @@ void PacketMultiplexer::setUpPostDecodeReceiveThreads(unsigned int concurrency, // Each thread picks from its own queue to feed into the core for (unsigned int i = 0; i < _concurrency; ++i) { - _rxThreads.push_back(std::thread([this, i, _enablePinning]() { + _rxThreads.push_back(std::thread([this, i]() { fprintf(stderr, "Created post-decode packet ingestion thread %d\n", i); PacketRecord* packet = nullptr; diff --git a/one.cpp b/one.cpp index a066f4e655..25f8d6322a 100644 --- a/one.cpp +++ b/one.cpp @@ -398,7 +398,7 @@ static int cli(int argc, char** argv) const int64_t now = OSUtils::now(); int64_t lastSendDiff = (uint64_t)path["lastSend"] ? now - (uint64_t)path["lastSend"] : -1; int64_t lastReceiveDiff = (uint64_t)path["lastReceive"] ? now - (uint64_t)path["lastReceive"] : -1; - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%s;%lld;%lld", addr.c_str(), lastSendDiff, lastReceiveDiff); + OSUtils::ztsnprintf(tmp, sizeof(tmp), "%s;%lld;%lld", addr.c_str(), static_cast(lastSendDiff), static_cast(lastReceiveDiff)); bestPath = tmp; break; } @@ -411,7 +411,7 @@ static int cli(int argc, char** argv) int64_t vmin = p["versionMinor"]; int64_t vrev = p["versionRev"]; if (vmaj >= 0) { - OSUtils::ztsnprintf(ver, sizeof(ver), "%lld.%lld.%lld", vmaj, vmin, vrev); + OSUtils::ztsnprintf(ver, sizeof(ver), "%lld.%lld.%lld", static_cast(vmaj), static_cast(vmin), static_cast(vrev)); } else { ver[0] = '-'; @@ -473,7 +473,7 @@ static int cli(int argc, char** argv) const int64_t now = OSUtils::now(); int64_t lastSendDiff = (uint64_t)path["lastSend"] ? now - (uint64_t)path["lastSend"] : -1; int64_t lastReceiveDiff = (uint64_t)path["lastReceive"] ? now - (uint64_t)path["lastReceive"] : -1; - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%-8lld %-8lld %s", lastSendDiff, lastReceiveDiff, addr.c_str()); + OSUtils::ztsnprintf(tmp, sizeof(tmp), "%-8lld %-8lld %s", static_cast(lastSendDiff), static_cast(lastReceiveDiff), addr.c_str()); if (p["tunneled"]) { bestPath = std::string("RELAY ") + tmp; } @@ -492,7 +492,7 @@ static int cli(int argc, char** argv) int64_t vmin = p["versionMinor"]; int64_t vrev = p["versionRev"]; if (vmaj >= 0) { - OSUtils::ztsnprintf(ver, sizeof(ver), "%lld.%lld.%lld", vmaj, vmin, vrev); + OSUtils::ztsnprintf(ver, sizeof(ver), "%lld.%lld.%lld", static_cast(vmaj), static_cast(vmin), static_cast(vrev)); } else { ver[0] = '-'; @@ -655,7 +655,7 @@ static int cli(int argc, char** argv) printf("-"); } printf("\n"); - for (int i = 0; i < p.size(); i++) { + for (int i = 0; i < (int)p.size(); i++) { printf( "%2d: %26s %51s %.16llx %12d\n", i, @@ -671,7 +671,7 @@ static int cli(int argc, char** argv) printf("-"); } printf("\n"); - for (int i = 0; i < p.size(); i++) { + for (int i = 0; i < (int)p.size(); i++) { printf( "%2d: %8.2f %8.2f %10d %7.4f %11d %11d %9d %7d %7d\n", i, @@ -820,7 +820,7 @@ static int cli(int argc, char** argv) else if (status == "OK") { int64_t expiresIn = ((int64_t)authenticationExpiryTime - OSUtils::now()) / 1000LL; if (expiresIn >= 0) { - printf(" AUTH OK, expires in: %lld seconds" ZT_EOL_S, expiresIn); + printf(" AUTH OK, expires in: %lld seconds" ZT_EOL_S, static_cast(expiresIn)); } } } @@ -1656,7 +1656,7 @@ static int idtool(int argc, char** argv) Buffer wbuf; w.serialize(wbuf); char fn[128]; - OSUtils::ztsnprintf(fn, sizeof(fn), "%.16llx.moon", w.id()); + OSUtils::ztsnprintf(fn, sizeof(fn), "%.16llx.moon", static_cast(w.id())); OSUtils::writeFile(fn, wbuf.data(), wbuf.size()); printf("wrote %s (signed world with timestamp %llu)" ZT_EOL_S, fn, (unsigned long long)now); } @@ -1743,18 +1743,12 @@ static int _setCapabilities(int flags) static void _recursiveChown(const char* path, uid_t uid, gid_t gid) { - struct dirent de; struct dirent* dptr; lchown(path, uid, gid); DIR* d = opendir(path); if (! d) return; - dptr = (struct dirent*)0; - for (;;) { - if (readdir_r(d, &de, &dptr) != 0) - break; - if (! dptr) - break; + while ((dptr = readdir(d)) != nullptr) { if ((strcmp(dptr->d_name, ".") != 0) && (strcmp(dptr->d_name, "..") != 0) && (strlen(dptr->d_name) > 0)) { std::string p(path); p.push_back(ZT_PATH_SEPARATOR); diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index efaa729595..8e73f02d1f 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -135,7 +135,7 @@ LinuxEthernetTap::LinuxEthernetTap( // Make sure Linux netlink is initialized. (void)LinuxNetLink::getInstance(); - OSUtils::ztsnprintf(nwids, sizeof(nwids), "%.16llx", nwid); + OSUtils::ztsnprintf(nwids, sizeof(nwids), "%.16llx", static_cast(nwid)); _fd = ::open("/dev/net/tun", O_RDWR); if (_fd <= 0) { diff --git a/osdep/LinuxNetLink.cpp b/osdep/LinuxNetLink.cpp index 02c38c09a2..6754caf2aa 100644 --- a/osdep/LinuxNetLink.cpp +++ b/osdep/LinuxNetLink.cpp @@ -275,7 +275,9 @@ void LinuxNetLink::_routeAdded(struct nlmsghdr* nlp) char gws[40] = { 0 }; char srcs[40] = { 0 }; char ifs[16] = { 0 }; +#ifdef ZT_NETLINK_TRACE char ms[24] = { 0 }; +#endif struct rtmsg* rtp = (struct rtmsg*)NLMSG_DATA(nlp); struct rtattr* rtap = (struct rtattr*)RTM_RTA(rtp); @@ -361,7 +363,9 @@ void LinuxNetLink::_routeDeleted(struct nlmsghdr* nlp) char gws[40] = { 0 }; char srcs[40] = { 0 }; char ifs[16] = { 0 }; +#ifdef ZT_NETLINK_TRACE char ms[24] = { 0 }; +#endif struct rtmsg* rtp = (struct rtmsg*)NLMSG_DATA(nlp); struct rtattr* rtap = (struct rtattr*)RTM_RTA(rtp); diff --git a/osdep/ManagedRoute.cpp b/osdep/ManagedRoute.cpp index 6a605b856a..9c53145f3c 100644 --- a/osdep/ManagedRoute.cpp +++ b/osdep/ManagedRoute.cpp @@ -349,7 +349,13 @@ static bool _winRoute(bool del, const NET_LUID& interfaceLuid, const NET_IFINDEX rtrow.Age = 0; rtrow.Origin = NlroManual; if (del) { - return (DeleteIpForwardEntry2(&rtrow) == NO_ERROR); + const NTSTATUS r = DeleteIpForwardEntry2(&rtrow); + // ERROR_NOT_FOUND means the route was already gone -- which is the + // state we wanted to achieve, so treat it as success rather than + // failure. Without this, ManagedRoute::remove() reports a stale + // route as un-removable and stops trying, leaving the daemon's + // internal _applied map out of sync with the Windows routing table. + return (r == NO_ERROR) || (r == ERROR_NOT_FOUND); } else { NTSTATUS r = CreateIpForwardEntry2(&rtrow); @@ -585,12 +591,15 @@ bool ManagedRoute::sync() #ifdef __WINDOWS__ // -------------------------------------------------------- if ((! _applied.count(leftt)) || (! _winHasRoute(interfaceLuid, interfaceIndex, leftt, _via))) { - _applied[leftt] = false; // boolean unused - _winRoute(false, interfaceLuid, interfaceIndex, leftt, _via); + // Check the return value of _winRoute on install. + if (_winRoute(false, interfaceLuid, interfaceIndex, leftt, _via)) { + _applied[leftt] = false; // boolean unused + } } if ((rightt) && ((! _applied.count(rightt)) || (! _winHasRoute(interfaceLuid, interfaceIndex, rightt, _via)))) { - _applied[rightt] = false; // boolean unused - _winRoute(false, interfaceLuid, interfaceIndex, rightt, _via); + if (_winRoute(false, interfaceLuid, interfaceIndex, rightt, _via)) { + _applied[rightt] = false; // boolean unused + } } #endif // __WINDOWS__ -------------------------------------------------------- @@ -638,7 +647,15 @@ void ManagedRoute::remove() #endif // __LINUX__ ---------------------------------------------------------- #ifdef __WINDOWS__ // -------------------------------------------------------- - _winRoute(true, interfaceLuid, interfaceIndex, r->first, _via); + // Retry the delete a few times with short sleeps if it fails the first time. + if (! _winRoute(true, interfaceLuid, interfaceIndex, r->first, _via)) { + for (int attempt = 0; attempt < 4; ++attempt) { + Sleep(100); + if (_winRoute(true, interfaceLuid, interfaceIndex, r->first, _via)) { + break; + } + } + } #endif // __WINDOWS__ -------------------------------------------------------- } diff --git a/osdep/OSUtils.cpp b/osdep/OSUtils.cpp index 2fee8f194d..97a2e87097 100644 --- a/osdep/OSUtils.cpp +++ b/osdep/OSUtils.cpp @@ -115,21 +115,13 @@ std::vector OSUtils::listDirectory(const char* path, bool includeDi FindClose(hFind); } #else - struct dirent de; struct dirent* dptr; DIR* d = opendir(path); if (! d) return r; - dptr = (struct dirent*)0; - for (;;) { - if (readdir_r(d, &de, &dptr)) - break; - if (dptr) { - if ((strcmp(dptr->d_name, ".")) && (strcmp(dptr->d_name, "..")) && ((dptr->d_type != DT_DIR) || (includeDirectories))) - r.push_back(std::string(dptr->d_name)); - } - else - break; + while ((dptr = readdir(d)) != nullptr) { + if ((strcmp(dptr->d_name, ".")) && (strcmp(dptr->d_name, "..")) && ((dptr->d_type != DT_DIR) || (includeDirectories))) + r.push_back(std::string(dptr->d_name)); } closedir(d); #endif @@ -165,31 +157,23 @@ long OSUtils::cleanDirectory(const char* path, const int64_t olderThan) FindClose(hFind); } #else - struct dirent de; struct dirent* dptr; struct stat st; char tmp[4096]; DIR* d = opendir(path); if (! d) return -1; - dptr = (struct dirent*)0; - for (;;) { - if (readdir_r(d, &de, &dptr)) - break; - if (dptr) { - if ((strcmp(dptr->d_name, ".")) && (strcmp(dptr->d_name, "..")) && (dptr->d_type == DT_REG)) { - ztsnprintf(tmp, sizeof(tmp), "%s/%s", path, dptr->d_name); - if (stat(tmp, &st) == 0) { - int64_t mt = (int64_t)(st.st_mtime); - if ((mt > 0) && ((mt * 1000) < olderThan)) { - if (unlink(tmp) == 0) - ++cleaned; - } + while ((dptr = readdir(d)) != nullptr) { + if ((strcmp(dptr->d_name, ".")) && (strcmp(dptr->d_name, "..")) && (dptr->d_type == DT_REG)) { + ztsnprintf(tmp, sizeof(tmp), "%s/%s", path, dptr->d_name); + if (stat(tmp, &st) == 0) { + int64_t mt = (int64_t)(st.st_mtime); + if ((mt > 0) && ((mt * 1000) < olderThan)) { + if (unlink(tmp) == 0) + ++cleaned; } } } - else - break; } closedir(d); #endif @@ -219,17 +203,11 @@ bool OSUtils::rmDashRf(const char* path) } return (RemoveDirectoryA(path) != FALSE); #else - struct dirent de; struct dirent* dptr; DIR* d = opendir(path); if (! d) return true; - dptr = (struct dirent*)0; - for (;;) { - if (readdir_r(d, &de, &dptr) != 0) - break; - if (! dptr) - break; + while ((dptr = readdir(d)) != nullptr) { if ((strcmp(dptr->d_name, ".") != 0) && (strcmp(dptr->d_name, "..") != 0) && (strlen(dptr->d_name) > 0)) { std::string p(path); p.push_back(ZT_PATH_SEPARATOR); @@ -580,7 +558,7 @@ std::string OSUtils::jsonString(const nlohmann::json& jv, const char* dfl) } else if (jv.is_number()) { char tmp[64]; - ztsnprintf(tmp, sizeof(tmp), "%llu", (uint64_t)jv); + ztsnprintf(tmp, sizeof(tmp), "%llu", static_cast(jv)); return tmp; } else if (jv.is_boolean()) { diff --git a/osdep/OSUtils.hpp b/osdep/OSUtils.hpp index b122a0c946..5c3eb7f33a 100644 --- a/osdep/OSUtils.hpp +++ b/osdep/OSUtils.hpp @@ -59,6 +59,9 @@ class OSUtils { * @param ... Format arguments * @throws std::length_error buf[] too short (buf[] will still be left null-terminated) */ +#ifdef __GNUC__ + __attribute__((__format__(__printf__, 3, 4))) +#endif static unsigned int ztsnprintf(char* buf, unsigned int len, const char* fmt, ...); /** diff --git a/osdep/Phy.hpp b/osdep/Phy.hpp index 11cbe4c053..7014e739cc 100644 --- a/osdep/Phy.hpp +++ b/osdep/Phy.hpp @@ -133,9 +133,6 @@ template class Phy { }; struct PhySocketImpl { - PhySocketImpl() - { - } PhySocketType type; ZT_PHY_SOCKFD_TYPE sock; void* uptr; // user-settable pointer diff --git a/osdep/Thread.hpp b/osdep/Thread.hpp index 46c08f4812..8419f2e054 100644 --- a/osdep/Thread.hpp +++ b/osdep/Thread.hpp @@ -115,22 +115,6 @@ template static void* ___zt_threadMain(void* instance) */ class Thread { public: - Thread() - { - memset(this, 0, sizeof(Thread)); - } - - Thread(const Thread& t) - { - memcpy(this, &t, sizeof(Thread)); - } - - inline Thread& operator=(const Thread& t) - { - memcpy(this, &t, sizeof(Thread)); - return *this; - } - /** * Start a new thread * @@ -185,8 +169,8 @@ class Thread { } private: - pthread_t _tid; - volatile bool _started; + pthread_t _tid{}; + volatile bool _started = false; }; } // namespace ZeroTier diff --git a/service/OneService.cpp b/service/OneService.cpp index 227b575f7e..d5d086058e 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -174,6 +174,16 @@ size_t curlResponseWrite(void* ptr, size_t size, size_t nmemb, std::string* data } #endif +#if defined(MAX_PATH) + #define ZT_MAX_PATH MAX_PATH +#elif defined(_MAX_PATH) + #define ZT_MAX_PATH _MAX_PATH +#elif defined(PATH_MAX) + #define ZT_MAX_PATH PATH_MAX +#else + #define ZT_MAX_PATH 4096 +#endif + namespace ZeroTier { std::string ssoResponseTemplate = R"""( @@ -567,7 +577,7 @@ static void _networkToJson(nlohmann::json& nj, NetworkState& ns) break; } - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", ns.config().nwid); + OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", static_cast(ns.config().nwid)); nj["id"] = tmp; nj["nwid"] = tmp; OSUtils::ztsnprintf( @@ -665,7 +675,7 @@ static void _peerToJson(nlohmann::json& pj, const ZT_Peer* peer, SharedPtr break; } - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.10llx", peer->address); + OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.10llx", static_cast(peer->address)); pj["address"] = tmp; pj["versionMajor"] = peer->versionMajor; pj["versionMinor"] = peer->versionMinor; @@ -725,7 +735,7 @@ static void _peerToJson(nlohmann::json& pj, const ZT_Peer* peer, SharedPtr static void _moonToJson(nlohmann::json& mj, const World& world) { char tmp[4096]; - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", world.id()); + OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", static_cast(world.id())); mj["id"] = tmp; mj["timestamp"] = world.timestamp(); mj["signature"] = Utils::hex(world.signature().data, ZT_ECC_SIGNATURE_LEN, tmp); @@ -1042,7 +1052,6 @@ class OneServiceImpl : public OneService { return; #endif _node->initMultithreading(_concurrency, _cpuPinningEnabled); - bool pinning = _cpuPinningEnabled; } #ifdef ZT_OPENTELEMETRY_ENABLED @@ -1239,7 +1248,7 @@ class OneServiceImpl : public OneService { if (_ports[2]) { char uniqueName[64]; - OSUtils::ztsnprintf(uniqueName, sizeof(uniqueName), "ZeroTier/%.10llx@%u", _node->address(), _ports[2]); + OSUtils::ztsnprintf(uniqueName, sizeof(uniqueName), "ZeroTier/%.10llx@%u", static_cast(_node->address()), _ports[2]); _portMapper = new PortMapper(_ports[2], uniqueName); } } @@ -1711,7 +1720,7 @@ class OneServiceImpl : public OneService { virtual bool setNetworkSettings(const uint64_t nwid, const NetworkSettings& settings) { char nlcpath[4096]; - OSUtils::ztsnprintf(nlcpath, sizeof(nlcpath), "%s" ZT_PATH_SEPARATOR_S "%.16llx.local.conf", _networksPath.c_str(), nwid); + OSUtils::ztsnprintf(nlcpath, sizeof(nlcpath), "%s" ZT_PATH_SEPARATOR_S "%.16llx.local.conf", _networksPath.c_str(), static_cast(nwid)); FILE* out = fopen(nlcpath, "w"); if (out) { fprintf(out, "allowManaged=%d\n", (int)settings.allowManaged); @@ -1743,6 +1752,8 @@ class OneServiceImpl : public OneService { std::string statusPath = "/status"; std::string metricsPath = "/metrics"; + + std::vector noAuthEndpoints { "/sso", "/health" }; auto setContent = [=](const httplib::Request& req, httplib::Response& res, std::string content) { @@ -1769,7 +1780,7 @@ class OneServiceImpl : public OneService { // if (_enableWebServer) { static std::string appUiPath = "/app"; - static char appUiDir[16384]; + static char appUiDir[sizeof(_homePath) + sizeof(appUiPath)]; snprintf(appUiDir, sizeof(appUiDir), "%s%s", _homePath.c_str(), appUiPath.c_str()); auto ret = _controlPlane.set_mount_point(appUiPath, appUiDir); @@ -1796,7 +1807,7 @@ class OneServiceImpl : public OneService { auto match = req.matches[1]; if (match.matched) { // fallback - char indexHtmlPath[16384]; + char indexHtmlPath[sizeof(appUiDir) + ZT_MAX_PATH + 13]; snprintf(indexHtmlPath, sizeof(indexHtmlPath), "%s/%s/%s", appUiDir, match.str().c_str(), "index.html"); // fprintf(stderr, "fallback path %s\n", indexHtmlPath); @@ -1820,7 +1831,7 @@ class OneServiceImpl : public OneService { // add .html std::string htmlFile; - char htmlPath[16384]; + char htmlPath[sizeof(appUiDir) + ZT_MAX_PATH + 6]; snprintf(htmlPath, sizeof(htmlPath), "%s%s%s", appUiDir, (req.path).substr(appUiPath.length()).c_str(), ".html"); // fprintf(stderr, "path: %s\n", htmlPath); if (OSUtils::readFile(htmlPath, htmlFile)) { @@ -2202,7 +2213,7 @@ class OneServiceImpl : public OneService { if (! found && seed != 0) { char tmp[64]; - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", id); + OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.16llx", static_cast(id)); out["id"] = tmp; out["roots"] = json::array(); out["timestamp"] = 0; @@ -2425,7 +2436,7 @@ class OneServiceImpl : public OneService { auto out = json::object(); char tmp[256] = {}; - OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.10llx", status.address); + OSUtils::ztsnprintf(tmp, sizeof(tmp), "%.10llx", static_cast(status.address)); out["address"] = tmp; out["publicIdentity"] = status.publicIdentity; out["online"] = (bool)(status.online != 0); @@ -2452,7 +2463,7 @@ class OneServiceImpl : public OneService { // Enumerate all local address/port pairs that this node is listening on std::vector boundAddrs(_binder.allBoundLocalInterfaceAddresses()); auto boundAddrArray = json::array(); - for (int i = 0; i < boundAddrs.size(); i++) { + for (std::size_t i = 0; i < boundAddrs.size(); i++) { char ipBuf[64] = { 0 }; boundAddrs[i].toString(ipBuf); boundAddrArray.push_back(ipBuf); @@ -2461,7 +2472,7 @@ class OneServiceImpl : public OneService { // Enumerate all external address/port pairs that are reported for this node std::vector surfaceAddrs = _node->SurfaceAddresses(); auto surfaceAddrArray = json::array(); - for (int i = 0; i < surfaceAddrs.size(); i++) { + for (std::size_t i = 0; i < surfaceAddrs.size(); i++) { char ipBuf[64] = { 0 }; surfaceAddrs[i].toString(ipBuf); surfaceAddrArray.push_back(ipBuf); @@ -3528,13 +3539,13 @@ class OneServiceImpl : public OneService { if (! n.tap()) { try { char friendlyName[128]; - OSUtils::ztsnprintf(friendlyName, sizeof(friendlyName), "ZeroTier One [%.16llx]", nwid); + OSUtils::ztsnprintf(friendlyName, sizeof(friendlyName), "ZeroTier One [%.16llx]", static_cast(nwid)); n.setTap(EthernetTap::newInstance(nullptr, _concurrency, _cpuPinningEnabled, _homePath.c_str(), MAC(nwc->mac), nwc->mtu, (unsigned int)ZT_IF_METRIC, nwid, friendlyName, StapFrameHandler, (void*)this)); *nuptr = (void*)&n; char nlcpath[256]; - OSUtils::ztsnprintf(nlcpath, sizeof(nlcpath), "%s" ZT_PATH_SEPARATOR_S "networks.d" ZT_PATH_SEPARATOR_S "%.16llx.local.conf", _homePath.c_str(), nwid); + OSUtils::ztsnprintf(nlcpath, sizeof(nlcpath), "%s" ZT_PATH_SEPARATOR_S "networks.d" ZT_PATH_SEPARATOR_S "%.16llx.local.conf", _homePath.c_str(), static_cast(nwid)); std::string nlcbuf; if (OSUtils::readFile(nlcpath, nlcbuf)) { Dictionary<4096> nc; @@ -3600,10 +3611,20 @@ class OneServiceImpl : public OneService { // // without WindowsEthernetTap::isInitialized() returning true, the won't actually // be online yet and setting managed routes on it will fail. + // + // Release _nets_m for the duration of this wait. + std::shared_ptr tapCopy = n.tap(); + _nets_m.unlock(); const int MAX_SLEEP_COUNT = 500; - for (int i = 0; ! ((WindowsEthernetTap*)(n.tap().get()))->isInitialized() && i < MAX_SLEEP_COUNT; i++) { + for (int i = 0; ! ((WindowsEthernetTap*)(tapCopy.get()))->isInitialized() && i < MAX_SLEEP_COUNT; i++) { Sleep(10); } + _nets_m.lock(); + // Re-look it up and bail if it was removed while we were sleeping. + std::map::iterator nit = _nets.find(nwid); + if (nit == _nets.end() || ! nit->second.tap()) { + return -999; + } #endif syncManagedStuff(n, true, true, true); n.tap()->setMtu(nwc->mtu); @@ -3631,7 +3652,7 @@ class OneServiceImpl : public OneService { #endif if (op == ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY) { char nlcpath[256]; - OSUtils::ztsnprintf(nlcpath, sizeof(nlcpath), "%s" ZT_PATH_SEPARATOR_S "networks.d" ZT_PATH_SEPARATOR_S "%.16llx.local.conf", _homePath.c_str(), nwid); + OSUtils::ztsnprintf(nlcpath, sizeof(nlcpath), "%s" ZT_PATH_SEPARATOR_S "networks.d" ZT_PATH_SEPARATOR_S "%.16llx.local.conf", _homePath.c_str(), static_cast(nwid)); OSUtils::rm(nlcpath); } } diff --git a/version.h b/version.h index b0e5bb00e9..9597879694 100644 --- a/version.h +++ b/version.h @@ -22,7 +22,7 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 1 +#define ZEROTIER_ONE_VERSION_REVISION 2 /** * Build version From 2ed9b868526ea16f6e7e4f3f9832d2932a5a06d1 Mon Sep 17 00:00:00 2001 From: dimitriy-dade Date: Fri, 22 May 2026 19:56:47 -0400 Subject: [PATCH 37/39] updated workflows --- .github/workflows/build.yml | 2 +- .github/workflows/central-controller-cv1.yaml | 67 ------------------- .github/workflows/validate.yml | 11 ++- 3 files changed, 6 insertions(+), 74 deletions(-) delete mode 100644 .github/workflows/central-controller-cv1.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de636b8b9e..9ffa09c76a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -102,7 +102,7 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: stable - target: aarch64-apple-darwin + targets: x86_64-pc-windows-msvc components: rustfmt, clippy - name: Set up cargo cache uses: Swatinem/rust-cache@v2 diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml deleted file mode 100644 index 6fcdbcfbe6..0000000000 --- a/.github/workflows/central-controller-cv1.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: Central Controller CV1 Build and Push - -on: - push: - pull_request: - workflow_dispatch: - -jobs: - central_controller: - name: Central Controller CV1 Build - strategy: - matrix: - runner: [gha-runner-x64, gha-runner-arm64] - runs-on: ${{ matrix.runner }} - steps: - - name: checkout - uses: actions/checkout@v4 - - - name: Docker Auth - run: echo "${{ secrets.PORTUS_PW }}" | docker login registry.zerotier.com -u ${{ secrets.PORTUS_USER }} --password-stdin - - - name: Get branch name and sanitize - id: branch - run: | - BRANCH_NAME="${GITHUB_REF##*/}" - SANITIZED_BRANCH="${BRANCH_NAME//\//-}" - echo "branch_name=$SANITIZED_BRANCH" >> $GITHUB_OUTPUT - - - name: Get short git commit SHA - id: sha - run: | - calculatedSha=$(git rev-parse --short ${{ github.sha }}) - echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV - - - name: Build & Push Docker Image - run: | - docker build --provenance false --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-${{ runner.arch }} -f ext/central-controller-docker/Dockerfile . --push - - multi-arch-docker: - runs-on: gha-runner-x64 - needs: central_controller - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Docker Auth - run: echo "${{ secrets.PORTUS_PW }}" | docker login registry.zerotier.com -u ${{ secrets.PORTUS_USER }} --password-stdin - - - name: Get branch name and sanitize - id: branch - run: | - BRANCH_NAME="${GITHUB_REF##*/}" - SANITIZED_BRANCH="${BRANCH_NAME//\//-}" - echo "branch_name=$SANITIZED_BRANCH" >> $GITHUB_OUTPUT - - - name: Get short git commit SHA - id: sha - run: | - calculatedSha=$(git rev-parse --short ${{ github.sha }}) - echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV - - - name: Create and push multi-arch manifest - run: | - docker manifest create registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} \ - --amend registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-X64 \ - --amend registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-ARM64 - docker manifest push registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index bbc1076608..beeb102b41 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -12,26 +12,25 @@ jobs: git config --global core.autocrlf input - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install Rust - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable - target: x86_64-unknown-linux-gnu - override: true + targets: x86_64-unknown-linux-gnu components: rustfmt, clippy - name: Set up cargo cache uses: Swatinem/rust-cache@v2 continue-on-error: false with: - key: ${{ runner.os }}-cargo-${{ hashFiles('zeroidc//Cargo.lock') }} + key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }} shared-key: ${{ runner.os }}-cargo- workspaces: | - zeroidc/ + rustybits/ - name: validate-1m-linux env: From fe29cd88886e4f58547ba7f740b2d73eb49ab222 Mon Sep 17 00:00:00 2001 From: dimitriy-dade Date: Wed, 27 May 2026 14:29:53 -0400 Subject: [PATCH 38/39] fixing changelogs as required by linux builds and version for Mac --- debian/changelog | 4 ++-- ext/installfiles/mac/ZeroTier One.pkgproj | 2 +- zerotier-one.spec | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/debian/changelog b/debian/changelog index 57d6b2ac45..6dbf6df752 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,8 @@ -zerotier-one (1.16.1) unstable; urgency=medium +zerotier-one (1.16.2) unstable; urgency=medium * See RELEASE-NOTES.md for release notes. - -- Adam Ierymenko Mon, 12 Dec 2025 01:00:00 -0700 + -- Adam Ierymenko Wed, 27 May 2026 01:00:00 -0700 zerotier-one (1.16.0-2) unstable; urgency=medium diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index 5abe96455b..a0cfef22fd 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -702,7 +702,7 @@ USE_HFS+_COMPRESSION VERSION - 1.16.1 + 1.16.2 TYPE 0 diff --git a/zerotier-one.spec b/zerotier-one.spec index be57e77236..6b54195b1e 100644 --- a/zerotier-one.spec +++ b/zerotier-one.spec @@ -1,5 +1,5 @@ Name: zerotier-one -Version: 1.16.1 +Version: 1.16.2 Release: 1%{?dist} Summary: ZeroTier network virtualization service @@ -155,6 +155,9 @@ chmod 0755 $RPM_BUILD_ROOT/etc/init.d/zerotier-one %endif %changelog +* Wed May 27 2026 Adam Ierymenko - 1.16.2 +- see https://github.com/zerotier/ZeroTierOne for release notes + * Fri Dec 12 2025 Adam Ierymenko - 1.16.1 - see https://github.com/zerotier/ZeroTierOne for release notes From 9c2d5cd74c06e56933ecdf54ad7ef3a68af02ccc Mon Sep 17 00:00:00 2001 From: dimitriy-dade Date: Wed, 27 May 2026 16:14:53 -0400 Subject: [PATCH 39/39] bringing back cv1 yaml --- .github/workflows/central-controller-cv1.yaml | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/central-controller-cv1.yaml diff --git a/.github/workflows/central-controller-cv1.yaml b/.github/workflows/central-controller-cv1.yaml new file mode 100644 index 0000000000..6fcdbcfbe6 --- /dev/null +++ b/.github/workflows/central-controller-cv1.yaml @@ -0,0 +1,67 @@ +name: Central Controller CV1 Build and Push + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + central_controller: + name: Central Controller CV1 Build + strategy: + matrix: + runner: [gha-runner-x64, gha-runner-arm64] + runs-on: ${{ matrix.runner }} + steps: + - name: checkout + uses: actions/checkout@v4 + + - name: Docker Auth + run: echo "${{ secrets.PORTUS_PW }}" | docker login registry.zerotier.com -u ${{ secrets.PORTUS_USER }} --password-stdin + + - name: Get branch name and sanitize + id: branch + run: | + BRANCH_NAME="${GITHUB_REF##*/}" + SANITIZED_BRANCH="${BRANCH_NAME//\//-}" + echo "branch_name=$SANITIZED_BRANCH" >> $GITHUB_OUTPUT + + - name: Get short git commit SHA + id: sha + run: | + calculatedSha=$(git rev-parse --short ${{ github.sha }}) + echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV + + - name: Build & Push Docker Image + run: | + docker build --provenance false --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-${{ runner.arch }} -f ext/central-controller-docker/Dockerfile . --push + + multi-arch-docker: + runs-on: gha-runner-x64 + needs: central_controller + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Docker Auth + run: echo "${{ secrets.PORTUS_PW }}" | docker login registry.zerotier.com -u ${{ secrets.PORTUS_USER }} --password-stdin + + - name: Get branch name and sanitize + id: branch + run: | + BRANCH_NAME="${GITHUB_REF##*/}" + SANITIZED_BRANCH="${BRANCH_NAME//\//-}" + echo "branch_name=$SANITIZED_BRANCH" >> $GITHUB_OUTPUT + + - name: Get short git commit SHA + id: sha + run: | + calculatedSha=$(git rev-parse --short ${{ github.sha }}) + echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV + + - name: Create and push multi-arch manifest + run: | + docker manifest create registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }} \ + --amend registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-X64 \ + --amend registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}-ARM64 + docker manifest push registry.zerotier.com/zerotier-central/ztcentral-controller:${{ env.COMMIT_SHORT_SHA }}-${{ steps.branch.outputs.branch_name }}