• src/smblib/smbfile.c

    From Rob Swindell@VERT to Git commit to main/sbbs/master on Thu Feb 4 21:15:15 2021
    https://gitlab.synchro.net/main/sbbs/-/commit/30391a1fae6fa5a725a276ef
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    Upon timeout opening a file, log the last errno value too

    It should be either EACCESS or EAGAIN, but still, could be useful to know.

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbs/master on Wed May 12 21:07:14 2021
    https://gitlab.synchro.net/main/sbbs/-/commit/cfee914fed60488a51a62dc5
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    Fix crash in smb_addfile_withlist() when passed a non-NULL empty list

    Don't allocate and memset a buffer of -1:
    #1 0x0000559222bc167f in strListCombine (list=0x559224220720, buf=0x559224226550 "", maxlen=18446744073709551615,
    delimit=0x559222bcce0a "\r\n") at str_list.c:447
    447 memset(buf, 0, maxlen);
    (gdb) print maxlen
    $1 = 18446744073709551615
    (gdb) up
    #2 0x0000559222ba3841 in smb_addfile_withlist (smb=0x7ffce63a7e90, file=0x7ffce63a5bc0, storage=1, extdesc=0x0,
    list=0x559224220720, path=0x7ffce63a6e80 "/xfer/loons/manhater.mp3") at smbfile.c:365
    365 strListCombine(list, content, size - 1, "\r\n");
    (gdb) print list
    $2 = (str_list_t) 0x559224220720
    (gdb) print list[0]
    $3 = 0x0

    Found/reported by plt via irc. Thanks!

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net
  • From Rob Swindell@VERT to Git commit to main/sbbs/master on Thu May 13 18:57:59 2021
    https://gitlab.synchro.net/main/sbbs/-/commit/34aeeb6d4b688a168058707a
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    smb_removefile() failed if filename length was > 64 chars

    And the "name not found" error text was wrong.

    ---
    ■ 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 Dec 24 21:51:36 2023
    https://gitlab.synchro.net/main/sbbs/-/commit/43575170940c3ff3a9017eee
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    Reset import time (to current date/time) in smb_renewfile()

    Don't allow smb_removefile() to corrupt a filebase if passed an uninitialized (not fully load()'d) file_t*. Doesn't fix a bug, just some extra defensive programming here.

    Addressing problems reported by echicken

    ---
    ■ 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 Dec 26 16:04:06 2023
    https://gitlab.synchro.net/main/sbbs/-/commit/46c0eb0de29bab7607bfb0ef
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    Fix CID 471656 in smb_addfile_withlist()

    No one's using this function currently (and may never).

    It was used back when I was putting archive contents in .ini format in the files' metadata (now auxdata).

    ---
    ■ 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 Sep 17 12:06:15 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/45363fee6f6d688671faeee0
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    NUL-terminate the SMB fileidxrec_t.name field, just in case

    The terminating NUL is actually part of the index record, but with file corruption, it's technically possible the NUL could be missing.
    Fixes CID 509552

    Use strnicmp() insted of stricmp() in smb_removefile()
    Fixes CID 509551

    ---
    ■ 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 Sep 29 17:07:32 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/662b2f6d1a71988779d94f46
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    smb_removefile(): remove only the file's own index record

    Removing a file dropped every index record whose name matched the file's, ignoring case, not just its own. In a base holding names that differ only
    in case (e.g. a.txt and A.txt), removing either one also dropped the
    other's index record, orphaning its header and data: still active in the
    base, but no longer findable or listed.

    Identify the record by the number in the index record the file was loaded
    from. The header carries the same number, but nothing checks the two agree
    on read, and a header whose number no longer matched would leave the
    file's index record in place, pointing at a header already marked deleted.

    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 Tue Sep 29 17:07:32 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/f11e0cc003d712457ab29917
    Modified Files:
    src/smblib/smbfile.c
    Log Message:
    smb_findfile(): prefer an exact-case name match

    A file name lookup returned the first index record matching the name
    while ignoring case. When a base holds names that differ only in case,
    the later of them could never be found by name: FileBase.get(), update(),
    and remove() all reached the earlier file instead, whatever case the
    caller gave.

    Return an exact-case match when there is one, and otherwise the first case-insensitive match as before. A lookup given the stored case still
    stops at the first match; one given a different case now reads the rest
    of the index, as a lookup of a name that isn't there already does.

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

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