diff --git a/docs/v320_new.txt b/docs/v320_new.txt new file mode 100644 index 0000000000000000000000000000000000000000..b279c8fb598a6057f6dc1cd9c20c094e1549c7b7 --- /dev/null +++ b/docs/v320_new.txt @@ -0,0 +1,357 @@ +***************************************** +* What's New in Synchronet Version 3.20 * +* (ChangeLog since v3.19b Jan 2, 2022) * +***************************************** + +General +~~~~~~~ +o New userbase (see https://wiki.synchro.net/history:newuserbase for details) +o Overhaul statistics files + - */dsts.dab (daily statistics and running totals) -> */dsts.ini + - */csts.dab (cumulative statistics / log) -> */csts.tab + - DSTSEDIT (daily stats editor) goes away, not needed (just edit the file) +o Baja: Make !INCLUDE directives filename case-insensitive + +Security +~~~~~~~~ +o Disallow new user aliases from matching an existing user's real name +o Implement duplicate new-user email address checking (optional) + - Set SCFG->System->New User Prompts->Force Unique E-mail/NetMail to "Yes" +o New 'O' restriction is automatically applied to accounts with a duplicate + real name (when allowed by the sysop) and prevent such users from posting + or sending mail with their real name +o Change the semantics of the "Allow Sysop Logins" setting in SCFG->System: + an account with sysop access (i.e. level 90+) can still login, but any action that + normally requires the system password will not be allowed. This includes the + sysop-actions available in the FTP server when authenticating with + <user-pass>:<system-pass> as the password. The sysop-user can still + authenticate (and login), but none of those sysop-actions will be available + to them. + Renamed/moved to SCFG->System->Security Options->Toggles->Allow Sysop Access + +Customization +~~~~~~~~~~~~~ +o New modules: msgscancfg.js and filescancfg.js +o New @-codes: + - BUILD_DATE + - BUILD_TIME + - CPS + - OS_CPU + - TRUNCATE + - TRUNCOFF + - GETDIM + - LINEDELAY[:n] +o @-codes can now be included in text centered with the CENTER @-code + Note: this centering logic does not know the expanded-size of the @-code, so + use a fixed-length @-code (e.g. with padding) or use the 'C' @-code format + modifier instead +o New text.dat strings: + - HashingFile + - HashedFile + - String 387 is now used for YouCantUseThatNetmail string + - NewUserValEmailSubj + - InactivityAlert + +Windows +~~~~~~ +o Synchronet should run on Windows XP again + Fixed 'The procedure entry point inet_ntop could not be located in the + dynamic link library WS2_32.dll' +o Ignore VDD WriteFile() failures if the child process has terminated + If the child process (e.g. door game) has terminated, don't log errors + if/when WriteFile() to the mailslot fails. This would be expected as the + mailslot is created/owen-by sbbsexec.dll which would also terminate along + with the process, thus closing the mailslot +o Suppress "VDD Open failed" warning if child process terminated +o Fix (loss of) carrier detect reporting in Virtual UART driver +o Many improvements to the Virtual UART Driver as a result of SVDM development: + - Report CTS status in FOSSIL driver (high when outbuf has some space) + - Emulate FIFO enablement + - Support RTS flow control + - Report "DCD change" in MSR correctly +o Synchronet Control Panel (sbbsctrl.exe) now has a "Log Events to Disk" option + and will write the event thread log messages to data/events*.log +o New useredit.exe (Delphi forms ported to C++Builder) + +Configuration Utility (SCFG) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +o Displays path/filename of config file actively being edited, not date/time +o Supports cycling through like-items using left/right arrow keys + e.g. comparing/glancing through grps, subs, libs, and dirs, is really easy! +o New "Servers" menu: Almost all settings in the sbbs.ini file are now + configurable here. +o New "Initial Setup Wizard" runs automatically on new-install or via '-w' opt + Similar to the SBBSCTRL:Configuration Wizard in function, but TUI, not GUI +o Moved Node->Toggle Options->Allow Login by User Number, Login by Real Name, + Always Prompt for Password, to System->Security Options +o Moved Node->Advanced Options->Validation user, Notification User, and + Notification Error Level to (new) System->Notifications menu +o Moved Node->Advanced Options->Inactivity Warning and Inactivity Disconnection + to System->Advanced->User Inactivity Warning (now a percentage) and + Maximum User Inactivity +o Removed Node->Advanced Options->Semaphore Frequency and Statistics Frequency +o Adding nodes, prompts to automatically adjust the Terminal Server LastNode + value to include the new (higher) node number +o Moved security settings from "System" menu to System->Security Options + - Password + - Users Can Change Password + - Days to Preserve Deleted Users + - Maximum Days of Inactivity + - New User Password (now prompted when setting Security->Open to New Users) + - Security Level Values, Expired Account Values, and Quick-Validation Values + - Toggle Options->Allow Sysop Logins, Display/Log Passwords Locally, Users + Expire when Out-of-time, Require Sys Pass during Login, Closed to New Users +o Added System->New User Values->QWK Packet Settings +o Moved System->New User Values->Question Toggles to System->New User Prompts +o Added System->Advanced->Maximum Log File Size (enable/control log rotation) +o Added System->Loadable Modules->Send Feedback, Chat Section, List Users, + Scan Dirs, List Files, View File Info, Batch Transfer + - All configured loadable modules can now include command-line options +o File Directory->Toggle->Template for New replaced with File Library->Diretory + Defaults... + "Clone Options" moved to Directory Defaults->Clone Settings +o New File Library options: + Upload Requirements, Download Requirements, Operator Requirements, Exemption + Requirements, Auto-Add Sub-directories, Virtual Sub-directories +o Internal codes (prefixes and suffixes) have double in size +o Add "Native" option for QWKnet call-out cmd-lines +o Add an 'enabled' property for QWKnet hubs, defaults to true +o Move the pack and unpack commands to an "Advanced" sub-menu since they + are completely optional now +o Trim leading and trailing white-space in input strings, automatically +o Don't allow spaces when inputting/editing internal codes + +JavaScript +~~~~~~~~~~ +o Command-shells can be written entirely in JavaScript, no .bin stub needed +o file_area.web_vpath_prefix +o file-metadata-object (return value of FileBase.get()).vpath +o methods for vetting filenames (e.g. for upload by users) + - system.illegal_filename() - check if contains illegal chars/sequences + - system.safest_filename() - check if contains only safest chars + - system.allowed_filename() - check if meets criteria from SCFG->File Options + - system.check_filename() - check if legal and meets configured criteria and + is not in file.can + - bbs.check_filename() - ditto, except will display badfile.msg as + appropriate +o Restore ability for MsgBase.open() to open an arbitrary SMB msgbase +o Remember the last 'first_msg' property value after MsgBase instance is closed +o Fixed user.dat open file descriptor leak in User object constructor +o New User.close() method +o New console.flush() method +o New console.progress() method + Display a progress indication bar, e.g. "[ Scanning 10.0% ]" with the bar + backfill effect (when supported by the terminal) +o File.readBin() and writeBin() methods now support 64-bit integer binary data +o console.mouse_mode now supports being set to just true or false (no flags) +o console.pause() now accepts an optional bool argument (set_abort) +o Allow system.matchuserdata() to search deleted user records +o Add 'fidonet_addr' property to msg_area.sub[] +o New property: system.login_settings +o New property: system.mail_settings +o file_area.min_diskspace is in bytes now, not kilobytes +o New global function: rmfiles() - remove files and sub-dirs, recursively +o New bbs.batch_clear() method +o New bbs.chat_sec() method +o New bbs.sync() method +o New User.stats.download_cps property +o New User.mail_settings property +o New bbs methods: save_msg_scan() and reload_msgs_scan() +o bbs.telnet_gate() and rlogin_gate() now return boolean (success/failure) +o bbs.logoff() now returns boolean (false if log-off was denied) +o New bbs properties: first_node and last_node +o MsgBase.save_msg() throw an exception when empty recipient list is provided +o New system.find_login_id() method +o New console properties: + - line_delay + - max_getkey_inactivity + - last_getkey_activity + - max_socket_inactivity +o New method: File.iniRemoveSections() + +Servers +~~~~~~~ +o MQTT (IoT protocol) statistics/status/output publishing and control +o Allow a configured maximum-severity (minimum value) for TLS-related log + messages. Default is 0 (LOG_EMERG, maximum severity) +o All servers support login-by-realname/user-number (if enabled by the sysop) +o systemd integration (status reporting) on *nix builds +o Fix uploader-notification, credit awards, download-counters in FTP downloads + +Services +~~~~~~~~ +o Allow a per-service "LowestLogLevel" setting + Have a service (e.g. imapservice.js) that logs errors that you'd rather not + fill your error.log file with? Set that service's "LowestLogLevel" to + "Warning" in your services.ini file ("lower" means "more severe" when it + comes to log levels, so this would set the maximum severity to Warning) + +Terminal Server +~~~~~~~~~~~~~~~ +o Socket inactivity watchdog now supported and configurable with separate + maximum inactivity values for Login, New User Registration, and normal + User Session (SCFG->Servers->Terminal Server->Max * Inactivity settings + - This inactivity detection works even when scripts don't call getkey() + but is reset upon received TCP traffic of any kind (even NOP/GA) +o Progress-update displays are now optimized for slow (e.g. modem) connections +o Basic PETSCII output column/line counting support (for auto-pause) +o Displayed Instant Messages (notifications and telegrams) are now stored + and historic messages viewable via ;msgs command and 'V' from the ^P prompt +o New display file naming (*.cXX.[asc|msg|ans|rip|seq]) where XX is the minimum + column width (not necessarily the exact column width) + The existing *.XXcol.* naming is still supported for exact-column width files +o ASC/MSG versions of display files no longer required + If all a sysop wants to create/use are .ans files, they can do that, non-ANSI + users be damned +o Use nearest-zone matching for source FTN address when replying to netmail +o Fix lost 'unexpected characters' received in ANSI get cursor position + response (issue #304) +o newuser.js has a new 'notify_sysop' option (enabled via modopts.ini) + Will notify the sysop via email and telegram whenever a new user account has + been created +o Configurable system password timeout (default: 15 minutes) +o Fix PETSCII 40/80 column port connections for IPv6 +o [BBS] + DefaultTermWidth=80 + DefaultTermHeight=24 +o Online user editor display more of the user's (long) password +o Increase user's hostname field (aka user_t.comp) from 30 to 60 chars +o Most sysops didn't know it, but if exec/feedback.* existed, it would be + executed just before any user sent an email to the sysop (user #1), + excluding new user validation requests: + - make this module name configurable and loadable from mods + - support JS module here (exit(1) to abort the feedback) + - invoke for email being sent to *any* sysop (not just user #1) + - don't invoke the module when sending *from* a sysop account +o Make new user QWK-related and Chat-related settings configurable + - Added chat-settings to SCFG->System->New User Values->Toggle Options + - Added new menu: SCFG->System->New User Values->QWK Packet Settings +o New line-based method of output throttling (e.g for animated ANSIs) + +Doors +~~~~~ +o New option to Disable Local Display +o New option to Alert/Disconnect an Inactive User while running program +o Fix EXITINFO.BBS drop file generation (a few problems with size and garbage) +o Totally re-write the PCBOARD.SYS and USERS.SYS drop file generation logic +o Limit door.sys drop file numeric values to 32767 + Fixes issue with doors using The DoorFrame door library (e.g Lemonade!) +o Populate line 36 (user alias) of door.sys with the current user's handle + Previously, we just always made this a blank line +o Add line 8 (user's real name) to DOORFILE.SR (Solar Realms' drop file) +o Dates in drop files are now always in MM/DD/YY format, never DD/MM/YY +o Line 37 ("Event Time") of DOOR.SYS was always 00:00, now it'll be the + next event time (in HH:MM format) +o Add "Disable Local Display" option for doors + New option to disable local screen display for door programs: sets the + 'Screen' value appropriately in door.sys or pcboard.sys drop files and on + Windows, doesn't create a new console window. +o Parse DOSXTRN.ERR + Also, now parsing the DOSXTRN.ERR file created by the latest/greatest + dosxtrn.exe when failing to execute the child/DOS program and log the parsed + error details (errno value and description), helpful in debugging the reason + why a DOS program may not have been successfully executed by DOSXTRN +o When user hangs-up on external programs on *nix, try to terminate w/SIGTERM + Previously, when a user disconnected or ran out of time while running a + stdio-based external program on *nix, if the program was still running, we'd + send it a SIGHUP, wait up to 10 seconds for the process to terminate and if + it did not, terminate it (ungracefully) with SIGKILL. Since some programs + catch SIGTERM (and not SIGHUP) to indicate a termination request, we now will + first attempt a SIGHUP, wait up to 5 seconds for the process to terminate and + if it does not, then send a SIGTERM and wait up to another 5 seconds for it + to terminate and if it doesn't, then finally send it a SIGKILL (which cannot + be caught and always results in an ungraceful termination of the child + process) + +File Transfers +~~~~~~~~~~~~~~ +o Extracted DIZ from sub-directory of archive does not preempt root DIZ File +o Increase maximum extended file description length from 4000 to 5000 chars +o Filenames > 12 chars use liberal filename matching + (fixes issue seen at https://youtu.be/_IWzIV0_sZ4?t=310) +o Allow maximum uploaded filename length to be configured (default: 64) +o Searching for file descriptions in the Terminal Server, now searchings file's + tags, author, and author group, if available +o Fixed issue (#328) removing files from batch queues +o Fix "Testable Files" file extension comparison (issue #331) + Issue introduced in v3.19: Testable Files (a.k.a. upload processors) with a + specified file extension/type (e.g. "ZIP" and not "*") would never run + because the file extension comparison logic was "off by one". Testable Files + with an extension of "*" (all files/types) would still run however. +o Implement the sbbsfile.nam and sbbsfile.des post-processing removed in v3.19 +o Auto-detect/display UTF-8 encoded extended file descriptions +o Improved support for files > 4GB in size +o Add options to sort directories by file size (ascending or descending) +o Allow sysop-choice of source of virtual sub-directory source name + By default, each file transfer directory's internal code suffix is + used as the source of the sub-directory of the virtual path used + to represent a file area in the FTP and Web servers. Now, a sysop + can change that source to either each directory's short name or + long name, if they prefer. +o Removed FTP server DIR_FILES option (no longer applicable) +o Fix: Use the user's default download protocol for batch downloads +o Increase maximum file extension length from 3 to 15 characters (e.g. .tar.gz) +o Fix bug (issue #515) with moving files between directories +o Minimum disk space more universally enforced and no longer limited to 65535K +o Better access enforcement to files in batch download queues +o Remove defunct files from batch download queue during logon +o Store/reuse file download throughput (in CPS), for transfer estimates/ETA + +Message Areas +~~~~~~~~~~~~~ +o Sanity check sub-board's assigned FTN addresses when loading configuration + (use nearest matching configured AKA) +o Fixed QWKnet netmail dest user look-up (using qnet/users.dat) + broken back in 2021 +o New text.dat strings for received Fido and Internet mail + - InternetMailReceived + - InternetMailForwarded + - FidoNetMailReceived + - WithAttachment + - FidoEchoMailReceived + For The Millionaire (RIP?), closing issue #254 + The first string (suppressed with %.0s) is an optional date/time stamp. + This also deprecates (removes support for) the [mail] NewMailNotice and + ForwardNotice keys from sbbs.ini. +o Fix heap corruption in decoding of quoted-printable text in smblib +o Fix erroneous filtering of vote messages by age + e.g. !Filtering QWK message from (null) due to age: 19321 days +o Fix: Include blank lines in messages edited with internal editor +o Don't save draft messages upon disconnect for Guest or "no one" (user #0) + +SBBSecho +~~~~~~~~ +o Don't use libarchive for creating/appending bundles + - Must use (have configured) external archive program (e.g. zip) +o New EchoCfg->Global->Sort Linked Node List option +o Supports filtering messages based on text/subject.can file +o Rework NetMail routing logic to handle point destinations better + +HatchIT +~~~~~~~ +o Supports a new non-interactive mode (patch by @acn) +o Generates MS-DOS compatible 'File' key values and 'Lfile' key when source + filename is not MS-DOS compatible + +Web Server +~~~~~~~~~~ +o Direct Filebase access for downloading files with access controls, + notifications, updated statistics and credits (optional, enabled + via SCFG->Servers->Web Server->Filebase VPath Prefix (e.g. "/files/") +o Requsted-path aliasing, via ctrl/web_alias.ini +o Log requests that resolve outside of the web root as hack attempts +o Fix HTTP-requests for files >= 2GB in size +o Perform a JS garbage collection for each new request in a reused session +o Dynamic file area/base indexing + (set sbbs.ini [web] FileIndexScript to webfileindex.ssjs for demo) +o Add UNIX domain FastCGI support + +Mail Server +~~~~~~~~~~~ +o Fix corrupted RFC822 msg headers when a header field was > 1024 chars +o Reject SMTP session from any client that sends illegally-long lines +o Fix false FORGED mail header 'FROM' field detection/rejection + +FTP Server +~~~~~~~~~~ +o Limit uploaded file sizes, accounting for free disk space