The djbwares toolset has been changed over the years from the original Bernstein softwares in the following ways.
It comprises only the tools and their doco.
The various "install", "setup", "check" helpers that create and test directory hierarchies under /usr/local
, longhand, in C code, are omitted.
The source package is capable of building Debian, FreeBSD/TrueOS, NetBSD, and OpenBSD binary packages.
Package management deals with installing files into hierarchies with ownerships and permissions; this is package management's bread and butter.
svscanboot
is a thing of the past.
Plumbing this in as one's service management mechanism, or under one's own system and service management mechanisms, is well beyond the scope here.
The helpers for creating djbdns and publicfile service bundles are omitted. The nosh toolset (for starters) comes with service bundles for these; and the same goes for some other toolsets, all of which have different needs (not satisfied by the Bernstein helper programs) anyway.
Most of the manual pages are now in Docbook XML, from which the build system compiles roff and HTML manual pages.
The build system is redo; like the original Bernstein-published ptyget package had, but finished and extended to everything.
The duplicated libraries have been consolidated. In some cases, in particular in some of the very oldest code, this has meant switching from (say) the "substdio" library to the "buffer" library. Some code, such as the old "sig" APIs for catching/ignoring signals, has been retained alongside its newer replacements from later iterations of the library, for the benefit of not updating older code that uses that API.
There are some patches.
My original djbdns patches are included, which mainly add minor functionality (like additional querying tools) or fix outright errors (like just blithely continuing on regardless even when input is malformed).
My original ucspi-tcp patches are included, which just fix outright errors (no error checking in argument parsing).
Some new tools have been added
gopherd
and geminid
have been added, which use the same back-end data as the other publicfile tools.
geminid
requires UCSPI-SSL tooling that Bernstein's UCSPI-TCP does not cover, and the toolset is not capable of a full GEMINI server without third-party help.
However, it can also be used, since the protocol is largely compatible, as a UCSPI-TCP server for FINGER and NICNAME/WHOIS services.
This allows one to serve up FINGER and NICNAME without revealing any information from the system account database, as all served content is entirely in the publicfile subdirectory tree.
A simple standalone host
tool has been added, eliminating the need for the ISC implementation of that tool, and all of the ISC-specific additional packages that it pulls in.
Some IPv6 support has been added and general DNS support has been modernized.
All DNS servers now synthesize HINFO
responses to ANY
queries, in line with RFC 8482.
Likewise, the ANY
query class (rather than type) is no longer supported.
The easy-syntax SRV
resource record support has been added to tinydns-data
(as well as comcomitation changes to tinydns-get
and dnsq
).
Easy-syntax AAAA
resource record support has been added.
The original TAICLOCK server that only worked over IPv4 is now named taiclock4d
, and taiclockd
is now an IPv6 tool that can operate IPv6 only or use a combined IPv6 and IPv4 stack.
Several tools are now more easily used with UCSPI-TCP maning their sockets for them.
The content DNS and TAICLOCK servers have been changed to enable them to inherit already-open sockets, using the systemd LISTEN_FDS
mechanism.
So has dnscache
, which requires two already-open sockets, of the right kinds.
rblsmtpd
no longer defaults to a blacklist that has been defunct for over a decade.
ftpd
now copes with various poor and standards-violating practices in modern WWW browsers whose support for FTP is no longer as good as it was when publicfile was originally written.
The basic bugs are fixed.
errno
is declared by including the right standard C library header.
Various missing function declarations that C1999 requires are added.
Const correctness bugs are fixed in various places.
Incorrect declarations of main()
are fixed.
Reliance upon implicit function declarations, non-conformant to C1999, is fixed by including quite a lot of missing headers.
The obsolete TIOCREMOTE
mechanism is disabled outwith OpenBSD.
K&R function declarations have been turned into standard C1989 function declarations, as C2023 is finally dispensing with K&R.