• src/sbbs3/userdat.c

    From Rob@1:103/705 to Git commit to sbbs/master on Tue Oct 20 20:24:09 2020
    https://gitlab.synchro.net/sbbs/sbbs/-/commit/1e9d5c2cc05ee318ab629bce
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Treat every login failure with no password available as uniqueWhen loginFailure() is called with NULL for the password argument, that indicates there was no password available (e.g. an aborted login attempt) - treat each of these as a unique (not duplicate) failed-login attempt. This'll trigger ban/filter thresholds sooner for clients that hammer servers and disconnect mid-login.
    --- SBBSecho 3.11-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to Git commit to sbbs/master on Sun Nov 22 16:33:59 2020
    https://gitlab.synchro.net/sbbs/sbbs/-/commit/5168429f4fae5bfda1fa9976
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    My first opportunity to use IS_ALPHANUMERIC ()instead of isalnum()and I blew it. Here's to learning new tricks.
    --- SBBSecho 3.11-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to Git commit to Main/master on Mon Nov 23 22:12:10 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/0f76860d6b42af92589f6fa2
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Include the [F] (forced chat) flag for help in debugging forced-chat.
    --- SBBSecho 3.11-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to Git commit to main/sbbs/master on Wed Dec 2 00:09:17 2020
    https://gitlab.synchro.net/main/sbbs/-/commit/3eaf57fe30820f5b0f232328
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    C version of chk_ar() now supports the DOS keyword...The "DOS" ARS keyword was always evaluating to false, on all platforms, for the C version of chk_ar(), which is used for populating JS *_area objects and for the User.compare_ars() implementation.Unfortunately, the startup (sbbs.ini) "NO_DOS" option is not recognized here (yet), so it'll report true (e.g. for Win64 or Linux systems with DOSemu) even if/when the NO_DOS option is set.
    --- SBBSecho 3.11-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to Git commit to main/sbbs/master on Wed Apr 14 19:19:52 2021
    https://gitlab.synchro.net/main/sbbs/-/commit/0b3804ff58b0611e544fb932
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Don't compare array against NULLAddresses CID 319116 and 319090
    --- SBBSecho 3.14-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to Git commit to main/sbbs/master on Sun Apr 18 20:25:04 2021
    https://gitlab.synchro.net/main/sbbs/-/commit/9c1594949415dda47210ad23
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Let's make that semfile just sound.mute
    --- SBBSecho 3.14-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to Git commit to main/sbbs/master on Sun Apr 25 19:36:21 2021
    https://gitlab.synchro.net/main/sbbs/-/commit/55d6d6b8c0c8e92522a45c42
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Get rid of an unnecessary strcat() callCID 33567
    --- SBBSecho 3.14-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell@1:103/705 to Git commit to main/sbbs/master on Mon Sep 20 23:33:38 2021
    https://gitlab.synchro.net/main/sbbs/-/commit/e6bc098025fb9ffb263f8ce4
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Ignore trailing non-alpha-numeric characters in matchusername()A name ending in a symbol (e.g. "Erich B.") would cause problems with this matching logic.
    --- SBBSecho 3.14-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Mon Aug 17 02:07:18 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/247ed952d22d98605c63cd51
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Don't lock every user record just to count the users

    readuserdat() is built for reading a single record safely: per call it
    does a filelength(), a seek, a shared byte-range lock, the read, and an
    unlock. total_users() called it once per user slot, so counting the
    users cost five file operations and two byte-range locks per slot.

    Byte-range locks are the worst possible unit of work when the data
    directory is network-mounted. They are synchronous round-trips to the
    lock manager and, unlike reads, can be neither cached nor batched by the
    client whatever its caching settings. Locking never made the total
    atomic either - only each record read within it - so the count was
    already assembled from records read at different moments.

    Read the user file sequentially in bulk and split the records in memory instead. The result is unchanged: records flagged DELETED or INACTIVE
    are still excluded. A record rewritten mid-scan can now be misparsed and
    shift the total by one, where before it would merely have been counted
    as of a slightly different moment; for a displayed total, neither is
    more meaningful than the other.

    For 1,457 user slots this replaces 7,286 file operations - 2,914 of them
    locks - with about 25 reads and no locks, taking the scan from 85ms to
    5ms with the data directory on a loopback SMB mount.

    This is the same fix as 8561162afd (fighter-20-fears, 2026-07-29),
    applied to the user census rather than the node list.

    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Fri Oct 2 19:25:26 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/d83fbe2a41580e37314ea671
    Modified Files:
    src/sbbs3/userdat.c
    Log Message:
    Reject future birthdates in birthdate_is_valid()

    The validator had a lower bound (1900) but no upper bound, so a birthdate
    such as 09/11/2890 was accepted at new-user registration and stored,
    and getage() then reported a negative age (-864).

    A birthdate later than today is now invalid. Every entry path that
    validates (new-user and profile prompts via system.check_birthdate())
    rejects it, and getage() returns 0 for any such record already stored.

    Fixes #1277

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
    --- SBBSecho 3.38-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)