<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tailscale/ssh/tailssh, branch debug-testwrapper</title>
<subtitle>The easiest, most secure way to use WireGuard and 2FA</subtitle>
<id>http://git.waynecole.info/tailscale/atom?h=debug-testwrapper</id>
<link rel='self' href='http://git.waynecole.info/tailscale/atom?h=debug-testwrapper'/>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/'/>
<updated>2026-01-23T23:49:45Z</updated>
<entry>
<title>all: remove AUTHORS file and references to it</title>
<updated>2026-01-23T23:49:45Z</updated>
<author>
<name>Will Norris</name>
<email>will@tailscale.com</email>
</author>
<published>2026-01-23T21:21:57Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=3ec5be3f510f74738179c1023468343a62a7e00f'/>
<id>urn:sha1:3ec5be3f510f74738179c1023468343a62a7e00f</id>
<content type='text'>
This file was never truly necessary and has never actually been used in
the history of Tailscale's open source releases.

A Brief History of AUTHORS files
---

The AUTHORS file was a pattern developed at Google, originally for
Chromium, then adopted by Go and a bunch of other projects. The problem
was that Chromium originally had a copyright line only recognizing
Google as the copyright holder. Because Google (and most open source
projects) do not require copyright assignemnt for contributions, each
contributor maintains their copyright. Some large corporate contributors
then tried to add their own name to the copyright line in the LICENSE
file or in file headers. This quickly becomes unwieldy, and puts a
tremendous burden on anyone building on top of Chromium, since the
license requires that they keep all copyright lines intact.

The compromise was to create an AUTHORS file that would list all of the
copyright holders. The LICENSE file and source file headers would then
include that list by reference, listing the copyright holder as "The
Chromium Authors".

This also become cumbersome to simply keep the file up to date with a
high rate of new contributors. Plus it's not always obvious who the
copyright holder is. Sometimes it is the individual making the
contribution, but many times it may be their employer. There is no way
for the proejct maintainer to know.

Eventually, Google changed their policy to no longer recommend trying to
keep the AUTHORS file up to date proactively, and instead to only add to
it when requested: https://opensource.google/docs/releasing/authors.
They are also clear that:

&gt; Adding contributors to the AUTHORS file is entirely within the
&gt; project's discretion and has no implications for copyright ownership.

It was primarily added to appease a small number of large contributors
that insisted that they be recognized as copyright holders (which was
entirely their right to do). But it's not truly necessary, and not even
the most accurate way of identifying contributors and/or copyright
holders.

In practice, we've never added anyone to our AUTHORS file. It only lists
Tailscale, so it's not really serving any purpose. It also causes
confusion because Tailscalars put the "Tailscale Inc &amp; AUTHORS" header
in other open source repos which don't actually have an AUTHORS file, so
it's ambiguous what that means.

Instead, we just acknowledge that the contributors to Tailscale (whoever
they are) are copyright holders for their individual contributions. We
also have the benefit of using the DCO (developercertificate.org) which
provides some additional certification of their right to make the
contribution.

The source file changes were purely mechanical with:

    git ls-files | xargs sed -i -e 's/\(Tailscale Inc &amp;\) AUTHORS/\1 contributors/g'

Updates #cleanup

Change-Id: Ia101a4a3005adb9118051b3416f5a64a4a45987d
Signed-off-by: Will Norris &lt;will@tailscale.com&gt;
</content>
</entry>
<entry>
<title>ssh/tailssh: send audit messages on SSH login (Linux)</title>
<updated>2026-01-06T00:53:05Z</updated>
<author>
<name>James Tucker</name>
<email>james@tailscale.com</email>
</author>
<published>2026-01-05T23:18:23Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=39a61888b8b39f443c9a97a66ab538ff011f4e36'/>
<id>urn:sha1:39a61888b8b39f443c9a97a66ab538ff011f4e36</id>
<content type='text'>
Send LOGIN audit messages to the kernel audit subsystem on Linux
when users successfully authenticate to Tailscale SSH. This provides
administrators with audit trail integration via auditd or journald,
recording details about both the Tailscale user (whois) and the
mapped local user account.

The implementation uses raw netlink sockets to send AUDIT_USER_LOGIN
messages to the kernel audit subsystem. It requires CAP_AUDIT_WRITE
capability, which is checked at runtime. If the capability is not
present, audit logging is silently skipped.

Audit messages are sent to the kernel (pid 0) and consumed by either
auditd (written to /var/log/audit/audit.log) or journald (available
via journalctl _TRANSPORT=audit), depending on system configuration.

Note: This may result in duplicate messages on a system where
auditd/journald audit logs are enabled and the system has and supports
`login -h`. Sadly Linux login code paths are still an inconsistent wild
west so we accept the potential duplication rather than trying to avoid
it.

Fixes #18332

Signed-off-by: James Tucker &lt;james@tailscale.com&gt;
</content>
</entry>
<entry>
<title>ssh/tailssh: fix incubator tests on macOS arm64</title>
<updated>2025-11-18T00:20:46Z</updated>
<author>
<name>James Tucker</name>
<email>james@tailscale.com</email>
</author>
<published>2025-11-16T02:35:39Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=41662f51288465842091a357f7e9bc633da6bd4c'/>
<id>urn:sha1:41662f51288465842091a357f7e9bc633da6bd4c</id>
<content type='text'>
Perform a path check first before attempting exec of `true`.

Try /usr/bin/true first, as that is now and increasingly so, the more
common and more portable path.

Fixes tests on macOS arm64 where exec was returning a different kind of
path error than previously checked.

Updates #16569

Signed-off-by: James Tucker &lt;james@tailscale.com&gt;
</content>
</entry>
<entry>
<title>util/backoff: rename logtail/backoff package to util/backoff</title>
<updated>2025-09-28T18:55:07Z</updated>
<author>
<name>Brad Fitzpatrick</name>
<email>bradfitz@tailscale.com</email>
</author>
<published>2025-09-28T18:03:46Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=01e645fae1d3e97d1b43a78ad9b6e5cf5d390c74'/>
<id>urn:sha1:01e645fae1d3e97d1b43a78ad9b6e5cf5d390c74</id>
<content type='text'>
It has nothing to do with logtail and is confusing named like that.

Updates #cleanup
Updates #17323

Change-Id: Idd34587ba186a2416725f72ffc4c5778b0b9db4a
Signed-off-by: Brad Fitzpatrick &lt;bradfitz@tailscale.com&gt;
</content>
</entry>
<entry>
<title>ssh/tailssh: mark TestSSHRecordingCancelsSessionsOnUploadFailure as flaky</title>
<updated>2025-09-17T10:27:00Z</updated>
<author>
<name>Alex Chan</name>
<email>alexc@tailscale.com</email>
</author>
<published>2025-09-17T10:11:35Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=312582bdbfca47948453b446a055c87a40b416d4'/>
<id>urn:sha1:312582bdbfca47948453b446a055c87a40b416d4</id>
<content type='text'>
Updates https://github.com/tailscale/tailscale/issues/7707

Signed-off-by: Alex Chan &lt;alexc@tailscale.com&gt;
</content>
</entry>
<entry>
<title>health,ipn/ipnlocal: introduce eventbus in heath.Tracker (#17085)</title>
<updated>2025-09-16T15:25:29Z</updated>
<author>
<name>Claus Lensbøl</name>
<email>claus@tailscale.com</email>
</author>
<published>2025-09-16T15:25:29Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=2015ce40814dd175f7d441c83d7517a2128b37e4'/>
<id>urn:sha1:2015ce40814dd175f7d441c83d7517a2128b37e4</id>
<content type='text'>
The Tracker was using direct callbacks to ipnlocal. This PR moves those
to be triggered via the eventbus.

Additionally, the eventbus is now closed on exit from tailscaled
explicitly, and health is now a SubSystem in tsd.

Updates #15160

Signed-off-by: Claus Lensbøl &lt;claus@tailscale.com&gt;</content>
</entry>
<entry>
<title>ssh/tailssh: fix path of "true" on Darwin (#16569)</title>
<updated>2025-07-16T15:08:59Z</updated>
<author>
<name>M. J. Fromberger</name>
<email>fromberger@tailscale.com</email>
</author>
<published>2025-07-16T15:08:59Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=67514f5eb2f9737e7d819f43f007be970e17f293'/>
<id>urn:sha1:67514f5eb2f9737e7d819f43f007be970e17f293</id>
<content type='text'>
This is a follow-up to #15351, which fixed the test for Linux but not for
Darwin, which stores its "true" executable in /usr/bin instead of /bin.
Try both paths when not running on Windows.

In addition, disable CGo in the integration test build, which was causing the
linker to fail. These tests do not need CGo, and it appears we had some version
skew with the base image on the runners.

In addition, in error cases the recover step of the permissions check was
spuriously panicking and masking the "real" failure reason. Don't do that check
when a command was not produced.

Updates #15350

Change-Id: Icd91517f45c90f7554310ebf1c888cdfd109f43a
Signed-off-by: M. J. Fromberger &lt;fromberger@tailscale.com&gt;</content>
</entry>
<entry>
<title>ssh/tailssh: display more useful error messages when authentication fails</title>
<updated>2025-06-03T19:00:04Z</updated>
<author>
<name>Percy Wegmann</name>
<email>percy@tailscale.com</email>
</author>
<published>2025-05-29T14:11:31Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=1635ccca275fe3223f96f35f9ec5393f5613685e'/>
<id>urn:sha1:1635ccca275fe3223f96f35f9ec5393f5613685e</id>
<content type='text'>
Also add a trailing newline to error banners so that SSH client messages don't print on the same line.

Updates tailscale/corp#29138

Signed-off-by: Percy Wegmann &lt;percy@tailscale.com&gt;
</content>
</entry>
<entry>
<title>ssh/tailssh: exclude Android from Linux build tags</title>
<updated>2025-05-23T03:02:59Z</updated>
<author>
<name>Brad Fitzpatrick</name>
<email>bradfitz@tailscale.com</email>
</author>
<published>2025-05-22T03:30:55Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=7a5af6e6e7d4938923378fd93418615934bad8d8'/>
<id>urn:sha1:7a5af6e6e7d4938923378fd93418615934bad8d8</id>
<content type='text'>
As noted in #16048, the ./ssh/tailssh package failed to build on
Android, because GOOS=android also matches the "linux" build
tag. Exclude Android like iOS is excluded from macOS (darwin).

This now works:

    $ GOOS=android go install ./ipn/ipnlocal ./ssh/tailssh

The original PR at #16048 is also fine, but this stops the problem
earlier.

Updates #16048

Change-Id: Ie4a6f6966a012e510c9cb11dd0d1fa88c48fac37
Signed-off-by: Brad Fitzpatrick &lt;bradfitz@tailscale.com&gt;
</content>
</entry>
<entry>
<title>ssh/tailssh: fix data race during execution of test</title>
<updated>2025-05-10T15:44:11Z</updated>
<author>
<name>Nick Khyl</name>
<email>nickk@tailscale.com</email>
</author>
<published>2025-05-10T04:12:00Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/tailscale/commit/?id=b70c0c50fd73f134b8618792d89018cb444d8987'/>
<id>urn:sha1:b70c0c50fd73f134b8618792d89018cb444d8987</id>
<content type='text'>
In tailssh.go:1284, (*sshSession).startNewRecording starts a fire-and-forget goroutine that can
outlive the test that triggered its creation. Among other things, it uses ss.logf, and may call it
after the test has already returned. Since we typically use (*testing.T).Logf as the logger,
this results in a data race and causes flaky tests.

Ideally, we should fix the root cause and/or use a goroutines.Tracker to wait for the goroutine
to complete. But with the release approaching, it's too risky to make such changes now.

As a workaround, we update the tests to use tstest.WhileTestRunningLogger, which logs to t.Logf
while the test is running and disables logging once the test finishes, avoiding the race.

While there, we also fix TestSSHAuthFlow not to use log.Printf.

Updates #15568
Updates #7707 (probably related)

Signed-off-by: Nick Khyl &lt;nickk@tailscale.com&gt;
</content>
</entry>
</feed>
