xref: /freebsd/crypto/openssh/FREEBSD-upgrade (revision d5e2d0f140cef6d09c4ddeb594cee027642366a7)
1ba11afccSDag-Erling Smørgrav	    FreeBSD maintainer's guide to OpenSSH-portable
2ba11afccSDag-Erling Smørgrav	    ==============================================
3ba11afccSDag-Erling Smørgrav
474c59ab7SEd Maste    These instructions assume you have a clone of the FreeBSD git repo
574c59ab7SEd Maste    main branch in src/freebsd/main, and will store vendor trees under
674c59ab7SEd Maste    src/freebsd/vendor/.  In addition, this assumes there is a "freebsd"
774c59ab7SEd Maste    origin pointing to git(repo).freebsd.org/src.git.
874c59ab7SEd Maste
9fca7ac55SEd Maste01) Make sure your mail spool has plenty of free space.  It'll fill up
10ba11afccSDag-Erling Smørgrav    pretty fast once you're done with this checklist.
11ba11afccSDag-Erling Smørgrav
12fca7ac55SEd Maste02) Download the latest OpenSSH-portable tarball and signature from
139fcda2f4SEd Maste    OpenBSD (https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/).
14ba11afccSDag-Erling Smørgrav
15fca7ac55SEd Maste03) Verify the signature:
16ba11afccSDag-Erling Smørgrav
17cf783db1SDag-Erling Smørgrav    $ gpg --verify openssh-X.YpZ.tar.gz.asc
181c71974bSDag-Erling Smørgrav
19fca7ac55SEd Maste04) Unpack the tarball in a suitable directory:
20ba11afccSDag-Erling Smørgrav
21cf783db1SDag-Erling Smørgrav    $ tar xf openssh-X.YpZ.tar.gz
22e2fb0b2aSDag-Erling Smørgrav
23fca7ac55SEd Maste05) Copy to a vendor branch:
24ba11afccSDag-Erling Smørgrav
2574c59ab7SEd Maste    $ cd src/freebsd/main
2674c59ab7SEd Maste    $ git worktree add ../vendor/openssh freebsd/vendor/openssh
2774c59ab7SEd Maste    $ cd ../vendor/openssh
2874c59ab7SEd Maste    $ rsync --archive --delete --exclude=.git /path/to/openssh-X.YpZ/ ./
29ba11afccSDag-Erling Smørgrav
30fca7ac55SEd Maste06) Take care of added / deleted files:
31ba11afccSDag-Erling Smørgrav
3274c59ab7SEd Maste    $ git add -A
33ba11afccSDag-Erling Smørgrav
34fca7ac55SEd Maste07) Commit:
35ba11afccSDag-Erling Smørgrav
3674c59ab7SEd Maste    $ git commit -m "Vendor import of OpenSSH X.YpZ"
37ba11afccSDag-Erling Smørgrav
38fca7ac55SEd Maste08) Tag:
39ba11afccSDag-Erling Smørgrav
4074c59ab7SEd Maste    $ git tag -a -m "Tag OpenSSH X.YpZ" vendor/openssh/X.YpZ
41ba11afccSDag-Erling Smørgrav
42576b477bSEd Maste    At this point the vendor branch can be pushed to the FreeBSD repo via:
43576b477bSEd Maste
44576b477bSEd Maste    $ git push freebsd vendor/openssh
45ab7d0959SEd Maste    $ git push freebsd vendor/openssh/X.YpZ
46576b477bSEd Maste
47ab7d0959SEd Maste    Note the second "git push" command is used to push the tag, which is
48ab7d0959SEd Maste    not pushed by default.
49ab7d0959SEd Maste
50ab7d0959SEd Maste    It is also possible to push the branch and tag together, but use
51ab7d0959SEd Maste    --dry-run first to ensure that no undesired tags will be pushed:
52ab7d0959SEd Maste
53ab7d0959SEd Maste    $ git push --dry-run --follow-tags freebsd vendor/openssh
54ab7d0959SEd Maste    $ git push --follow-tags freebsd vendor/openssh
55ab7d0959SEd Maste
56ab7d0959SEd Maste    The update and tag could instead be pushed later, along with the merge
57ab7d0959SEd Maste    to main, but pushing now allows others to collaborate.
58576b477bSEd Maste
59cf783db1SDag-Erling Smørgrav09) Merge from the vendor branch:
60ba11afccSDag-Erling Smørgrav
6174c59ab7SEd Maste    $ git subtree merge -P crypto/openssh vendor/openssh
62cf783db1SDag-Erling Smørgrav
6399b201c3SEd Maste    A number of files have been deleted from FreeBSD's copy of ssh,
6499b201c3SEd Maste    including rendered man pages (which have a .0 extension).  When
6574c59ab7SEd Maste    git prompts for these deleted files during the merge, choose 'd'
6699b201c3SEd Maste    (leaving them deleted).
6799b201c3SEd Maste
68fca7ac55SEd Maste10) Resolve conflicts.  Remember to bump the version addendum in
69c755a7ccSEd Maste    version.h, and update the default value in sshd_config and
70c755a7ccSEd Maste    sshd_config.5.
71cf783db1SDag-Erling Smørgrav
72fca7ac55SEd Maste11) Diff against the vendor branch:
73cf783db1SDag-Erling Smørgrav
7474c59ab7SEd Maste    $ git diff --diff-filter=M vendor/openssh/X.YpZ HEAD:crypto/openssh
75cf783db1SDag-Erling Smørgrav
769b7eddfeSEd Maste    Review the diff for any unexpected changes.
77cf783db1SDag-Erling Smørgrav
78fca7ac55SEd Maste12) Run the configure script:
79cf783db1SDag-Erling Smørgrav
806834ca8aSEd Maste    $ cd crypto/openssh
81cf783db1SDag-Erling Smørgrav    $ sh freebsd-configure.sh
82cf783db1SDag-Erling Smørgrav
83fca7ac55SEd Maste13) Review changes to config.h very carefully.
84cf783db1SDag-Erling Smørgrav
854c3ccd96SEd Maste    Note that libwrap should not be defined in config.h; as of
8674c59ab7SEd Maste    r311585 (233932cc2a60) it is conditional on MK_TCP_WRAPPERS.
874c3ccd96SEd Maste
88fca7ac55SEd Maste14) If source files have been added or removed, update the appropriate
89e66498cdSDag-Erling Smørgrav    makefiles to reflect changes in the vendor's Makefile.in.
90ba11afccSDag-Erling Smørgrav
91fca7ac55SEd Maste15) Update ssh_namespace.h:
92ba11afccSDag-Erling Smørgrav
936834ca8aSEd Maste    $ cd crypto/openssh
944f52dfbbSDag-Erling Smørgrav    $ sh freebsd-namespace.sh
95e66498cdSDag-Erling Smørgrav
96fca7ac55SEd Maste16) Build and install world, reboot, test.  Pay particular attention
97cf783db1SDag-Erling Smørgrav    to pam_ssh(8), which gropes inside libssh and will break if
98cf783db1SDag-Erling Smørgrav    something significant changes or if ssh_namespace.h is out of
99cf783db1SDag-Erling Smørgrav    whack.
100cf783db1SDag-Erling Smørgrav
101fca7ac55SEd Maste17) Check for references to obsolete configuration options
1029340d69eSMark Johnston    (e.g., ChallengeResponseAuthentication in sshd_config) which
1039340d69eSMark Johnston    may exist in release/ scripts.
1049340d69eSMark Johnston
105fca7ac55SEd Maste18) Commit, and hunker down for the inevitable storm of complaints.
106ba11afccSDag-Erling Smørgrav
107ba11afccSDag-Erling Smørgrav
108ba11afccSDag-Erling Smørgrav
109ba11afccSDag-Erling Smørgrav	  An overview of FreeBSD changes to OpenSSH-portable
110ba11afccSDag-Erling Smørgrav	  ==================================================
111ba11afccSDag-Erling Smørgrav
112ba11afccSDag-Erling Smørgrav1) Modified server-side defaults
113ba11afccSDag-Erling Smørgrav
114ba11afccSDag-Erling Smørgrav   We've modified some configuration defaults in sshd:
115ba11afccSDag-Erling Smørgrav
1160591b689SDag-Erling Smørgrav      - UsePAM defaults to "yes".
117ba11afccSDag-Erling Smørgrav      - PermitRootLogin defaults to "no".
1180591b689SDag-Erling Smørgrav      - PasswordAuthentication defaults to "no".
1190591b689SDag-Erling Smørgrav      - VersionAddendum defaults to "FreeBSD-YYYYMMDD".
120c4cd1fa4SDag-Erling Smørgrav      - UseDNS defaults to "yes".
121ba11afccSDag-Erling Smørgrav
122ba11afccSDag-Erling Smørgrav2) Modified client-side defaults
123ba11afccSDag-Erling Smørgrav
1249faa27f2SEd Maste   We defaulted CheckHostIP to "no" in 2000 (a95c1225217b).  Upstream has
1259faa27f2SEd Maste   now made the same change, and we no longer have any modified client-side
1269faa27f2SEd Maste   defaults.
127ba11afccSDag-Erling Smørgrav
128ba11afccSDag-Erling Smørgrav3) Canonic host names
129ba11afccSDag-Erling Smørgrav
130ba11afccSDag-Erling Smørgrav   We've added code to ssh.c to canonicize the target host name after
131ba11afccSDag-Erling Smørgrav   reading options but before trying to connect.  This eliminates the
132ba11afccSDag-Erling Smørgrav   usual problem with duplicate known_hosts entries.
133ba11afccSDag-Erling Smørgrav
134232b4f33SEd Maste   We added this support in 2002 (r99054 / bf2e2524a2ce).  In 2014
135232b4f33SEd Maste   upstream introduced CanonicalDomains and related options to serve a
136232b4f33SEd Maste   similar purpose but they require environment-specific configuration.
137232b4f33SEd Maste
138cb7b8027SDag-Erling Smørgrav4) setusercontext() environment
139ba11afccSDag-Erling Smørgrav
140ba11afccSDag-Erling Smørgrav   Our setusercontext(3) can set environment variables, which we must
141ba11afccSDag-Erling Smørgrav   take care to transfer to the child's environment.
142ba11afccSDag-Erling Smørgrav
1430591b689SDag-Erling Smørgrav5) TCP wrappers
1440591b689SDag-Erling Smørgrav
1450591b689SDag-Erling Smørgrav   Support for TCP wrappers was removed in upstream 6.7p1.  We've
1460591b689SDag-Erling Smørgrav   added it back by porting the 6.6p1 code forward.
1470591b689SDag-Erling Smørgrav
148e491358cSEd Maste   TCP wrappers support in sshd will be disabled in HEAD and will
149e491358cSEd Maste   be removed from FreeBSD in the future.
150e491358cSEd Maste
1519ded3306SDag-Erling Smørgrav6) Agent client reference counting
1520591b689SDag-Erling Smørgrav
1530591b689SDag-Erling Smørgrav   We've added code to ssh-agent.c to implement client reference
1540591b689SDag-Erling Smørgrav   counting; the agent will automatically exit when the last client
1550591b689SDag-Erling Smørgrav   disconnects.
1560591b689SDag-Erling Smørgrav
157f3fd8850SEd Maste7) Class-based login restrictions (27ceebbc2402)
1580591b689SDag-Erling Smørgrav
159f3fd8850SEd Maste   We've added code to auth.c to enforce the host.allow, host.deny,
160f3fd8850SEd Maste   times.allow and times.deny login class capabilities, based on an
161f3fd8850SEd Maste   upstream submission from
162f3fd8850SEd Maste   https://github.com/openssh/openssh-portable/pull/262.
16335a03425SEd Maste
1648974fa45SEd Maste8) Blocklist integration
1658974fa45SEd Maste
1668974fa45SEd Maste   We include blocklist (https://github.com/zoulasc/blocklist) in FreeBSD,
1678974fa45SEd Maste   and ssh is patched to report login failures to it.
1688974fa45SEd Maste
1698974fa45SEd Maste9) Paths
1708974fa45SEd Maste
1718974fa45SEd Maste   A number of paths are changed to match FreeBSD's configuration (e.g.,
1728974fa45SEd Maste   using /usr/local/ instead of /uxr/X11R6/).
1738974fa45SEd Maste
174c888b3b2SEd Maste10) Memory leaks
175c888b3b2SEd Maste
176c888b3b2SEd Maste   Coverity reported a memory leak for which we proposed a fix in
177c888b3b2SEd Maste   https://reviews.freebsd.org/D37253 and sent to the upstream mailing list at
178c888b3b2SEd Maste   https://lists.mindrot.org/pipermail/openssh-unix-dev/2022-November/040497.html
179c888b3b2SEd Maste
180c888b3b2SEd Maste   Upstream subsequently fixed only one of the related leaks, so we reverted
181c888b3b2SEd Maste   the partial fix and applied our change.
182c888b3b2SEd Maste
183c888b3b2SEd Maste11) Retired patches
1840591b689SDag-Erling Smørgrav
1856f7bc8e7SEd Maste   We no longer have HPN patches (adaptive buffer size for increased
1866f7bc8e7SEd Maste   throughput on high-BxD links) or client-side VersionAddendum, but we
1876f7bc8e7SEd Maste   recognize and ignore the configuration options to avoid breaking
1886f7bc8e7SEd Maste   existing configurations.
1890591b689SDag-Erling Smørgrav
190*d5e2d0f1SEd Maste12) PrintLastLog bugfix
191*d5e2d0f1SEd Maste
192*d5e2d0f1SEd Maste   Upstream's autoconf sets DISABLE_LASTLOG if the system does not have
193*d5e2d0f1SEd Maste   lastlog.ll_line, but uses it to disable the PrintLastLog configuration
194*d5e2d0f1SEd Maste   option altogether.  There is a hacky SKIP_DISABLE_LASTLOG_DEFINE=yes to
195*d5e2d0f1SEd Maste   skip setting DISABLE_LASTLOG which we've applied for FreeBSD, but the
196*d5e2d0f1SEd Maste   autoconf machinery really ought to be reworked.  Reported upstream at
197*d5e2d0f1SEd Maste   https://lists.mindrot.org/pipermail/openssh-unix-dev/2022-May/040242.html
198ba11afccSDag-Erling Smørgrav
199ba11afccSDag-Erling Smørgrav
200ba11afccSDag-Erling SmørgravThis port was brought to you by (in no particular order) DARPA, NAI
2010085282bSDag-Erling SmørgravLabs, ThinkSec, Nescafé, the Aberlour Glenlivet Distillery Co.,
202ba11afccSDag-Erling SmørgravSuzanne Vega, and a Sanford's #69 Deluxe Marker.
203ba11afccSDag-Erling Smørgrav
204ba11afccSDag-Erling Smørgrav					-- des@FreeBSD.org
205