What's New in Synchronet v3.14
- All Servers
- Startup file (ctrl/sbbs.ini) now supports !include filename directive to
nest initialization files
- Support per-server/service/protocol socket option settings in ctrl/sockopts.ini
(replacing sockopts.cfg)
For example, a section named [telnet|rlogin] would set the socket options for either
Telnet or RLogin sessions, while [telnet] would set the socket options only for
Telnet sessions
Automatically reads a [tcp] or [udp] section, if it exists (based on the socket type)
- Replaced the "log mask" concept with a much simpler "log level" concept:
instead of a bit-mask representing all the log levels to actually "see", we use a
single numeric (or nmemonic) level value (e.g. ERROR, WARNING, NOTICE, etc.)
and less severe log levels (levels with a higher numeric value) will be filtered
(e.g. not "seen" or logged)
LogMask values in your ctrl/sbbs.ini file are no longer used (replaced with
LogLevel)
- Bug-fixes in ARS compilation:
- Wasn't accounting for correct lengths of keywords: WIN32, UNIX, LINUX, and PROT
- Didn't support >8 char internal codes in SUBCODE and DIRCODE values
- Would skip pass the line (null) terminator causing stack corruption or crash
when parsing values for SUBCODE, DIRCODE, or SHELL keywords as the last
keyword
- Bug-fix: buffer overflow if global QWKnet tagline is > 80 characters in length
- New ARS Keywords: DELETED, INACTIVE, and ACTIVE (user account is not deleted or inactive)
Allows user listing/editor searches to exclude deleted or inactive user slots
- Added support for ARS Keywords: GROUP, SUB, SUBCODE, LIB, DIR, and DIRCODE
These ARS keywords were previously only supported in the Telnet/RLogin server
- Web Server
- Default web root dir is now ../web/root (changed from ../web/html)
You'll probably want to update the RootDirectory value in the [web]
section of your ctrl/sbbs.ini file to reflect this
- Support new webctrl.ini files (optional access control and configuration files sprinkled through-out the web/root hierarchy)
This allows overriding server settings on a per-directory or per-filespec basis.
Allowed keys are:
- ErrorDirectory - Changes the directory where error pages are served from
- CGIDirectory - Overrides the CGIDirectory value from the [web] section of the sbbs.ini file
- AccessRequirements - Access Requirements String (ARS) required for this resource (Overrides access.ars)
- Realm - Authentication realm name to send to remote
Note: access.ars usage is now deprecated
- Support for chunked mode ssjs files
In chunked mode, data written out from
the SSJS script is sent immediately, and the keep-alvie session is maintained.
chunked mode is ONLY sent to HTTP/1.1 clients, and is preferred over fast mode.
This means fast mode is now only usefull for HTTP/1.0 and HTTP/0.9 requests.
- Add in an output thread which handles chunking. This should improve JS
output, and prevent gobs 'o errors
This output buffering is controlled with the OutbufHighwaterMark and OutbufDrainTimeout
values in the [web] section of the ctrl/sbbs.ini file
- Added support for range requests (e.g. for streaming podcasts)
- Added cookie support (for server-side JS)
- Bug-fix: Win32-CGI race condition
where the exec_cgi() loop could
(sometimes) detect that the CGI process had terminated, before reading all
the data from the stdout pipe
- Fix for PATH_INFO-based scripts installed as an index filename in the root
of the host. (ie: index.cgi)
This would allow index.cgi to be (say) viewcvs.cgi and URLs such as:
http://cvs.synchro.net/src/sbbs3/websrvr.c to work
- External redirects are MOVED_TEMP, not MOVED_STAT
- Add REQUEST_URI CGI variable (Apache extension)
- Drain STDOUT as well as STDERR
- Don't drain STDIO until script is terminated
- Do not send Content-length header for CGI scripts.
- Properly handle partial writes of CGI output using sock_sendbuf()
- Support FreeBSDs accf_http(9) kernal option/module designed specifically for
HTTP server optimizations
- Mail Server
- New feature to solve a common sysop misconfiguration issue:
Automatically detect the DNS server (randomly chosen from the list of system-configured
DNS servers) if no DNS server is configured in Synchronet.
For *nix, this assumes you have read access to /etc/resolv.conf (where da 'e'?) (You have to buy vowels)
For Win32, this assumes you have IPHLPAPI.DLL on your system (included with
Win98+).
- Bug-fix: do not adjust for daylight savings time when generating RFC822-compliant
date/time strings
This caused an off-by-one-hour bug in the "Date:" header field
of sent Internet mail when DST is in effect
- Overhaul mail index loading in sendmail thread:
Don't directly access the index (.sid) file stream, reading a record at time
with no locking.
Instead, read all the relevant index records in one safe
locked operating (using loadmail())
This should fix the multi-server heavy traffic mail.sid corruption bug
- Always lock the entire message base when re-writing existing header and index
records (using smb_putmsg())
Keeps the index file from being truncated during
the operation (nightly purging of deleted message indexes?) causing corruption
- Set the SMB recipient extension header field when routing to QWKnet node
(this is necessary for FIXSMB to be able to reconstruct the index file)
- Bug-fix: clear the from extension for bounced messages (they're not from a user)
- Bug-fix: forwarding mail to a non-standard SMTP port (via the ctrl/alias.cfg file)
no longer worked
because the ":port" portion of the destination address wasn't being removed
- Enhancement: only perform MX-record lookup if no port number specified in destination domain
portion of recipient e-mail address
- Enhancement: don't attempt to send to MX servers with an IP address of 0.0.0.0
- Enhancement: The default charset for sent SMTP messages is now configurable, if blank
(in sbbs.ini [mail] DefaultCharset), then not used
- Enhancement: apply twitlist.cfg to SMTP-received mail, checking both the sender's name and
e-mail address
- Enhancement: don't apply subject filter to messages from authenticated users
- Enhancement: don't send notification telegram for mail received from DNSBL-listed servers
- Enhancement: added 'To' header field checking against email.can file
- Bug-fix: 'From' header field checking against email.can file wasn't working
(would still accept the message)
- Bug-fix: memory leak when parsing ctrl/mailproc.ini, caught by valgrind
- Do not allow receipt of mail for built-in sysop pseudonyms (i.e. "sysop" and
"postmaster") unless the ALLOW_SYSOP_ALIASES option is enabled
(disabled by default) or the alias is specifically listed in the ctrl/alias.cfg
file
- The 'target' field in the ctrl/alias.cfg file no longer supports the built-in sysop pseudonyms
(i.e. "sysop" and "postmaster"), use user number (e.g. 1) instead
- If the ctrl/alias.cfg file correlates a user *number* with an alias, support
receipt of mail to that alias even if the RX_BY_NUMBER option is not enabled
This allows us to use '1' instead of 'sysop' in the default alias.cfg file
- FTP Server
- New option: Lookup Passive IP
Enabled by adding LOOKUP_PASV_IP to the Options value in the [ftp] section
of the ctrl/sbbs.ini file:
This option tells the FTP server to perform a hostname lookup (on the BBS's
hostname) to determine the correct/current public IP address to use in
PASV responses
This is one more kludge to work around stupid NAT devices
(consumer firewalls/routers)
- 'Last Downloaded' date/time stamp is now updated in the database when files are downloaded
- Failed Login verbiage is now configurable by creating the optional text file:
text/ftpbadlogin.txt
- Bug-fix: added support for %@ command-line specifier
(used in Extractable File Type command-lines)
- Telnet/RLogin Server
- Secure Shell (SSH) support thanks to Deuce and Cryptlib
This feature is in the beta development stage, so testing and verification is needed, feedback and/or bug reports welcome!
- Daily maintenance event
(resets statistics, deletes logon.lst, backs-up data, expires/purges old users and e-mail)
will now run in the event thread, if it's running
Solves the problem of statistics and other data not being correctly maintained
if no one logs on (via Telnet or RLogin) for an entire day
- External message editors now always use a DOS-compatible (8.3 format) file in the node's
temp directory which solves two problems:
- editors restricted to the temp dir (e.g. PICO) can now be used to edit files in other
directories (e.g. data/user/*.sig files)
- DOS editors can now be used to edit files with long filenames
(e.g. data/user/*.plan files)
- Added supoprt for RESULT.ED external-editor drop file (e.g. from WWIVedit)
- can now modify the message subject/title from within some external editors (e.g. fseditor.js)
- New users can no longer change the subject/title of the "New user validation" feedback
- When reading messages and updating existing message header and index records,
always lock the entire message base - preventing corruption
- When replying to a message, if the posting user was the author of the original message,
use the original message's recipient as the recipient of the new reply message as well
(no need to post "to" yourself)
- When replying to an Internet e-mail which includes a REPLY-TO header field,
send the reply to the reply-to address (by default) instead of the FROM
address
- Bug-fix: potential buffer over-runs in the expansion of some @-codes
- Bug-fix: uninitialized pointer dereference in temporary file section
- Bug-fix: split-screen chat corruption
- Bug-fix: do not adjust for daylight savings time when generating QWK and Fido date/time stamps
- Bug-fix: do not adjust for daylight savings time when calculating time until next event
- Bug-fix: ignore disabled events when calculating time until next event
- Bug-fix: bad drop file path if using startup-dir (e.g. c:\sbbs\xtrn\game\/door.sys)
- Bug-fix: data/hungup.log wasn't being updated
- Bug-fix: exceptions occurring in JS script run from another JS script would not be reported to the console/log
- Bug-fix: report JS script compilation errors (exceptions) immediately
- Bug-fix: only allowed 7 digits when editing credit value of file - increased to 10 digits
- Bug-fix: ctrl key handler no longer ignores Ctrl-J (LF)
- Put Micros~1 shortened filenames in the DOSXTRN.ENV file,
allowing at least some XSDK doors to possibly work when run from C:\Synchronet\...
- When generating drop files for 16-bit DOS programs, put
Micros~1 shortened paths in the drop files
Another fix for installations to e.g. "C:\Synchronet"
- Telegard and Renegade "pipe codes" actually must have 2 decimal
digits
This will reduce the liklihood of false-positive TG/RG pipe code
interpretation
- ANSI output optimization (combine attribute changes into a single ESC[m code):
ESC[0;1;5;32;40m
Is shorter than:
ESC[0mESC[1mESC[5mESC[32mESC[40m
...by about eight chars.
- Include QWK text files (e.g. HELLO, GOODBYE, BBSNEWS, BLT-*) when prepacking
QWK packets (or packing for FTP download)
- Introduced K_NOSPIN mode flag for getkey()
to over-ride (temporarily disable) user's spinning cursor setting
- Don't use the SyncTerm/RLogin "password" parameter for new user accounts unless it meets
minimum secure-password requirements
(e.g. isn't the same as the user's name or alias)
- Bug-fix: delete environment variables from the
processes environment block when adding new environment strings
otherwise, existing values (for say "SBBSNODE") would not be over-ridden
This was cause of the well-known DoorMUD incompatibility with v3.13a.
- If a file name doesn't include a suffix/extension in the native program list,
then any command-line executing a program with the same base filename will
be considered "native"
(e.g. "unzip.exe" will be considered native if "unzip"
is in the native program list)
- When executing a module via "*modname ...", with no file extension
specified
if modname.js exists, it will be executed instead of modname.bin
Previously, the .bin extension was always assumed if it wasn't specified on
the command-line
This modification allows exec/bullseye.js to take
precedence over exec/bullseye.bin without any change to the command-line
configuration
Execute "*modname.bin" if you want to specifically execute
modname.bin and not modname.js (if it exists)
- External program yielding interval on Windows NT is now handled in exec/sbbsexec.ini
(not in ctrl/sbbs.ini or in SBBSCTRL:Telnet->Configure->External Yield)
See Virtual Device Driver section for more details
- New option to allow socket-based file transfer protocols on *nix
- Bug-fix: disable file upload/attach mode if SCFG->Message Options->Allow
Uploads in E-mail is set to "No".
This option has been in SCFG for 10(+?) years and was never used. :-)
- Better seeding of random number generator
- Rework the output buffer loop to simplify slightly and fix an issue with the
highwater/timeout being innefective when the ring buffer received many small
writes very quickly (ie: During the "Synch" logo display)
For some reason,
this seems to happen most on fast connections
(Possibly the socket
implementation manages to combine the write()s on a slow connection)
- If the highwater mark is zero, and TCP_MAXSEG is supported (BSD and Linux),
then automatically tune the highwater mark to be the MSS and never send() a buffer
larger than that
- Stale (> 24 hours old) mutex files (e.g. data/pack####.lock) are now ignored
so crashed instances with locked mutexes will no longer need manual clean-up (auto-revovery)
- Bug-fix: 100% CPU utilization while sitting at Inter-BBS Instant Message menu prompt
- New global JS function: write_raw()
used for sending strings with NULLs and other control characters to the
remote client
- Provide example RLogin "Game Server" option in exec/logon.js (disabled by default)
- Added support for random logon screens (text/menu/random*.*) in exec/logon.js
- Added "E-mail Forgotten Password" feature in exec/login.js
Set email_passwords=false to disable
- Skip Win32 hidden and system files when bulk-uploading
- Use Deuce's xp_printf module for Baja/PCMS printf/sprintf/fprintf functions:
- eliminates segfaults/AVs on incorrect usage
- auto-converts arguments to correct format type
- eliminates portability problems with non-x86 platforms
- JavaScript
- SBBSecho
- Netmail packets, for attach-style mailers, are now created with filenames
of .pkt (rather than .pk_)
EchoMail packets still use the temporary file extension of .pk_
- Bug-fix: NetMail packets are now correctly terminated (with 2 NULL bytes)
- Bug-fix: Do not adjust for daylight savings time when generating UTC time stamps
- Now strips ctrl chars (garbage) from var-length message header
fields (i.e. to/from/subject)
- Now sends AreaFix responses back to the user name that made the request (rather than "SYSOP")
- Synchronet Console
- [Unix] Bug-fix: call do_seteuid() as soon as possible to avoid creating dirs/files as
startup user (often root)
- Synchronet Control Panel (for Win32)
- Now supports the ctrl/recycle[.ctrl] and ctrl/shutdown[.ctrl]
semaphore files so:
- SCFG will touch ctrl/recycle causing SBBSCTRL to reload its copy of the
configuration files
This resolves the FAQ about why users appear to be running the wrong
external program in the Nodes window
after adding/removing external programs in SCFG
- The control panel can now be gracefully shutdown by touching ctrl/shutdown
- Mail Server Configuration:
- Display "auto" if the DNS server field is left blank or set to an invalid IP
address or hostname
- Created an "Advanced" tab which allows the sysop to toggle options that could
previously only be enabled/changed in the sbbs.ini file:
- SendMail: Ignore 'in transit' attribute
- Retain received mail files (in temp directory)
- Allow receipt of mail by user number
- Check 'Received' header fields against DNSBL
- Throttle DNS blacklisted server sessions
- Created a right-click popup menu on the File->Preview window to change the
current font
- New tray-icon popup menu items to configure web server and services
- New splash screen image (from Mike)
- New Help->Technical Support menu item to load tech support web page
- Added ftpbadlogin.txt to FTP->Edit menu
- Bug-fix: Wasn't displaying the "server in use, terminate yes/no" message box
if Synchronet NT services were installed, but disabled
- Bug-fix: Exceptions/access violations while shutting down if Synchronet NT
services were installed, but disabled
- Synchronet FOSSIL Driver (dosxtrn.exe)
- Now provides interrupt 14h service routine "signature" required by some (very few) programs
to detect the FOSSIL driver's presence
- Bug-fix (NT only): funtion 18h is supposed to be a block-read with *no*
wait (return immediately if no data)
we were blocking if there was no data waiting (cause of hang in Star Fight door game)
- Bug-fix (NT only): incorrect baud rate returned in information block (function 1Bh)
- Bug-fix (NT only): size of information block was off-by-one (+1) due to padding
- Correct driver revision and ID string is now returned in information block (NT only)
- Treat interrupt 21h function 2Ch (DOS "GET SYSTEM TIME") as a "poll" with
potential forced yield (NT only)
this "tames" BRE down to single-digit CPU utilization!
- External programs can now "hangup" (disconnect) the user
(this capability of the FOSSIL driver can be disabled in the exec/sbbsexec.ini file)
- Synchronet Windows NT Virtual Device Driver (sbbsexec.dll)
- This driver now virtualizes (emulates) a UART (COM port):
By default, COM1 (IRQ 4, I/O Address 3F8)
This feature allows you to run DOS doors without FOSSIL support
This feature is configurable/disableable in exec/sbbsexec.ini, even on a per-program basis
Most programs will perform better in FOSSIL mode, but some may perform better in UART/COM Port mode
(depends on the program)
- Time-slice yielding (for both UART virtualized and FOSSIL programs) is now handled in
exec/sbbsexec.ini, even on a per-program basis
- Synchronet NT Services
- Bug-fix: the "SynchronetEvent" NT event log source wasn't being registered
- Synchronet Services
- Allow log level to be configurable in ctrl/services.ini either globally (in the root
section) or per service
using the LogLevel key (default value: "DEBUG")
- ctrl/services.ini now supports !include filename directive for nested
initialization files
- Now ignores services with no configured commad-line, but logs warning
- Bug-fix: when parsing the services.ini file, don't use the default NotHost
value for host_name comparison
under some strange circumstances, the startup->host_name could be blank
- Bug-fix: Now includes a working readln() global JS function
- ListServer
- Bug-fix: Don't call convert_msg_header() inside
process_contribution()
the header has already been processed and is passed
in as an argument
- Implement Cyclops subject modification for exported messages
if "subject_mod = true" in the listserver.ini for the particular list
(default: false)
- Don't add the [listname] subject prefix if it's already in the subject string
- Remove [listname] from imported subjects (list contributions)
- NewsLink
- Bug-fix: Specifically call msgbase.close()
fixes reported problem with
fdopen() failure opening massive number of newsgroups (e.g. >170 total)
- Better support for "folded" header fields (e.g. subject)
- Finger Service
- Add support for .plan files
New ;PLAN Telnet/RLogin string command (in exec/str_cmds.js) which allows
editing of .plan files by users
- Added support for abitrary "special request" files in the (optional) data/finger directory
- Special finger requests can now be triggered with '.'
(e.g. ".ver@yourbbs" instead of "?ver@yourbbs")
since some finger gateways (e.g. finger.cgi) don't like the '?'
- NNTP Service
- If -notag option is specified on command-line
do not add tear/tagline to local
message body text sent to Q-restricted accounts
- If -ascii option is specified or the sub-board has been flagged for ASCII-only
extended-ASCII chars (in message body or subject) are converted to ASCII
before being sent to client
- Bug-fix: msgbase could be non-NULL even though no newsgroup had been selected
check 'selected' instead of 'msgbase' to determine if a msgbase has indeed been
selected or not
- Added support for the (non-RFC standard) LIST EXTENSIONS command
- Bug-fix: return a 500 (syntax error) response for any "LIST etc." commands not supported
- Support HDR command as well as XHDR
- OVER/XOVER response now contains article range
- Handle spaces following NNTP commands without error (e.g. "LIST ")
- Added support for "LIST NEWSGROUPS" command (from RFC 2980)
- Added support for wildcard matching for RFC 2980 commands that support
[wildmat] arguments
only * and ?, not complete WILDMAT pattern syntax
- Bug-fix: support passwords with spaces in them
- Better support for "folded" header fields (e.g. subject)
- IRC Daemon
- Documentation
- Message Bases (SMBLIB v2.41)
- New function: smb_updatemsg()
used to safely update the header and index records of a message
- smb_putmsg() now calls smb_init_idx() automatically to initialize or
re-synchronize the index fields with the header fields
no longer need to call smb_init_idx() from smb_addmsg() and other places
(e.g. FIXSMB)
- Moved smb_init_idx() from smbhash.c to smblib.c
- smb_dump_msghdr() now displays the to/from/replyto network address header fields in a human-readable format
- If smb_getmsgidx() is called with a negative offset, it actually sets the
correct offset (from the beginning of the index) in the msg struct
- smb_putmsgidx() will now return an error if asked to write to an index record
offset past the end of the file (typically leaving a "hole" of zeroes in the
index file)
- smb_putmsgidx() and smb_putmsghdr() now returns the result of the final
fflush() call (normally 0, same as SMB_SUCCESS)
- Bug-fix: smb_tzutc() - subtract 60 minutes from US timezones with DST in
effect
- SCFG
- Saving changes in SCFG now recycles all services and services
including the Web server
and the Synchronet Control Panel (no manual reload of configuration required)
- Changed default zip/unzip command-lines to use
Info-ZIP instead of
PKZIP
- New option to allow socket-based (instead of stdio-based) file transfer protocols on *nix
- Bug-fix: imported internal codes (from subs.txt or dirs.txt) had non-alphanum
chars removed if > 7 chars instead of > 8 chars
- Eliminated unnecessary internal code and pointer index checking while importing
subs (no need to check newly-created subs for dupes) - eliminates exponential
importation time witnessed with large numbers (thousands) of message areas
being imported from a single file
- New File "Import Areas..." option to automatically generate the DIRS.RAW
file (if it doesn't exist)
or just create a temp directory listing file to import "invisibly"
- Bug-fix: clear "event only" flag for external programs when setting event type
to "None"
- ADDFILES
- Unix-friendly command-line syntax for specifying uploader's name (now -xname)
and enabling auto-add ('-' in place of directory code or '-filename')
- Bug-fix: added support for the %@ command-line specifier
- SEXYZ
- Added control over how filenames are written to the DSZLOG, via the sexyz.ini file [DSZLOG] section:
- the Path key controls whether the full path is logged
- the Short key controls whether the Micros~1 shortened path/filename is logged
(on Windows only)
- the Quotes key controls whether the filename is logged in
double-quotes (for EleBBS long filename compatibility)
Note: The "Quotes" feature can also be enabled with the "-quotes" command-line
option
- SMBUTIL
- New command: x, used to dump a message base index
- CHKSMB
- Verify that if the index.to field is non-zero or there's a to_ext header field,
that they match
This will catch a QWK networking bug in previous
Synchronet versions where the index.to was non-zero
(the number of the QWKnet node account), but there was no hdr.to_ext field
thus the index could not be recreated from the information in the header
(e.g. by fixsmb).
This was actually an intentional design decision at the time, but in hindsight,
it's a bug
(the index file is not supposed to contain any unique information)
- MAKEUSER
- Prevent crash (NULL-dereference) on invalid command-line syntax (e.g. -S50)
- Sets AUTOTERM (automatic terminal type detection) in user.misc for new users
- New GTK Utilities (Unix only)
- Three new experimental GTK+ based utilities have been added to the default *nix build.
These utilities require read/write access to the sbbs directories.
They do NOT need to be running on the same machine.
- gtkmonitor - Based loosely on the Win32 control panel without the log output.
Shows current activity and allows some sysop control.
- gtkuseredit - Based on the Win32 useredit utility allows editing of users
- gtkuserlist - Lists users supporting ARS filters and allows quick validation sets
to be applied to multiple users simultaneously.
- These utilities are lightly tested and require GTK+ and Glade libraries and headers to be installed at the time of the Synchronet build.
- New SYNCVIEW Utility (Unix only?)
- A simple viewer for ANSI files.
- Can be piped the output from ASC2ANS to display .ASC files
- Miscellaneous
- SLOG (System/Node Statistics Log Viewer) utility ported to 32-bit (by Deuce)
- ALLUSERS (Bulk User Editor) utility ported to 32-bit (by Deuce)
- DELFILES (Remove expired/offline files) utility ported to 32-bit (by Deuce)
- ANS2ASC and ASC2ANS now support '-' in place of a filename on the command-line
to specify standard in/out instead of a file
For many more changes since v3.10, see v311_new.html,
v312_new.html,
and v313_new.html
For changes to the JavaScript Object Model, see v314_jsnew.html
Copyright © 2005 Rob
Swindell
$Id: v314_new.html,v 1.11 2006/12/29 09:03:56 rswindell Exp $