• docs/v322_new.md src/sbbs3/sbbsecho.c

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Wednesday, September 30, 2026 16:22:28
    https://gitlab.synchro.net/main/sbbs/-/commit/04dfc61739938207f3f302df
    Modified Files:
    docs/v322_new.md src/sbbs3/sbbsecho.c
    Log Message:
    SBBSecho: don't write a stored-message header into an inbound packet

    import_netmail() marks a netmail message as received by writing its stored-message (*.msg) header back to the file it was read from. Since e7b93ae3f3 (types-26-ease, 2025-11-01) that write-back ran for packets
    too: update_fmsghdr() seeks to offset 0 and writes the 190-byte fmsghdr_t, which lands on the packet header and the first message. Any message that followed the imported netmail in the same packet was then read through the overwritten bytes (its type word became 256, from the destzone/origzone
    bytes of the stored header), reported as "Grunged message", and the packet
    was set aside as bad, losing the rest of its netmail and echomail. Before
    that commit the write-back was conditional on a *.msg path.

    Only write the header back for a *.msg file, at both of the sites that
    were made unconditional. The robot (uses_msg) site already branched on it.

    Reproduced with a hand-built Type-2+ packet carrying two netmail messages:
    the second was grunged at offset 177 with type 256 before the fix, and both import cleanly after it. Shipped in SBBSecho 3.37 with v3.21c and v3.21e.

    Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

    ---
    þ 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 Wednesday, September 30, 2026 16:22:28
    https://gitlab.synchro.net/main/sbbs/-/commit/d7d1b58fd16bf8c7a9cab1fe
    Modified Files:
    docs/v322_new.md src/sbbs3/sbbsecho.c
    Log Message:
    SBBSecho: generate a Message-ID for imported netmail too (#1167)

    fmsgtosmsg() generated an RFC822 Message-ID only for messages going into
    a sub-board (added in 0eccdade66, 2005-09-01, for echomail cross-
    referencing); the mail-base branch never did. Every netmail SBBSecho
    imports was therefore stored without one, and SBBSecho's own locally
    originated notifications (e.g. "FAILED Area Management Request from ...",
    which have no net origin) are exactly what chksmb flags as "No Message-ID",
    as reported in the issue.

    Generate the default Message-ID after the branch, for netmail and echomail alike, the same way the BBS does for every message it stores.

    Verified on a scratch install by importing a packet holding a plain netmail
    and an AreaFix request from an unconfigured node: both the imported netmail
    and the resulting failure notification now carry a Message-ID and chksmb reports the mail base OK.

    Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

    ---
    þ 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 Thursday, October 01, 2026 15:27:18
    https://gitlab.synchro.net/main/sbbs/-/commit/8a99194387a88c85b801de3d
    Modified Files:
    docs/v322_new.md src/sbbs3/sbbsecho.c
    Log Message:
    sbbsecho: don't cut UTF-8 header fields mid-character on export

    FTS-0001 packed-message headers hold 35 bytes of To/From and 71 bytes of Subject. SMB header fields are unbounded, so export truncates them, and it
    did so by byte count: a UTF-8 field over the limit (e.g. a Cyrillic name,
    2 bytes per letter) could end in a partial multi-byte sequence, which
    readers show as a replacement character.

    Echomail export and create_netmail() now copy these fields with
    utf8_strlcpy() when the message's header fields are UTF-8 and valid, so the
    cut falls on a character boundary. On ASCII-only (SUB_ASCII) sub-boards
    the field is converted from UTF-8 to CP437/ASCII before truncation rather
    than after, so it no longer converts an already-split sequence and keeps
    up to twice as many characters.

    Fixes #1276

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    ---
    þ 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 Thursday, October 01, 2026 15:27:18
    https://gitlab.synchro.net/main/sbbs/-/commit/9dec26e6d38d842bfa9f0228
    Modified Files:
    docs/v322_new.md src/sbbs3/sbbsecho.c
    Log Message:
    sbbsecho: support FSP-1030 UCSFROM/UCSTO/UCSSUBJ control lines

    FTS-0001 packet headers hold 35 bytes of To/From and 71 of Subject, which
    in UTF-8 can be as few as 8 and 17 characters. FSP-1030 (preserved as
    FRL-1021) carries the full field in a ^AUCSFROM:, ^AUCSTO: or ^AUCSSUBJ: control line. GoldED+ and AmberEdit now write them.

    Export: when a UTF-8 message's To, From or Subject does not fit its packet header field, echomail export and create_netmail() add the matching UCS*
    line with the full value (not on ASCII-only sub-boards, and not when the message already carries one).

    Import: for a UTF-8 message (per CHRS/CHARSET, or auto-detection), a UCS*
    line replaces the header field only if it extends what the packet header already says (allowing for a trailing partial UTF-8 sequence left by the sender's tosser), so it cannot substitute a different name or subject. An applied line is consumed; any other is kept as an unrecognized control
    line, as before.

    The full fields are worked out before anything matches on them:

    - twit list and subject filtering check the full fields as well as the
    packet's, so a filtered name or word past the cut is still caught, and
    entries written against cut names keep matching
    - netmail recipient matching (robots, AreaFix/ping, sysop aliases, user
    lookup) and the echomail recipient notification use the full To; user
    name matching ignores non-ASCII bytes, so a cut To could otherwise
    match a different local user than the full one

    Refs #1276

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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