Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nebula for openSUSE:Factory checked in at 2024-12-08 11:37:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nebula (Old) and /work/SRC/openSUSE:Factory/.nebula.new.21547 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nebula" Sun Dec 8 11:37:28 2024 rev:7 rq:1228828 version:1.9.5 Changes: -------- --- /work/SRC/openSUSE:Factory/nebula/nebula.changes 2024-09-10 21:15:50.640563625 +0200 +++ /work/SRC/openSUSE:Factory/.nebula.new.21547/nebula.changes 2024-12-08 11:38:35.725273208 +0100 @@ -1,0 +2,7 @@ +Fri Dec 6 17:28:15 UTC 2024 - Richard Rahl <[email protected]> + +- update to 1.9.5: + * Backport reestablish relays from cert-v2 to release-1.9 + * do not panic when loading a V2 CA certificate + +------------------------------------------------------------------- Old: ---- nebula-1.9.4.tar.gz New: ---- nebula-1.9.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nebula.spec ++++++ --- /var/tmp/diff_new_pack.Drohv4/_old 2024-12-08 11:38:36.241294645 +0100 +++ /var/tmp/diff_new_pack.Drohv4/_new 2024-12-08 11:38:36.241294645 +0100 @@ -17,7 +17,7 @@ Name: nebula -Version: 1.9.4 +Version: 1.9.5 Release: 0 Summary: A scalable overlay networking tool License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Drohv4/_old 2024-12-08 11:38:36.269295808 +0100 +++ /var/tmp/diff_new_pack.Drohv4/_new 2024-12-08 11:38:36.273295974 +0100 @@ -3,7 +3,7 @@ <service name="tar_scm" mode="manual"> <param name="url">https://github.com/slackhq/nebula.git</param> <param name="scm">git</param> - <param name="revision">refs/tags/v1.9.4</param> + <param name="revision">refs/tags/v1.9.5</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="package-meta">yes</param> ++++++ nebula-1.9.4.tar.gz -> nebula-1.9.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/HEAD new/nebula-1.9.5/.git/HEAD --- old/nebula-1.9.4/.git/HEAD 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/HEAD 2024-12-06 15:50:24.000000000 +0100 @@ -1 +1 @@ -ab81b62ea05814f3eebc0ad545aabcc8b704052b +b55b9019a72c7320b5c6dd54d2c31ad89f1e8990 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/ORIG_HEAD new/nebula-1.9.5/.git/ORIG_HEAD --- old/nebula-1.9.4/.git/ORIG_HEAD 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/ORIG_HEAD 2024-12-06 15:50:24.000000000 +0100 @@ -1 +1 @@ -ab81b62ea05814f3eebc0ad545aabcc8b704052b +b55b9019a72c7320b5c6dd54d2c31ad89f1e8990 Binary files old/nebula-1.9.4/.git/index and new/nebula-1.9.5/.git/index differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/logs/HEAD new/nebula-1.9.5/.git/logs/HEAD --- old/nebula-1.9.4/.git/logs/HEAD 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/logs/HEAD 2024-12-06 15:50:24.000000000 +0100 @@ -1,2 +1,2 @@ -0000000000000000000000000000000000000000 16eaae306afe95ac9876e333fc1636c98cd999a4 Richard Rahl <[email protected]> 1725955218 +0200 clone: from https://github.com/slackhq/nebula.git -16eaae306afe95ac9876e333fc1636c98cd999a4 ab81b62ea05814f3eebc0ad545aabcc8b704052b Richard Rahl <[email protected]> 1725955220 +0200 checkout: moving from master to refs/tags/v1.9.4 +0000000000000000000000000000000000000000 3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 Richard Rahl <[email protected]> 1733505887 +0100 clone: from https://github.com/slackhq/nebula.git +3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 b55b9019a72c7320b5c6dd54d2c31ad89f1e8990 Richard Rahl <[email protected]> 1733505890 +0100 checkout: moving from master to refs/tags/v1.9.5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/logs/refs/heads/master new/nebula-1.9.5/.git/logs/refs/heads/master --- old/nebula-1.9.4/.git/logs/refs/heads/master 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/logs/refs/heads/master 2024-12-06 15:50:24.000000000 +0100 @@ -1 +1 @@ -0000000000000000000000000000000000000000 16eaae306afe95ac9876e333fc1636c98cd999a4 Richard Rahl <[email protected]> 1725955218 +0200 clone: from https://github.com/slackhq/nebula.git +0000000000000000000000000000000000000000 3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 Richard Rahl <[email protected]> 1733505887 +0100 clone: from https://github.com/slackhq/nebula.git diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/logs/refs/remotes/origin/HEAD new/nebula-1.9.5/.git/logs/refs/remotes/origin/HEAD --- old/nebula-1.9.4/.git/logs/refs/remotes/origin/HEAD 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/logs/refs/remotes/origin/HEAD 2024-12-06 15:50:24.000000000 +0100 @@ -1 +1 @@ -0000000000000000000000000000000000000000 16eaae306afe95ac9876e333fc1636c98cd999a4 Richard Rahl <[email protected]> 1725955218 +0200 clone: from https://github.com/slackhq/nebula.git +0000000000000000000000000000000000000000 3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 Richard Rahl <[email protected]> 1733505887 +0100 clone: from https://github.com/slackhq/nebula.git Binary files old/nebula-1.9.4/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.idx and new/nebula-1.9.5/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.pack and new/nebula-1.9.5/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.pack differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.promisor new/nebula-1.9.5/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.promisor --- old/nebula-1.9.4/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.promisor 1970-01-01 01:00:00.000000000 +0100 +++ new/nebula-1.9.5/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.promisor 2024-12-06 15:50:24.000000000 +0100 @@ -0,0 +1,206 @@ +0017794f4638f1a1b4e469619a9824accac6ccea 0017794f4638f1a1b4e469619a9824accac6ccea +02c88777cb69d8981e5812991cc8e47a1771bba2 02c88777cb69d8981e5812991cc8e47a1771bba2 +053640d9876d32a50ab2069e810d03e1cae906f9 053640d9876d32a50ab2069e810d03e1cae906f9 +06a24edd2712a2113436762830702db5e80efe89 06a24edd2712a2113436762830702db5e80efe89 +08905705c03a39ab8546eb13241a08e5188e8ec0 08905705c03a39ab8546eb13241a08e5188e8ec0 +0b573e6b344309da856dd6b9e747f8e2ecf93e65 0b573e6b344309da856dd6b9e747f8e2ecf93e65 +0bb2345ac0bc40f01a8a0ec0e4939503cd911990 0bb2345ac0bc40f01a8a0ec0e4939503cd911990 +0bffc857c0951d3cb3061f30f502282bbaec5d7c 0bffc857c0951d3cb3061f30f502282bbaec5d7c +0ccd17909372cafab7b7ff6a1a7e568ea75e0f8b 0ccd17909372cafab7b7ff6a1a7e568ea75e0f8b +0e7e20d4122d33d90b4f1b03722f6f8874dd1090 0e7e20d4122d33d90b4f1b03722f6f8874dd1090 +12460da1f85968dd6e9365afdb99ed94995e2988 12460da1f85968dd6e9365afdb99ed94995e2988 +129744fd2513138b0d3269fcdf61bdc5a1f0bd78 129744fd2513138b0d3269fcdf61bdc5a1f0bd78 +12bbd9700d58e162b7401bc3a747cf9ad69ef63c 12bbd9700d58e162b7401bc3a747cf9ad69ef63c +130f8f99f5e18129e754884c37f5822b7038ee28 130f8f99f5e18129e754884c37f5822b7038ee28 +13e807f3bde804c4035f4f8a1fb0ba1f51ff110e 13e807f3bde804c4035f4f8a1fb0ba1f51ff110e +14ba2ce145c06795b4387de56029e160697140b2 14ba2ce145c06795b4387de56029e160697140b2 +165e40951310d174a7aa46d634af5f83d3ed8cc9 165e40951310d174a7aa46d634af5f83d3ed8cc9 +16e6a680fefc2fc02952634fce616297c1725157 16e6a680fefc2fc02952634fce616297c1725157 +16e768ee42b7416f77f5f2f603688c8e28679d17 16e768ee42b7416f77f5f2f603688c8e28679d17 +183ac7af2c09593aabfedb7c7353607580400e11 183ac7af2c09593aabfedb7c7353607580400e11 +18ceb4b1feb1a1c8da5c7151e8dc0edbbee05b37 18ceb4b1feb1a1c8da5c7151e8dc0edbbee05b37 +1a3a4d48f9427b5f833805c826840b18e6be4b59 1a3a4d48f9427b5f833805c826840b18e6be4b59 +1aea83273596bf6a26a3b065af178176dd3cf475 1aea83273596bf6a26a3b065af178176dd3cf475 +1b777c3743a9f9aee4f0bdb020a0c49becbd3bfc 1b777c3743a9f9aee4f0bdb020a0c49becbd3bfc +1bb4ef5f70bdb2caec407d8778dbcab5ed070ab5 1bb4ef5f70bdb2caec407d8778dbcab5ed070ab5 +1c1842da5532f71f64ab20a23e3ceade57046140 1c1842da5532f71f64ab20a23e3ceade57046140 +1db60a7c41b17e09f1f24f0ed795b514f3edcab4 1db60a7c41b17e09f1f24f0ed795b514f3edcab4 +2034405a70048b4afbf04c625828ee3819324bef 2034405a70048b4afbf04c625828ee3819324bef +204ff09ffa8e110fa70e05592191b4bcb4e31663 204ff09ffa8e110fa70e05592191b4bcb4e31663 +20981f08cc90bd27b0a7155a420e9b31854d4cf0 20981f08cc90bd27b0a7155a420e9b31854d4cf0 +24ab24f78dd3b6aa3f4a59f0052573a8c83f83a6 24ab24f78dd3b6aa3f4a59f0052573a8c83f83a6 +2502824b117395420749fda2d512a8b749290adf 2502824b117395420749fda2d512a8b749290adf +2599f5f2ea0386daed0e3c45ba5a8b0c7e01e998 2599f5f2ea0386daed0e3c45ba5a8b0c7e01e998 +26159845c42d80a93c0d2545f301a88b3ca5d45b 26159845c42d80a93c0d2545f301a88b3ca5d45b +261ed3642b694b55ba1cf8b6ec6a7033693548de 261ed3642b694b55ba1cf8b6ec6a7033693548de +29fa959915c71f1057afe21a4ed5b74d7b23402f 29fa959915c71f1057afe21a4ed5b74d7b23402f +2ab97dba062208bcb6ffc32bef8347d586751038 2ab97dba062208bcb6ffc32bef8347d586751038 +2b27f52f5c259acb302f34a42d30dfa06dff71f8 2b27f52f5c259acb302f34a42d30dfa06dff71f8 +2b5e6e937141af36ad4974569e64a68d16067818 2b5e6e937141af36ad4974569e64a68d16067818 +2beca66c91c38c5ee8036319e29fe439c94d4195 2beca66c91c38c5ee8036319e29fe439c94d4195 +2d84536944d28f36dba26e76008e6b383b4f0cdd 2d84536944d28f36dba26e76008e6b383b4f0cdd +2eee76ee261a56eac20b84dc9556f7f79fabe6c6 2eee76ee261a56eac20b84dc9556f7f79fabe6c6 +2fab9274b8c46eb5c8415ac1c7c67ff8ff645919 2fab9274b8c46eb5c8415ac1c7c67ff8ff645919 +30178c03451593c58a9c17d33953d67ef3910b15 30178c03451593c58a9c17d33953d67ef3910b15 +311afc24ea9e31343f8e9be650e715f1a98e67ca 311afc24ea9e31343f8e9be650e715f1a98e67ca +31987db86295fc6beff233918a5031e913f4fcd4 31987db86295fc6beff233918a5031e913f4fcd4 +32de1a0dc422823c07c82e7a01370d3970311b1d 32de1a0dc422823c07c82e7a01370d3970311b1d +34fe17e5902aebb08a0a2e04d7c713919ff28c35 34fe17e5902aebb08a0a2e04d7c713919ff28c35 +36b0fc94c25000a774e77f2953ec2627f2c74705 36b0fc94c25000a774e77f2953ec2627f2c74705 +36d043bcd53f5526b521f8c3dce5c1bb1115f02a 36d043bcd53f5526b521f8c3dce5c1bb1115f02a +3add83d88243dd28d0a8452727918e497ebca978 3add83d88243dd28d0a8452727918e497ebca978 +3b69159ad93ce3fb1c56da2ad24c40b04a355949 3b69159ad93ce3fb1c56da2ad24c40b04a355949 +3b7cdd1c9a1d4efbf1082648c0d6e712525bc7a0 3b7cdd1c9a1d4efbf1082648c0d6e712525bc7a0 +3d883093c812cae51d9c1a689477ef282da57b00 3d883093c812cae51d9c1a689477ef282da57b00 +400e275b469b6bf0d21ecbfc628fa55d68263571 400e275b469b6bf0d21ecbfc628fa55d68263571 +48348939b147908eee4bd433e0456fcc3e6cf1ba 48348939b147908eee4bd433e0456fcc3e6cf1ba +496f84c278ad092dff6d5f6e66bc0004012b24c5 496f84c278ad092dff6d5f6e66bc0004012b24c5 +4b1d0bd0d028528610d5f38b77a6e9937ea07a1c 4b1d0bd0d028528610d5f38b77a6e9937ea07a1c +4c236aeed55c552d69aef89ebf5fd9a8d5f6648a 4c236aeed55c552d69aef89ebf5fd9a8d5f6648a +4c6364ef5629748ecb29546213ed7d39c8d00f86 4c6364ef5629748ecb29546213ed7d39c8d00f86 +4c9a72db482281b3ce47430600a12f0619583926 4c9a72db482281b3ce47430600a12f0619583926 +4ddd301829ef40e49f967084e52b83a49a7600f8 4ddd301829ef40e49f967084e52b83a49a7600f8 +5041f82ce386d917a3017497f623dcccd3c8e66e 5041f82ce386d917a3017497f623dcccd3c8e66e +50ad6ad5bcc1168e4b187a66796b404587b77602 50ad6ad5bcc1168e4b187a66796b404587b77602 +50b7d62b22f780dd105d76fdf2562a3b698e3d72 50b7d62b22f780dd105d76fdf2562a3b698e3d72 +523968c2352e3904d9f21e373d90604e297ad914 523968c2352e3904d9f21e373d90604e297ad914 +547037c5a10a71380bc2e12a5ff4b9389e3a73d9 547037c5a10a71380bc2e12a5ff4b9389e3a73d9 +54833bdc789754f8b3086f94764e7ac990786b11 54833bdc789754f8b3086f94764e7ac990786b11 +55d441f4a8017b2ea30eae55137c52f2829dba5f 55d441f4a8017b2ea30eae55137c52f2829dba5f +57990a7943a518013e8a86e0c3d8e99c9fadc01f 57990a7943a518013e8a86e0c3d8e99c9fadc01f +57cd32ae544e93f5ffa982a9d1cd1bb8607f759f 57cd32ae544e93f5ffa982a9d1cd1bb8607f759f +5afeaeabe191d7878ca66eebf370d07572c8ae18 5afeaeabe191d7878ca66eebf370d07572c8ae18 +5cf0a028abab5fa3606ff15513ae87cab10aac95 5cf0a028abab5fa3606ff15513ae87cab10aac95 +5d41a8714c05e7724f236eee45b2358d574cd173 5d41a8714c05e7724f236eee45b2358d574cd173 +62a892b00189463dbd90248b95d0877618e7f242 62a892b00189463dbd90248b95d0877618e7f242 +62f406560ca38e7e37dc0ae2b8a8d663631c18af 62f406560ca38e7e37dc0ae2b8a8d663631c18af +6463ccbba5dc27e71aeb73073adb9d5b1a65b6b6 6463ccbba5dc27e71aeb73073adb9d5b1a65b6b6 +65ea91f5105a5681011580b4bf219f50e187a21d 65ea91f5105a5681011580b4bf219f50e187a21d +65ef31a5656c7b49517e3d1c70a75c2a53ff0599 65ef31a5656c7b49517e3d1c70a75c2a53ff0599 +6922cc3e89721a03010ca670d73ae8761e0b1267 6922cc3e89721a03010ca670d73ae8761e0b1267 +69f6ae84f47316b8772977a072b24188c4a409c9 69f6ae84f47316b8772977a072b24188c4a409c9 +6a023abf20b6ef8e38c2bc8a73447cb2183e8ddc 6a023abf20b6ef8e38c2bc8a73447cb2183e8ddc +6a71fe77f0d24f25d1824f4f4bd77d5a83cab1d8 6a71fe77f0d24f25d1824f4f4bd77d5a83cab1d8 +6d04027aa7ab62201683f852fd13d8e70bd045a2 6d04027aa7ab62201683f852fd13d8e70bd045a2 +6d5c8a433279de7637aed7ab48574b65540a8d54 6d5c8a433279de7637aed7ab48574b65540a8d54 +6ff1cb0bdfa23d878e53bfb465f0f64558e00a23 6ff1cb0bdfa23d878e53bfb465f0f64558e00a23 +7061de6acf773ff4e53f59a42fc5d00a4bb5d6a6 7061de6acf773ff4e53f59a42fc5d00a4bb5d6a6 +70b07f4e3252539a0ddd7fe3954c244716787e4f 70b07f4e3252539a0ddd7fe3954c244716787e4f +719e0349e709c0cfc781f941fb3d4effea45c9d9 719e0349e709c0cfc781f941fb3d4effea45c9d9 +71b83f433fdac1cd69384227ded09527a559c452 71b83f433fdac1cd69384227ded09527a559c452 +7276dfa1325163a2fa2c31506d9ecda2773c802d 7276dfa1325163a2fa2c31506d9ecda2773c802d +744ae2edf6f55b7ae0e87ea96456e00052b60d84 744ae2edf6f55b7ae0e87ea96456e00052b60d84 +75012312272ea1e3da0fe3f9791ec7322df8e10b 75012312272ea1e3da0fe3f9791ec7322df8e10b +765a006654bf2bfd46614853267f550520694275 765a006654bf2bfd46614853267f550520694275 +76cf72fc3c197c5186c639d07d6934232cec5b41 76cf72fc3c197c5186c639d07d6934232cec5b41 +77182523fcd8f95d35d138aa8651e7a9680dcbe6 77182523fcd8f95d35d138aa8651e7a9680dcbe6 +77996f3da0959055973c61ff952b23ff38be33db 77996f3da0959055973c61ff952b23ff38be33db +796b96d1c402326528b4ba3c12ee9d92d0e212e9 796b96d1c402326528b4ba3c12ee9d92d0e212e9 +7d8f2eb8fbd90b7d895b6587331446edb1f3146b 7d8f2eb8fbd90b7d895b6587331446edb1f3146b +7e2feb8106ccf6da8fb4f11cf1d44b817c4a22d7 7e2feb8106ccf6da8fb4f11cf1d44b817c4a22d7 +80a828057deb987c4d96c12bd8cfe990587f6a33 80a828057deb987c4d96c12bd8cfe990587f6a33 +80cfef3c0c822afc966f9d6c4976243ef7abb7f7 80cfef3c0c822afc966f9d6c4976243ef7abb7f7 +8129560efeaf185ef1ef3cac5cd78383995b145a 8129560efeaf185ef1ef3cac5cd78383995b145a +8354c094ea61d80dd3d9462e303d4261ffcb1892 8354c094ea61d80dd3d9462e303d4261ffcb1892 +87a0de75bb09f4848f55abc1eb03c4fc20d13525 87a0de75bb09f4848f55abc1eb03c4fc20d13525 +881ee4696fd2f37005f9ffe702c6c423208c1a1f 881ee4696fd2f37005f9ffe702c6c423208c1a1f +88e33b7e99ede588bc2ce54be2327a0dda6325ac 88e33b7e99ede588bc2ce54be2327a0dda6325ac +8954f4c473e33ee0eb605a7090e5735bf3867961 8954f4c473e33ee0eb605a7090e5735bf3867961 +89f94772682096261658d8ff92fb3298a82427b3 89f94772682096261658d8ff92fb3298a82427b3 +8c3dca558ce2b3443f1cd95ce86d7dfde3fa7dbd 8c3dca558ce2b3443f1cd95ce86d7dfde3fa7dbd +8c88439248a753c368b833ee55e8310c03737afe 8c88439248a753c368b833ee55e8310c03737afe +8ccc9943ccba295c4d35fda506f4f919df64f818 8ccc9943ccba295c4d35fda506f4f919df64f818 +8d0eaa1dbb78fb9df513030d3187829ac57afd6d 8d0eaa1dbb78fb9df513030d3187829ac57afd6d +8f45359515ab4664ff4719d8a91263bfd2f57bdb 8f45359515ab4664ff4719d8a91263bfd2f57bdb +900b01e5b86403ddc8a882c78e83b77f9d9a4bca 900b01e5b86403ddc8a882c78e83b77f9d9a4bca +90e0de231d26236502b12c1d6868afbd52757c98 90e0de231d26236502b12c1d6868afbd52757c98 +90ea8ffa6b4180a836e0fbeacb23a8e4189b18ef 90ea8ffa6b4180a836e0fbeacb23a8e4189b18ef +94bb02fe3b8aee70415af5caf5c86a0a72a71e33 94bb02fe3b8aee70415af5caf5c86a0a72a71e33 +94db8f2f8f51ab300a23207b89db04d7e458a0d0 94db8f2f8f51ab300a23207b89db04d7e458a0d0 +94e2c6beb00cdb71df7c28efe30e2726272fe527 94e2c6beb00cdb71df7c28efe30e2726272fe527 +94e868cc2a3e395aefd09ed3b86bec597b6c138e 94e868cc2a3e395aefd09ed3b86bec597b6c138e +95abe018ec6a5ddccd0e3900e9b3b03ece7df6e6 95abe018ec6a5ddccd0e3900e9b3b03ece7df6e6 +976a2742308b3194ca482b692adfadf6e64b5526 976a2742308b3194ca482b692adfadf6e64b5526 +98ad9b408df48383fc7aaa6012d7cad96d499359 98ad9b408df48383fc7aaa6012d7cad96d499359 +9c113e185938fcd0e21af6b7f9773ef96ac3d83e 9c113e185938fcd0e21af6b7f9773ef96ac3d83e +9cd9d37f2025c7d8f242226e6a99d7404cb3dbe6 9cd9d37f2025c7d8f242226e6a99d7404cb3dbe6 +9e8c721ee0cc3e4a39215b3042634151580ab01a 9e8c721ee0cc3e4a39215b3042634151580ab01a +9f222c8b466eea77c8797bfa39b02ff8c279c3a4 9f222c8b466eea77c8797bfa39b02ff8c279c3a4 +a0c6e74244170d6e59f2af2b6e80066de3a8394b a0c6e74244170d6e59f2af2b6e80066de3a8394b +a2ead55189eb551b97379775971ab13fab538407 a2ead55189eb551b97379775971ab13fab538407 +a54fb0f30f6048101cad79c191a70e5a9c263746 a54fb0f30f6048101cad79c191a70e5a9c263746 +a62c223385b037382f5942f3fe5535a1e219452a a62c223385b037382f5942f3fe5535a1e219452a +aaf6f29c99a183e6b558abc1f84895d8e824a92d aaf6f29c99a183e6b558abc1f84895d8e824a92d +ab5218f8dbfb8a6fcaef2d88e40b681591229193 ab5218f8dbfb8a6fcaef2d88e40b681591229193 +abf74a0fa2c7ab37e9f79cb3495c73203c0006a4 abf74a0fa2c7ab37e9f79cb3495c73203c0006a4 +ad1714780f000cd7e3efc1e7965c7b1b9bc816f6 ad1714780f000cd7e3efc1e7965c7b1b9bc816f6 +ae19a28f5be753b7de15acb3ec07c5d9557901f7 ae19a28f5be753b7de15acb3ec07c5d9557901f7 +ae2ed500c037a90f85d55d6ef8bc70728d4f716a ae2ed500c037a90f85d55d6ef8bc70728d4f716a +aee04e77bfbd6601adbcd5a46435f059e31cf6e4 aee04e77bfbd6601adbcd5a46435f059e31cf6e4 +af6480effb6b4339eb78b77311634c546f8c6d11 af6480effb6b4339eb78b77311634c546f8c6d11 +b281906f51af72f38c5e75c549c5393402d77eac b281906f51af72f38c5e75c549c5393402d77eac +b2d1d1b5bf17bab6942d313d1347ec4952f7b19b b2d1d1b5bf17bab6942d313d1347ec4952f7b19b +b3c723a462fda42bf18d738b96430e7ba20e88aa b3c723a462fda42bf18d738b96430e7ba20e88aa +b4f96c6c8413d4bc2c8fb5994232ad158d8475a9 b4f96c6c8413d4bc2c8fb5994232ad158d8475a9 +b5a717d82d7ba9ea31228d97c4207f4c9fb9066c b5a717d82d7ba9ea31228d97c4207f4c9fb9066c +b68434df778d6bb10e77cbbdb42e9bbd0029fb44 b68434df778d6bb10e77cbbdb42e9bbd0029fb44 +b803d30a659910d127644c3a32aaf3fac6b2cc25 b803d30a659910d127644c3a32aaf3fac6b2cc25 +b865391e7738ff0e9d98e75a1282deb6d0f0ea66 b865391e7738ff0e9d98e75a1282deb6d0f0ea66 +ba15723a143661719cb66dac3f730fe8b96ef204 ba15723a143661719cb66dac3f730fe8b96ef204 +bb19195469431a0e2b94832ea9e7a60b1e30c6fc bb19195469431a0e2b94832ea9e7a60b1e30c6fc +bba2a55c6e7916c40229b27a110ce72aa4244461 bba2a55c6e7916c40229b27a110ce72aa4244461 +bc8d3f0e60565567a8b8598972614dce7d4ffccd bc8d3f0e60565567a8b8598972614dce7d4ffccd +bcc9e5d9a24e351ae729e5eda9354c098b1f2c4a bcc9e5d9a24e351ae729e5eda9354c098b1f2c4a +bdfeb5802b314a0f050ca33e3a727d9b88968e50 bdfeb5802b314a0f050ca33e3a727d9b88968e50 +be746f4096f772a5e4a461263375f0ce939fd21c be746f4096f772a5e4a461263375f0ce939fd21c +bedd2b266cc4d22b26a6744339af6b227541a37b bedd2b266cc4d22b26a6744339af6b227541a37b +bfff621a7ca4e6baf72151ab8918fbc19391a46b bfff621a7ca4e6baf72151ab8918fbc19391a46b +c0893aca2aa1f38b7e4b9edba8d95a89379c7c6c c0893aca2aa1f38b7e4b9edba8d95a89379c7c6c +c167e70d8b20ec2254115c7b72673605b6a27625 c167e70d8b20ec2254115c7b72673605b6a27625 +c1b4c398b44cec672dc8a32b83e4ec489466881e c1b4c398b44cec672dc8a32b83e4ec489466881e +c423cfc72547100e9f9db1aeeb205bc6e5154309 c423cfc72547100e9f9db1aeeb205bc6e5154309 +c546653a2f4a9401b1acb3de2d72b4609af86052 c546653a2f4a9401b1acb3de2d72b4609af86052 +c74ffc68f201fd49753643bb8f15878bde9ddcbd c74ffc68f201fd49753643bb8f15878bde9ddcbd +c86b0bc3ef91cd92d5020d809938560c08d3ad1e c86b0bc3ef91cd92d5020d809938560c08d3ad1e +c88c45cc9facb1fd6a9accfe9baec6360b7d431e c88c45cc9facb1fd6a9accfe9baec6360b7d431e +c8a4c64aafacbc447fa4474a04fd7e2400c901f9 c8a4c64aafacbc447fa4474a04fd7e2400c901f9 +c8b3d08af1d714a4ebfb4f3e011026a90223a9fb c8b3d08af1d714a4ebfb4f3e011026a90223a9fb +c9aba3e44af46b89cbd23b5f921b08c382a042d9 c9aba3e44af46b89cbd23b5f921b08c382a042d9 +c9c7730de063da9473cfb52991f3da2afb30e455 c9c7730de063da9473cfb52991f3da2afb30e455 +d0103879af61feff70b97819b27973aad422b67d d0103879af61feff70b97819b27973aad422b67d +d0b64b936318af6541ae64ad2830fc6a04f38abe d0b64b936318af6541ae64ad2830fc6a04f38abe +d1c7ba91853fca818c6ae6c5c29d54a464ebf1fc d1c7ba91853fca818c6ae6c5c29d54a464ebf1fc +d34252e743ea6265f662653f4b6ce49cceeff538 d34252e743ea6265f662653f4b6ce49cceeff538 +d52583035dfe7f1995a8f6e4f2073d3bb409ed4b d52583035dfe7f1995a8f6e4f2073d3bb409ed4b +d7710f9abe38cd77d2e4414d2611bd1cc509bcbc d7710f9abe38cd77d2e4414d2611bd1cc509bcbc +d78f564cf0c941fc6e9af1dad4c8503b755d567d d78f564cf0c941fc6e9af1dad4c8503b755d567d +d7913894b8ec4919bbd2a5a1e550e961eaac2708 d7913894b8ec4919bbd2a5a1e550e961eaac2708 +d83151eb33abcb448dac718efcef4933dfe9da61 d83151eb33abcb448dac718efcef4933dfe9da61 +da0d1be3feae525be935a91e53fc5c2c7ae884aa da0d1be3feae525be935a91e53fc5c2c7ae884aa +daa86756462a4692198ec84ee84e8692e5f6ccd8 daa86756462a4692198ec84ee84e8692e5f6ccd8 +dacc3d37e31c10aa109783a8f45980e4aafcfbe9 dacc3d37e31c10aa109783a8f45980e4aafcfbe9 +dbc29510f90ed2d462f3f98568281f4bfbadae1f dbc29510f90ed2d462f3f98568281f4bfbadae1f +dc4e4aeeb1400f75fa40bfd4d2503a029c03c52c dc4e4aeeb1400f75fa40bfd4d2503a029c03c52c +ddc808f94f89f623fee361e510d505edef1a2ebf ddc808f94f89f623fee361e510d505edef1a2ebf +e0d41aec9e990af54e362447b0478003081bfc4d e0d41aec9e990af54e362447b0478003081bfc4d +e1d0d95d881f314f3314eeafd1acb10c7d7db140 e1d0d95d881f314f3314eeafd1acb10c7d7db140 +e2508c83cc1b77af7bbeae6671efa899433c183d e2508c83cc1b77af7bbeae6671efa899433c183d +e446aa13163b7f771631ddb563407b3398d33e5b e446aa13163b7f771631ddb563407b3398d33e5b +e4f41049713e4c689f7dbd69d34db8500ca0c01a e4f41049713e4c689f7dbd69d34db8500ca0c01a +e7758e0943c0589f31b874e5e388e78502695cbe e7758e0943c0589f31b874e5e388e78502695cbe +e9ad19bb6a8eb6b49a695c8ad20518c692c98f65 e9ad19bb6a8eb6b49a695c8ad20518c692c98f65 +e9fceef6f3dfc575dea445d2dfdf043099c2beef e9fceef6f3dfc575dea445d2dfdf043099c2beef +ee7e1e002c00268555784c5b57871addf209d565 ee7e1e002c00268555784c5b57871addf209d565 +f03a3535f7e2c52fb694e52c2648468b953d91c0 f03a3535f7e2c52fb694e52c2648468b953d91c0 +f1f1ec6281d556093b203f341b89738190d6f527 f1f1ec6281d556093b203f341b89738190d6f527 +f3642961c9660f495dec47f5e4e4fc37e6b077e3 f3642961c9660f495dec47f5e4e4fc37e6b077e3 +f46499099937469142409a75b5ab351e487ccc7f f46499099937469142409a75b5ab351e487ccc7f +f6069bf4636c7b5620fb33721a39a96583d1f589 f6069bf4636c7b5620fb33721a39a96583d1f589 +f8a89ef59b4f74566cb2b086b1a88eaabd3ccb4c f8a89ef59b4f74566cb2b086b1a88eaabd3ccb4c +f9d4bfa48c9bdf9a794351ed3772bae71a97e8b4 f9d4bfa48c9bdf9a794351ed3772bae71a97e8b4 +fa4e443040e88b54ad7ba28064d7c15acb137a10 fa4e443040e88b54ad7ba28064d7c15acb137a10 +fa87e53009762bedd3951b5dc4e1021fb3354d0d fa87e53009762bedd3951b5dc4e1021fb3354d0d +fa9439302b7483c7dffdae0703cf6a617389033e fa9439302b7483c7dffdae0703cf6a617389033e +fbf58295a33eabf503fcf991f050a7ea58bba3b0 fbf58295a33eabf503fcf991f050a7ea58bba3b0 +fdfc0a57efd1fb23d3e054a98370198f24bf2c1c fdfc0a57efd1fb23d3e054a98370198f24bf2c1c +fe64ea5eecb5001d1c74906df28bd65f5ac1a6f6 fe64ea5eecb5001d1c74906df28bd65f5ac1a6f6 Binary files old/nebula-1.9.4/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.rev and new/nebula-1.9.5/.git/objects/pack/pack-001c55cc7124c20b9bf71b9aca2985f213726579.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-0d2ea528b6809dc0917fe0e69abec92910ede56a.idx and new/nebula-1.9.5/.git/objects/pack/pack-0d2ea528b6809dc0917fe0e69abec92910ede56a.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-0d2ea528b6809dc0917fe0e69abec92910ede56a.pack and new/nebula-1.9.5/.git/objects/pack/pack-0d2ea528b6809dc0917fe0e69abec92910ede56a.pack differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-0d2ea528b6809dc0917fe0e69abec92910ede56a.rev and new/nebula-1.9.5/.git/objects/pack/pack-0d2ea528b6809dc0917fe0e69abec92910ede56a.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.idx and new/nebula-1.9.5/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.pack and new/nebula-1.9.5/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.pack differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.promisor new/nebula-1.9.5/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.promisor --- old/nebula-1.9.4/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.promisor 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.promisor 1970-01-01 01:00:00.000000000 +0100 @@ -1,201 +0,0 @@ -0017794f4638f1a1b4e469619a9824accac6ccea 0017794f4638f1a1b4e469619a9824accac6ccea -05b42d10c5682319a702f01111145bf1b7aa59a5 05b42d10c5682319a702f01111145bf1b7aa59a5 -08905705c03a39ab8546eb13241a08e5188e8ec0 08905705c03a39ab8546eb13241a08e5188e8ec0 -0b573e6b344309da856dd6b9e747f8e2ecf93e65 0b573e6b344309da856dd6b9e747f8e2ecf93e65 -0bb2345ac0bc40f01a8a0ec0e4939503cd911990 0bb2345ac0bc40f01a8a0ec0e4939503cd911990 -0bffc857c0951d3cb3061f30f502282bbaec5d7c 0bffc857c0951d3cb3061f30f502282bbaec5d7c -0ccd17909372cafab7b7ff6a1a7e568ea75e0f8b 0ccd17909372cafab7b7ff6a1a7e568ea75e0f8b -0e7e20d4122d33d90b4f1b03722f6f8874dd1090 0e7e20d4122d33d90b4f1b03722f6f8874dd1090 -0ffbd8792f5e1882479d8075e90f66647adbcf20 0ffbd8792f5e1882479d8075e90f66647adbcf20 -10d12a10efe27d9e7626caec38d014b423fec216 10d12a10efe27d9e7626caec38d014b423fec216 -12460da1f85968dd6e9365afdb99ed94995e2988 12460da1f85968dd6e9365afdb99ed94995e2988 -129744fd2513138b0d3269fcdf61bdc5a1f0bd78 129744fd2513138b0d3269fcdf61bdc5a1f0bd78 -130f8f99f5e18129e754884c37f5822b7038ee28 130f8f99f5e18129e754884c37f5822b7038ee28 -14ba2ce145c06795b4387de56029e160697140b2 14ba2ce145c06795b4387de56029e160697140b2 -16e6a680fefc2fc02952634fce616297c1725157 16e6a680fefc2fc02952634fce616297c1725157 -16e768ee42b7416f77f5f2f603688c8e28679d17 16e768ee42b7416f77f5f2f603688c8e28679d17 -183ac7af2c09593aabfedb7c7353607580400e11 183ac7af2c09593aabfedb7c7353607580400e11 -1a3a4d48f9427b5f833805c826840b18e6be4b59 1a3a4d48f9427b5f833805c826840b18e6be4b59 -1aea83273596bf6a26a3b065af178176dd3cf475 1aea83273596bf6a26a3b065af178176dd3cf475 -1b777c3743a9f9aee4f0bdb020a0c49becbd3bfc 1b777c3743a9f9aee4f0bdb020a0c49becbd3bfc -1bb4ef5f70bdb2caec407d8778dbcab5ed070ab5 1bb4ef5f70bdb2caec407d8778dbcab5ed070ab5 -1c1842da5532f71f64ab20a23e3ceade57046140 1c1842da5532f71f64ab20a23e3ceade57046140 -1db60a7c41b17e09f1f24f0ed795b514f3edcab4 1db60a7c41b17e09f1f24f0ed795b514f3edcab4 -1df37bdbcade0be9d78b46054151fe85905a36b7 1df37bdbcade0be9d78b46054151fe85905a36b7 -2034405a70048b4afbf04c625828ee3819324bef 2034405a70048b4afbf04c625828ee3819324bef -20981f08cc90bd27b0a7155a420e9b31854d4cf0 20981f08cc90bd27b0a7155a420e9b31854d4cf0 -2355c4f131e8e63bd8f78ecfd45f7b3d47f0bd99 2355c4f131e8e63bd8f78ecfd45f7b3d47f0bd99 -24ab24f78dd3b6aa3f4a59f0052573a8c83f83a6 24ab24f78dd3b6aa3f4a59f0052573a8c83f83a6 -2502824b117395420749fda2d512a8b749290adf 2502824b117395420749fda2d512a8b749290adf -2599f5f2ea0386daed0e3c45ba5a8b0c7e01e998 2599f5f2ea0386daed0e3c45ba5a8b0c7e01e998 -261ed3642b694b55ba1cf8b6ec6a7033693548de 261ed3642b694b55ba1cf8b6ec6a7033693548de -28170b622cf5c5fbdf3349152e1f6c80888b1961 28170b622cf5c5fbdf3349152e1f6c80888b1961 -2ab97dba062208bcb6ffc32bef8347d586751038 2ab97dba062208bcb6ffc32bef8347d586751038 -2b27f52f5c259acb302f34a42d30dfa06dff71f8 2b27f52f5c259acb302f34a42d30dfa06dff71f8 -2b5e6e937141af36ad4974569e64a68d16067818 2b5e6e937141af36ad4974569e64a68d16067818 -2beca66c91c38c5ee8036319e29fe439c94d4195 2beca66c91c38c5ee8036319e29fe439c94d4195 -2d84536944d28f36dba26e76008e6b383b4f0cdd 2d84536944d28f36dba26e76008e6b383b4f0cdd -2eee76ee261a56eac20b84dc9556f7f79fabe6c6 2eee76ee261a56eac20b84dc9556f7f79fabe6c6 -2fab9274b8c46eb5c8415ac1c7c67ff8ff645919 2fab9274b8c46eb5c8415ac1c7c67ff8ff645919 -2ff0954d62e2717fc6de38b6f0276e2079b6105f 2ff0954d62e2717fc6de38b6f0276e2079b6105f -30178c03451593c58a9c17d33953d67ef3910b15 30178c03451593c58a9c17d33953d67ef3910b15 -30e99eca13c42cebf1ed898f1e35e39bc2973acf 30e99eca13c42cebf1ed898f1e35e39bc2973acf -31762090de0fdeadb7f92e3a92a19a1a41ad7939 31762090de0fdeadb7f92e3a92a19a1a41ad7939 -31987db86295fc6beff233918a5031e913f4fcd4 31987db86295fc6beff233918a5031e913f4fcd4 -3468b35367e2b376db1b6ed8649a318aa3d33193 3468b35367e2b376db1b6ed8649a318aa3d33193 -34fe17e5902aebb08a0a2e04d7c713919ff28c35 34fe17e5902aebb08a0a2e04d7c713919ff28c35 -3558e1a542336e677d00715ff3f3e54e5abe80a5 3558e1a542336e677d00715ff3f3e54e5abe80a5 -3570e0750597c554d37c726ca02d0900c18e0f7c 3570e0750597c554d37c726ca02d0900c18e0f7c -36b0fc94c25000a774e77f2953ec2627f2c74705 36b0fc94c25000a774e77f2953ec2627f2c74705 -36d043bcd53f5526b521f8c3dce5c1bb1115f02a 36d043bcd53f5526b521f8c3dce5c1bb1115f02a -3b69159ad93ce3fb1c56da2ad24c40b04a355949 3b69159ad93ce3fb1c56da2ad24c40b04a355949 -3b7cdd1c9a1d4efbf1082648c0d6e712525bc7a0 3b7cdd1c9a1d4efbf1082648c0d6e712525bc7a0 -3d42a560ce91a082fa0ddfb5c99ec7b308f58b31 3d42a560ce91a082fa0ddfb5c99ec7b308f58b31 -3d883093c812cae51d9c1a689477ef282da57b00 3d883093c812cae51d9c1a689477ef282da57b00 -400e275b469b6bf0d21ecbfc628fa55d68263571 400e275b469b6bf0d21ecbfc628fa55d68263571 -4b1d0bd0d028528610d5f38b77a6e9937ea07a1c 4b1d0bd0d028528610d5f38b77a6e9937ea07a1c -4c6364ef5629748ecb29546213ed7d39c8d00f86 4c6364ef5629748ecb29546213ed7d39c8d00f86 -4d47e785f6d44abf54dcbfea6cdeced03e9b0a6e 4d47e785f6d44abf54dcbfea6cdeced03e9b0a6e -4ddd301829ef40e49f967084e52b83a49a7600f8 4ddd301829ef40e49f967084e52b83a49a7600f8 -5041f82ce386d917a3017497f623dcccd3c8e66e 5041f82ce386d917a3017497f623dcccd3c8e66e -50ad6ad5bcc1168e4b187a66796b404587b77602 50ad6ad5bcc1168e4b187a66796b404587b77602 -50b7d62b22f780dd105d76fdf2562a3b698e3d72 50b7d62b22f780dd105d76fdf2562a3b698e3d72 -511d3052336045dcdb6b3b5eb751bf8109cb8209 511d3052336045dcdb6b3b5eb751bf8109cb8209 -523968c2352e3904d9f21e373d90604e297ad914 523968c2352e3904d9f21e373d90604e297ad914 -527f55bc7b0ff270940b0edbbcf2dade3b33e28c 527f55bc7b0ff270940b0edbbcf2dade3b33e28c -547037c5a10a71380bc2e12a5ff4b9389e3a73d9 547037c5a10a71380bc2e12a5ff4b9389e3a73d9 -54833bdc789754f8b3086f94764e7ac990786b11 54833bdc789754f8b3086f94764e7ac990786b11 -55d441f4a8017b2ea30eae55137c52f2829dba5f 55d441f4a8017b2ea30eae55137c52f2829dba5f -57990a7943a518013e8a86e0c3d8e99c9fadc01f 57990a7943a518013e8a86e0c3d8e99c9fadc01f -5afeaeabe191d7878ca66eebf370d07572c8ae18 5afeaeabe191d7878ca66eebf370d07572c8ae18 -5cf0a028abab5fa3606ff15513ae87cab10aac95 5cf0a028abab5fa3606ff15513ae87cab10aac95 -5f97cad9d4880b54a81755119b5939cfa1e257af 5f97cad9d4880b54a81755119b5939cfa1e257af -5fea65c47bc22ceef5d9d6a45d04fc5c6dc478ff 5fea65c47bc22ceef5d9d6a45d04fc5c6dc478ff -62a892b00189463dbd90248b95d0877618e7f242 62a892b00189463dbd90248b95d0877618e7f242 -62f406560ca38e7e37dc0ae2b8a8d663631c18af 62f406560ca38e7e37dc0ae2b8a8d663631c18af -6463ccbba5dc27e71aeb73073adb9d5b1a65b6b6 6463ccbba5dc27e71aeb73073adb9d5b1a65b6b6 -65ea91f5105a5681011580b4bf219f50e187a21d 65ea91f5105a5681011580b4bf219f50e187a21d -65ef31a5656c7b49517e3d1c70a75c2a53ff0599 65ef31a5656c7b49517e3d1c70a75c2a53ff0599 -6922cc3e89721a03010ca670d73ae8761e0b1267 6922cc3e89721a03010ca670d73ae8761e0b1267 -69f6ae84f47316b8772977a072b24188c4a409c9 69f6ae84f47316b8772977a072b24188c4a409c9 -6a023abf20b6ef8e38c2bc8a73447cb2183e8ddc 6a023abf20b6ef8e38c2bc8a73447cb2183e8ddc -6c6c7951563aa1bc4dbe4184900f6277c8d43bba 6c6c7951563aa1bc4dbe4184900f6277c8d43bba -6d04027aa7ab62201683f852fd13d8e70bd045a2 6d04027aa7ab62201683f852fd13d8e70bd045a2 -6d5c8a433279de7637aed7ab48574b65540a8d54 6d5c8a433279de7637aed7ab48574b65540a8d54 -6ff1cb0bdfa23d878e53bfb465f0f64558e00a23 6ff1cb0bdfa23d878e53bfb465f0f64558e00a23 -7061de6acf773ff4e53f59a42fc5d00a4bb5d6a6 7061de6acf773ff4e53f59a42fc5d00a4bb5d6a6 -70b07f4e3252539a0ddd7fe3954c244716787e4f 70b07f4e3252539a0ddd7fe3954c244716787e4f -719e0349e709c0cfc781f941fb3d4effea45c9d9 719e0349e709c0cfc781f941fb3d4effea45c9d9 -71b83f433fdac1cd69384227ded09527a559c452 71b83f433fdac1cd69384227ded09527a559c452 -71df805f882b109ae8fd51b6b69837ba0a770bf5 71df805f882b109ae8fd51b6b69837ba0a770bf5 -7276dfa1325163a2fa2c31506d9ecda2773c802d 7276dfa1325163a2fa2c31506d9ecda2773c802d -746d6a3ab8f3bde7a9b1cfd3d839981145737909 746d6a3ab8f3bde7a9b1cfd3d839981145737909 -757f8830098671ed216d28df058441e4eb0f0614 757f8830098671ed216d28df058441e4eb0f0614 -765a006654bf2bfd46614853267f550520694275 765a006654bf2bfd46614853267f550520694275 -76cf72fc3c197c5186c639d07d6934232cec5b41 76cf72fc3c197c5186c639d07d6934232cec5b41 -796b96d1c402326528b4ba3c12ee9d92d0e212e9 796b96d1c402326528b4ba3c12ee9d92d0e212e9 -7d8f2eb8fbd90b7d895b6587331446edb1f3146b 7d8f2eb8fbd90b7d895b6587331446edb1f3146b -7e2feb8106ccf6da8fb4f11cf1d44b817c4a22d7 7e2feb8106ccf6da8fb4f11cf1d44b817c4a22d7 -8129560efeaf185ef1ef3cac5cd78383995b145a 8129560efeaf185ef1ef3cac5cd78383995b145a -8354c094ea61d80dd3d9462e303d4261ffcb1892 8354c094ea61d80dd3d9462e303d4261ffcb1892 -87a0de75bb09f4848f55abc1eb03c4fc20d13525 87a0de75bb09f4848f55abc1eb03c4fc20d13525 -88e33b7e99ede588bc2ce54be2327a0dda6325ac 88e33b7e99ede588bc2ce54be2327a0dda6325ac -8954f4c473e33ee0eb605a7090e5735bf3867961 8954f4c473e33ee0eb605a7090e5735bf3867961 -89f94772682096261658d8ff92fb3298a82427b3 89f94772682096261658d8ff92fb3298a82427b3 -8a409d25d744bd745e7a7ae0c9e76440b2def1ae 8a409d25d744bd745e7a7ae0c9e76440b2def1ae -8c3dca558ce2b3443f1cd95ce86d7dfde3fa7dbd 8c3dca558ce2b3443f1cd95ce86d7dfde3fa7dbd -8c88439248a753c368b833ee55e8310c03737afe 8c88439248a753c368b833ee55e8310c03737afe -8ccc9943ccba295c4d35fda506f4f919df64f818 8ccc9943ccba295c4d35fda506f4f919df64f818 -8cf5341121fb5918486affd14556a01f0f8398ca 8cf5341121fb5918486affd14556a01f0f8398ca -8d0eaa1dbb78fb9df513030d3187829ac57afd6d 8d0eaa1dbb78fb9df513030d3187829ac57afd6d -8e86fe5f4f12fd10c3970f929d237d822b95385b 8e86fe5f4f12fd10c3970f929d237d822b95385b -900b01e5b86403ddc8a882c78e83b77f9d9a4bca 900b01e5b86403ddc8a882c78e83b77f9d9a4bca -90e0de231d26236502b12c1d6868afbd52757c98 90e0de231d26236502b12c1d6868afbd52757c98 -925b2667222d3bda1b05b4afae1cd114869d7dcf 925b2667222d3bda1b05b4afae1cd114869d7dcf -94bb02fe3b8aee70415af5caf5c86a0a72a71e33 94bb02fe3b8aee70415af5caf5c86a0a72a71e33 -94e2c6beb00cdb71df7c28efe30e2726272fe527 94e2c6beb00cdb71df7c28efe30e2726272fe527 -94e868cc2a3e395aefd09ed3b86bec597b6c138e 94e868cc2a3e395aefd09ed3b86bec597b6c138e -95abe018ec6a5ddccd0e3900e9b3b03ece7df6e6 95abe018ec6a5ddccd0e3900e9b3b03ece7df6e6 -976a2742308b3194ca482b692adfadf6e64b5526 976a2742308b3194ca482b692adfadf6e64b5526 -98ad9b408df48383fc7aaa6012d7cad96d499359 98ad9b408df48383fc7aaa6012d7cad96d499359 -9c113e185938fcd0e21af6b7f9773ef96ac3d83e 9c113e185938fcd0e21af6b7f9773ef96ac3d83e -9cd9d37f2025c7d8f242226e6a99d7404cb3dbe6 9cd9d37f2025c7d8f242226e6a99d7404cb3dbe6 -9e8c721ee0cc3e4a39215b3042634151580ab01a 9e8c721ee0cc3e4a39215b3042634151580ab01a -9fa8a5492ea5e52de8ce4a5f32e9fad303e747a9 9fa8a5492ea5e52de8ce4a5f32e9fad303e747a9 -a2ead55189eb551b97379775971ab13fab538407 a2ead55189eb551b97379775971ab13fab538407 -a54fb0f30f6048101cad79c191a70e5a9c263746 a54fb0f30f6048101cad79c191a70e5a9c263746 -a78b45f54c3c214eb64d08a9dd46f928f1abe95e a78b45f54c3c214eb64d08a9dd46f928f1abe95e -aa17a1311472e013fa2900af786e5ecbd96ab071 aa17a1311472e013fa2900af786e5ecbd96ab071 -aaf6f29c99a183e6b558abc1f84895d8e824a92d aaf6f29c99a183e6b558abc1f84895d8e824a92d -ab5218f8dbfb8a6fcaef2d88e40b681591229193 ab5218f8dbfb8a6fcaef2d88e40b681591229193 -abf74a0fa2c7ab37e9f79cb3495c73203c0006a4 abf74a0fa2c7ab37e9f79cb3495c73203c0006a4 -ad1714780f000cd7e3efc1e7965c7b1b9bc816f6 ad1714780f000cd7e3efc1e7965c7b1b9bc816f6 -ae19a28f5be753b7de15acb3ec07c5d9557901f7 ae19a28f5be753b7de15acb3ec07c5d9557901f7 -ae2ed500c037a90f85d55d6ef8bc70728d4f716a ae2ed500c037a90f85d55d6ef8bc70728d4f716a -aee04e77bfbd6601adbcd5a46435f059e31cf6e4 aee04e77bfbd6601adbcd5a46435f059e31cf6e4 -af6480effb6b4339eb78b77311634c546f8c6d11 af6480effb6b4339eb78b77311634c546f8c6d11 -b281906f51af72f38c5e75c549c5393402d77eac b281906f51af72f38c5e75c549c5393402d77eac -b2d1d1b5bf17bab6942d313d1347ec4952f7b19b b2d1d1b5bf17bab6942d313d1347ec4952f7b19b -b3c723a462fda42bf18d738b96430e7ba20e88aa b3c723a462fda42bf18d738b96430e7ba20e88aa -b4f96c6c8413d4bc2c8fb5994232ad158d8475a9 b4f96c6c8413d4bc2c8fb5994232ad158d8475a9 -b5a717d82d7ba9ea31228d97c4207f4c9fb9066c b5a717d82d7ba9ea31228d97c4207f4c9fb9066c -b803d30a659910d127644c3a32aaf3fac6b2cc25 b803d30a659910d127644c3a32aaf3fac6b2cc25 -b865391e7738ff0e9d98e75a1282deb6d0f0ea66 b865391e7738ff0e9d98e75a1282deb6d0f0ea66 -ba15723a143661719cb66dac3f730fe8b96ef204 ba15723a143661719cb66dac3f730fe8b96ef204 -bb19195469431a0e2b94832ea9e7a60b1e30c6fc bb19195469431a0e2b94832ea9e7a60b1e30c6fc -bba2a55c6e7916c40229b27a110ce72aa4244461 bba2a55c6e7916c40229b27a110ce72aa4244461 -bc8d3f0e60565567a8b8598972614dce7d4ffccd bc8d3f0e60565567a8b8598972614dce7d4ffccd -bdfeb5802b314a0f050ca33e3a727d9b88968e50 bdfeb5802b314a0f050ca33e3a727d9b88968e50 -be60294daf91a8fb201a1802c75a3b2be4acf4a7 be60294daf91a8fb201a1802c75a3b2be4acf4a7 -be746f4096f772a5e4a461263375f0ce939fd21c be746f4096f772a5e4a461263375f0ce939fd21c -be7f0b6dc6491f3f8ee6b511d5f4d46ccf5ca09c be7f0b6dc6491f3f8ee6b511d5f4d46ccf5ca09c -bedd2b266cc4d22b26a6744339af6b227541a37b bedd2b266cc4d22b26a6744339af6b227541a37b -bfff621a7ca4e6baf72151ab8918fbc19391a46b bfff621a7ca4e6baf72151ab8918fbc19391a46b -c14ab2e77f78b3fde66b6235c7170b6afd487a29 c14ab2e77f78b3fde66b6235c7170b6afd487a29 -c167e70d8b20ec2254115c7b72673605b6a27625 c167e70d8b20ec2254115c7b72673605b6a27625 -c1b4c398b44cec672dc8a32b83e4ec489466881e c1b4c398b44cec672dc8a32b83e4ec489466881e -c2e61df070b30a8bf65737b367765afaf4a7c6bc c2e61df070b30a8bf65737b367765afaf4a7c6bc -c423cfc72547100e9f9db1aeeb205bc6e5154309 c423cfc72547100e9f9db1aeeb205bc6e5154309 -c546653a2f4a9401b1acb3de2d72b4609af86052 c546653a2f4a9401b1acb3de2d72b4609af86052 -c6edc913360a90fa79fec0063053ff6d5d672f6a c6edc913360a90fa79fec0063053ff6d5d672f6a -c74ffc68f201fd49753643bb8f15878bde9ddcbd c74ffc68f201fd49753643bb8f15878bde9ddcbd -c86b0bc3ef91cd92d5020d809938560c08d3ad1e c86b0bc3ef91cd92d5020d809938560c08d3ad1e -c88c45cc9facb1fd6a9accfe9baec6360b7d431e c88c45cc9facb1fd6a9accfe9baec6360b7d431e -c8a4c64aafacbc447fa4474a04fd7e2400c901f9 c8a4c64aafacbc447fa4474a04fd7e2400c901f9 -c8b3d08af1d714a4ebfb4f3e011026a90223a9fb c8b3d08af1d714a4ebfb4f3e011026a90223a9fb -c9559136f0fdbe4b4f9bdab6dc244092221d8791 c9559136f0fdbe4b4f9bdab6dc244092221d8791 -c9c7730de063da9473cfb52991f3da2afb30e455 c9c7730de063da9473cfb52991f3da2afb30e455 -cb8b57a12903e965d37b18597d0c2a3a94a5950f cb8b57a12903e965d37b18597d0c2a3a94a5950f -d0103879af61feff70b97819b27973aad422b67d d0103879af61feff70b97819b27973aad422b67d -d0b64b936318af6541ae64ad2830fc6a04f38abe d0b64b936318af6541ae64ad2830fc6a04f38abe -d1c7ba91853fca818c6ae6c5c29d54a464ebf1fc d1c7ba91853fca818c6ae6c5c29d54a464ebf1fc -d2e861647db42b4d804fc1c3363760db9b6feb32 d2e861647db42b4d804fc1c3363760db9b6feb32 -d46540f0434e01361d3457dd8e7adf0e33fd156a d46540f0434e01361d3457dd8e7adf0e33fd156a -d6e2a3949ffdfbccf6eb392cad0b2e425e90b8cf d6e2a3949ffdfbccf6eb392cad0b2e425e90b8cf -d7710f9abe38cd77d2e4414d2611bd1cc509bcbc d7710f9abe38cd77d2e4414d2611bd1cc509bcbc -d78f564cf0c941fc6e9af1dad4c8503b755d567d d78f564cf0c941fc6e9af1dad4c8503b755d567d -d7913894b8ec4919bbd2a5a1e550e961eaac2708 d7913894b8ec4919bbd2a5a1e550e961eaac2708 -dbc29510f90ed2d462f3f98568281f4bfbadae1f dbc29510f90ed2d462f3f98568281f4bfbadae1f -dc4e4aeeb1400f75fa40bfd4d2503a029c03c52c dc4e4aeeb1400f75fa40bfd4d2503a029c03c52c -dd08923774bf9855ce3fa034a5201c597e45b780 dd08923774bf9855ce3fa034a5201c597e45b780 -ddc808f94f89f623fee361e510d505edef1a2ebf ddc808f94f89f623fee361e510d505edef1a2ebf -e0d41aec9e990af54e362447b0478003081bfc4d e0d41aec9e990af54e362447b0478003081bfc4d -e1d0d95d881f314f3314eeafd1acb10c7d7db140 e1d0d95d881f314f3314eeafd1acb10c7d7db140 -e2508c83cc1b77af7bbeae6671efa899433c183d e2508c83cc1b77af7bbeae6671efa899433c183d -e4f41049713e4c689f7dbd69d34db8500ca0c01a e4f41049713e4c689f7dbd69d34db8500ca0c01a -e7758e0943c0589f31b874e5e388e78502695cbe e7758e0943c0589f31b874e5e388e78502695cbe -e9ad19bb6a8eb6b49a695c8ad20518c692c98f65 e9ad19bb6a8eb6b49a695c8ad20518c692c98f65 -ee7e1e002c00268555784c5b57871addf209d565 ee7e1e002c00268555784c5b57871addf209d565 -f03a3535f7e2c52fb694e52c2648468b953d91c0 f03a3535f7e2c52fb694e52c2648468b953d91c0 -f0f4c78dd18003cbb3af0e8ff85a8e14388ecc05 f0f4c78dd18003cbb3af0e8ff85a8e14388ecc05 -f1f1ec6281d556093b203f341b89738190d6f527 f1f1ec6281d556093b203f341b89738190d6f527 -f2519076ca2a10da3ba7dbacb6bcd90384364bbf f2519076ca2a10da3ba7dbacb6bcd90384364bbf -f3642961c9660f495dec47f5e4e4fc37e6b077e3 f3642961c9660f495dec47f5e4e4fc37e6b077e3 -f8a89ef59b4f74566cb2b086b1a88eaabd3ccb4c f8a89ef59b4f74566cb2b086b1a88eaabd3ccb4c -f9d4bfa48c9bdf9a794351ed3772bae71a97e8b4 f9d4bfa48c9bdf9a794351ed3772bae71a97e8b4 -fa14f4295e56b3f83cf17dd6b4113bb9f78faa4a fa14f4295e56b3f83cf17dd6b4113bb9f78faa4a -fa4e443040e88b54ad7ba28064d7c15acb137a10 fa4e443040e88b54ad7ba28064d7c15acb137a10 -fa9439302b7483c7dffdae0703cf6a617389033e fa9439302b7483c7dffdae0703cf6a617389033e -fb97b76d7243835c00c4e15d84a7ebf66dcfd7de fb97b76d7243835c00c4e15d84a7ebf66dcfd7de -fbf29c060a931fcac39fddedfc54d7b0707b88a2 fbf29c060a931fcac39fddedfc54d7b0707b88a2 -fbf58295a33eabf503fcf991f050a7ea58bba3b0 fbf58295a33eabf503fcf991f050a7ea58bba3b0 Binary files old/nebula-1.9.4/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.rev and new/nebula-1.9.5/.git/objects/pack/pack-3da6a4e13b967ae09d434fe60686b92b95d79b21.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-45eace6432ca8a5611541997f72592230dc5a5f1.idx and new/nebula-1.9.5/.git/objects/pack/pack-45eace6432ca8a5611541997f72592230dc5a5f1.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-45eace6432ca8a5611541997f72592230dc5a5f1.pack and new/nebula-1.9.5/.git/objects/pack/pack-45eace6432ca8a5611541997f72592230dc5a5f1.pack differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-45eace6432ca8a5611541997f72592230dc5a5f1.rev and new/nebula-1.9.5/.git/objects/pack/pack-45eace6432ca8a5611541997f72592230dc5a5f1.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-47e6d1aa790f605aac4bc9437099dbfe405efd88.idx and new/nebula-1.9.5/.git/objects/pack/pack-47e6d1aa790f605aac4bc9437099dbfe405efd88.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-47e6d1aa790f605aac4bc9437099dbfe405efd88.pack and new/nebula-1.9.5/.git/objects/pack/pack-47e6d1aa790f605aac4bc9437099dbfe405efd88.pack differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-47e6d1aa790f605aac4bc9437099dbfe405efd88.rev and new/nebula-1.9.5/.git/objects/pack/pack-47e6d1aa790f605aac4bc9437099dbfe405efd88.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-498ab9e50a6b091b0bbd70ff5eb12341d6034587.idx and new/nebula-1.9.5/.git/objects/pack/pack-498ab9e50a6b091b0bbd70ff5eb12341d6034587.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-498ab9e50a6b091b0bbd70ff5eb12341d6034587.pack and new/nebula-1.9.5/.git/objects/pack/pack-498ab9e50a6b091b0bbd70ff5eb12341d6034587.pack differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-498ab9e50a6b091b0bbd70ff5eb12341d6034587.rev and new/nebula-1.9.5/.git/objects/pack/pack-498ab9e50a6b091b0bbd70ff5eb12341d6034587.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-7d0a5336e099ab759227a44c98cc73c8e9f9d566.idx and new/nebula-1.9.5/.git/objects/pack/pack-7d0a5336e099ab759227a44c98cc73c8e9f9d566.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-7d0a5336e099ab759227a44c98cc73c8e9f9d566.pack and new/nebula-1.9.5/.git/objects/pack/pack-7d0a5336e099ab759227a44c98cc73c8e9f9d566.pack differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-7d0a5336e099ab759227a44c98cc73c8e9f9d566.rev and new/nebula-1.9.5/.git/objects/pack/pack-7d0a5336e099ab759227a44c98cc73c8e9f9d566.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.idx and new/nebula-1.9.5/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.pack and new/nebula-1.9.5/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.pack differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.promisor new/nebula-1.9.5/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.promisor --- old/nebula-1.9.4/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.promisor 1970-01-01 01:00:00.000000000 +0100 +++ new/nebula-1.9.5/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.promisor 2024-12-06 15:50:24.000000000 +0100 @@ -0,0 +1,43 @@ +3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 HEAD +0af7e6a1ddadd96dfe967ba49e456f2c67969b1e refs/heads/add-http-pprof +21a117a156ead37d8ef1f1484e820167e7162dd9 refs/heads/cert-v2 +006479fd15e4bc01c3c17dad3b31c32fd0202351 refs/heads/dependabot/go_modules/github.com/gaissmai/bart-0.13.3 +52e752f4a9277c81e483e327b1094f737158f39b refs/heads/dependabot/go_modules/github.com/prometheus/client_golang-1.20.5 +9bd66a5506158d694c63e026f6a08246074435ea refs/heads/dependabot/go_modules/github.com/stretchr/testify-1.10.0 +a78d07997056def51b33ecc781318ea1f043a50a refs/heads/dependabot/go_modules/golang-x-dependencies-687dc3a1d5 +c87dfd309494084dab560067ff47d852fa3bff06 refs/heads/dependabot/go_modules/protobuf-dependencies-2ffac51044 +6111aa8b704c33626da6c9cd69c985ea163abdc6 refs/heads/go123 +7a36dd057bbf8f3b6e9b3849bc9ca1365a2fb3c5 refs/heads/holepunch-remote-allow-list +5c6ac0710f53f045e351cf642df412179b33db7a refs/heads/hostmap-split +db11e2f1af19017d21ef5912a5613d48b9db3d02 refs/heads/interface-hooks +9c6fb08a6dd15e950731a0440691c234e4227b30 refs/heads/make-boringcrypto-checklinkname +3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 refs/heads/master +7ac51c1af21b71e1136cc90ee7d52b4a1d0dbd0a refs/heads/multiport +77eced39ddcc7941df83b7e15ae4a89bbef27035 refs/heads/mutex-debug +06372e12f1a2fd763c2a8a9d465f5b80511de614 refs/heads/prometheus-static-labels +6d5299715ebb720197f0095b8c287ff0b94928f5 refs/heads/psk +14875480f3ae6e713a9f3b02339d0bbf16d93ecb refs/heads/psk-v2 +b55b9019a72c7320b5c6dd54d2c31ad89f1e8990 refs/heads/release-1.9 +b6c6b96c79a5c64d98fd77162c4427811e69c2e1 refs/heads/windows_udp_buffer_setting +0867455a0b7693b8e77644bfb4bb21a253f19158 refs/heads/yaml-v3 +f9d3d521b62aa52463d008ef4e2f2133daaa0b4c refs/tags/v1.0.0 +0312a3e4408836e2a58a08171c31d7b13ae917e2 refs/tags/v1.1.0 +019d573fd023224454e7dce0d68fcf4155f77b91 refs/tags/v1.2.0 +14bd5487d818474fcd39a12b12789a6daeaa210a refs/tags/v1.3.0 +8ef4213a01084719c80a7bd3d1c04e3999ba673c refs/tags/v1.4.0 +57a32f7c15f1ea105507958aac538ae736474158 refs/tags/v1.5.0 +6f6452112c7bd441dc4bea2134a9cda3faea858a refs/tags/v1.5.2 +d2847cddd89fb1c44b3da10a84e7a9b3e2f55131 refs/tags/v1.6.0 +e6f8783d68238d851832a892ece04b0877644f4c refs/tags/v1.6.1 +2bd87e2fd9648115aae5eec6c8405dff4415bb60 refs/tags/v1.7.0 +dc15e3c8f7e27deb87260749015bcc9d80846314 refs/tags/v1.7.1 +fe5893ceb0e59a00921d412c542351af21858279 refs/tags/v1.7.2 +2b49fed0ff9829f2cddff6b9b84daa4573015ba0 refs/tags/v1.8.0 +8a6a50394fc0af13759121a33f6b822da3d7e2b0 refs/tags/v1.8.1 +0627ffad3e6db253fee4309fb2fbf6c3e6bfc138 refs/tags/v1.8.2 +2e19289b18f2617e9b89ca1017795861f79e3001 refs/tags/v1.9.0 +c9a28bc6ee349611a4946e83d51729f4656fdcd7 refs/tags/v1.9.1 +72d867cdb6bd15dccc51a64ecd5c6af545996298 refs/tags/v1.9.2 +68d6c921d3f355bce2be65450d99def28c957482 refs/tags/v1.9.3 +50504c0f3d54a87ed608587010d6358936e1587a refs/tags/v1.9.4 +a2dd225410da9c21b51df1312dc8aa0bf8358c3c refs/tags/v1.9.5 Binary files old/nebula-1.9.4/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.rev and new/nebula-1.9.5/.git/objects/pack/pack-9b4af6c0de25ecaa195dd27c77cd176d65405b82.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.idx and new/nebula-1.9.5/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.pack and new/nebula-1.9.5/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.pack differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.promisor new/nebula-1.9.5/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.promisor --- old/nebula-1.9.4/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.promisor 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.promisor 1970-01-01 01:00:00.000000000 +0100 @@ -1,38 +0,0 @@ -16eaae306afe95ac9876e333fc1636c98cd999a4 HEAD -0af7e6a1ddadd96dfe967ba49e456f2c67969b1e refs/heads/add-http-pprof -93c5a8c994f044ec3721aaa7734f5633f4b2a923 refs/heads/cert-interface -95049cff71c222925f5be2a5f3de88436a4491b1 refs/heads/dependabot/go_modules/github.com/gaissmai/bart-0.12.8 -32ebcbcf2be68a9fec6b807cb1c0df0509f6060e refs/heads/dependabot/go_modules/github.com/miekg/dns-1.1.62 -3d22a81f39f5efddf4445a30db6dc425f65505c8 refs/heads/dependabot/go_modules/github.com/prometheus/client_golang-1.20.3 -d5576edd43e862d89f4e75b57d9a0948b33e82c5 refs/heads/dependabot/go_modules/github.com/vishvananda/netlink-1.3.0 -6111aa8b704c33626da6c9cd69c985ea163abdc6 refs/heads/go123 -7445823ee5d3e9ea09f59f8ea0fe6f7f2ece9208 refs/heads/holepunch-remote-allow-list -db11e2f1af19017d21ef5912a5613d48b9db3d02 refs/heads/interface-hooks -9c6fb08a6dd15e950731a0440691c234e4227b30 refs/heads/make-boringcrypto-checklinkname -16eaae306afe95ac9876e333fc1636c98cd999a4 refs/heads/master -b445d14ddb2f356222631da38d45dc978608a9d8 refs/heads/multiport -77eced39ddcc7941df83b7e15ae4a89bbef27035 refs/heads/mutex-debug -06372e12f1a2fd763c2a8a9d465f5b80511de614 refs/heads/prometheus-static-labels -6d5299715ebb720197f0095b8c287ff0b94928f5 refs/heads/psk -b6c6b96c79a5c64d98fd77162c4427811e69c2e1 refs/heads/windows_udp_buffer_setting -0867455a0b7693b8e77644bfb4bb21a253f19158 refs/heads/yaml-v3 -f9d3d521b62aa52463d008ef4e2f2133daaa0b4c refs/tags/v1.0.0 -0312a3e4408836e2a58a08171c31d7b13ae917e2 refs/tags/v1.1.0 -019d573fd023224454e7dce0d68fcf4155f77b91 refs/tags/v1.2.0 -14bd5487d818474fcd39a12b12789a6daeaa210a refs/tags/v1.3.0 -8ef4213a01084719c80a7bd3d1c04e3999ba673c refs/tags/v1.4.0 -57a32f7c15f1ea105507958aac538ae736474158 refs/tags/v1.5.0 -6f6452112c7bd441dc4bea2134a9cda3faea858a refs/tags/v1.5.2 -d2847cddd89fb1c44b3da10a84e7a9b3e2f55131 refs/tags/v1.6.0 -e6f8783d68238d851832a892ece04b0877644f4c refs/tags/v1.6.1 -2bd87e2fd9648115aae5eec6c8405dff4415bb60 refs/tags/v1.7.0 -dc15e3c8f7e27deb87260749015bcc9d80846314 refs/tags/v1.7.1 -fe5893ceb0e59a00921d412c542351af21858279 refs/tags/v1.7.2 -2b49fed0ff9829f2cddff6b9b84daa4573015ba0 refs/tags/v1.8.0 -8a6a50394fc0af13759121a33f6b822da3d7e2b0 refs/tags/v1.8.1 -0627ffad3e6db253fee4309fb2fbf6c3e6bfc138 refs/tags/v1.8.2 -2e19289b18f2617e9b89ca1017795861f79e3001 refs/tags/v1.9.0 -c9a28bc6ee349611a4946e83d51729f4656fdcd7 refs/tags/v1.9.1 -72d867cdb6bd15dccc51a64ecd5c6af545996298 refs/tags/v1.9.2 -68d6c921d3f355bce2be65450d99def28c957482 refs/tags/v1.9.3 -50504c0f3d54a87ed608587010d6358936e1587a refs/tags/v1.9.4 Binary files old/nebula-1.9.4/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.rev and new/nebula-1.9.5/.git/objects/pack/pack-a9c1635eb7f7b90fd55fe1b20160b3e0364cfe3c.rev differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-d604f1ece5805059d9f49c3f33f58a2a40efdc04.idx and new/nebula-1.9.5/.git/objects/pack/pack-d604f1ece5805059d9f49c3f33f58a2a40efdc04.idx differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-d604f1ece5805059d9f49c3f33f58a2a40efdc04.pack and new/nebula-1.9.5/.git/objects/pack/pack-d604f1ece5805059d9f49c3f33f58a2a40efdc04.pack differ Binary files old/nebula-1.9.4/.git/objects/pack/pack-d604f1ece5805059d9f49c3f33f58a2a40efdc04.rev and new/nebula-1.9.5/.git/objects/pack/pack-d604f1ece5805059d9f49c3f33f58a2a40efdc04.rev differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/packed-refs new/nebula-1.9.5/.git/packed-refs --- old/nebula-1.9.4/.git/packed-refs 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/packed-refs 2024-12-06 15:50:24.000000000 +0100 @@ -1,19 +1,23 @@ # pack-refs with: peeled fully-peeled sorted 0af7e6a1ddadd96dfe967ba49e456f2c67969b1e refs/remotes/origin/add-http-pprof -93c5a8c994f044ec3721aaa7734f5633f4b2a923 refs/remotes/origin/cert-interface -95049cff71c222925f5be2a5f3de88436a4491b1 refs/remotes/origin/dependabot/go_modules/github.com/gaissmai/bart-0.12.8 -32ebcbcf2be68a9fec6b807cb1c0df0509f6060e refs/remotes/origin/dependabot/go_modules/github.com/miekg/dns-1.1.62 -3d22a81f39f5efddf4445a30db6dc425f65505c8 refs/remotes/origin/dependabot/go_modules/github.com/prometheus/client_golang-1.20.3 -d5576edd43e862d89f4e75b57d9a0948b33e82c5 refs/remotes/origin/dependabot/go_modules/github.com/vishvananda/netlink-1.3.0 +21a117a156ead37d8ef1f1484e820167e7162dd9 refs/remotes/origin/cert-v2 +006479fd15e4bc01c3c17dad3b31c32fd0202351 refs/remotes/origin/dependabot/go_modules/github.com/gaissmai/bart-0.13.3 +52e752f4a9277c81e483e327b1094f737158f39b refs/remotes/origin/dependabot/go_modules/github.com/prometheus/client_golang-1.20.5 +9bd66a5506158d694c63e026f6a08246074435ea refs/remotes/origin/dependabot/go_modules/github.com/stretchr/testify-1.10.0 +a78d07997056def51b33ecc781318ea1f043a50a refs/remotes/origin/dependabot/go_modules/golang-x-dependencies-687dc3a1d5 +c87dfd309494084dab560067ff47d852fa3bff06 refs/remotes/origin/dependabot/go_modules/protobuf-dependencies-2ffac51044 6111aa8b704c33626da6c9cd69c985ea163abdc6 refs/remotes/origin/go123 -7445823ee5d3e9ea09f59f8ea0fe6f7f2ece9208 refs/remotes/origin/holepunch-remote-allow-list +7a36dd057bbf8f3b6e9b3849bc9ca1365a2fb3c5 refs/remotes/origin/holepunch-remote-allow-list +5c6ac0710f53f045e351cf642df412179b33db7a refs/remotes/origin/hostmap-split db11e2f1af19017d21ef5912a5613d48b9db3d02 refs/remotes/origin/interface-hooks 9c6fb08a6dd15e950731a0440691c234e4227b30 refs/remotes/origin/make-boringcrypto-checklinkname -16eaae306afe95ac9876e333fc1636c98cd999a4 refs/remotes/origin/master -b445d14ddb2f356222631da38d45dc978608a9d8 refs/remotes/origin/multiport +3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 refs/remotes/origin/master +7ac51c1af21b71e1136cc90ee7d52b4a1d0dbd0a refs/remotes/origin/multiport 77eced39ddcc7941df83b7e15ae4a89bbef27035 refs/remotes/origin/mutex-debug 06372e12f1a2fd763c2a8a9d465f5b80511de614 refs/remotes/origin/prometheus-static-labels 6d5299715ebb720197f0095b8c287ff0b94928f5 refs/remotes/origin/psk +14875480f3ae6e713a9f3b02339d0bbf16d93ecb refs/remotes/origin/psk-v2 +b55b9019a72c7320b5c6dd54d2c31ad89f1e8990 refs/remotes/origin/release-1.9 b6c6b96c79a5c64d98fd77162c4427811e69c2e1 refs/remotes/origin/windows_udp_buffer_setting 0867455a0b7693b8e77644bfb4bb21a253f19158 refs/remotes/origin/yaml-v3 f9d3d521b62aa52463d008ef4e2f2133daaa0b4c refs/tags/v1.0.0 @@ -55,3 +59,5 @@ ^b14bad586ac4eb922fe11c1a4f360e223bd8dc8b 50504c0f3d54a87ed608587010d6358936e1587a refs/tags/v1.9.4 ^ab81b62ea05814f3eebc0ad545aabcc8b704052b +a2dd225410da9c21b51df1312dc8aa0bf8358c3c refs/tags/v1.9.5 +^b55b9019a72c7320b5c6dd54d2c31ad89f1e8990 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/.git/refs/heads/master new/nebula-1.9.5/.git/refs/heads/master --- old/nebula-1.9.4/.git/refs/heads/master 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/.git/refs/heads/master 2024-12-06 15:50:24.000000000 +0100 @@ -1 +1 @@ -16eaae306afe95ac9876e333fc1636c98cd999a4 +3e6c75573fd55d4bcdb6ad19f8c362d59bb1d9f0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/CHANGELOG.md new/nebula-1.9.5/CHANGELOG.md --- old/nebula-1.9.4/CHANGELOG.md 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/CHANGELOG.md 2024-12-06 15:50:24.000000000 +0100 @@ -7,6 +7,16 @@ ## [Unreleased] +## [1.9.5] - 2024-12-05 + +### Added + +- Gracefully ignore v2 certificates. (#1282) + +### Fixed + +- Fix relays that refuse to re-establish after one of the remote tunnel pairs breaks. (#1277) + ## [1.9.4] - 2024-09-09 ### Added @@ -664,7 +674,8 @@ - Initial public release. -[Unreleased]: https://github.com/slackhq/nebula/compare/v1.9.4...HEAD +[Unreleased]: https://github.com/slackhq/nebula/compare/v1.9.5...HEAD +[1.9.5]: https://github.com/slackhq/nebula/releases/tag/v1.9.5 [1.9.4]: https://github.com/slackhq/nebula/releases/tag/v1.9.4 [1.9.3]: https://github.com/slackhq/nebula/releases/tag/v1.9.3 [1.9.2]: https://github.com/slackhq/nebula/releases/tag/v1.9.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/cert/ca.go new/nebula-1.9.5/cert/ca.go --- old/nebula-1.9.4/cert/ca.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/cert/ca.go 2024-12-06 15:50:24.000000000 +0100 @@ -24,31 +24,39 @@ // NewCAPoolFromBytes will create a new CA pool from the provided // input bytes, which must be a PEM-encoded set of nebula certificates. +// If the pool contains unsupported certificates, they will generate warnings +// in the []error return arg. // If the pool contains any expired certificates, an ErrExpired will be // returned along with the pool. The caller must handle any such errors. -func NewCAPoolFromBytes(caPEMs []byte) (*NebulaCAPool, error) { +func NewCAPoolFromBytes(caPEMs []byte) (*NebulaCAPool, []error, error) { pool := NewCAPool() var err error - var expired bool + var warnings []error + good := 0 + for { caPEMs, err = pool.AddCACertificate(caPEMs) if errors.Is(err, ErrExpired) { - expired = true - err = nil - } - if err != nil { - return nil, err + warnings = append(warnings, err) + } else if errors.Is(err, ErrInvalidPEMCertificateUnsupported) { + warnings = append(warnings, err) + } else if err != nil { + return nil, warnings, err + } else { + // Only consider a good certificate if there were no errors present + good++ } + if len(caPEMs) == 0 || strings.TrimSpace(string(caPEMs)) == "" { break } } - if expired { - return pool, ErrExpired + if good == 0 { + return nil, warnings, errors.New("no valid CA certificates present") } - return pool, nil + return pool, warnings, nil } // AddCACertificate verifies a Nebula CA certificate and adds it to the pool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/cert/cert.go new/nebula-1.9.5/cert/cert.go --- old/nebula-1.9.4/cert/cert.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/cert/cert.go 2024-12-06 15:50:24.000000000 +0100 @@ -28,6 +28,7 @@ const ( CertBanner = "NEBULA CERTIFICATE" + CertificateV2Banner = "NEBULA CERTIFICATE V2" X25519PrivateKeyBanner = "NEBULA X25519 PRIVATE KEY" X25519PublicKeyBanner = "NEBULA X25519 PUBLIC KEY" EncryptedEd25519PrivateKeyBanner = "NEBULA ED25519 ENCRYPTED PRIVATE KEY" @@ -163,6 +164,9 @@ if p == nil { return nil, r, fmt.Errorf("input did not contain a valid PEM encoded block") } + if p.Type == CertificateV2Banner { + return nil, r, fmt.Errorf("%w: %s", ErrInvalidPEMCertificateUnsupported, p.Type) + } if p.Type != CertBanner { return nil, r, fmt.Errorf("bytes did not contain a proper nebula certificate banner") } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/cert/cert_test.go new/nebula-1.9.5/cert/cert_test.go --- old/nebula-1.9.4/cert/cert_test.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/cert/cert_test.go 2024-12-06 15:50:24.000000000 +0100 @@ -5,6 +5,7 @@ "crypto/ecdsa" "crypto/elliptic" "crypto/rand" + "errors" "fmt" "io" "net" @@ -574,6 +575,13 @@ -----END NEBULA CERTIFICATE----- ` + v2 := ` +# valid PEM with the V2 header +-----BEGIN NEBULA CERTIFICATE V2----- +CmYKEG5lYnVsYSBQMjU2IHRlc3Qo4s+7mgYw4tXrsAc6QQRkaW2jFmllYvN4+/k2 +-----END NEBULA CERTIFICATE V2----- +` + rootCA := NebulaCertificate{ Details: NebulaCertificateDetails{ Name: "nebula root ca", @@ -592,33 +600,46 @@ }, } - p, err := NewCAPoolFromBytes([]byte(noNewLines)) + p, warn, err := NewCAPoolFromBytes([]byte(noNewLines)) assert.Nil(t, err) + assert.Nil(t, warn) assert.Equal(t, p.CAs[string("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522")].Details.Name, rootCA.Details.Name) assert.Equal(t, p.CAs[string("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd")].Details.Name, rootCA01.Details.Name) - pp, err := NewCAPoolFromBytes([]byte(withNewLines)) + pp, warn, err := NewCAPoolFromBytes([]byte(withNewLines)) assert.Nil(t, err) + assert.Nil(t, warn) assert.Equal(t, pp.CAs[string("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522")].Details.Name, rootCA.Details.Name) assert.Equal(t, pp.CAs[string("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd")].Details.Name, rootCA01.Details.Name) // expired cert, no valid certs - ppp, err := NewCAPoolFromBytes([]byte(expired)) - assert.Equal(t, ErrExpired, err) - assert.Equal(t, ppp.CAs[string("152070be6bb19bc9e3bde4c2f0e7d8f4ff5448b4c9856b8eccb314fade0229b0")].Details.Name, "expired") + ppp, warn, err := NewCAPoolFromBytes([]byte(expired)) + assert.Error(t, err, "no valid CA certificates present") + assert.Len(t, warn, 1) + assert.Error(t, warn[0], ErrExpired) + assert.Nil(t, ppp) // expired cert, with valid certs - pppp, err := NewCAPoolFromBytes(append([]byte(expired), noNewLines...)) - assert.Equal(t, ErrExpired, err) + pppp, warn, err := NewCAPoolFromBytes(append([]byte(expired), noNewLines...)) + assert.Len(t, warn, 1) + assert.Nil(t, err) + assert.Error(t, warn[0], ErrExpired) assert.Equal(t, pppp.CAs[string("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522")].Details.Name, rootCA.Details.Name) assert.Equal(t, pppp.CAs[string("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd")].Details.Name, rootCA01.Details.Name) assert.Equal(t, pppp.CAs[string("152070be6bb19bc9e3bde4c2f0e7d8f4ff5448b4c9856b8eccb314fade0229b0")].Details.Name, "expired") assert.Equal(t, len(pppp.CAs), 3) - ppppp, err := NewCAPoolFromBytes([]byte(p256)) + ppppp, warn, err := NewCAPoolFromBytes([]byte(p256)) assert.Nil(t, err) + assert.Nil(t, warn) assert.Equal(t, ppppp.CAs[string("a7938893ec8c4ef769b06d7f425e5e46f7a7f5ffa49c3bcf4a86b608caba9159")].Details.Name, rootCAP256.Details.Name) assert.Equal(t, len(ppppp.CAs), 1) + + pppppp, warn, err := NewCAPoolFromBytes(append([]byte(p256), []byte(v2)...)) + assert.Nil(t, err) + assert.True(t, errors.Is(warn[0], ErrInvalidPEMCertificateUnsupported)) + assert.Equal(t, pppppp.CAs[string("a7938893ec8c4ef769b06d7f425e5e46f7a7f5ffa49c3bcf4a86b608caba9159")].Details.Name, rootCAP256.Details.Name) + assert.Equal(t, len(pppppp.CAs), 1) } func appendByteSlices(b ...[]byte) []byte { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/cert/errors.go new/nebula-1.9.5/cert/errors.go --- old/nebula-1.9.4/cert/errors.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/cert/errors.go 2024-12-06 15:50:24.000000000 +0100 @@ -5,10 +5,11 @@ ) var ( - ErrRootExpired = errors.New("root certificate is expired") - ErrExpired = errors.New("certificate is expired") - ErrNotCA = errors.New("certificate is not a CA") - ErrNotSelfSigned = errors.New("certificate is not self-signed") - ErrBlockListed = errors.New("certificate is in the block list") - ErrSignatureMismatch = errors.New("certificate signature did not match") + ErrRootExpired = errors.New("root certificate is expired") + ErrExpired = errors.New("certificate is expired") + ErrNotCA = errors.New("certificate is not a CA") + ErrNotSelfSigned = errors.New("certificate is not self-signed") + ErrBlockListed = errors.New("certificate is in the block list") + ErrSignatureMismatch = errors.New("certificate signature did not match") + ErrInvalidPEMCertificateUnsupported = errors.New("bytes contain an unsupported certificate format") ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/e2e/handshakes_test.go new/nebula-1.9.5/e2e/handshakes_test.go --- old/nebula-1.9.4/e2e/handshakes_test.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/e2e/handshakes_test.go 2024-12-06 15:50:24.000000000 +0100 @@ -6,9 +6,12 @@ import ( "fmt" "net/netip" + "slices" "testing" "time" + "github.com/google/gopacket" + "github.com/google/gopacket/layers" "github.com/sirupsen/logrus" "github.com/slackhq/nebula" "github.com/slackhq/nebula/e2e/router" @@ -369,6 +372,137 @@ //TODO: assert we actually used the relay even though it should be impossible for a tunnel to have occurred without it } +func TestReestablishRelays(t *testing.T) { + ca, _, caKey, _ := NewTestCaCert(time.Now(), time.Now().Add(10*time.Minute), nil, nil, []string{}) + myControl, myVpnIpNet, _, _ := newSimpleServer(ca, caKey, "me ", "10.128.0.1/24", m{"relay": m{"use_relays": true}}) + relayControl, relayVpnIpNet, relayUdpAddr, _ := newSimpleServer(ca, caKey, "relay ", "10.128.0.128/24", m{"relay": m{"am_relay": true}}) + theirControl, theirVpnIpNet, theirUdpAddr, _ := newSimpleServer(ca, caKey, "them ", "10.128.0.2/24", m{"relay": m{"use_relays": true}}) + + // Teach my how to get to the relay and that their can be reached via the relay + myControl.InjectLightHouseAddr(relayVpnIpNet.Addr(), relayUdpAddr) + myControl.InjectRelays(theirVpnIpNet.Addr(), []netip.Addr{relayVpnIpNet.Addr()}) + relayControl.InjectLightHouseAddr(theirVpnIpNet.Addr(), theirUdpAddr) + + // Build a router so we don't have to reason who gets which packet + r := router.NewR(t, myControl, relayControl, theirControl) + defer r.RenderFlow() + + // Start the servers + myControl.Start() + relayControl.Start() + theirControl.Start() + + t.Log("Trigger a handshake from me to them via the relay") + myControl.InjectTunUDPPacket(theirVpnIpNet.Addr(), 80, 80, []byte("Hi from me")) + + p := r.RouteForAllUntilTxTun(theirControl) + r.Log("Assert the tunnel works") + assertUdpPacket(t, []byte("Hi from me"), p, myVpnIpNet.Addr(), theirVpnIpNet.Addr(), 80, 80) + + t.Log("Ensure packet traversal from them to me via the relay") + theirControl.InjectTunUDPPacket(myVpnIpNet.Addr(), 80, 80, []byte("Hi from them")) + + p = r.RouteForAllUntilTxTun(myControl) + r.Log("Assert the tunnel works") + assertUdpPacket(t, []byte("Hi from them"), p, theirVpnIpNet.Addr(), myVpnIpNet.Addr(), 80, 80) + + // If we break the relay's connection to 'them', 'me' needs to detect and recover the connection + r.Log("Close the tunnel") + relayControl.CloseTunnel(theirVpnIpNet.Addr(), true) + + start := len(myControl.GetHostmap().Indexes) + curIndexes := len(myControl.GetHostmap().Indexes) + for curIndexes >= start { + curIndexes = len(myControl.GetHostmap().Indexes) + r.Logf("Wait for the dead index to go away:start=%v indexes, currnet=%v indexes", start, curIndexes) + myControl.InjectTunUDPPacket(theirVpnIpNet.Addr(), 80, 80, []byte("Hi from me should fail")) + + r.RouteForAllExitFunc(func(p *udp.Packet, c *nebula.Control) router.ExitType { + return router.RouteAndExit + }) + time.Sleep(2 * time.Second) + } + r.Log("Dead index went away. Woot!") + r.RenderHostmaps("Me removed hostinfo", myControl, relayControl, theirControl) + // Next packet should re-establish a relayed connection and work just great. + + t.Logf("Assert the tunnel...") + for { + t.Log("RouteForAllUntilTxTun") + myControl.InjectLightHouseAddr(relayVpnIpNet.Addr(), relayUdpAddr) + myControl.InjectRelays(theirVpnIpNet.Addr(), []netip.Addr{relayVpnIpNet.Addr()}) + relayControl.InjectLightHouseAddr(theirVpnIpNet.Addr(), theirUdpAddr) + myControl.InjectTunUDPPacket(theirVpnIpNet.Addr(), 80, 80, []byte("Hi from me")) + + p = r.RouteForAllUntilTxTun(theirControl) + r.Log("Assert the tunnel works") + packet := gopacket.NewPacket(p, layers.LayerTypeIPv4, gopacket.Lazy) + v4 := packet.Layer(layers.LayerTypeIPv4).(*layers.IPv4) + if slices.Compare(v4.SrcIP, myVpnIpNet.Addr().AsSlice()) != 0 { + t.Logf("SrcIP is unexpected...this is not the packet I'm looking for. Keep looking") + continue + } + if slices.Compare(v4.DstIP, theirVpnIpNet.Addr().AsSlice()) != 0 { + t.Logf("DstIP is unexpected...this is not the packet I'm looking for. Keep looking") + continue + } + + udp := packet.Layer(layers.LayerTypeUDP).(*layers.UDP) + if udp == nil { + t.Log("Not a UDP packet. This is not the packet I'm looking for. Keep looking") + continue + } + data := packet.ApplicationLayer() + if data == nil { + t.Log("No data found in packet. This is not the packet I'm looking for. Keep looking.") + continue + } + if string(data.Payload()) != "Hi from me" { + t.Logf("Unexpected payload: '%v', keep looking", string(data.Payload())) + continue + } + t.Log("I found my lost packet. I am so happy.") + break + } + t.Log("Assert the tunnel works the other way, too") + for { + t.Log("RouteForAllUntilTxTun") + theirControl.InjectTunUDPPacket(myVpnIpNet.Addr(), 80, 80, []byte("Hi from them")) + + p = r.RouteForAllUntilTxTun(myControl) + r.Log("Assert the tunnel works") + packet := gopacket.NewPacket(p, layers.LayerTypeIPv4, gopacket.Lazy) + v4 := packet.Layer(layers.LayerTypeIPv4).(*layers.IPv4) + if slices.Compare(v4.DstIP, myVpnIpNet.Addr().AsSlice()) != 0 { + t.Logf("Dst is unexpected...this is not the packet I'm looking for. Keep looking") + continue + } + if slices.Compare(v4.SrcIP, theirVpnIpNet.Addr().AsSlice()) != 0 { + t.Logf("SrcIP is unexpected...this is not the packet I'm looking for. Keep looking") + continue + } + + udp := packet.Layer(layers.LayerTypeUDP).(*layers.UDP) + if udp == nil { + t.Log("Not a UDP packet. This is not the packet I'm looking for. Keep looking") + continue + } + data := packet.ApplicationLayer() + if data == nil { + t.Log("No data found in packet. This is not the packet I'm looking for. Keep looking.") + continue + } + if string(data.Payload()) != "Hi from them" { + t.Logf("Unexpected payload: '%v', keep looking", string(data.Payload())) + continue + } + t.Log("I found my lost packet. I am so happy.") + break + } + r.RenderHostmaps("Final hostmaps", myControl, relayControl, theirControl) + +} + func TestStage1RaceRelays(t *testing.T) { //NOTE: this is a race between me and relay resulting in a full tunnel from me to them via relay ca, _, caKey, _ := NewTestCaCert(time.Now(), time.Now().Add(10*time.Minute), nil, nil, []string{}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/handshake_ix.go new/nebula-1.9.5/handshake_ix.go --- old/nebula-1.9.4/handshake_ix.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/handshake_ix.go 2024-12-06 15:50:24.000000000 +0100 @@ -322,6 +322,9 @@ return } hostinfo.relayState.InsertRelayTo(via.relayHI.vpnIp) + // I successfully received a handshake. Just in case I marked this tunnel as 'Disestablished', ensure + // it's correctly marked as working. + via.relayHI.relayState.UpdateRelayForByIdxState(via.remoteIdx, Established) f.SendVia(via.relayHI, via.relay, msg, make([]byte, 12), make([]byte, mtu), false) f.l.WithField("vpnIp", vpnIp).WithField("relay", via.relayHI.vpnIp). WithField("certName", certName). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/handshake_manager.go new/nebula-1.9.5/handshake_manager.go --- old/nebula-1.9.4/handshake_manager.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/handshake_manager.go 2024-12-06 15:50:24.000000000 +0100 @@ -278,48 +278,8 @@ continue } // Check the relay HostInfo to see if we already established a relay through it - if existingRelay, ok := relayHostInfo.relayState.QueryRelayForByIp(vpnIp); ok { - switch existingRelay.State { - case Established: - hostinfo.logger(hm.l).WithField("relay", relay.String()).Info("Send handshake via relay") - hm.f.SendVia(relayHostInfo, existingRelay, hostinfo.HandshakePacket[0], make([]byte, 12), make([]byte, mtu), false) - case Requested: - hostinfo.logger(hm.l).WithField("relay", relay.String()).Info("Re-send CreateRelay request") - - //TODO: IPV6-WORK - myVpnIpB := hm.f.myVpnNet.Addr().As4() - theirVpnIpB := vpnIp.As4() - - // Re-send the CreateRelay request, in case the previous one was lost. - m := NebulaControl{ - Type: NebulaControl_CreateRelayRequest, - InitiatorRelayIndex: existingRelay.LocalIndex, - RelayFromIp: binary.BigEndian.Uint32(myVpnIpB[:]), - RelayToIp: binary.BigEndian.Uint32(theirVpnIpB[:]), - } - msg, err := m.Marshal() - if err != nil { - hostinfo.logger(hm.l). - WithError(err). - Error("Failed to marshal Control message to create relay") - } else { - // This must send over the hostinfo, not over hm.Hosts[ip] - hm.f.SendMessageToHostInfo(header.Control, 0, relayHostInfo, msg, make([]byte, 12), make([]byte, mtu)) - hm.l.WithFields(logrus.Fields{ - "relayFrom": hm.f.myVpnNet.Addr(), - "relayTo": vpnIp, - "initiatorRelayIndex": existingRelay.LocalIndex, - "relay": relay}). - Info("send CreateRelayRequest") - } - default: - hostinfo.logger(hm.l). - WithField("vpnIp", vpnIp). - WithField("state", existingRelay.State). - WithField("relay", relayHostInfo.vpnIp). - Errorf("Relay unexpected state") - } - } else { + existingRelay, ok := relayHostInfo.relayState.QueryRelayForByIp(vpnIp) + if !ok { // No relays exist or requested yet. if relayHostInfo.remote.IsValid() { idx, err := AddRelay(hm.l, relayHostInfo, hm.mainHostMap, vpnIp, nil, TerminalType, Requested) @@ -352,6 +312,52 @@ Info("send CreateRelayRequest") } } + continue + } + switch existingRelay.State { + case Established: + hostinfo.logger(hm.l).WithField("relay", relay.String()).Info("Send handshake via relay") + hm.f.SendVia(relayHostInfo, existingRelay, hostinfo.HandshakePacket[0], make([]byte, 12), make([]byte, mtu), false) + case Disestablished: + // Mark this relay as 'requested' + relayHostInfo.relayState.UpdateRelayForByIpState(vpnIp, Requested) + fallthrough + case Requested: + hostinfo.logger(hm.l).WithField("relay", relay.String()).Info("Re-send CreateRelay request") + // Re-send the CreateRelay request, in case the previous one was lost. + relayFrom := hm.f.myVpnNet.Addr().As4() + relayTo := vpnIp.As4() + m := NebulaControl{ + Type: NebulaControl_CreateRelayRequest, + InitiatorRelayIndex: existingRelay.LocalIndex, + RelayFromIp: binary.BigEndian.Uint32(relayFrom[:]), + RelayToIp: binary.BigEndian.Uint32(relayTo[:]), + } + + msg, err := m.Marshal() + if err != nil { + hostinfo.logger(hm.l). + WithError(err). + Error("Failed to marshal Control message to create relay") + } else { + // This must send over the hostinfo, not over hm.Hosts[ip] + hm.f.SendMessageToHostInfo(header.Control, 0, relayHostInfo, msg, make([]byte, 12), make([]byte, mtu)) + hm.l.WithFields(logrus.Fields{ + "relayFrom": hm.f.myVpnNet, + "relayTo": vpnIp, + "initiatorRelayIndex": existingRelay.LocalIndex, + "relay": relay}). + Info("send CreateRelayRequest") + } + case PeerRequested: + // PeerRequested only occurs in Forwarding relays, not Terminal relays, and this is a Terminal relay case. + fallthrough + default: + hostinfo.logger(hm.l). + WithField("vpnIp", vpnIp). + WithField("state", existingRelay.State). + WithField("relay", relay). + Errorf("Relay unexpected state") } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/hostmap.go new/nebula-1.9.5/hostmap.go --- old/nebula-1.9.4/hostmap.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/hostmap.go 2024-12-06 15:50:24.000000000 +0100 @@ -35,6 +35,7 @@ Requested = iota PeerRequested Established + Disestablished ) const ( @@ -79,6 +80,28 @@ delete(rs.relays, ip) } +func (rs *RelayState) UpdateRelayForByIpState(vpnIp netip.Addr, state int) { + rs.Lock() + defer rs.Unlock() + if r, ok := rs.relayForByIp[vpnIp]; ok { + newRelay := *r + newRelay.State = state + rs.relayForByIp[newRelay.PeerIp] = &newRelay + rs.relayForByIdx[newRelay.LocalIndex] = &newRelay + } +} + +func (rs *RelayState) UpdateRelayForByIdxState(idx uint32, state int) { + rs.Lock() + defer rs.Unlock() + if r, ok := rs.relayForByIdx[idx]; ok { + newRelay := *r + newRelay.State = state + rs.relayForByIp[newRelay.PeerIp] = &newRelay + rs.relayForByIdx[newRelay.LocalIndex] = &newRelay + } +} + func (rs *RelayState) CopyAllRelayFor() []*Relay { rs.RLock() defer rs.RUnlock() @@ -361,6 +384,7 @@ func (hm *HostMap) unlockedDeleteHostInfo(hostinfo *HostInfo) { primary, ok := hm.Hosts[hostinfo.vpnIp] + isLastHostinfo := hostinfo.next == nil && hostinfo.prev == nil if ok && primary == hostinfo { // The vpnIp pointer points to the same hostinfo as the local index id, we can remove it delete(hm.Hosts, hostinfo.vpnIp) @@ -410,6 +434,12 @@ Debug("Hostmap hostInfo deleted") } + if isLastHostinfo { + // I have lost connectivity to my peers. My relay tunnel is likely broken. Mark the next + // hops as 'Disestablished' so that new relay tunnels are created in the future. + hm.unlockedDisestablishVpnAddrRelayFor(hostinfo) + } + // Clean up any local relay indexes for which I am acting as a relay hop for _, localRelayIdx := range hostinfo.relayState.CopyRelayForIdxs() { delete(hm.Relays, localRelayIdx) } @@ -470,6 +500,27 @@ return nil, nil, errors.New("unable to find host with relay") } +func (hm *HostMap) unlockedDisestablishVpnAddrRelayFor(hi *HostInfo) { + for _, relayHostIp := range hi.relayState.CopyRelayIps() { + if h, ok := hm.Hosts[relayHostIp]; ok { + for h != nil { + h.relayState.UpdateRelayForByIpState(hi.vpnIp, Disestablished) + h = h.next + } + } + } + for _, rs := range hi.relayState.CopyAllRelayFor() { + if rs.Type == ForwardingType { + if h, ok := hm.Hosts[rs.PeerIp]; ok { + for h != nil { + h.relayState.UpdateRelayForByIpState(hi.vpnIp, Disestablished) + h = h.next + } + } + } + } +} + func (hm *HostMap) queryVpnIp(vpnIp netip.Addr, promoteIfce *Interface) *HostInfo { hm.RLock() if h, ok := hm.Hosts[vpnIp]; ok { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/pki.go new/nebula-1.9.5/pki.go --- old/nebula-1.9.4/pki.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/pki.go 2024-12-06 15:50:24.000000000 +0100 @@ -223,22 +223,13 @@ } } - caPool, err := cert.NewCAPoolFromBytes(rawCA) - if errors.Is(err, cert.ErrExpired) { - var expired int - for _, crt := range caPool.CAs { - if crt.Expired(time.Now()) { - expired++ - l.WithField("cert", crt).Warn("expired certificate present in CA pool") - } - } - - if expired >= len(caPool.CAs) { - return nil, errors.New("no valid CA certificates present") - } + caPool, warnings, err := cert.NewCAPoolFromBytes(rawCA) + for _, w := range warnings { + l.WithError(w).Warn("parsing a CA certificate failed") + } - } else if err != nil { - return nil, fmt.Errorf("error while adding CA certificate to CA trust store: %s", err) + if err != nil { + return nil, fmt.Errorf("could not create CA certificate pool: %s", err) } for _, fp := range c.GetStringSlice("pki.blocklist", []string{}) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nebula-1.9.4/relay_manager.go new/nebula-1.9.5/relay_manager.go --- old/nebula-1.9.4/relay_manager.go 2024-09-09 20:11:44.000000000 +0200 +++ new/nebula-1.9.5/relay_manager.go 2024-12-06 15:50:24.000000000 +0100 @@ -146,10 +146,14 @@ rm.l.WithField("relayTo", peerHostInfo.vpnIp).Error("peerRelay does not have Relay state for relayTo") return } - if peerRelay.State == PeerRequested { + switch peerRelay.State { + case Requested: + // I initiated the request to this peer, but haven't heard back from the peer yet. I must wait for this peer + // to respond to complete the connection. + case PeerRequested, Disestablished, Established: + peerHostInfo.relayState.UpdateRelayForByIpState(targetAddr, Established) //TODO: IPV6-WORK b = peerHostInfo.vpnIp.As4() - peerRelay.State = Established resp := NebulaControl{ Type: NebulaControl_CreateRelayResponse, ResponderRelayIndex: peerRelay.LocalIndex, @@ -215,6 +219,21 @@ "existingRemoteIndex": existingRelay.RemoteIndex}).Error("Existing relay mismatch with CreateRelayRequest") return } + case Disestablished: + if existingRelay.RemoteIndex != m.InitiatorRelayIndex { + // We got a brand new Relay request, because its index is different than what we saw before. + // This should never happen. The peer should never change an index, once created. + logMsg.WithFields(logrus.Fields{ + "existingRemoteIndex": existingRelay.RemoteIndex}).Error("Existing relay mismatch with CreateRelayRequest") + return + } + // Mark the relay as 'Established' because it's safe to use again + h.relayState.UpdateRelayForByIpState(from, Established) + case PeerRequested: + // I should never be in this state, because I am terminal, not forwarding. + logMsg.WithFields(logrus.Fields{ + "existingRemoteIndex": existingRelay.RemoteIndex, + "state": existingRelay.State}).Error("Unexpected Relay State found") } } else { _, err := AddRelay(rm.l, h, f.hostMap, from, &m.InitiatorRelayIndex, TerminalType, Established) @@ -226,7 +245,7 @@ relay, ok := h.relayState.QueryRelayForByIp(from) if !ok { - logMsg.Error("Relay State not found") + logMsg.WithField("from", from).Error("Relay State not found") return } @@ -273,103 +292,52 @@ // Only create relays to peers for whom I have a direct connection return } - sendCreateRequest := false var index uint32 var err error targetRelay, ok := peer.relayState.QueryRelayForByIp(from) if ok { index = targetRelay.LocalIndex - if targetRelay.State == Requested { - sendCreateRequest = true - } } else { // Allocate an index in the hostMap for this relay peer index, err = AddRelay(rm.l, peer, f.hostMap, from, nil, ForwardingType, Requested) if err != nil { return } - sendCreateRequest = true } - if sendCreateRequest { - //TODO: IPV6-WORK - fromB := h.vpnIp.As4() - targetB := target.As4() - - // Send a CreateRelayRequest to the peer. - req := NebulaControl{ - Type: NebulaControl_CreateRelayRequest, - InitiatorRelayIndex: index, - RelayFromIp: binary.BigEndian.Uint32(fromB[:]), - RelayToIp: binary.BigEndian.Uint32(targetB[:]), - } - msg, err := req.Marshal() - if err != nil { - logMsg. - WithError(err).Error("relayManager Failed to marshal Control message to create relay") - } else { - f.SendMessageToHostInfo(header.Control, 0, peer, msg, make([]byte, 12), make([]byte, mtu)) - rm.l.WithFields(logrus.Fields{ - //TODO: IPV6-WORK another lazy used to use the req object - "relayFrom": h.vpnIp, - "relayTo": target, - "initiatorRelayIndex": req.InitiatorRelayIndex, - "responderRelayIndex": req.ResponderRelayIndex, - "vpnIp": target}). - Info("send CreateRelayRequest") - } + peer.relayState.UpdateRelayForByIpState(from, Requested) + // Send a CreateRelayRequest to the peer. + fromB := from.As4() + targetB := target.As4() + req := NebulaControl{ + Type: NebulaControl_CreateRelayRequest, + InitiatorRelayIndex: index, + RelayFromIp: binary.BigEndian.Uint32(fromB[:]), + RelayToIp: binary.BigEndian.Uint32(targetB[:]), } - // Also track the half-created Relay state just received - relay, ok := h.relayState.QueryRelayForByIp(target) - if !ok { - // Add the relay - state := PeerRequested - if targetRelay != nil && targetRelay.State == Established { - state = Established - } - _, err := AddRelay(rm.l, h, f.hostMap, target, &m.InitiatorRelayIndex, ForwardingType, state) - if err != nil { - logMsg. - WithError(err).Error("relayManager Failed to allocate a local index for relay") - return - } + msg, err := req.Marshal() + if err != nil { + logMsg. + WithError(err).Error("relayManager Failed to marshal Control message to create relay") } else { - switch relay.State { - case Established: - if relay.RemoteIndex != m.InitiatorRelayIndex { - // We got a brand new Relay request, because its index is different than what we saw before. - // This should never happen. The peer should never change an index, once created. - logMsg.WithFields(logrus.Fields{ - "existingRemoteIndex": relay.RemoteIndex}).Error("Existing relay mismatch with CreateRelayRequest") - return - } - //TODO: IPV6-WORK - fromB := h.vpnIp.As4() - targetB := target.As4() - resp := NebulaControl{ - Type: NebulaControl_CreateRelayResponse, - ResponderRelayIndex: relay.LocalIndex, - InitiatorRelayIndex: relay.RemoteIndex, - RelayFromIp: binary.BigEndian.Uint32(fromB[:]), - RelayToIp: binary.BigEndian.Uint32(targetB[:]), - } - msg, err := resp.Marshal() + f.SendMessageToHostInfo(header.Control, 0, peer, msg, make([]byte, 12), make([]byte, mtu)) + rm.l.WithFields(logrus.Fields{ + //TODO: IPV6-WORK another lazy used to use the req object + "relayFrom": h.vpnIp, + "relayTo": target, + "initiatorRelayIndex": req.InitiatorRelayIndex, + "responderRelayIndex": req.ResponderRelayIndex, + "vpnAddr": target}). + Info("send CreateRelayRequest") + // Also track the half-created Relay state just received + _, ok := h.relayState.QueryRelayForByIp(target) + if !ok { + // Add the relay + _, err := AddRelay(rm.l, h, f.hostMap, target, &m.InitiatorRelayIndex, ForwardingType, PeerRequested) if err != nil { - rm.l. - WithError(err).Error("relayManager Failed to marshal Control CreateRelayResponse message to create relay") - } else { - f.SendMessageToHostInfo(header.Control, 0, h, msg, make([]byte, 12), make([]byte, mtu)) - rm.l.WithFields(logrus.Fields{ - //TODO: IPV6-WORK more lazy, used to use resp object - "relayFrom": h.vpnIp, - "relayTo": target, - "initiatorRelayIndex": resp.InitiatorRelayIndex, - "responderRelayIndex": resp.ResponderRelayIndex, - "vpnIp": h.vpnIp}). - Info("send CreateRelayResponse") + logMsg. + WithError(err).Error("relayManager Failed to allocate a local index for relay") + return } - - case Requested: - // Keep waiting for the other relay to complete } } } ++++++ vendor.tar.zst ++++++
