__                 _ _                _
  / _| ___   ___   __| | |__   __ _ _ __| | __
 | |_ / _ \ / _ \ / _` | '_ \ / _` | '__| |/ /
 |  _| (_) | (_) | (_| | |_) | (_| | |  |   <
 |_|  \___/ \___/ \__,_|_.__/ \__,_|_|  |_|\_\

A personal BBS  ·  Missoula, Montana  ·  formerly NaClCON BBS

Connect from your terminal: telnet naclconbbs.net 23  |  ssh naclconbbs.net -p 2222

  • src/sbbs3/ftpsrvr.cpp login.cpp mailsrvr.cpp main.cpp mqtt.c mqtt.h se

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat May 2 21:57:40 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/809479e95df12b20674658d5
    Modified Files:
    src/sbbs3/ftpsrvr.cpp login.cpp mailsrvr.cpp main.cpp mqtt.c mqtt.h services.cpp websrvr.cpp
    Log Message:
    sbbs3 servers: publish per-IP login_attempts and max_concurrent on MQTT

    Each TCP server publishes a retained per-IP entry on every loginFailure
    to sbbs/<sysid>/host/<host>/login_attempts/<ip>, clears it on
    loginSuccess, and deletes the retained payload on semfile / clear-topic
    sysop clears. The terminal server also publishes max-concurrent strike
    counts to <server>/term/max_concurrent/<ip> and clears them on
    filter-trip / login-success.

    Payload follows the in-tree MQTT convention: tab-delimited fields with
    ISO-8601 timestamps, no JSON. The plaintext password from login_attempt_t
    is intentionally omitted since MQTT can be off-host.

    The five servers' full-clear branches are deduplicated through a new mqtt_clear_login_attempt_list() helper in mqtt.c that gates per-entry
    publishes on mqtt->connected and falls through to plain
    loginAttemptListClear() when MQTT isn't publishing, so systems running
    with MQTT disabled pay no measurable overhead.

    Addresses gitlab issue #1124 and Nelgin's "room for improvement" remark
    on the same.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net