Temporarily freeze variables set via -S..
[s-mailx.git] / README
blobde4631930ed969bb9943a0ac135386005214eeb2
1 W e l c o m e  t o  S - n a i l / S - m a i l x
2 ===============================================
4 S-nail (later S-mailx) provides a simple and friendly environment for
5 sending and receiving mail.  It is intended to provide the functionality
6 of the POSIX mailx(1) command, but is MIME capable and optionally offers
7 extensions for line editing, S/MIME, SMTP and POP3, among others.
8 S-nail divides incoming mail into its constituent messages and allows
9 the user to deal with them in any order.  It offers many commands and
10 internal variables for manipulating messages and sending mail.  It
11 provides the user simple editing capabilities to ease the composition of
12 outgoing messages, and increasingly powerful and reliable
13 non-interactive scripting capabilities.
15 Please refer to the file INSTALL for build and installation remarks,
16 and to NEWS for release update information.  The file THANKS mentions
17 people who have helped improving and deserve acknowledgement.
19 This software originates in the codebase of Heirloom mailx, formerly
20 known as nail, which itself is based upon Berkeley Mail that has
21 a history back to 1978 and which superseded Unix mail, a program that
22 already shipped with First Edition Unix from 1971 -- M. Douglas McIlroy
23 writes in his article "A Research UNIX Reader: Annotated Excerpts from
24 the Programmer's Manual, 1971-1986":
26   MAIL (v1 page 21, v7 page 22)
27     Electronic mail was there from the start. Never satisfied with its
28     exact behavior, everybody touched it at one time or another: to
29     assure the safety of simultaneous access, to improve privacy, to
30     survive crashes, to exploit uucp, to screen out foreign freeloaders,
31     or whatever. Not until v7 did the interface change (Thompson). [.]
33 1. Where?
34 2. Repository layout
35 3. Security record
36 4. Authors
38 1. Where?
39 ---------
41 Our latest release can be downloaded at [1], and the fully cross-
42 referenced manual can also be viewed as HTML online[2].
43 There are browsable git(1) repositories at sdaoden.eu[3] (use [4] for
44 cloning purposes), with mirrors at Sourceforge[5] and repo.or.cz[6].
46   [1] https?://ftp.sdaoden.eu/s-nail-latest.tar.{gz,xz}{,.asc}
47   [2] https?://www.sdaoden.eu/code.html#s-mailx
48   [3] https?://git.sdaoden.eu/cgit/s-nail.git
49   [4] https?://git.sdaoden.eu/scm/s-nail.git
50   [5] http://sourceforge.net/projects/s-nail
51   [6] http://repo.or.cz/s-mailx.git
53 We have a mailing list[7] with moderated unsubscribed posting possi-
54 bilities; subscriptions can be managed via web interface[8] (it is
55 a GNU Mailman list, so posting to LISTNAME-request@ and the subject
56 "subscribe" will also do).  We have a browser-accessible and searchable
57 archive[9], and The Mail Archive is so kind and offers it, with all its
58 services, too [10]!  For example, i have subscribed the RSS feed that
59 The Mail Archive produces to Gwene.org[11], thanks to all of you!
61 Commits to the [master], [release/*] and [stable/*] branches are
62 posted to [12], and announcements will also be posted to [13], both
63 are receive-only mailing-lists.
65   [7] s-mailx@lists.sdaoden.eu
66   [8] https://lists.sdaoden.eu/mailman/listinfo.cgi/s-mailx
67   [9] https://lists.sdaoden.eu/pipermail/s-mailx/
68   [10] https://www.mail-archive.com/s-mailx@lists.sdaoden.eu/
69   [11] news.gwene.org/gwene.mail.s-mailx
70   [12] https://lists.sdaoden.eu/mailman/listinfo.cgi/s-mailx-commit
71   [13] https://lists.sdaoden.eu/mailman/listinfo.cgi/s-announce
73 Our heraldic animal snailmail.jpg has been found at [+1].
74 Thank you!
76   [+1] http://cdn.whatculture.com/wp-content/uploads/2009/06/snailmail.jpg
78 2. Repository layout
79 --------------------
81 - [release/*]
82     A new branch within release/ is created for every release, e.g.,
83     [release/v14.8.10].  History won't be rewritten.
85     These branches consist of one commit, and that commit is signed with
86     an OpenPGP key and used for the signed release tag,
87     vMAJOR.MINOR.UPDATE.ar (.ar for "archive").  The commit as such
88     covers the data modifications that make up a release, i.e., release
89     date fixation, manual preprocessing, removal of data which doesn't
90     make sense in release tarballs, etc.
92     All this is not true for older releases, the new repository layout
93     was introduced after v14.8.10.  But it used [timeline] as a source
94     for most references, therefore the signed tag v14.8.7.ar protects
95     all elder references within [release/]:
97       $ git describe --contains heads/release/v1.3.0
98       v14.8.7.ar~113
100 - [release/latest] and [release/stable]
101     "Symbolic links" to the latest and stable, respectively, release
102     branches.
104 - [stable/*]
105     A new branch within stable/ will be created for each new minor
106     version, e.g., [stable/v14.8].  History won't be rewritten.
108     These are the de-facto [master] branches for their respective minor
109     release, which extend for the full lifetime of the said, e.g., the
110     branch [stable/v14.7] has been created once the v14.7.0 release was
111     made, and it extends until the release of v14.7.11, the last v14.7
112     update release made.
114     Once the time for a new release has come, the head of such a stable
115     branch will gain a signed commit and a signed stable tag,
116     vMAJOR.MINOR.UPDATE, and then be used as the source for a new branch
117     in release/.
119 - [stable/latest] and [stable/stable]
120     "Symbolic links" to the latest and stable, respectively, stable
121     branches.
123     These are possibly what users should track which want to have the
124     newest non-release bugfixes and stable, backward-compatible commits.
125     See below for examples how to accomplish that.
127 - [master]
128     Rooted on top of [heirloom].  It gains only stable, but possibly
129     backward-incompatible changes (usually mentioned on the ML), and
130     will be used to create new entries in stable/.  It may gain signed
131     commits for sealing purposes from time to time.
132     History won't be rewritten.
134 - [next]
135     Rooted on top of [master], this consists of a furious mixture of
136     commits that eventually end up in [master].  Daring users may give
137     this branch a try, but bugs and temporary nonstarters have to be
138     dealt with, then.
140 - [crawl]
141     Developer chaos (distributed horror backup - don't use!).
143 - [test-out]
144     This branch contains the test output files.  The test itself only
145     tests checksums, the full output is for development reference
146     purposes only.
148 - [unix-mail,bsd-Mail,timeline]
149     Sketchy efforts to collect the complete history of Unix mail and
150     its successor, BSD Mail.  Anything from the pre-nail era has been
151     taken from CSRG and TUHS, for nail and Heirloom mailx i have used
152     release balls.
154     The [timeline] branch was the original effort, and it will be
155     continuously extended whenever new releases will be made, but its
156     history won't be rewritten, which is why it is a sketchy effort.
157     The [unix-mail] and [bsd-Mail] branches have been added later, and
158     will hopefully offer the most complete picture possible as time goes
159     by (not taking into account the "nupas" effort of Research Unix,
160     though) -- this means their history may change, but all commits are
161     signed with an OpenPGP key.
163 - [heirloom]
164     A full git(1) cvsimport of the Heirloom mailx(1) cvs(1) repository.
166 To create a full clone of the repository, with all the data and history:
167   $ git clone https://git.sdaoden.eu/scm/s-nail.git
169 With a newer git(1), and only tracking the latest stable branch:
170   $ git clone --single-branch --branch=stable/latest \
171       https://git.sdaoden.eu/scm/s-nail.git
173 Or, being selective, also with older git(1)s:
174   $ mkdir s-nail.git
175   $ cd s-nail.git
176   $ git init
177   $ git remote add origin -t 'release/*' -t stable/stable -t master \
178       https://git.sdaoden.eu/scm/s-nail.git
179   $ git fetch -v
181 And then, assuming the last had been done:
183   $ # Show all releases
184   $ git log --no-walk --decorate --oneline --branches='release/*' --
185   $ # Check out the latest release, and verify the signature
186   $ git checkout release/latest
187   $ git log --oneline --show-signature --max-count=1 HEAD
188   $ make all && sudo make install
190 3. Security record
191 ------------------
193 - CVE-2004-2771, and CVE-2014-7844.
194   http://seclists.org/oss-sec/2014/q4/1066.
195   Fixed in: v14.7.9 (on day after announcement on oss-sec)
197   Affected all BSD Mail-based codebases.
199 - CVE-2017-5899.
200   Credits: wapiflapi.
201   Fixed in: v14.8.16 (on day of disclosure)
203     > vulnerability in the setuid root helper binary
205     > The problem is that an O_EXCL file is created with a user controlled
206     > path because the di.di_hostname and di.di_randstr are never checked.
207     > This means that using s-nail-privsep a normal user can create a file
208     > anywhere on the filesystem, which is a security problem.
210 4. Authors
211 ----------
213 Unix mail seems to have been written mostly by Ken Thompson.
215 Berkeley Mail was (according to def.h) developed by Kurt Shoens, dated
216 March 25, 1978.  According to the CSRG commit log authors of BSD mail in
217 the time span 1980-10-08 to 1995-05-01 were, in order of appearance
218 (commit count): Kurt Shoens (379), Kirk McKusick (50), Carl Smith (16),
219 Bill Bush (2), Eric Allman (6), Craig Leres (43), Sam Leffler (51),
220 Ralph Campbell (21), Serge Granik (28), Edward Wang (253),
221 Donn Seeley (1), Jay Lepreau (3), Jim Bloom (1), Anne Hughes (2),
222 Kevin Dunlap (34), Keith Bostic (253), Mike Karels (1), Cael Staelin (6)
223 and Dave Borman (17).  One commit by Charlie Root, 36 by "dist".
225 Official BSD Mail development ceased in 1995 according to the CSRG
226 (Berkeley's Computer Systems Research Group) repository.  Mail has then
227 seen further development in open source BSD variants, noticeably by
228 Christos Zoulas in NetBSD.
230 Gunnar Ritter reused that codebase when he started developing nail in
231 February 2000, and incorporated numerous patches from OpenBSD, NetBSD,
232 RedHat and Debian.  He added MIME code, network protocol support, and
233 POSIX conformance improvements. In March 2006, he integrated that
234 program into the Heirloom project, renaming it to Heirloom mailx, the
235 development of which ceased in 2008.
237 In 2012 Steffen (Daode) Nurpmeso adopted the codebase as S-nail.
238 We try to end up as S-mailx.
240 # s-ts-mode