• src/sbbs3/main.cpp

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Jul 11 19:17:01 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/6713d10cb1f9e44d1cb8a9e6
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix incorrect 'socket' value for new (highwater) log message
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Jul 11 19:17:01 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/06f6b07ddbc0ba9f7d66f5c5
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Eliminate large-scoped 'i' variable in bbs_thread()

    This is just a code quality (readability) improvement. No functional change. ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Jul 11 19:29:21 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/59e30dda6bb683b9c1a97298
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix *nix build

    We removed the large-scope 'i', but didn't update the Unix-only blocks of code (dealing with UNIX domain spy sockets).
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Jul 11 19:39:16 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/bca9510b25f790f84f59545a
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Include current node number intead of socket descriptor in highwater log msg

    looks better, more consistent with the log messages before/after it.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat Aug 3 19:58:06 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/c03ed4b9ce042d5651575e18
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Log a warning if any socket inactivity max durations are shorter/equal to ...

    to the getkey inactivity timeout.

    By setting a socket timeout shorter or equal to the getkey timeout, the getkey timeout effectively does nothing.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Oct 13 13:36:54 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/2ce9ccfe50ab05c3bacf2e8d
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Reset sbbs_t menu path vars (menu_dir and menu_file) before execing cmd shell

    I obvserved an issue with Amessyroom's bbs where his custom (JS) shell is setting bbs.menu_dir but when switching to another stock shell, his menu
    files were still being displayed (with mismatching command keys as a result).

    bbs.menu_dir (and implicitly, the set_menu_dir Baja function) apparently have not been used in this way (much) before.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tue Nov 12 20:08:02 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/ccab84c359406ffea9695db3
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Use new FILE_RETRY_ERRNO() macro for sopen() retries in sbbs_t::nopen()
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Nov 14 20:07:31 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/27e30f1277531509630d3ca8
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Better support for multiple hosts handling QWK events

    First, fix the logged username bug in the "Lock exists" log message.
    Next, double check that the trigger file (sem file or REP file) still exists after acquiring the file mutex.

    Use a temp varible (fname) to make the code easier to read.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Nov 14 20:55:21 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/5956805f6e2e985824a86d52
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Log event command-lines (repeating event code was redundant)

    Only log messages about QWK mutex files existing when > 60 seconds old
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Thu Nov 14 21:09:21 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/3127e4f4b89c73263cadd901
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Detect hung event_thread and log details

    Add log message when spawning background timed event
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Fri Nov 15 12:20:16 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/6df88451e8d9ce67c27bd4d0
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Use timestr() instead of ctime_r() for logging full date/times

    Also when detecting a blocked event_thread, log the event_code that is/was running last.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Nov 15 12:26:02 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/87b22bda88174a8e03e25558
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Reolve !ERROR 2 (No such file or directory) removing "data/pack####.now"

    glob() results might be out of date by the time we look at each file, just
    skip missing QWK pack semaphore files silently. This should resolve the
    ".now already gone" messages too. Hopefully.

    Removed some extraneous quotes around logged event command-lines.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Nov 15 18:29:09 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/f37e9789f42d73d4991d2ff3
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Use fmutex_open() instead of fmutex() to better protect the pack*.lock files ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Nov 15 22:17:53 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/6dda18740c154c5f099070d1
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Use fmutex_close() and don't log ENOENT errors when removing pack*.now files ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Nov 15 22:37:59 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/208f263b94e85ef91dc62cc3
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Just a little wording update on the fmutex file open log message
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Nov 17 03:02:57 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/2fa8db2b6a1a5da43db71887
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Perform "first level Ctrl-C input checking" even when in Telnet BINARY_TX

    This condition caused aborting BBS operations via Ctrl-C to fail when connecting from a traditional Telnet client using binary transmission
    mode (e.g. telnet -8) or SyncTERM v1.2rc6.

    The check of rio_abortable was probably enough to disable this function
    during file transfers (e.g. we've had no issues with SSH file transfers
    that might include byte 0x03 received from the client), but I added the
    check for SS_FILEXFER system status check too, perhaps unnecessary.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Mon Nov 18 22:11:42 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/6d7f85680177ba6fef1946f2
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Don't use uninitialized variable: lockfname

    Where's the compiler warnings guys?
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on ChromeOS)@VERT to Git commit to main/sbbs/master on Tue Nov 19 22:55:43 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/fa5321fe8850f6d2d9558312
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    request_telnet_opt() will ignore all cmds but DO, DONT, WILL and WONT

    This allows us to save unitialized telnet_*_option values (i.e. 0x00) and pass those values back to request_telnet_opt() with no side effect.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbs/master on Sat Nov 23 01:24:28 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/277855436d2143b88bd9a501
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix crash when NO_EVENTS option is set for terminal server

    Don't deref that null pointer
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/master on Sun Nov 24 09:34:14 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/26886a8c7ba879f2e84d2650
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Remove ssh_errors variable.

    We're carefully counting the errors, but never looking at the count.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on macOS)@VERT to Git commit to main/sbbs/master on Sun Dec 1 19:57:53 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/89a884e9dca8116090df2d87
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Log the error description upon failure to send on socket
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Dec 6 17:38:28 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/f83b805f2ebdc68d7612ab6d
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Don't try to renaming a bad (unpackable) REP packet if it doesn't exist

    There still appears to be some race condition with network (Samba) FS
    directory caching and opening/locking of files, so it does seem illogical that the packet file wouldn't exist at this point (since we have the lock file opened) but this does still happen on occasion on Vertrauen.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat Dec 14 13:08:11 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/65ff68a0bb3386cd6d4c3fab
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Always unlock nodefile_mutex before calling errormsg()
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Dec 22 14:37:37 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/74724d0b83150c1da1a88d74
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    When searching for unused nodes, skip nodes that have sockets in-use

    We already know such nodes are in-use, so no need to read their node.dab
    record and put extra contention on the node.dab file. Hoepfully this
    reduces or eliminates occurrences of the error:
    Node n status is WFC, but the node socket (s) and thread are still in use! Though I kind of expect occurrences of "NODE STATUS FIXUP" errors to likely return.

    We could in theory just track status of nodes in memory (for those
    nodes that this instance of sbbs controls), and not read the node.dab file at all when checking those nodes' status, but:
    - that would prevent out of process control of node status
    e.g. using the node utility to mark a node as offline
    - we'd have to protect instance of in-memory node status checking/changing
    with a mutex
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Dec 22 21:32:50 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/a4f032b82ed2ddfbd23e963d
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix-up node status when node status is in-use, but no socket active

    This is a situation we can auto-correct and log a message when we do.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Dec 27 16:17:12 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/2d487931e40d312071024416
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix race conditions around node_socket and node.dab checks

    Check and clear/invalidate node_socket while holding the node.dab record
    lock.

    This should fix the error reported by kk4qnb (KK4QBN)
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Wed Jan 1 21:40:30 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/480598355c061c7a3507f24e
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Continue the "ERROR ... renaming" bad QWK packet fight

    Check and log the length of the packet now (since fexist() continues to report that the file exists when fexistcase() said it did not, even when
    experimenting with adding a call to access(filanem, F_OK).

    This likely affects no system but VERT.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Jan 2 00:34:57 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/e4e41db746c18c1bab6a0083
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Don't create (or write) to qnet.dab, so open with right access

    We're just converting/upgrading this file (to time.ini), so don't log an error (reading) if/when the file doesn't exist.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Jan 3 17:45:26 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/d06e2f27e7f3862cf049bc6a
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Add another flength() check before renaming bad QWK packets

    To hopefully address:
    !ERROR 2 (No such file or directory) renaming s:\sbbs\data\file/somenum.rep
    (-1 bytes) to s:\sbbs\data\file/somenum.rep.6777ed7c.bad

    Clearly flength() is returning -1 (file doesn't exist) at this point, so perhaps the call to fremove() just above updated a cached directory?
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Mon Jan 20 20:37:00 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/3bf096b52465792776df3787
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Make JS global alert() and deny() methods inline with jsexec versions

    alert() doesn't throw exception on null/undefined, just no arg

    deny() throws exception on no args or null/undefined arg
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Feb 9 00:09:25 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/64352121b6727a90eee5e848
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Don't attempt to remove inbound QWK packet if doesn't exist (renamed?)

    Address error report by Greg Meckel (THEICECA)
    evnt QNET !ERROR 2 (No such file or directory) (EinError 2) in main.cpp line 3195 (event_thread) removing "C:\sbbs\data\VERT.qwk" access=0

    ... this could happen after a bad QWK packet was detected and renamed.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on ChromeOS)@VERT to Git commit to main/sbbs/master on Sun Mar 23 18:11:53 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/6a0971f6e79ec18c2ed611dc
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    filelength() can return -1 on error, deal

    Just caught during code review
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on ChromeOS)@VERT to Git commit to main/sbbs/master on Sun Mar 23 18:11:54 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/0ac5ed5728c53d93eb347c23
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Set node "interrupt" flag to try to gracefully disconnect user blocking event

    When a timed event is configured to run "exclusively", all nodes need to not be in in-use. As it was, after waiting 60 minutes for the online user(s) to
    notice they'd run out of time and disconnect, we'd just (rather ungracefully) close the sockets used by such node(s) connections. This results in same logged errors about trying to send to bad socket descriptors and provides no feedback to the user about why they were disconnected.

    Since we have the node interrupt flag (which hopefully, all scripts are checking via node_sync) - use that to try to more gracefully terminate the user's session/connection after 30 minutes of waiting for the user to disconnect.

    If after 60 minutes of waiting, the node is still in-use, we still do the socket disconnection method.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/master on Thu Apr 10 14:57:08 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/aea882a8e4552b64c03c521d
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Initialize Terminal in global sbbs when answering

    Should fix issue where extra pauses occur on connection.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Deuc¿@VERT to Git commit to main/sbbs/master on Thu Apr 10 14:58:17 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/f218ad1fec992a71f590120e
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix typo (thrad->thread)
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Wed Dec 31 01:48:10 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/70480dcee4378c21be0ca536
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Add some passthru thread debug log messages

    To hopefully help identify the cause of issue #1038

    The theory being that the client socket was disconnected while running an external program (sexyz in this case) and this check at the end of external() (the *nix version) might have a race condition with the passthru thread terminating due to disconnection as well:
    if (!(mode & EX_STDIN)) {
    if (passthru_thread_running)
    passthru_socket_activate(false);
    else
    pthread_mutex_unlock(&input_thread_mutex);
    }
    in which case it would try to unlock the input_thread_mutex that it did not own. I'm not clear why that would cause the pthread_mutex_destroy() call to fail (on input_thread_mutex) but maybe it does.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Thu Jan 1 22:32:06 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/7e7db957384647c44958d0cb
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    When upgrading a legacy time.dab to new time.ini format, ignore unreadables

    It's possible the configuration was upgraded (e.g. by update.js) before any timed events have run, so the time.dab could be short. Just zero-initialize (and don't log any errors) if there's trouble reading a legacy timestamp from time.dab or qnet.dab.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sun Jan 11 03:40:05 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/f21adb001964358bc95c1e28
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Defeat the extra lines goings to the events.log file

    Example:
    2026-01-06 23:59:59 BBS Events New Day - Prev: Wed Jan 07 2026 12:00 am
    != New Day - Prev: Wed Jan 07 2026 12:00 am

    In theory this cold happen while a user was logging on, hence the use of llprintf()->logline(), but we don't want that redundant noise in the
    events.log file so we have to play a dance with 'online' value.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tue Jan 20 21:00:06 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/7e8760ce6ef8c60051202ef0
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Don't backup empty user bases or mail bases

    Address "it seems silly to have five backup empty mail files too" comment
    in issue #993.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tue Jan 20 21:00:06 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/f66c37792f6027f1b1cdd06f
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Log the number of users and mail messages that were included in the backups
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tue Jan 20 21:00:06 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/6f4dac2d037978d0c92dfa7f
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Remove hyphen from "Backing-up" and "Backed-up" log messages
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Tue Jan 20 22:53:22 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/674c4facfbfcd5855915ade5
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix (new) bug caught by GCC printf verifier
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Tue Jan 27 11:30:04 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/372404c4f6491a962cbd9471
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Don't try to validate the userbase if it doesn't exist

    Fix for new installs as reported by Storm on IRC (thank you)
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri Feb 13 00:34:20 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/a401004cd4401616a2a2312f
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Remove debug log line inadvertently left in
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat Mar 7 19:47:07 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/8b6210dcaf2e3b49ed16f110
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Destroy the nodefile_mutex in sbbs_t destructor

    This could've been a small memory leak

    Also using [F]CLOSE_OPEN_FILE function-like macros to simplify code
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sun Mar 8 01:36:51 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/819d26b6c593606c3e2e2497
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Simplify/correct the node status fixup upon client connect

    - when we treat a non-WFC node status the same as WFC because the node_socket
    is invalid, don't call lprintf(LOG_CRIT, ...) with the node logged. That's
    ultimately going to call errormsg() which is going to try to increment the
    node's critical error counter and fail or deadlock because the node's
    record is already locked. Log the error after we call putnodedat() and the
    node record has been unlocked.
    - The "status is WFC" while the node_socket is valid check would always fail
    because we already checked the node_socket validity at the top of the loop
    so just remove this check/error message as dead code
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sun Mar 8 01:52:45 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/80137a5129d974935681c478
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Log the corrected node status value (error caught be GCC printf-validation)
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Sun Mar 8 03:41:53 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/5c099d90d119dd447133160b
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Replace break accidentally removed in previous commit

    Would mark all nodes as at the prompt up new connection (big whoops)
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Wed Mar 11 02:35:19 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/43328cad606fde38aec86eea
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Fix potential socket leak upon server termination

    caught/reported by Claude via Deuce
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Wed Mar 11 15:36:29 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/6e49cb9c959c7e1710a1ac09
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Coverity complained about this unnecessary invalidation of client_socket here

    CID 644869
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Mon Mar 16 22:50:16 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/b598dcbb541ca8ddf8a083d8
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    Insure all alert() output begins in the first (left-most) column
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat May 2 18:58:15 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/ff1aae498b3464b1f2fd050a
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    sbbs3 terminal server: drop unsent goodbye output before close_socket

    In the four listener exit paths that queue output via the listener
    pseudo-sbbs (CLIENT BLOCKED for ip.can / host.can, "no nodes
    available", node init failure), call sbbs->rioctl(IOFB) right after flush_output() and before close_socket(). Without this, any
    text/badip.msg / badhost.msg / nonodes.txt residue that didn't make
    it out within the flush timeout sits in the ring buffer; when the
    output thread next wakes it tries to send the leftover on the
    now-closed FD, and the failed send logs a noisy warning (e.g.
    "!ERROR 22 (...)" or "!ERROR 58 (...)" sending on socket).

    This is the same idiom as the existing rioctl(IOFB) at the start of
    the per-connection setup (main.cpp:5795) � purge stale buffer state
    before changing socket lifecycle.

    It does not eliminate the race entirely: data already pulled from
    the ring buffer into the output thread's linear buffer is still sent
    (or attempted), since rioctl operates on the ring buffer only. The
    remaining noise is handled separately by demoting the typical
    post-shutdown send errors (ESHUTDOWN, EINVAL) to LOG_NOTICE.

    Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat May 2 18:58:15 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/8c6da8b2eee4363c1fcb9925
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    sbbs3 terminal server: include socket/protocol/IP in output_thread send-error logs

    Three coordinated changes to output_thread's SOCKET_ERROR handling:

    * Switch all six log lines from "<node-name> ..." (using sbbs->client_name
    like "Terminal Server" / "Node N") to the standard "%04d %s [%s] ..."
    prefix used by every other connection log line in the file. This
    groups send errors with the matching "Connection accepted",
    "!CLIENT BLOCKED", etc. lines for easy correlation. Capture
    client_socket.load() once into a local since the cascade reads it
    six times (it's std::atomic).

    * Populate the listener pseudo-sbbs's client.protocol and client_ipaddr
    per-connection. These were previously only set inside sbbs_t::init()
    for per-node sbbs's (main.cpp:3639), leaving the listener's
    output_thread with empty strings to print.

    * Demote ESHUTDOWN and EINVAL send errors to LOG_NOTICE alongside the
    existing ENOTSOCK / ECONNRESET / ECONNABORTED handlers. Both are
    the typical errors raised when the listener races with close_socket()
    on a blocked client (post-shutdown / mid-close socket state).
    Treating them as expected disconnect noise matches the existing
    pattern. Note: on POSIX, EINVAL from send() can theoretically
    indicate a programming bug rather than a socket-state race, but in
    practice it's the same race as on Windows and the noise reduction
    is worth the small risk of masking.

    Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Tue May 5 15:55:25 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/88889e94e52406ca3ff0b721
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    node_thread: avoid throttle-loop hang on loginAttempts() failure (CID 645970)

    loginAttempts() returns long and is documented to return a negative
    value on failure, but the result was stored in a uint. On -1 the value
    became UINT_MAX, passed the (> 1) check, and the throttle loop would
    run ~4 billion mswait() iterations. Match the signed return type and
    update the matching format specifier and loop counter.
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wed May 6 19:41:53 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/ded9a017f3b2199433125aad
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    sbbs_t::lputs: guard event-thread log-level check against null startup (CID 543171)

    sbbs_t::lputs() consults startup->event_log_level when is_event_thread
    is set, but the surrounding callers (e.g. sbbs_t::js_create_user_objects) already treat startup as potentially-null. If any caller reaches an errprintf/lprintf path with startup == nullptr while is_event_thread is
    true, the deref would crash. Add the null check that the call sites
    already assume.

    Co-Authored-By: Claude Opus 4.7 <[email protected]>
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wed May 6 19:41:53 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/ae00ca271149cf268b913ae8
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    main: suppress ssh_mutex/sftp_state inter-procedural FPs (CIDs 469167, 487167)

    CID 469167 (output_thread SLEEP): GCESSTR's lprintf runs while
    ssh_mutex is held. Releasing+reacquiring the mutex around the SSH
    error report would race the surrounding error-handling sequence
    (ssh_errors++, online=FALSE) and is the wrong tradeoff for a fast log
    write. Annotate as intentional design.

    CID 487167 (crypt_pop_channel_data LOCK at function end): sftp_state->mtx
    is acquired+released entirely inside sftps_recv;
    crypt_pop_channel_data never holds it across return. Coverity
    propagates a phantom lock state through the helper.

    Note: CID 487173 (sftp_send LOCK leak in src/sbbs3/sftp.cpp) was
    already mitigated in current source � every error path now releases
    ssh_mutex before returning.

    Co-Authored-By: Claude Opus 4.7 <[email protected]>
    ---
    � Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wed May 6 22:36:57 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/d6d35429bd173a0284d8fc5a
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    main: cast cryptSetAttribute SSH_CHANNEL_ACTIVE deactivation to void (CID 487166)

    In crypt_pop_channel_data the inner cryptSetAttribute that flips the
    selected channel inactive is best-effort (we're tearing down anyway).
    Make the discarded return explicit.

    Co-Authored-By: Claude Opus 4.7 <[email protected]>
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sun May 17 19:37:01 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/6fb53e92e2ffbe510d6c44a1
    Modified Files:
    src/sbbs3/main.cpp
    Log Message:
    sbbs: reuse ip_can / ip_silent_can .fname instead of rebuilding the path

    The trashCan instances are already initialized at startup with the full
    path in .fname; just pick the one matching filter_silent. Matches the
    existing log at main.cpp:5850 which already uses ip_can.fname directly.

    Co-Authored-By: Claude Opus 4.7 <[email protected]>
    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net