1. 03 Feb, 2023 3 commits
    • Rob Swindell's avatar
      Move input translation (e.g. for PETSCII) to its own sbbs_t methods · fa5ba5a6
      Rob Swindell authored
      Move kbincom() to an sbbs_t method.
      
      No functional change here, just getting ready to support input translation for stdio
      external programs as an option.
      fa5ba5a6
    • Rob Swindell's avatar
    • Rob Swindell's avatar
      Fix uploader-notification, credit awards, download-counters in FTP downloads · 8e94a448
      Rob Swindell authored
      Since v3.19 (the new filebases), when a user FTP-downloaded a file, we failed
      to properly find/load that file's record from the filebase (searching for the
      file's full path, rather than just the filename), so the code the increments
      the file's download counter, notifies the uploader, awards credits, etc. did
      not ever execute. This means that FTP-downloads for all files downloaded via
      FTP were effectively "free" (and nobody noticed). No error was logged either.
      
      I discovered this while debugging the case of "(null)" filenames in the
      action/download MQTT topic messages being published by the FTP server. So
      that issue is fixed as part of this commit as well.
      
      Oh, and if this code had executed before, it would have memory-leaked the
      file information, so that's fixed too (added call to smb_freefilemem). Ugh.
      8e94a448
  2. 02 Feb, 2023 4 commits
  3. 31 Jan, 2023 2 commits
  4. 30 Jan, 2023 7 commits
  5. 29 Jan, 2023 1 commit
    • Rob Swindell's avatar
      Report the telegram waiting and node-msg waiting statuses separately (M and N) · d5214269
      Rob Swindell authored
      I noticed that the node status displayed by load/presence_lib.js (e.g. used
      by exec/nodelist.js) would have (N) for node-message waiting instead of (M)
      as is reported in other places (e.g. the node utility, umonitor, sbbsctrl).
      So this commit commonizes this behavior.
      
      Now, it's crazy that there are (at least) 3 places that this node status
      display is implemented and more things should just use nodestatus() to get
      that string, but I'm not solving that copy/pasta issue in this commit.
      d5214269
  6. 28 Jan, 2023 1 commit
    • Rob Swindell's avatar
      New user terminal settings weren't display/settable durin sign-up · adb05e50
      Rob Swindell authored
      The interactive prompting for terminal capabilities worked fine,
      but the default configuration menu settings did not reflect the
      user's previous choices and changes they made (e.g. toggle mouse
      support or BS/DEL key swap) were not reflected in the menu. Once
      logged in, the normal user defaults menu worked as expected. This
      is all because term_supports() keyed off of SS_USERON which isn't
      set during new user sign-up, so let's key off SS_USERON|SS_NEWUSER
      now.
      adb05e50
  7. 27 Jan, 2023 3 commits
  8. 26 Jan, 2023 1 commit
  9. 25 Jan, 2023 3 commits
  10. 24 Jan, 2023 4 commits
  11. 23 Jan, 2023 2 commits
    • Rob Swindell's avatar
    • Rob Swindell's avatar
      Fix issue with QWKnet hub sub-board mappings when inserting new sub-boards · cadada4d
      Rob Swindell authored
      The sub_t.subnum's that were being updated as message areas were being saved to
      msgs.ini could not be used as an index into the scfg_t.sub array at this point
      (the subnum would be the new index position when the msgs.ini was re-read/loaded)
      .
      
      This was not an issue in v3.19 because we just saved the subnum (to msgs.cnf) and
      in v3.20, we save the sub's internal code (to msgs.ini) and were using the newly
      updated sub_t.subnum to find the corresponding sub_t for that internal code. Since
      the subnum is not used now during the save process, no need to update it here
      (this reverses part of the commit 11e529d4 from 5 years ago).
      
      This fixes issue #502 - thanks to the irc.synchro.netizens that reported it!
      cadada4d
  12. 22 Jan, 2023 2 commits
    • Rob Swindell's avatar
      Better handling of Quit/Ctrl-C at default protocol selection · d83001e8
      Rob Swindell authored
      IF user hits 'Q' (or whatever the "Quit" key is), set the default protocol
      field in the user record to " " (instead of an empty string).
      If user hits abort (Ctrl-C), don't make any change to the default protocol.
      d83001e8
    • Rob Swindell's avatar
      Don't truncate a user's record if the default download protocol or gender are '\0' · 6c0e423a
      Rob Swindell authored
      A blank download protocol field in a user.dat, when parsed, sets the 'prot' field
      of user_t to 0. When writing the record back to the user.dat, this would prematurely
      truncate all other fields off the user record (since strings in C are NUL terminated
      and we're using sprintf() to format the record and %c specifier for that field).
      
      The fix is to write a ' ' character instead of '\0' if the user_t.prot is '\0'.
      As part of this fix, I'm writing a '?' if a user_t.sex is '\0' (not sure if this
      is actually possible, but just as insurance). Those are the only 2 single-character
      user properties/fields today.
      
      Bug reported/debugged by Al of The Rusty Mailbox (1:153/757.2) - thank you!
      6c0e423a
  13. 21 Jan, 2023 3 commits
    • Rob Swindell's avatar
      Refactor mqtt_client_on() · f3ec8613
      Rob Swindell authored
      This function has been causing somewhat rare crashes (e.g. one per week on a very active system with MQTT enabled) on both Windows and Linux (see issue #495). The root-cause is still unclear (possible heap corruption?). This function needed more robustification anyway (see previous TODO comment), so I'm refactoring here to no longer use strListAppendFormat, which uses vasprintf (the function where the rare crash was occurring) and instead just use snprintf and strListPush. The total client_list that's published (as a single string/message) is now dynamically allocated (this was the point of the previous TODO comment). This may not actually fix the issue if there's a heap corruption occurring somewhere else in this function or the call-chain that's reaching here (usually from the web server).
      
      Another change to mqtt_client_on(): don't incremented the server's 'served' counter until client disconnects (this is a past-tense statistic).
      
      Also:
      - mqtt_pub_strval() can now accept a null 'str' argument which is effectively the same as mqtt_pub_noval(), so the pub_noval() function is now just a thin wrapper around pub_strval().
      
      - mqtt_startup() now clears the client_list topic and sets the client_count topic to 0.
      f3ec8613
    • Rob Swindell's avatar
      Don't attempt to remove a non-existing qwk-pack semfile · 6426954c
      Rob Swindell authored
      Reduce occurrences of subsequent errors (unsure of root-cause):
      !ERROR 2 (No such file or directory) in main.cpp line 2778 (event_thread) removing "/sbbs/data/pack0341.now"
      
      This does seem to be the only location that deleted pack*.now files, so weird that they'd disappear sometime after calling glob(), but I do understand that its theoretically possible.
      6426954c
    • Rob Swindell's avatar
      strListJoin() will now fail gracefully (return NULL) if passed NULL buf · a5ed96ee
      Rob Swindell authored
      No immediate need/use.
      a5ed96ee
  14. 17 Jan, 2023 1 commit
  15. 13 Jan, 2023 3 commits
    • Rob Swindell's avatar
      Create/use file_type_match() for viewing, testing, and download-events · e8944f5b
      Rob Swindell authored
      Allows for more/better wildcard matching in viewable and testable
      file types and download-events (e.g. "tar.gz" or "tar.*").
      
      This solves the "double-dot" problem in some file types/extensions.
      An implicit "*." is prepended before the configured file type/extension.
      e8944f5b
    • Rob Swindell's avatar
      Fix possible crash when no extractable file types are configured in SCFG · 4e1ca83a
      Rob Swindell authored
      If libarchive couldn't extract a QWK or REP packet, we'd fallback to searching
      for a match among the configured extractable file types and if no extension/type
      match was found, default to the first configured extractable file type
      (even if there wasn't one) which would result in a NULL pointer dereference
      and most likely a crash. Instead, if no matching configured extractable
      file type is found, just log a warning message and don't continue with the
      extraction attempt. With SBBS v3.19+, it's totally valid/legit to have no
      extractable file types configured in SCFG and things "just work" (using
      libarchive).
      4e1ca83a
    • Rob Swindell's avatar
      Increase maximum file extension length from 3 to 15 characters · ffc8d5db
      Rob Swindell authored
      For Viewable, Testable, Compressible file types and download events,
      the file extension is no longer limited to 3 characters. 15 characters
      seemed like "enough".
      
      Similarly, a user's temp/QWK file type preference is also extended from
      3 to 15 characters.
      
      This fixes issue #486, but file types such as *.tar.gz (2 dots in the extension)
      are still an issue and will be addressed next.
      ffc8d5db