GremNOS v.03d is now available, containing a
fix/workaround for the problems caused by ASCII 0 ("NUL") bytes in
incoming SMTP and NNTP messages.
GremNOS is a variant of KA9Q, developed in 1997 by Graham E Kinns (GeK)
from Demon Internet's 2.16d version. Graham produced two versions in 1997,
v0.1 in (17 August 1997) and v0.2 (28 November 1997); they are both huge
improvements on the Demon version, containing numerous bug fixes and program
enhancements. However, GeK has since moved on to other projects, and no
further GremNOS development was carried out after v0.2. These versions are
available from GeK's web site,
and the v0.2 files are also available from this
Simon Turner and Pete Disdale, long-term GremNOS users, had made a handful
of tweaks to their local versions of the program; after discussion of a few
issues in the demon.ip.support.pc newsgroup in 2001, it became apparent that
some other users might appreciate having the changed versions, so a couple of
(entirely unofficial) tweaked extensiones to v0.2 were released in August 2001
under the names v0.2b (22 August 2001) and v0.2c (28 August 2001).
A spate of problems with Demon's mail2news gateway in early 2002 prompted
Pete to finish GeK's incomplete 1997 work with direct NNTP posting. Pete's
new NNTP posting code, with a few other enhancements, are available in v0.3 (8 April 2002).
Things were quiet for a year or so after that, but a minor bug fix to the
socket code, some privacy additions to the SMTP server (taken from Richard
Clayton's changes to Demon's KA9Q 2.18) and a bug fix to the NNTP kill file
processing are now available as v0.3b (24 May
2003). (v0.3a was an internal version from March 2003, featuring the
socket code bug fix, which was never publically released.) The changes in
v0.3b have been carefully tested, and no problems have been found, so it can
probably be regarded as a safe upgrade for others to use.
After a 17-month hiatus, complaints in demon.ip.support.pc about the SMTP
server stalling right at the end of receiving a message - caused by ASCII 0
("NUL") bytes in the final line of the mail message - led to the
release of v0.3d (12 October 2004), which
fixes (or works around) the problem by translating the NUL bytes to 255 as
they are received. (v0.3c was an internal version from earlier in the year,
featuring the NUL fix code, but which was never publically released.) The NUL
fix code has been running on my (rather unusual) personal version of GremNOS
for some months without problems, so it should be suitable for all to use.
There is some documentation available for all
the versions of GremNOS (v0.1 to v0.3d); it basically consists of Demon's KA9Q
documentation, with change lists and/or readme files for all the GremNOS
versions. The complete collection of files is also available as a zip file.
Available builds of GremNOS v0.3d
GremNOS has always been available in various different builds; some fully
featured and large, some lean and mean, some with TextWin etc. The currently
available builds of v0.3d are as follows:
- Large (lrge_03d.zip, 167,484
bytes) : this is the replacement for the standard "large"
version of Demon KA9Q v2.16d, including NNTP posting, packet driver
support, FTP server, RIP, Z-modem, etc. but (for v0.3 onwards)
excluding the old telnet mailbox.
- Lite (lite_03d.zip, 130,014
bytes) : this is a cut down version aimed at dialup use which should
have considerably more free memory available than the Large model. It
excludes packet driver support, telnet mailbox, FTP server, RIP, Z-modem,
finger server, DOS shell, remote client & server, ttylink server, DNS
server, packet tracing and IP filter but includes additional dialler logging
commands and John Washington's http URL grabber.
- TW-Lite (twlt_03d.zip, 146,381
bytes) : this is the TextWin version of the Lite model; feature list is
otherwise exactly the same as Lite.
- PK-Lite (pklt_03d.zip, 141,572
bytes) : this is the Lite build with packet driver support added.
(N.B. I'm sure this is obvious, but please note that the "Packet +
Lite" build of GremNOS, which is called "PK-Lite", has
nothing to do with PKWARE's executable compression software PKLite.)
- TP-Lite (tplt_03d.zip, 158,322
bytes) : this is the TextWin version of the PK-Lite build.
Changes in the post-v0.2 versions
- Fixed the year display in directory listings to be Y2K-compliant
(i.e. show only 2 digits; 2000 is "00" rather than
- Turned off the "always split mail lines after 255
characters" option in the SMTP server; this kludge for TED users was
a bit of a mis-feature, because any header lines of exactly 255 chars
before the newline would cause a blank line to appear immediately after
the long header line, making it seem that *this* was the end of the
message headers, rather than the actual end (which occurs later).
- Added new code to the SMTP server to "escape" any
"Status:" header line which is present in incoming mail, at the
point where the mail is copied to a user mailbox, by rewriting as
">Status:", similarly to the way in which lines starting with
"From " are protected.
- Fixed a bug in the NNTP client; the bug causes GremNOS to abort with
the error message "printf : floating point formats not linked",
which can (and does) hang the machine, especially when running under
Win9x. The bug is a simple one to do with logging NNTP errors (e.g. 430
article unavailable); it occurs when the message-id of the message which
caused the error contains "%" followed by any of the letters
e,E,f,g or G.
- NNTP posting: news articles may be posted direct to the news server
with the NNTP POST command, rather than relying on increasingly flaky
- SMTP client "$smarthost" macro: if the destination system
specified in the first line of a mail message's WRK file is the special
string $smarthost, the message is sent to the machine
specified in the "smtp gateway" command in
AUTOEXEC.NET. This should (we hope) work the same way as YAN's
- "at" command: the full "date and time"
specification has been fixed to deal correctly with years from 2000
onwards; and you may now optionally specify seconds in the
"at now+..." command by using the format
"at now+hhmmss" (the old format
"at now+hhmm" is retained for backwards compatibility).
- The SMTP server no longer relays in QUEUE mode unless relaying is
- If unknown port logging is turned on, incoming TCP port probes are now
noted on the display as well as just logged in NOS.LOG. Note
that unknown port logging is not enabled in any of the normal builds of
GremNOS, so this change will not affect most users.
- Changed the startup banner message to provide updated author and
- Fixed a (very rare) "text mode" socket bug, whereby if the
last character in an internal buffer was a carriage return, the next
character (at the start of the next buffer) was assumed to be a linefeed,
even if it wasn't really; the supposed CR+LF pair was then wrongly
replaced by a single LF.
- SMTP server: added some privacy and anti-relaying changes made by
Richard Clayton to Demon's KA9Q 2.18. Specifically: (a) the SMTP
commands EXPN and VRFY are disabled and return a 252 code in accordance
with RFC 2821; (b) the deprecated "Errors-To:" header field is
no longer used when reporting delivery errors; (c) local usernames
containing '@' or '!' are no longer allowed, to persuade relay testers
that the server is not an open relay.
- NNTP kill file processing: folded continuation header lines starting
with tab instead of space, which is prefectly legal, are now used for
kill file processing; previously, only those starting with a real space
character (ASCII 32) were checked.
- SMTP server and NNTP client: ASCII 0 ("NUL") characters
embedded in incoming SMTP mail messages and NNTP news articles are
translated to 255. This works around bugs in both the SMTP server and
NNTP client which would otherwise corrupt the stored messages, and would
stall the SMTP server completely if the NUL byte was in the last line of
the message. When such NUL bytes are fixed, a note is written to the log
file (and the screen, if in verbose mode) stating the message ID and the
number of NULs fixed.
- NNTP direct posting: a new command "nntp showqueue" displays
the queue of articles waiting to be posted; the posting code now uses file
locking (the lack of locking in earlier versions was an oversight); in
"nntp post only" mode, it now stops early on (before contacting
the server) if there are no articles to be posted.
The source files for GremNOS v0.2 were somewhat scattered; Graham never
collected it all together in one place, but distributed the files he'd changed
from the Demon 2.16d version of KA9Q; while this was a actually a sensible
strategy, since the full source distribution is huge and people would probably
rather download a small update than the whole thing every time, tracking down
and collating the complete set of files needed to produce the Large, Lite and
TW_Lite versions of GremNOS v0.2 took a while!
In the v02 directory are the four separate
source archives that resulted from this collation effort:
The "extra" bits in bld-02s.zip include a config.h file for the
TW_Lite build, and a slightly modified makefile and build.bat batch file which
enable you to compile binaries identical to GeK's distributed v0.2 ones (GeK's
original distributed makefile is preserved as makefile.gek).
This is interesting and useful for v0.2 historians, but for people who just
want to get on with compiling one of the newer SCT/PJD versions, downloading
four separate files seems a bit silly. The "new" file base02s.zip (859,286 bytes) contains all the
necessary files from the above four v0.2 archives, with an already updated
hardware.h (which would otherwise be overwritten by a copy of
pc.h during the make process), and excluding the original GeK
GremNOS is compiled with Borland C++ 3.1; you will need this compiler to
get identical binary files to the distributed ones. GeK did do some work with
using Borland C++ 4.0, but (a) his distributes binaries were compiled with 3.1
and (b) 4.0 was known to have quite a few bugs, so I don't recommend using
that. It should be possible to modify things for 4.5, 5.0 etc. but it doesn't
seem worth the bother to me.
To compile any version of GremNOS from v0.2 onwards, download base02s.zip -
which enables you to build v0.2 - and any specific source updates:
Unzip base02s.zip into a directory on its own, followed by the update(s),
allowing the updated files to overwrite the original ones. You can then use
build.bat to compile the distributions (Large, Lite, TW_Lite and - from v0.3d
onwards - PK_Lite and TP_Lite): run it with no arguments for usage
If you have any problems compiling it, or the instructions are wrong, or
anything else, please e-mail me at gremnos at twoplaces.co.uk and
I'll look into it.
Suggestions, comments etc.
If you have any suggestions, bug reports, gripes, comments etc. or would
simply like further information, please send e-mail to
gremnos at twoplaces.co.uk, or post to the
Written by Simon Turner (simon at twoplaces.co.uk)
Last updated 13 October 2004