Compare commits

...
211 Commits
Author SHA1 Message Date
Adam Ierymenko 651f45fe29 Merge branch 'dev' of http://10.95.0.64/zerotier/ZeroTierOne into dev 2022-06-27 17:13:57 -04:00
Adam Ierymenko 02270e0e3d Linux build fixes... may need to be reverted for new Drone CI but needed for old environment 2022-06-27 17:13:52 -04:00
Adam Ierymenko cb692d73c8 1.10.1 version bumps 2022-06-27 17:05:47 -04:00
Grant Limberg 1300cf23c5 Use fixed copy of JWT library until upstream merges 2022-06-27 10:44:33 -07:00
Grant Limberg 3cb24410a8 yay case insensitive filesystems 2022-06-24 10:21:13 -07:00
Grant Limberg be7ce4110e Revert "Delete and re-add libpqxx-7.7.3 due to weird corruption."
This reverts commit e96515433d.
2022-06-24 10:12:36 -07:00
Grant Limberg c07e4a8c01 Revert "Re-add..."
This reverts commit b1faebae4a.
2022-06-24 10:11:57 -07:00
Grant Limberg ff8da9d246 Play with online notification timing again 2022-06-24 10:03:30 -07:00
Adam Ierymenko b1faebae4a Re-add... 2022-06-23 13:24:33 -04:00
Adam Ierymenko e96515433d Delete and re-add libpqxx-7.7.3 due to weird corruption. 2022-06-23 13:21:13 -04:00
Grant Limberg 5a8d2c3cb4 Set running flag to false if falling out of oidc run loop 2022-06-22 17:36:24 -07:00
Grant Limberg 183a9d7088 update controller image and some dependencies 2022-06-22 15:03:19 -07:00
Grant Limberg c1384422c3 just sleep 1 second 2022-06-22 10:58:23 -07:00
Grant Limberg ccc0ebd0f9 don't spam the logs quite as much on first startup
sleep the thread 1 second every round until we're actually updating
members
2022-06-22 10:42:51 -07:00
Grant Limberg 9d4336d296 redis connection tuning 2022-06-22 10:30:58 -07:00
Grant Limberg 17bc9d3085 redis thread now uses this_thread::yield() 2022-06-22 10:07:55 -07:00
Grant Limberg 436f481a34 fix log line 2022-06-22 10:01:07 -07:00
Grant Limberg 9e8215b213 adjust sleep between onlineNotification runs. Added timer to output 2022-06-22 09:43:09 -07:00
Grant Limberg e958a83dd4 update central controller docker startup script 2022-06-22 09:25:15 -07:00
Grant Limberg f44b122262 pg_isready can use SSL 2022-06-21 14:40:24 -07:00
Adam Ierymenko 26d1cf9186 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-06-20 16:35:24 -04:00
Adam Ierymenko 895ee77c38 Commented out code to generates some AES-GMAC-SIV test vectors that are now part of the Rust code base to make sure it works right. 2022-06-20 16:35:17 -04:00
Grant Limberg caf8b15f6d Merge pull request #1701 from tossp/sql2
fix sql
2022-06-19 18:09:28 -07:00
TossPig bc7f18064f fix sql
bind message supplies 17 parameters, but prepared statement "" requires 16
2022-06-20 05:59:13 +08:00
Grant Limberg 355d3f44fb logging & redis standalone fix 2022-06-16 11:52:35 -07:00
Grant Limberg 9de863e68b update controller db record 2022-06-16 10:50:07 -07:00
Grant Limberg 64b7f8e445 quiet down logs more 2022-06-15 16:58:11 -07:00
Grant Limberg 626f488cb4 quiet down the controller logs a smidge 2022-06-15 16:58:07 -07:00
Grant Limberg 10212e376a more redis in the controller 2022-06-15 16:58:04 -07:00
Joseph Henry 81462cd530 Add snapcraft login step for future CI/CD 2022-06-15 11:06:16 -07:00
Joseph Henry 7d4e4ac646 Update snapcraft 2022-06-14 15:20:42 -07:00
Grant Limberg 0ed339f19d make sure value here is true, not just that the env var is set 2022-06-13 15:44:35 -07:00
Grant Limberg c6fc3560f2 Merge branch 'dev' into redisrection 2022-06-13 13:09:36 -07:00
Adam Ierymenko b4cec0b4a8 1.10.0 2022-06-13 14:18:54 -04:00
Grant Limberg d7030b6e9c html & unicode -> svg for sso logo 2022-06-08 16:17:28 -07:00
Joseph Henry 7ed5bde426 Fix for ab-mode link failure, QoS metrics (WIP) 2022-06-08 10:01:54 -07:00
Adam Ierymenko 75652ce667 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-06-08 12:43:57 -04:00
Adam Ierymenko 91f801ee72 Merge branch 'dev' of http://10.95.0.64/zerotier/ZeroTierOne into dev 2022-06-08 12:43:13 -04:00
Adam Ierymenko c6f567ae4a openssl11-devel does not exist on CentOS 7 2022-06-08 12:42:43 -04:00
Grant Limberg e1ca3c995d this should not be quoted 2022-06-08 09:26:37 -07:00
Adam Ierymenko addc327f17 More blanket ignores. 2022-06-08 12:21:11 -04:00
Adam Ierymenko f2c12d548d More blanket gitignores messing up vendored deps. 2022-06-08 12:19:40 -04:00
Adam Ierymenko ef36acb970 Fix vendored files. 2022-06-08 12:16:09 -04:00
Adam Ierymenko d5ca4e5f52 RPM build fix (reverted CI changes which will need to be un-reverted or made conditional) and vendor Rust dependencies to make builds much faster in any CI system. 2022-06-08 07:32:16 -04:00
Adam Ierymenko 373ca30269 1.10.0 release notes. 2022-06-07 13:53:12 -04:00
Adam Ierymenko 0d9d3a90de Revise README. 2022-06-07 13:10:34 -04:00
Adam Ierymenko 363481b0f1 1.10.0 installer for Windows 2022-06-07 12:52:50 -04:00
Adam Ierymenko 38058450ce Revise Windows build to VS2022. 2022-06-06 19:33:35 -04:00
Adam Ierymenko e672dc8094 Set version to correct 1.10.0. 2022-06-06 16:18:50 -04:00
Adam Ierymenko c6682f2a3f Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-06-03 16:12:40 -04:00
Adam Ierymenko 4508a6687e Version bump. 2022-06-03 15:42:06 -04:00
Joseph Henry a47c3cb16f Exclude temporary IPv6 check from SDK builds 2022-06-01 14:24:28 -07:00
Joseph Henry 9b42ced27f Tweak DSM7 docker build target 2022-05-31 12:48:52 -07:00
Joseph Henry 1a400d33fd Fix link creation bug in active-backup mode 2022-05-18 10:04:53 -07:00
Joseph Henry 96ee7252c2 Update README.md 2022-05-16 13:08:01 -07:00
Grant Limberg b0624d3fd1 Merge branch 'inja' into dev 2022-05-16 12:26:42 -07:00
Grant Limberg c329fab966 add isError to sso template variables 2022-05-16 09:25:36 -07:00
Sean OMeara 127c19fecd betterized rpm spec and ci scripts 2022-05-14 13:29:42 +02:00
Grant Limberg 4c22793850 Embed default template in service 2022-05-13 16:18:34 -07:00
Grant Limberg da74b9651c Wire up inja for html template processing 2022-05-13 15:55:48 -07:00
Grant Limberg ce23a8dd32 update bsd makefile 2022-05-13 11:51:01 -07:00
Grant Limberg 30d106766a Windows project changes for inja 2022-05-13 11:50:46 -07:00
Grant Limberg c4df88354b updates for macOS for inja support 2022-05-13 09:51:37 -07:00
Grant Limberg b65c1ed3a0 Add inja
Requries update to C++17 standard
2022-05-13 09:34:15 -07:00
Grant Limberg b329fb68a9 Cleanup rust-analyzer warnings 2022-05-12 21:04:16 -07:00
Grant Limberg da179d9930 Clean up error flow for sso
error messages can now propagate to the user's browser
2022-05-12 17:00:43 -07:00
Grant Limberg e7fee4c6ce code cleanup 2022-05-11 22:41:35 -07:00
Grant Limberg 4151749dc9 Handle sso token exchange errors in zerotier client 2022-05-11 19:59:58 -07:00
Grant Limberg aee9521c91 Add error handling for over sso seat limits 2022-05-11 19:43:29 -07:00
Adam Ierymenko 7e46c83592 1.8.10 2022-05-10 13:45:12 -04:00
Sean OMeara ba74abb753 pull latest sid builder 2022-05-10 18:31:09 +02:00
Grant Limberg 9ddc0327d4 enable redis member status again 2022-05-10 08:36:39 -07:00
Joseph Henry c34325fee7 Fix attribute placement for debugging functions (#1587) 2022-05-06 17:25:15 -07:00
Joseph Henry db8443ef7d Remove attributes causing build failures on various platforms (#1587) 2022-05-06 15:19:59 -07:00
Joseph Henry 6c85f8c7a7 Safely handle disappearing bonded interfaces (See issue #1587) 2022-05-06 14:59:34 -07:00
David Baird eea93d2607 Fix SEGV caused by format string on 32-bit platforms / armv7l, reported in #1587 (#1658)
Looks great. Thanks for this!
2022-05-06 09:11:47 -07:00
Joseph Henry e9f8ecbf7e Properly initialize active-backup path index as partial fix for #1587 2022-05-04 09:51:48 -07:00
Grant Limberg 48852e8cb4 add ZT_SSO_ENABLED=1 to preprocessor definition list in Visual Studio
fixes sso not working
2022-05-03 14:39:08 -07:00
Joseph Henry 55ec325961 Add localSocket to listpeers JSON output 2022-04-28 15:58:12 -07:00
Grant Limberg 59151fbf86 remove max count for xread 2022-04-28 13:10:07 -07:00
Grant Limberg 1c700b7b41 Fix redis cluster usage 2022-04-28 13:05:02 -07:00
Grant Limberg ff18bacd94 fix XREAD commands for redis message queue 2022-04-28 11:16:45 -07:00
Joseph Henry caf1de3bcf Allow TCP fallback when multipath is enabled 2022-04-28 11:12:04 -07:00
Joseph Henry a9ad2924ac Re-add user-configurable TCP fallback 2022-04-28 11:05:54 -07:00
Adam Ierymenko 7ea2354540 Merge branch 'master' of github.com:zerotier/ZeroTierOne 2022-04-27 17:10:19 -04:00
Adam Ierymenko 760bba67e7 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-04-27 14:12:10 -04:00
Adam Ierymenko 1fe3a4402d 1.8.9 Windows installer stuff 2022-04-27 14:11:48 -04:00
Adam Ierymenko 166c7978ee ALMOST compiles for ARM64 Windows, only remaining barrier is ring in zeroidc. 2022-04-27 12:19:42 -04:00
Joseph Henry 4f80e79886 Add QNAP build scripts 2022-04-26 15:04:19 -07:00
Adam Ierymenko b47a2c9ac5 Forgot to bump Debian version. 2022-04-26 17:38:57 -04:00
Joseph Henry 1a5274b86b Add Asustor build scripts 2022-04-26 08:33:48 -07:00
Joseph Henry 66236e91a2 Style fix 2022-04-26 08:26:45 -07:00
Joseph Henry 36475aebc7 Merge branch 'erikh-fix-cargo-root' 2022-04-25 20:39:22 -07:00
Joseph Henry acd1f24a3f Add Western Digital apkg build scripts 2022-04-25 17:47:58 -07:00
Joseph Henry a74532fa0b Move Snap and Synology packaging to new pkg dir 2022-04-25 17:47:15 -07:00
Erik Hollensbe 59d4aef7c2 Fix cargo home directory (was previously hard-coded to /root)
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-04-25 15:52:39 -07:00
Adam Ierymenko dfb291090d release notes 2022-04-25 17:09:14 -04:00
Grant Limberg dac32f863e fix deadlock on sso network leave 2022-04-25 14:00:04 -07:00
Adam Ierymenko f3b56d3d94 More simplification of Debian control 2022-04-25 15:21:29 -04:00
Adam Ierymenko eb95a427fa 1.8.9 version bump 2022-04-25 13:24:24 -04:00
Joseph Henry f16299b10b Add credit line to release notes 2022-04-21 09:50:18 -07:00
Adam Ierymenko 76bce44280 Build fix. 2022-04-19 21:30:36 -04:00
Adam Ierymenko ee0a194b25 Several more SSO/OIDC related fixes, and bump version to 1.8.9. 2022-04-19 21:29:11 -04:00
Adam Ierymenko ef08346a74 Fix a possible excessive memory use issue in controller and clean up a bunch of COM handling and other code in the normal node. 2022-04-19 19:59:54 -04:00
Adam Ierymenko fe0068da52 A bit more auth cleanup in the local node. 2022-04-19 16:34:46 -04:00
Adam Ierymenko cd70fefc5e Clean up some credential push stuff. 2022-04-19 16:06:53 -04:00
Adam Ierymenko 877f86a896 build fix 2022-04-19 12:44:18 -04:00
Adam Ierymenko 912036b260 Push credentials always if updated (client-side) and some controller-side cleanup that should be logically irrelevant but will prevent unnecessary DB lookups. 2022-04-19 12:41:38 -04:00
Adam Ierymenko a4e8847664 Restore sending of rejections but move it exclusively to a thread, widen netconf window to 30 minutes. 2022-04-19 10:37:58 -04:00
Adam Ierymenko c492bf7eea Forgot to send error on v0 auth expiry. 2022-04-18 16:36:09 -04:00
Adam Ierymenko cb086ff97f Simplify SSO logic. SSO should just normally expire when it expires. No full deauth needed. Deauth is for really giving someone the boot. 2022-04-18 16:32:05 -04:00
Joseph Henry 7e4da53c0b Check reference to failover path before use in active-backup scenario 2022-04-17 21:03:57 -07:00
Adam Ierymenko fe376f6a1e Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-04-15 14:23:40 -04:00
Adam Ierymenko 55a99f34d0 Tighten certificate window and deprecate sending of revocations for ordinary SSO timeouts. Revocations should only be for deliberate deauth to kick people off networks. Cert window should now stay within refresh window for SSO so normal cert expiration should handle it just fine. 2022-04-15 14:23:26 -04:00
Joseph Henry 99df637aae Improve relationship between QOS timers and bucket sizes 2022-04-15 09:55:00 -07:00
Adam Ierymenko d0c68096df Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-04-15 12:46:48 -04:00
Grant Limberg 1c464c2da1 fix potential cstring leaks 2022-04-15 09:16:02 -07:00
Adam Ierymenko 5b15da98b4 Start of 1.8.9 release notes. 2022-04-15 11:58:21 -04:00
Adam Ierymenko d5a95f9224 Add SSO enable def to macOS 2022-04-14 20:57:35 -04:00
Adam Ierymenko a7dcfa18a2 Oops forgot last part of that fix for MAC errors. 2022-04-14 20:13:57 -04:00
Adam Ierymenko 4389b9feff Likely fix for invalid MAC problem. 2022-04-14 20:10:20 -04:00
Adam Ierymenko cf03996bf2 clangd stuff 2022-04-14 12:00:36 -04:00
Adam Ierymenko e1a3bd3a92 ignore .nova 2022-04-14 11:50:47 -04:00
Adam Ierymenko 58119598ae comment out some new deauth code 2022-04-13 23:10:11 -04:00
Adam Ierymenko 42a2afaef9 This may improve controller behavior with SSO and mixed SSO, needs testing! 2022-04-13 21:39:56 -04:00
Grant Limberg c2cfb4d1dc remove stray #endif 2022-04-13 17:47:56 -07:00
Adam Ierymenko f0b0172434 Merge branch 'master' into dev 2022-04-13 19:55:22 -04:00
Adam Ierymenko 8217cadc08 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-04-13 19:55:08 -04:00
Grant Limberg 6ad047a8fc Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-04-13 13:54:03 -07:00
Grant Limberg 23ef742e08 Fix for #1626
Port used for PortMapping was not properly randomized causing multiple clients on the same lan to request the same UPnP port, and not all routers handle this gracefully.

Also fixes issue where the portmapper wasn't started at all if a secondary port wasn't specified, or if the tertiary port was manually specified.
2022-04-13 13:53:42 -07:00
Joseph Henry 1294767b44 Fix ZT_SSO_SUPPORTED flag behavior. Allow disabling for embedded targets. 2022-04-13 10:05:49 -07:00
Erik Hollensbe eca645fc52 Merge pull request #1625 from erikh/prettify-entrypoint-output
prettify the entrypoint log output
2022-04-13 00:17:07 -07:00
Erik Hollensbe 8598f34ebf prettify the entrypoint log output
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-04-13 00:09:46 -07:00
Erik Hollensbe cade483a00 Merge pull request #1624 from erikh/silence-entrypoint-errors
silence catting files that don't exist in docker entrypoint
2022-04-12 23:58:00 -07:00
Erik Hollensbe df46248a0c silence catting files that don't exist in docker entrypoint
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-04-12 23:56:16 -07:00
Joseph Henry 6cddb94509 Merge branch 'dev' of https://github.com/zerotier/zerotierone into dev 2022-04-12 17:46:13 -07:00
Joseph Henry 0e658828fb Add Synology Docker target to Linux makefile 2022-04-12 17:45:54 -07:00
Sean McAvoy de04240ca6 update alpine linux release to current supported (#1599) 2022-04-11 21:24:57 -07:00
fuowang 40681328ec Add loongarch64 support (#1614)
* add loongarch64 support
2022-04-11 20:33:40 -07:00
Joseph Henry 4dbdfb6972 Fix missing symlink and high CPU usage of route watchdog on Synology 2022-04-11 15:22:13 -07:00
Adam Ierymenko bd9c8d65ef Release notes for 1.8.8 2022-04-11 12:46:12 -04:00
Adam Ierymenko 24ec634005 Possible fix for Ubuntu versioning issue on libstdc++6 2022-04-11 12:28:14 -04:00
Adam Ierymenko ff0e6a53fc Release notes for 1.8.8 2022-04-11 12:16:32 -04:00
Adam Ierymenko ffb444dbeb 1.8.8 bump 2022-04-11 12:15:41 -04:00
Adam Ierymenko d6f32516d8 Merge branch 'master' of github.com:zerotier/ZeroTierOne into dev 2022-04-11 11:11:13 -04:00
Joseph Henry 29566bfe7d Add Synology target to Linux makefile 2022-04-10 22:50:53 -07:00
Erik Hollensbe 16d2b85c71 Merge pull request #1619 from altano/master
Add `zerotier-cli info` output to Docker logs
2022-04-08 22:09:32 -07:00
Alan Norbauer 193b357a0c Add zerotier-cli info output to Docker logs
When I first bring up the container, I want to know I'm approving the join request for the right node. I can get the node's ZT address by manually executing `zerotier-cli info` in the node (e.g. with `docker-compose exec zerotier zerotier-cli info`) but just having it in the logs to start with is very convenient.
2022-04-08 21:56:13 -07:00
Joseph Henry 8ee8870c27 Add Docker image and build script for DSM 7 2022-04-05 16:38:20 -07:00
Joseph Henry 3c59de7c00 Change directory structure for DSM packages 2022-04-05 15:27:35 -07:00
Joseph Henry e87bf87046 Remove unnecessary packages from Synology Dockerfile 2022-04-05 14:20:51 -07:00
Joseph Henry b4f7a9a4f4 Temporarily disable certain arch builds on Synology 2022-04-05 09:52:25 -07:00
Joseph Henry a360416655 Move Synology home-dir to /var/packages/zerotier/var 2022-04-05 09:51:35 -07:00
Joseph Henry 26dbebbba7 Add Synology packaging 2022-04-05 08:54:16 -07:00
Joseph Henry 04b77773c4 Remove Synology-specific IP add block 2022-03-31 22:01:50 -07:00
Joseph Henry 6f4a69703b Fix ZT_SSO_SUPPORTED flag behavior. Allow disabling for embedded targets. 2022-03-31 21:45:38 -07:00
Joseph Henry d67f59f5b5 Fix ARMv6 arch moniker 2022-03-31 09:43:06 -07:00
Joseph Henry 00d9abb612 Merge branch 'dev' of https://github.com/zerotier/zerotierone into dev 2022-03-31 09:40:45 -07:00
Adam Ierymenko c8920cff19 Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-03-30 15:51:33 -04:00
Adam Ierymenko 7293ba7d71 Merge branch 'master' into dev 2022-03-30 15:51:18 -04:00
Adam Ierymenko e73d7d9349 Merge branch 'master' of http://git.int.zerotier.com/zerotier/ZeroTierOne 2022-03-30 15:51:01 -04:00
Adam Ierymenko 0e3be9b837 1.8.7 2022-03-30 15:50:26 -04:00
Adam Ierymenko c600590aa6 Windows 1.8.7 installer config. 2022-03-29 19:36:56 -04:00
Adam Ierymenko 1343f15a07 Merge branch 'master' of http://git.int.zerotier.com/zerotier/ZeroTierOne 2022-03-29 14:28:12 -04:00
Grant Limberg 5fcaed086d another at->idt for exp 2022-03-29 11:09:50 -07:00
Grant Limberg 130689d82b remove extraneous debug log line 2022-03-29 11:09:14 -07:00
Grant Limberg 1efceb86fc get exp time out of correct token 2022-03-29 11:08:59 -07:00
Grant Limberg 1d92974447 auth0 compatibility 2022-03-29 11:07:44 -07:00
Grant Limberg de56f571c7 enable rfc3339 timestamps in oidc library for auth0 2022-03-29 11:07:30 -07:00
Grant Limberg 3670b8cefd another at->idt for exp 2022-03-29 10:33:27 -07:00
Grant Limberg 425f5201a2 remove extraneous debug log line 2022-03-29 10:03:34 -07:00
Grant Limberg df3b29e6ff get exp time out of correct token 2022-03-29 10:01:02 -07:00
Grant Limberg 96a49bf476 auth0 compatibility 2022-03-29 09:11:55 -07:00
Grant Limberg 2d975f275c enable rfc3339 timestamps in oidc library for auth0 2022-03-29 09:11:25 -07:00
Erik Hollensbe 76e30cf165 Merge pull request #1596 from erikh/docker-image-fixes
Fix dockerfile & entrypoint:
2022-03-24 10:53:52 -07:00
Erik Hollensbe da603208b4 Dockerfile: Reduce healthcheck interval to 1s (it's cheap)
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-03-23 18:17:21 -07:00
Erik Hollensbe 6dc7bdf72e Fix ^C issue
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-03-23 18:09:04 -07:00
Erik Hollensbe d52ebaa412 HEALTHCHECK operation
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-03-23 18:08:46 -07:00
Erik Hollensbe c30a1f60ea Join networks by touching a file
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-03-23 17:56:09 -07:00
Erik Hollensbe 2388c9f4e4 added additional informational messages to argument usage in zerotier docker image
Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-03-23 17:40:28 -07:00
Erik Hollensbe f41372680d Fix dockerfile & entrypoint:
- Resolve issue with join not being checked properly for success without
  using external tools
- Resolve issue where initial boot was not being checked properly
- Now output errors when zerotier fails to start

closes #1581

cc @altano for inspiration for this patch

Signed-off-by: Erik Hollensbe <git@hollensbe.org>
2022-03-23 17:40:28 -07:00
Adam Ierymenko 7efb1cf7d3 Bundle Edge WebView dependency EXE and statically link MSVC DLLs 2022-03-22 17:43:43 -04:00
Joseph Henry 0547fd3593 Merge branch 'master' of https://github.com/zerotier/zerotierone into dev 2022-03-21 19:51:53 -07:00
Adam Ierymenko 2800534445 1.8.7 2022-03-21 17:34:52 -04:00
Adam Ierymenko e464050a40 Merge branch 'master' of http://git.int.zerotier.com/zerotier/ZeroTierOne 2022-03-21 17:30:18 -04:00
Grant Limberg 73ec8cddd7 Show sso errors on the last step of the oidc process 2022-03-21 17:30:03 -04:00
Joseph Henry 1c171b5d99 Merge pull request #1589 from hcwhan/patch-1
Dockerfile version bump to 1.8.6
2022-03-15 09:52:55 -07:00
Joseph Henry 32f49b44b0 Modify snap to use pre-compiled static binaries 2022-03-15 09:44:46 -07:00
hcwhan e2d4571ade Dockerfile version bump to 1.8.6 2022-03-14 10:34:26 +08:00
Grant Limberg 3f19e7d73c Show sso errors on the last step of the oidc process 2022-03-10 13:08:35 -08:00
Adam Ierymenko 93076dde56 Fix merged OneService. 2022-03-10 15:57:15 -05:00
Adam Ierymenko 3e78785dea Merge OneService changes from master. 2022-03-10 15:50:01 -05:00
Adam Ierymenko 68c9398f71 Merge branch 'master' into dev 2022-03-10 15:48:47 -05:00
Adam Ierymenko 4b3a13797a Windows Advanced Installer stuff for 1.8.6 2022-03-10 15:45:33 -05:00
Joseph Henry 59b392af10 Merge pull request #1572 from zerotier/configurable-tcp-proxy
make TCP fallback relay address configurable
2022-03-07 09:17:43 -08:00
Grant Limberg ecde26c823 fix http return value from one service when nework list is empty 2022-03-04 12:35:11 -08:00
Adam Ierymenko 544a4de1e0 Merge branch 'master' into dev 2022-03-03 18:35:05 -05:00
Adam Ierymenko 297869163e Merge branch 'dev' of github.com:zerotier/ZeroTierOne into dev 2022-03-03 18:30:19 -05:00
Joseph Henry 3ead6b67cd Dynamically scale bonded link monitor frequency according to aliveness 2022-03-02 14:58:31 -08:00
Grant Limberg 3cbea6c898 make TCP fallback relay address configurable 2022-03-02 11:44:04 -08:00
Joseph Henry 8148c658cf Remove bonds for peers that have fully expired. Remove notion of bond health 2022-03-02 09:55:23 -08:00
Grant Limberg f8e24f4629 Fix issue where restarting a controller causes a DB write for each network member 2022-02-28 12:26:32 -08:00
Joseph Henry 1cf8a1f493 More accurate accounting of bond layer overhead traffic 2022-02-25 15:04:48 -08:00
Joseph Henry bc2c4cf80a Merge branch 'dev' of https://github.com/zerotier/zerotierone into dev 2022-02-25 11:39:21 -08:00
Joseph Henry 9933d83cf8 Merge pull request #1564 from zerotier/dev-whoami
Proactively seek, and distribute external surface addresses

This patch introduces a new "self-awareness" behavior which proactively queries peers for external surface addresses and distributes them via PUSH_DIRECT_PATHS. This has the effect of making ZT more responsive to interface changes.

Current behavior:

Previously, this type of information was only mediated via RENDEZVOUS and was only triggered when the client detected that it no longer had a single alive path to a peer. While PUSH_DIRECT_PATHS would correctly (and often) send local addresses, this was not the case for external addresses collected from response HELLOs. This would lead to situations where only one physical address would be distributed to peers. Additionally, if a new physical interface were to be made available to the client, the client would correctly bind to it but never seek information about its external mapping from a peer, and thus the new physical interface would remain unavailable for other peers to learn about until all paths on the previous interface have expired which can take a couple of minutes. In traditional usage of ZT this is not usually a problem, but it becomes a problem in the following scenarios:

    Network interfaces go up and down while ZT is running (e.g. switching to LTE or WiFi from a wired connection)
    Network interfaces are added or removed in multipath setups

Proposed behavior:

I propose that normal full HELLOs are sent not only on the first interface in use, but all interfaces. This causes planets to respond with a HELLO containing the surface address for each interface. We then collect each address using SelfAwareness::whoami() and distribute them via the normal PUSH_DIRECT_PATHS mechanism.
2022-02-25 11:30:45 -08:00
Joseph Henry 1918c29fd7 Change ECHO divisor from 20 to 6 2022-02-25 11:29:07 -08:00
Joseph Henry 84705aafc7 Merge pull request #1569 from zerotier/dev-echo-rate-gate
Rate gate ECHO per Path instead of per Peer

In multipath scenarios user traffic is used to judge the aliveness of a path. If the user traffic is too infrequent to establish aliveness for a given time window (say 500 ms), the bonding layer will send extra ECHOs at a maximum rate of failoverInterval / 3 (or ~ 166 ms) per path. This patch relaxes the rate-limiting of ECHOs significantly in order to prevent a non-multipath node from dropping ECHOs causing multipath nodes to erroneously judge paths to that node to be dead.
Details

This patch decreases the rate limiting from 1000 ms per peer by a factor of 6 to ~166 ms and rate limits ECHOs per Path instead of per Peer. This allows rate limiting to scale with the number of established paths to a peer.

As a result, if all 64 path slots are used a total of 64 x 6 = 384 ECHOs per second will be allowed in the most aggressive case where failoverInterval is set to 500 ms.
2022-02-25 11:23:42 -08:00
Joseph Henry 618202d426 Increase min failover to 500 ms and probe period to 1/3rd of failover 2022-02-25 10:52:39 -08:00
Joseph Henry d1335dca11 Change ECHO rate-limit divsor from 16 to 20 2022-02-21 16:22:33 -08:00
Joseph Henry 5e13b42abc Rate gate ECHO per Path instead of per Peer 2022-02-21 14:37:39 -08:00
Joseph Henry 96aa1c30a6 Proactively seek, enumerate, and distribute external surface addresses 2022-02-17 15:39:17 -08:00
13473 changed files with 3120924 additions and 1966 deletions

No files matched your search

+68
View File
@@ -0,0 +1,68 @@
local targets = [
//
// Render these into .drone.yaml by running "make drone"
//
{ "os": "linux", "name": "el9", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "el8", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "el7", "isas": [ "amd64", "ppc64le"], "events": [ "tag" ] },
{ "os": "linux", "name": "el6", "isas": [ "amd64" ], "events": [ "tag" ] },
{ "os": "linux", "name": "amzn2", "isas": [ "amd64", "arm64" ], "events": [ "tag" ] },
{ "os": "linux", "name": "fc37", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "fc36", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "fc35", "isas": [ "amd64", "arm64", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "jammy", "isas": [ "amd64", "arm64", "armv7", "riscv64", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "focal", "isas": [ "amd64", "arm64", "armv7", "riscv64", "ppc64le" ], "events": [ "tag" ] },
{ "os": "linux", "name": "bionic", "isas": [ "amd64", "arm64", "386", "ppc64le", "s390x" ], "events": ["tag" ] },
{ "os": "linux", "name": "xenial", "isas": [ "amd64", "arm64", "386" ], "events": [ "tag" ] },
{ "os": "linux", "name": "sid", "isas": [ "386", "amd64", "arm64", "armv7", "riscv64", "mips64le", "ppc64le", "s390x" ], "events": [ "push", "tag" ] },
{ "os": "linux", "name": "bookworm", "isas": [ "amd64", "arm64", "armv7", "386", "mips64le", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "bullseye", "isas": [ "amd64", "arm64", "armv7", "386", "mips64le", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "buster", "isas": [ "amd64", "arm64", "armv7", "386", "mips64le", "ppc64le", "s390x" ], "events": [ "tag" ] },
{ "os": "linux", "name": "stretch", "isas": [ "amd64", "arm64", "386" ], "events": [ "tag" ] },
// { "os": "windows", "name": "win2k19", "isas": [ "amd64" ], "events": ["push", "tag" ] }
];
local Build(platform, os, isa, events) = {
"kind": "pipeline",
"type": "docker",
"pull": "always",
"name": platform + " " + isa + " " + "build",
"clone": { "depth": 1 },
"steps": [
{
"name": "build",
"image": "registry.sean.farm/honda-builder",
"commands": [ "./ci/scripts/build.sh " + platform + " " + isa + " " + "100.0.0+${DRONE_COMMIT_SHA:0:8}" + " " + "${DRONE_BUILD_EVENT}" ]
},
{
"name": "list",
"image": "registry.sean.farm/honda-builder",
"commands": [ "ls -la " + platform ]
},
{
"name": "notify-mattermost",
"image": "registry.sean.farm/mattermost-notify",
"environment": {
"token": { "from_secret": "mattermost-token" },
"host": { "from_secret": "mattermost-host" },
"channel": { "from_secret": "mattermost-channel" },
"maxRetry": 3,
},
"when": { "status": [ "failure" ] }
}
],
"image_pull_secrets": [ "dockerconfigjson" ],
[ if isa == "arm64" || isa == "armv7" then "platform" ]: { os: os, arch: "arm64" },
"trigger": { "event": events }
};
// puttin on the bits
std.flattenArrays([
[
Build(p.name, p.os, isa, p.events)
for isa in p.isas
]
for p in targets
])
+2616 -228
View File
File diff suppressed because it is too large. Load diff
+5 -5
View File
@@ -6,6 +6,11 @@
/zerotier
/nltest
# IDE stuff
/.idea
/.nova
/compile_commands.json
# OS-created garbage files from various platforms
.DS_Store
.Apple*
@@ -30,7 +35,6 @@ Thumbs.db
/windows/WebUIWrapper/obj
/windows/lib
/ext/installfiles/windows/ZeroTier One-SetupFiles
/ext/installfiles/windows/Prerequisites
/ext/installfiles/windows/*-cache
/ZeroTier One.msi
*.vcxproj.backup
@@ -58,7 +62,6 @@ zt1-src.tar.gz
*.opensdf
*.user
*.cache
*.obj
*.tlog
*.pid
*.pkg
@@ -103,7 +106,6 @@ windows/ZeroTierOne/Debug/
*.swp
*~.nib
DerivedData/
build/
*.pbxuser
*.mode1v3
*.mode2v3
@@ -114,7 +116,6 @@ build/
!default.perspectivev3
*.xccheckout
xcuserdata/
ext/librethinkdbxx/build
.vscode
__pycache__
*~
@@ -123,7 +124,6 @@ attic/world/mkworld
workspace/
workspace2/
zeroidc/target/
tmp/
#snapcraft specifics
/parts/
+4
View File
@@ -11,6 +11,8 @@ RUN curl -sSL -o zerotier-one.deb "${PACKAGE_BASEURL}/zerotier-one_${VERSION}_${
FROM debian:buster
RUN apt-get update -qq && apt-get install openssl libssl1.1 -y
COPY --from=stage zerotier-one.deb .
RUN dpkg -i zerotier-one.deb && rm -f zerotier-one.deb
@@ -20,5 +22,7 @@ RUN rm -rf /var/lib/zerotier-one
COPY entrypoint.sh.release /entrypoint.sh
RUN chmod 755 /entrypoint.sh
HEALTHCHECK --interval=1s CMD bash /healthcheck.sh
CMD []
ENTRYPOINT ["/entrypoint.sh"]
+4
View File
@@ -26,3 +26,7 @@ endif
ifeq ($(OSTYPE),NetBSD)
include make-netbsd.mk
endif
drone:
@echo "rendering .drone.yaml from .drone.jsonnet"
drone jsonnet --format --stream
+11 -5
View File
@@ -1,6 +1,7 @@
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)
*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 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.
@@ -42,24 +43,29 @@ The base path contains the ZeroTier One service main entry point (`one.cpp`), se
- `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.)
### 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 OSX 10.8 or newer are required.
- 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++ 4.9.3 or CLANG/CLANG++ 3.4.2. (Install `clang` on CentOS 7 as G++ is too old.)
- 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**
- Windows 7 or newer is supported. This *may* work on Vista but isn't officially supported there. It will not work on Windows XP.
- We build with Visual Studio 2017. Older versions may not work. Clang or MinGW will also probably work but may require some makefile hacking.
- 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.
- 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.
@@ -82,7 +88,7 @@ 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 for Windows 7. The base 'shared app data' folder might be different on different Windows versions.)
* **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
+40
View File
@@ -1,6 +1,46 @@
ZeroTier Release Notes
======
# 2022-06-27 -- Version 1.10.1
* Fix an issue that could cause SSO clients to get "stuck" on stale auth URLs.
* A few other SSO related bug fixes.
# 2022-06-07 -- Version 1.10.0
* Fix formatting problem in `zerotier-cli` when using SSO networks.
* Fix a few other minor bugs in SSO signin to prepare for general availability.
* Remove requirement for webview in desktop UI and instead just make everything available via the tray pulldown/menu. Use [libui-ng](https://github.com/libui-ng/libui-ng) for minor prompt dialogs. Saves space and eliminates installation headaches on Windows.
* Fix SSO "spam" bug in desktop UI.
* Use system default browser for SSO login so all your plugins, MFA devices, password managers, etc. will work as you have them configured.
* Minor fix for bonding/multipath.
# 2022-05-10 -- Version 1.8.10
* Fixed a bug preventing SSO sign-on on Windows.
# 2022-04-25 -- Version 1.8.9
* Fixed a long-standing and strange bug that was causing sporadic "phantom" packet authentication failures. Not a security problem but could be behind spordaic reports of link failures under some conditions.
* Fized a memory leak in SSO/OIDC support.
* Fixed SSO/OIDC display error on CLI.
* Fixed a bug causing nodes to sometimes fail to push certs to each other (primarily affects SSO/OIDC use cases).
* Fixed a deadlock bug on leaving SSO/OIDC managed networks.
* Added some new Linux distributions to the build subsystem.
# 2022-04-11 -- Version 1.8.8
* Fix a local privilege escalation bug in the Windows installer.
* Dependency fix for some Ubuntu versions.
* No changes for other platforms. Windows upgrade recommended, everyone else optional.
# 2022-03-30 -- Version 1.8.7
* Fix for dependency installations in Windows MSI package.
* Fix for desktop UI setup when run by a non-super-user.
* Bug fix in local OIDC / SSO support for auth0 and other providers.
* Other minor fixes for e.g. old Linux distributions.
# 2022-03-04 -- Version 1.8.6
* Fixed an issue that could cause the UI to be non-responsive if not joined to any networks.
+10
View File
@@ -0,0 +1,10 @@
ARG PLATFORM
FROM registry.sean.farm/${PLATFORM}-builder as stage
WORKDIR /work/build
COPY . .
RUN make debian
RUN ls -ls /work
FROM scratch AS export
ARG PLATFORM
COPY --from=stage /work/*.deb ./${PLATFORM}/
+36
View File
@@ -0,0 +1,36 @@
ARG DOCKER_ARCH
FROM --platform=linux/${DOCKER_ARCH} alpine:edge AS builder
RUN apk update
RUN apk add curl
RUN apk add bash
RUN apk add file
RUN apk add rust
RUN apk add cargo
RUN apk add make
RUN apk add cmake
RUN apk add clang
RUN apk add openssl-dev
RUN apk add linux-headers
RUN apk add build-base
RUN apk add openssl-libs-static
COPY . .
RUN ZT_STATIC=1 make one
RUN ls -la
ARG DOCKER_ARCH
FROM --platform=linux/${DOCKER_ARCH} centos:6 AS stage
WORKDIR /root/rpmbuild/BUILD
COPY . .
COPY --from=builder zerotier-one ./
RUN curl https://gist.githubusercontent.com/someara/b363002ba6e57b3c474dd027d4daef85/raw/4ac5534139752fc92fbe1a53599a390214f69615/el6%2520vault --output /etc/yum.repos.d/CentOS-Base.repo
RUN uname -a
RUN yum -y install make gcc rpm-build
RUN pwd
RUN ls -la
RUN make redhat
FROM scratch AS export
ARG PLATFORM
COPY --from=stage /root/rpmbuild/RPMS/*/*.rpm ./${PLATFORM}/
+9
View File
@@ -0,0 +1,9 @@
ARG PLATFORM
FROM registry.sean.farm/${PLATFORM}-builder as stage
WORKDIR /root/rpmbuild/BUILD
COPY . .
RUN make redhat
FROM scratch AS export
ARG PLATFORM
COPY --from=stage /root/rpmbuild/RPMS/*/*.rpm ./${PLATFORM}/
-7
View File
@@ -1,7 +0,0 @@
FROM registry.sean.farm/sid-builder as stage
COPY . .
RUN /usr/bin/make -j 8
FROM scratch AS export
COPY --from=stage /zerotier-one .
COPY --from=stage /zerotier-cli .
+104 -16
View File
@@ -2,27 +2,115 @@
set -euo pipefail
IFS=$'\n\t'
export GOOS=$1
export GOARCH=$2
export PLATFORM=$1
export ZT_ISA=$2
export VERSION=$3
export DOCKER_BUILDKIT=1
export EVENT=$4
echo "nproc: $(nproc)"
case $GOARCH in
armv5)
export ARCH=arm/v5
;;
armv7)
export ARCH=arm/v7
;;
arm64)
export ARCH=arm64/v8
case $PLATFORM in
el*|fc*|amzn*)
export PKGFMT=rpm
;;
*)
export ARCH=$GOARCH
export PKGFMT=deb
esac
# OSX
# x86_64-apple-darwin
# aarch64-apple-darwin
# Windows
# x86_64-pc-windows-msvc
# i686-pc-windows-msvc
# aarch64-pc-windows-msvc
# Linux
# i686-unknown-linux-gnu
# x86_64-unknown-linux-gnu
# arm-unknown-linux-gnueabi ?
# arm-unknown-linux-gnueabihf ?
# armv7-unknown-linux-gnueabihf
#
case $ZT_ISA in
386)
export DOCKER_ARCH=386
export RUST_TRIPLET=i686-unknown-linux-gnu
;;
amd64)
export DOCKER_ARCH=amd64
export RUST_TRIPLET=x86_64-unknown-linux-gnu
;;
armv6)
export DOCKER_ARCH=arm/v6
export RUST_TRIPLET=arm-unknown-linux-gnueabi
;;
armv7)
export DOCKER_ARCH=arm/v7
export RUST_TRIPLET=arm-unknown-linux-gnueabihf
;;
arm64)
export DOCKER_ARCH=arm64/v8
export RUST_TRIPLET=aarch64-unknown-linux-gnu
;;
riscv64)
export DOCKER_ARCH=riscv64
export RUST_TRIPLET=riscv64gc-unknown-linux-gnu
;;
ppc64le)
export DOCKER_ARCH=ppc64le
export RUST_TRIPLET=powerpc64le-unknown-linux-gnu
;;
mips64le)
export DOCKER_ARCH=mips64le
export RUST_TRIPLET=mips64el-unknown-linux-gnuabi64
;;
s390x)
export DOCKER_ARCH=s390x
export RUST_TRIPLET=s390x-unknown-linux-gnu
;;
*)
echo "ERROR: could not determine architecture settings. PLEASE FIX ME"
exit 1
;;
esac
if [ -f "ci/Dockerfile.${PLATFORM}" ]; then
export DOCKERFILE="ci/Dockerfile.${PLATFORM}"
else
export DOCKERFILE="ci/Dockerfile.${PKGFMT}"
fi
echo "#~~~~~~~~~~~~~~~~~~~~"
echo "$0 variables:"
echo "nproc: $(nproc)"
echo "ZT_ISA: ${ZT_ISA}"
echo "DOCKER_ARCH: ${DOCKER_ARCH}"
echo "RUST_TRIPLET: ${RUST_TRIPLET}"
echo "VERSION: ${VERSION}"
echo "EVENT: ${EVENT}"
echo "PKGFMT: ${PKGFMT}"
echo "PWD: ${PWD}"
echo "DOCKERFILE: ${DOCKERFILE}"
echo "#~~~~~~~~~~~~~~~~~~~~"
if [ ${EVENT} == "push" ]; then
make munge_rpm zerotier-one.spec VERSION=${VERSION}
make munge_deb debian/changelog VERSION=${VERSION}
fi
export DOCKER_BUILDKIT=1
docker run --privileged --rm tonistiigi/binfmt --install all
docker buildx build --platform ${GOOS}/${ARCH} -f ci/Dockerfile.sid --target export -t test . --output out/${GOOS}/${GOARCH}
# docker pull --platform linux/${DOCKER_ARCH} registry.sean.farm/${PLATFORM}-builder
docker buildx build \
--build-arg PLATFORM="${PLATFORM}" \
--build-arg RUST_TRIPLET="${RUST_TRIPLET}" \
--build-arg DOCKER_ARCH="${DOCKER_ARCH}" \
--platform linux/${DOCKER_ARCH} \
-f ${DOCKERFILE} \
-t build \
. \
--output type=local,dest=. \
--target export
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
export FILE=$1
export VERSION=$2
export NAME=$3
export MESSAGE=$4
export DATE=$(date "+%a, %d %b %Y %T %z")
# export DATE=$(date "+%a %b %d %Y")
set +e
grep --version | grep BSD &> /dev/null
if [ $? == 0 ]; then BSDGREP=true ; else BSDGREP=false ; fi
set -e
# echo "#~~~~~~~~~~~~~~~~~~~~"
# echo "$0 variables:"
# echo "VERSION: ${VERSION}"
# echo "NAME: ${NAME}"
# echo "MESSAGE: ${MESSAGE}"
# echo "DATE: ${DATE}"
# echo "BSDGREP: ${BSDGREP}"
# echo "#~~~~~~~~~~~~~~~~~~~~"
# echo
if $BSDGREP ; then
sed -i '' s/^Version:.*/"Version: ${VERSION}"/ ${FILE}
else
sed -i s/^Version:.*/"Version: ${VERSION}"/ ${FILE}
fi
awk -v version=${VERSION} -v date=${DATE} -v name=${NAME} -v message=${MESSAGE} \
'BEGIN{print "zerotier-one (" version ") unstable; urgency=medium\n\n * " message "\n\n -- " name " " date "\n" }{ print }' \
${FILE} > ${FILE}.new
mv ${FILE}.new ${FILE}
+36
View File
@@ -0,0 +1,36 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
export FILE=$1
export VERSION=$2
export NAME=$3
export MESSAGE=$4
export DATE=$(date "+%a %b %d %Y")
set +e
grep --version | grep BSD &> /dev/null
if [ $? == 0 ]; then BSDGREP=true ; else BSDGREP=false ; fi
set -e
# echo "#~~~~~~~~~~~~~~~~~~~~"
# echo "$0 variables:"
# echo "VERSION: ${VERSION}"
# echo "NAME: ${NAME}"
# echo "MESSAGE: ${MESSAGE}"
# echo "DATE: ${DATE}"
# echo "BSDGREP: ${BSDGREP}"
# echo "#~~~~~~~~~~~~~~~~~~~~"
# echo
if $BSDGREP ; then
sed -i '' s/^Version:.*/"Version: ${VERSION}"/ ${FILE}
else
sed -i s/^Version:.*/"Version: ${VERSION}"/ ${FILE}
fi
awk -v version=${VERSION} -v date=${DATE} -v name=${NAME} -v message=${MESSAGE} \
'FNR==NR{ if (/%changelog/) p=NR; next} 1; FNR==p{ print "* " date " " name " - " version "\n- " message "\n" }' \
${FILE} ${FILE} > ${FILE}.new
mv ${FILE}.new ${FILE}
-8
View File
@@ -196,14 +196,6 @@ void DB::networks(std::set<uint64_t> &networks)
networks.insert(n->first);
}
void DB::networkMemberSSOHasExpired(uint64_t nwid, int64_t now) {
std::lock_guard<std::mutex> l(_networks_l);
auto nw = _networks.find(nwid);
if (nw != _networks.end()) {
nw->second->mostRecentDeauthTime = now;
}
}
void DB::_memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool notifyListeners)
{
uint64_t memberId = 0;
+1 -2
View File
@@ -33,7 +33,7 @@
#include <set>
#include <map>
#include "../ext/json/json.hpp"
#include <nlohmann/json.hpp>
#define ZT_MEMBER_AUTH_TIMEOUT_NOTIFY_BEFORE 25000
@@ -135,7 +135,6 @@ public:
virtual void nodeIsOnline(const uint64_t networkId,const uint64_t memberId,const InetAddress &physicalAddress) = 0;
virtual AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL) { return AuthInfo(); }
virtual void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts);
inline void addListener(DB::ChangeListener *const listener)
{
-51
View File
@@ -137,14 +137,6 @@ AuthInfo DBMirrorSet::getSSOAuthInfo(const nlohmann::json &member, const std::st
return AuthInfo();
}
void DBMirrorSet::networkMemberSSOHasExpired(uint64_t nwid, int64_t ts)
{
std::lock_guard<std::mutex> l(_dbs_l);
for(auto d=_dbs.begin();d!=_dbs.end();++d) {
(*d)->networkMemberSSOHasExpired(nwid, ts);
}
}
void DBMirrorSet::networks(std::set<uint64_t> &networks)
{
std::lock_guard<std::mutex> l(_dbs_l);
@@ -248,47 +240,4 @@ void DBMirrorSet::onNetworkMemberDeauthorize(const void *db,uint64_t networkId,u
_listener->onNetworkMemberDeauthorize(this,networkId,memberId);
}
void DBMirrorSet::membersExpiring(std::set< std::pair<uint64_t, uint64_t> > &soon, std::set< std::pair<uint64_t, uint64_t> > &expired)
{
std::unique_lock<std::mutex> l(_membersExpiringSoon_l);
int64_t now = OSUtils::now();
for(auto next=_membersExpiringSoon.begin();next!=_membersExpiringSoon.end();) {
if (next->first > now) {
const uint64_t nwid = next->second.first;
const uint64_t memberId = next->second.second;
nlohmann::json network, member;
if (this->get(nwid, network, memberId, member)) {
try {
const bool authorized = member["authorized"];
const bool ssoExempt = member["ssoExempt"];
const int64_t authenticationExpiryTime = member["authenticationExpiryTime"];
if ((authenticationExpiryTime == next->first)&&(authorized)&&(!ssoExempt)) {
if ((authenticationExpiryTime - now) > ZT_MEMBER_AUTH_TIMEOUT_NOTIFY_BEFORE) {
// Stop when we get to entries too far in the future.
break;
} else {
const bool ssoEnabled = network["ssoEnabled"];
if (ssoEnabled)
soon.insert(std::pair<uint64_t, uint64_t>(nwid, memberId));
}
} else {
// Obsolete entry, no longer authorized, or SSO exempt.
}
} catch ( ... ) {
// Invalid member object, erase.
}
} else {
// Not found.
}
}
_membersExpiringSoon.erase(next++);
}
}
void DBMirrorSet::memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId)
{
std::unique_lock<std::mutex> l(_membersExpiringSoon_l);
_membersExpiringSoon.insert(std::pair< int64_t, std::pair< uint64_t, uint64_t > >(expTime, std::pair< uint64_t, uint64_t >(nwid, memberId)));
}
} // namespace ZeroTier
-6
View File
@@ -52,7 +52,6 @@ public:
virtual void onNetworkMemberDeauthorize(const void *db,uint64_t networkId,uint64_t memberId);
AuthInfo getSSOAuthInfo(const nlohmann::json &member, const std::string &redirectURL);
void networkMemberSSOHasExpired(uint64_t nwid, int64_t ts);
inline void addDB(const std::shared_ptr<DB> &db)
{
@@ -61,17 +60,12 @@ public:
_dbs.push_back(db);
}
void membersExpiring(std::set< std::pair<uint64_t, uint64_t> > &soon, std::set< std::pair<uint64_t, uint64_t> > &expired);
void memberWillExpire(int64_t expTime, uint64_t nwid, uint64_t memberId);
private:
DB::ChangeListener *const _listener;
std::atomic_bool _running;
std::thread _syncCheckerThread;
std::vector< std::shared_ptr< DB > > _dbs;
mutable std::mutex _dbs_l;
std::set< std::pair< int64_t, std::pair<uint64_t, uint64_t> > > _membersExpiringSoon;
mutable std::mutex _membersExpiringSoon_l;
};
} // namespace ZeroTier
+53 -77
View File
@@ -1262,6 +1262,7 @@ void EmbeddedNetworkController::_request(
}
const bool newMember = ((!member.is_object())||(member.empty()));
DB::initMember(member);
_MemberStatusKey msk(nwid,identity.address().toInt());
{
const std::string haveIdStr(OSUtils::jsonString(member["identity"],""));
@@ -1335,43 +1336,21 @@ void EmbeddedNetworkController::_request(
// Should we check SSO Stuff?
// If network is configured with SSO, and the member is not marked exempt: yes
// Otherwise no, we use standard auth logic.
AuthInfo info;
int64_t authenticationExpiryTime = -1;
bool networkSSOEnabled = OSUtils::jsonBool(network["ssoEnabled"], false);
bool memberSSOExempt = OSUtils::jsonBool(member["ssoExempt"], false);
AuthInfo info;
if (networkSSOEnabled && !memberSSOExempt) {
// TODO: Get expiry time if auth is still valid
// else get new auth info & stuff
authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0);
info = _db.getSSOAuthInfo(member, _ssoRedirectURL);
assert(info.enabled == networkSSOEnabled);
std::string memberId = member["id"];
//fprintf(stderr, "ssoEnabled && !ssoExempt %s-%s\n", nwids, memberId.c_str());
uint64_t authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0);
fprintf(stderr, "authExpiryTime: %lld\n", authenticationExpiryTime);
if (authenticationExpiryTime < now) {
fprintf(stderr, "Handling expired member\n");
if (authenticationExpiryTime <= now) {
if (info.version == 0) {
if (!info.authenticationURL.empty()) {
_db.networkMemberSSOHasExpired(nwid, now);
onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt());
Dictionary<4096> authInfo;
authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, (uint64_t)0ULL);
authInfo.add(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, info.authenticationURL.c_str());
//fprintf(stderr, "sending auth URL: %s\n", authenticationURL.c_str());
DB::cleanMember(member);
_db.save(member,true);
_sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes());
return;
}
}
else if (info.version == 1) {
_db.networkMemberSSOHasExpired(nwid, now);
onNetworkMemberDeauthorize(&_db, nwid, identity.address().toInt());
Dictionary<4096> authInfo;
authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, (uint64_t)0ULL);
authInfo.add(ZT_AUTHINFO_DICT_KEY_AUTHENTICATION_URL, info.authenticationURL.c_str());
_sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes());
} else if (info.version == 1) {
Dictionary<8192> authInfo;
authInfo.add(ZT_AUTHINFO_DICT_KEY_VERSION, info.version);
authInfo.add(ZT_AUTHINFO_DICT_KEY_ISSUER_URL, info.issuerURL.c_str());
@@ -1379,20 +1358,11 @@ void EmbeddedNetworkController::_request(
authInfo.add(ZT_AUTHINFO_DICT_KEY_NONCE, info.ssoNonce.c_str());
authInfo.add(ZT_AUTHINFO_DICT_KEY_STATE, info.ssoState.c_str());
authInfo.add(ZT_AUTHINFO_DICT_KEY_CLIENT_ID, info.ssoClientID.c_str());
DB::cleanMember(member);
_db.save(member, true);
fprintf(stderr, "Sending NC_ERROR_AUTHENTICATION_REQUIRED\n");
_sender->ncSendError(nwid,requestPacketId,identity.address(),NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED, authInfo.data(), authInfo.sizeBytes());
return;
}
else {
fprintf(stderr, "invalid sso info.version %llu\n", info.version);
}
} else if (authorized) {
fprintf(stderr, "Setting member will expire to: %lld\n", authenticationExpiryTime);
_db.memberWillExpire(authenticationExpiryTime, nwid, identity.address().toInt());
DB::cleanMember(member);
_db.save(member,true);
return;
}
}
@@ -1411,8 +1381,8 @@ void EmbeddedNetworkController::_request(
{
std::lock_guard<std::mutex> l(_memberStatus_l);
_MemberStatus &ms = _memberStatus[_MemberStatusKey(nwid,identity.address().toInt())];
_MemberStatus &ms = _memberStatus[msk];
ms.authenticationExpiryTime = authenticationExpiryTime;
ms.vMajor = (int)vMajor;
ms.vMinor = (int)vMinor;
ms.vRev = (int)vRev;
@@ -1420,9 +1390,13 @@ void EmbeddedNetworkController::_request(
ms.lastRequestMetaData = metaData;
ms.identity = identity;
}
}
if (authenticationExpiryTime > 0) {
std::lock_guard<std::mutex> l(_expiringSoon_l);
_expiringSoon.insert(std::pair<int64_t, _MemberStatusKey>(authenticationExpiryTime, msk));
}
}
} else {
// If they are not authorized, STOP!
DB::cleanMember(member);
_db.save(member,true);
@@ -1434,18 +1408,13 @@ void EmbeddedNetworkController::_request(
// If we made it this far, they are authorized (and authenticated).
// -------------------------------------------------------------------------
int64_t credentialtmd = ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MAX_MAX_DELTA;
if (now > ns.mostRecentDeauthTime) {
// If we recently de-authorized a member, shrink credential TTL/max delta to
// be below the threshold required to exclude it. Cap this to a min/max to
// prevent jitter or absurdly large values.
const uint64_t deauthWindow = now - ns.mostRecentDeauthTime;
if (deauthWindow < ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MIN_MAX_DELTA) {
credentialtmd = ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MIN_MAX_DELTA;
} else if (deauthWindow < (ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MAX_MAX_DELTA + 5000ULL)) {
credentialtmd = deauthWindow - 5000ULL;
}
// Default timeout: 15 minutes. Maximum: two hours. Can be specified by an optional field in the network config
// if something longer than 15 minutes is desired. Minimum is 5 minutes since shorter than that would be flaky.
int64_t credentialtmd = ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_DFL_MAX_DELTA;
if (network.contains("certificateTimeoutWindowSize")) {
credentialtmd = (int64_t)network["certificateTimeoutWindowSize"];
}
credentialtmd = std::max(std::min(credentialtmd, ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MAX_MAX_DELTA), ZT_NETWORKCONFIG_DEFAULT_CREDENTIAL_TIME_MIN_MAX_DELTA);
std::unique_ptr<NetworkConfig> nc(new NetworkConfig());
@@ -1460,7 +1429,7 @@ void EmbeddedNetworkController::_request(
nc->mtu = std::max(std::min((unsigned int)OSUtils::jsonInt(network["mtu"],ZT_DEFAULT_MTU),(unsigned int)ZT_MAX_MTU),(unsigned int)ZT_MIN_MTU);
nc->multicastLimit = (unsigned int)OSUtils::jsonInt(network["multicastLimit"],32ULL);
nc->ssoEnabled = OSUtils::jsonBool(network["ssoEnabled"], false);
nc->ssoEnabled = networkSSOEnabled; //OSUtils::jsonBool(network["ssoEnabled"], false);
nc->ssoVersion = info.version;
if (info.version == 0) {
@@ -1478,7 +1447,9 @@ void EmbeddedNetworkController::_request(
Utils::scopy(nc->centralAuthURL, sizeof(nc->centralAuthURL), info.centralAuthURL.c_str());
}
if (!info.issuerURL.empty()) {
#ifdef ZT_DEBUG
fprintf(stderr, "copying issuerURL to nc: %s\n", info.issuerURL.c_str());
#endif
Utils::scopy(nc->issuerURL, sizeof(nc->issuerURL), info.issuerURL.c_str());
}
if (!info.ssoNonce.empty()) {
@@ -1858,6 +1829,8 @@ void EmbeddedNetworkController::_startThreads()
const long hwc = std::max((long)std::thread::hardware_concurrency(),(long)1);
for(long t=0;t<hwc;++t) {
_threads.emplace_back([this]() {
std::vector<_MemberStatusKey> expired;
nlohmann::json network, member;
for(;;) {
_RQEntry *qe = (_RQEntry *)0;
auto timedWaitResult = _queue.get(qe, 1000);
@@ -1876,28 +1849,31 @@ void EmbeddedNetworkController::_startThreads()
}
}
std::set< std::pair<uint64_t, uint64_t> > soon;
std::set< std::pair<uint64_t, uint64_t> > expired;
_db.membersExpiring(soon, expired);
for(auto s=soon.begin();s!=soon.end();++s) {
Identity identity;
Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> lastMetaData;
{
std::unique_lock<std::mutex> ll(_memberStatus_l);
auto ms = _memberStatus.find(_MemberStatusKey(s->first, s->second));
if (ms != _memberStatus.end()) {
lastMetaData = ms->second.lastRequestMetaData;
identity = ms->second.identity;
expired.clear();
int64_t now = OSUtils::now();
{
std::lock_guard<std::mutex> l(_expiringSoon_l);
for(auto s=_expiringSoon.begin();s!=_expiringSoon.end();) {
const int64_t when = s->first;
if (when <= now) {
// The user may have re-authorized, so we must actually look it up and check.
network.clear();
member.clear();
if (_db.get(s->second.networkId, network, s->second.nodeId, member)) {
int64_t authenticationExpiryTime = (int64_t)OSUtils::jsonInt(member["authenticationExpiryTime"], 0);
if (authenticationExpiryTime <= now) {
expired.push_back(s->second);
}
}
_expiringSoon.erase(s++);
} else {
// Don't bother going further into the future than necessary.
break;
}
}
if (identity) {
request(s->first,InetAddress(),0,identity,lastMetaData);
}
}
for(auto e=expired.begin();e!=expired.end();++e) {
onNetworkMemberDeauthorize(nullptr, e->first, e->second);
onNetworkMemberDeauthorize(nullptr, e->networkId, e->nodeId);
}
}
});
+9 -3
View File
@@ -35,7 +35,7 @@
#include "../osdep/Thread.hpp"
#include "../osdep/BlockingQueue.hpp"
#include "../ext/json/json.hpp"
#include <nlohmann/json.hpp>
#include "DB.hpp"
#include "DBMirrorSet.hpp"
@@ -109,6 +109,7 @@ private:
RQENTRY_TYPE_REQUEST = 0
} type;
};
struct _MemberStatusKey
{
_MemberStatusKey() : networkId(0),nodeId(0) {}
@@ -116,11 +117,13 @@ private:
uint64_t networkId;
uint64_t nodeId;
inline bool operator==(const _MemberStatusKey &k) const { return ((k.networkId == networkId)&&(k.nodeId == nodeId)); }
inline bool operator<(const _MemberStatusKey &k) const { return (k.networkId < networkId) || ((k.networkId == networkId)&&(k.nodeId < nodeId)); }
};
struct _MemberStatus
{
_MemberStatus() : lastRequestTime(0),vMajor(-1),vMinor(-1),vRev(-1),vProto(-1) {}
uint64_t lastRequestTime;
_MemberStatus() : lastRequestTime(0),authenticationExpiryTime(-1),vMajor(-1),vMinor(-1),vRev(-1),vProto(-1) {}
int64_t lastRequestTime;
int64_t authenticationExpiryTime;
int vMajor,vMinor,vRev,vProto;
Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> lastRequestMetaData;
Identity identity;
@@ -152,6 +155,9 @@ private:
std::unordered_map< _MemberStatusKey,_MemberStatus,_MemberStatusHash > _memberStatus;
std::mutex _memberStatus_l;
std::set< std::pair<int64_t, _MemberStatusKey> > _expiringSoon;
std::mutex _expiringSoon_l;
RedisConfig *_rc;
std::string _ssoRedirectURL;
};
Loaded 20 of 13473 files, more files were not shown because too many files have changed in this diff. Show more