Skip to content
Snippets Groups Projects
  1. Feb 27, 2023
    • Rob Swindell's avatar
      Make new user QWK-related and Chat-related settings configurable · 56b8fd86
      Rob Swindell authored
      Added chat-settings to SCFG->System->New User Values->Toggle Options
      Added new menu: SCFG->System->New User Values->QWK Packet Settings
      
      Moved SCFG->System->New User Values->Question Toggles to:
            SCFG->System->New User Prompts...
      
      This fixes issue #11
      56b8fd86
    • Rob Swindell's avatar
      Add configurable chat section module, defaults to "chat_sec" · 87bee5d8
      Rob Swindell authored
      This includes a new JS bbs method: bbs.chat_sec()
      
      And the old command shells written in Baja now call the PCMS
      chat_section function, as they used to, rather than hard-coding the
      name of the module to execute.
      87bee5d8
    • Rob Swindell's avatar
      Add optional/configurable feedback module · b0a85a1e
      Rob Swindell authored
      Most sysops didn't know it, but if exec/feedback.* existed, it would be
      executed just before any user sent an email to the sysop (user #1),
      excluding new user validation requests:
      - make this module name configurable and loadable from mods
      - support JS module here (exit(1) to abort the feedback)
      - invoke for email being sent to *any* sysop (not just user #1)
      - don't invoke the module when sending *from* a sysop account
      
      This fixes issue #16
      b0a85a1e
  2. Feb 26, 2023
  3. Feb 25, 2023
    • Rob Swindell's avatar
      Add support for 3 new loadable modules for file scanning/listing/viewing · 5373db33
      Rob Swindell authored
      Configured in SCFG->System->Loadable Modules:
      Scan Dirs:      User scans one or more directories for (e.g. new) files
      List Files:     User lists files within a file directory
      View File Info: User views detailed information on files in a directory
      
      This addresses/fixes feature request #521 for Nightfox
      
      Will need to document the mode argument bit values on the wiki, but
      it's the usual suspects: FL_* for scandirs and listfiles and FI_* for
      fileinfo. The scandirs_mod will be passed an extra bool (0/1) arg that
      indicates whether or not the user is scanning *all* directories.
      
      Test results would be welcome
      5373db33
  4. Feb 21, 2023
    • Rob Swindell's avatar
      Add a configurable 'user list' module · 84aa675e
      Rob Swindell authored
      Also modifying the existing (sample) userlist.js to mimic the hard-coded
      sbbs_t::userlist() function (from str.cpp), suitable as a user list
      module. Also added sort-by-laston-date functionality to this module,
      thus fixing issue #518.
      84aa675e
  5. Feb 20, 2023
  6. Feb 19, 2023
  7. Feb 17, 2023
    • Rob Swindell's avatar
      Move sysop notification settings from node to system level · e2a01274
      Rob Swindell authored
      The validation user (required new user feedback user number) and error notification/level settings don't make sense under node settings in today's world where all nodes typically run on the same system and serve the same BBS.
      
      Moved from SCFG->Nodes->... Advanced Options to (new sub-menu) SCFG->System->Notifications. Likewise, these 3 settings (valuser, erruser, errlevel) were moved from node*/node.ini to ctrl/main.ini.
      
      If you're already running v3.20a, then you'll want to make sure you set these in SCFG->System->Notifications how you prefer them as the migration (now handled in upgrade_to_v320.js) won't have been done for you automatically. The default is no-new-user-feedback required and no-error-notification user set.
      
      Added a prompt to the SCFG setup wizard to prompt for this setting since it still is a FAQ.
      
      Other cosmetic changes to SCFG help and setup wizard.
      e2a01274
  8. Feb 12, 2023
  9. Feb 10, 2023
    • Rob Swindell's avatar
      Allow configurable system password timeout · f6b57f98
      Rob Swindell authored
      The default value is the same as the previously hard-coded value: 15 minutes.
      
      Increase this value to prompt the sysop for the system password less frequently, decrease for more frequent.
      
      This fixes issue #407.
      f6b57f98
  10. Jan 13, 2023
    • Rob Swindell's avatar
      Increase maximum file extension length from 3 to 15 characters · 2c52cb33
      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.
      2c52cb33
  11. Jan 04, 2023
    • Rob Swindell's avatar
      Publish some topics directly to topic levels · 066d6a8d
      Rob Swindell authored
      <server>/state is now published directly to the <sever> topic level (the "state" topic goes away).
      
      Moved <bbs-id>/node# topics to <bbs-id>/nodes/# (allows better wild-card subscription per MQTT standards).
      Publishing total node count to <bbs-id>/nodes rather than <bbs-id>/node_count
      
      Introduced "publish verbosity" control (defaults to "High") - if you want nice human readable (and sometimes redundant) topic messages, leave this set to "High". To reduce traffic, set to "Low". It's expected that purpose-built Synchronet/MQTT clients should work equally-well with either setting, but when using generic MQTT clients/browser, "high" verbosity is nice. The human-readable node status is only published when "high" verbosity is enabled.
      
      Publishing the BBS name to the <bbs-id> topic, the instance hostname (as configured in sbbs.ini) to the <host> topic. Makes the hierarchy much more clear when using an MQTT browser like MQTT Explorer.
      066d6a8d
  12. Dec 30, 2022
    • Rob Swindell's avatar
      Common login control (e.g. via real name) using new find_login_id() function · 7679dcf8
      Rob Swindell authored
      Previously, many servers and services didn't support login by real name
      (e.g. issue #469) even if the sysop had that option enabled in SCFG.
      
      Move login control settings from node.ini to system (main.ini -> login)
      
      The 3 node toggle options:
      - Allow Login by User Number
      - Allow Login by Real Name
      - Always Prompt for Password
      
      ... have been now moved from SCFG->Nodes->Node x->Toggle Options to
      SCFG-System->Toggle Options.
      
      If you upgraded to v3.20a before now, you'll want to double-check these
      settings to make sure they're how you want them set. New upgraders that run
      upgrade_to_v320.js (e.g. via 'jsexec update') will get these settings migrated
      automatically.
      
      Added some error detection/logging to upgrade_to_v320.js when failing to open
      .cnf files.
      
      Constified some more user/login related function args and return types.
      7679dcf8
  13. Dec 21, 2022
  14. Dec 17, 2022
  15. Dec 13, 2022
  16. Dec 12, 2022
  17. Nov 19, 2022
    • Rob Swindell's avatar
      Introduce "Directory Defaults" for file libraries · bd97c9d8
      Rob Swindell authored
      This allows the sysop to configure the settings to be used for newly-created and auto-added directories without requiring any "template" directory to be configured. The "template" directory concept goes away (so in this way, File libs/dirs are now different from Message groups/subs in how bulk configuration is done).
      
      The Lib->Clone Options menu option was moved to Lib->Directory Defaults->Clone Settings and no longer uses the first sub or the template sub but rather the configured directory defaults to be cloned into all dirs in the lib.
      
      I decided to make the dir_defaults their own sections in file.ini rather than combining with all the other lib settings (and deconflicting key names such as "sort" and "settings"). This also allowed me to use the same cfg read/write functions for those directory settings and lib's directory default settings.
      bd97c9d8
  18. Nov 17, 2022
  19. Sep 17, 2022
  20. Jun 15, 2022
    • Rob Swindell's avatar
      Allow sysop-choice of source of virtual sub-directory source name · d628e132
      Rob Swindell authored
      By default, each file transfer directory's internal code suffix is
      used as the source of the sub-directory of the virtual path used
      to represent a file area in the FTP and Web servers. Now, a sysop
      can change that source to either each directory's short name or
      long name, if they prefer.
      
      For MRO, because he asked (on DOVE-Net).
      d628e132
  21. Apr 14, 2022
    • Rob Swindell's avatar
      Add configurable log size limit and retention count · 549c79aa
      Rob Swindell authored
      For the following log files:
        hungup.log
        error.log
        crash.log
        hack.log
        spam.log
        guru.log
      
      ... they can be limited in size, in bytes, by the sysop, along with a maximum retention limit (number of *.#.log files). Configured in SCFG->System->Advanced.
      
      By default, the limit and keep numbers are 0, so "unlimited" (same behavior as before). Once sufficiently tested, I'll change the default in a stock main.cnf file to use a sensible limit (e.g. 10 log files of 10MB each, something like that).
      549c79aa
  22. Mar 24, 2022
    • Rob Swindell's avatar
      Support user credits and transfer stats > 4GB in total · 2d4ec7b8
      Rob Swindell authored
      Credits and daily free credits are accurate to the byte up to (a maximum) of 18446744073709551615 (that's 18 Exbibytes - 1).
      
      User's upload and download byte stats are now similarly extended in maximum range, but the accuracy is only "to the byte" for values less than 10,000,000,000. Beyond that value, the accuracy declines, but is generally pretty damn accurate (to 4 decimal places beyond the nearest multiple of a power of 1024), so I don't expect that to be an issue. This method of storing upload/download byte stats allowed me to use the same 10-character user record fields in the user.dat file.
      
      As a side-effect of this enhancements:
      * User and file credit values are now expressed in multiples of powers of 1024 (e.g. 4.0G rather than 4,294,967,296).
      * Free credits per day per security level has now been extended from 32 to 64-bits (to accommodate values >= 4GB).
      * adjustuserrec() now longer takes the record length since we can easily determine that automatically and don't need more "sources of truth" that can be out-of-sync (e.g. the U_CDT field length going from 10 to 20 chars with this change).
      * setting the stage for locale-dependent thousands-separators (e.g. space instead of comma) - currently still hard-coded to comma
      * more/better support for files > 4GB in size (e.g. in the batch download queue)
      * user_t ulong fields changed to either uint32_t or uint64_t - I didn't realize how many long/ulong's remained in the code (which are sometmies 32-bit, sometimes 64-bit) - ugh
      * Steve's ultoac() function renamed to u32toac() and created a C++ wrapper that still uses the old name, for homage
      2d4ec7b8
  23. Jan 28, 2022
    • Rob Swindell's avatar
      Use sbbs.ini [web] FileVPathPrefix to configure web filebase prefix · bfe32c7a
      Rob Swindell authored
      It bothered Deuce having a web server setting in scfg_t/SCFG->File Options, so I moved this setting to [web_]startup_t and the sbbs.ini file.
      
      The downside is that file_area.web_file_prefix is no longer available to JS environments outside of the web server and terminal server, but meh, probably not going to use it elsewhere anyway? I can imagine use cases for JSexec scripts to want to generate URLs to filebase files. If that ends up being a need, they'll have to find and parse the "right" sbbs.ini file to determine the vpath prefix. 
      bfe32c7a
    • Rob Swindell's avatar
      Add 'vdir' (virtual directory name) member to lib_t and dir_t · c5dce909
      Rob Swindell authored
      This change is just for internal consistency and convenience right now: the lib_t.vdir is a "sanitized" copy of the lib's short name (spaces are converted to dots or underscores based on the logic that the FTP server used in dotname()) and the dir_t.vdir is just a pointer to the dir's code_suffix. No other permutations are made (e.g. lower-casing the strings). Although the virtual directory names of libraries will now appear in mixed case in the FTP server (previously, they were all lowercase), the directory names are actually treated case-insensitively, so it should not make any difference. If forced-lowercase is preferred for some reason, please speak up.
      
      This change leads the way to eventually, possibly, making these virtual path elements sysop-configurable. For now, it's just better to have a *copy* of the lib's short name that is appropriately modified to make a suitable directory name and have that vpath element available globally (to all servers and services) in a consistent manner.
      
      So Nelgin asked (about filebase access via http), what if the library short name has a space in it? The answer now is, the spaces are replaced with a '.' or '_' (if there's already dots in the name).
      c5dce909
  24. Jan 16, 2022
    • Rob Swindell's avatar
      Add direct filebase access from the web server (optional) · b035257e
      Rob Swindell authored
      By setting SCFG->File Options->Web File Virtual Path Prefix to something (e.g. "/files/"), all HTTP or HTTPS requests to the Synchronet Web Server with request paths beginning with this prefix will be interpreted as filebase access requests (with full access control enforcement). This is configured here (in SCFG) rather than, say, the [web] section of sbbs.ini, because I have plans for the terminal server to use this prefix to generate Web-URLs for files to display or email to users.
      
      Currently, only requests to *files* (for download) are supported (no index generation, file information, etc. and definitely no upload support). Full access control (using HTTP auth, not cookies) is used for libraries and directories with controlled access. Credits are deducted and awarded and uploaders are notified of downloads, as one would expect. Requests to any dynamic-web-content files (e.g. .SSJS, .XJS, etc.) will be treated as static file download requests (no script will be executed).
      
      I'm reusing the same virtual path parsing logic from the FTP server (moved to the userdat lib), so the virtual path to a file for download would be, for example, http://yourdomain/files/lib/dir-code/filename.ext
      
      The main motivation for this feature is: FTP-links in email and web pages are just not useful to many users these days and I don't think that sysops should have to rely on a SSJS web UI (e.g. ecWebv4, cool as it is), to provide web-access to the filebases. Using this feature, you can share simpler/shorter web links to your files that will be more enduring.
      b035257e
  25. Jan 11, 2022
    • Rob Swindell's avatar
      Allow maximum uploaded filename length to be configured · e913daad
      Rob Swindell authored
      Default to 64 characters. Maximum value is 65535 characters, but filenames larger than 64 characters may be problematic (e.g. searching for them, displaying them, security concerns), so only increase with caution. Shorter values are fine, but 0 will just revert back to the default.
      e913daad
  26. Nov 18, 2021
    • Rob Swindell's avatar
      Don't use time_t in scfg_t definition · a3649cc6
      Rob Swindell authored
      sbbsctrl.exe is built with Borland C++ still which only has a 32-bit time_t, so to keep the scfg_t definition compatible between MSVC and Borland builds, use time32_t (32-bit time_t) values only.
      
      This fixes the reported sbbsctrl.exe error:
      Error loading configuration
      cfg->size (23944) != sizeof(scfg_t) (23952)
      
      Introduced in commit b76b5318.
      Reported via DOVE-Net by  Daryl Stout (TBOLT), confirmed by Nightfox (DIGDIST).
      a3649cc6
  27. Nov 08, 2021
  28. Sep 25, 2021
  29. Sep 23, 2021
    • Rob Swindell's avatar
      Increase FidoNet echo/area tag max length from 35 to 40/50 chars · 85a2de04
      Rob Swindell authored
      Per FMail.txt:
      Area name
                This is the name of the conference. It can be up to 50
                characters long. This name is often referred to as the
                area tag.
      
      I did not locate a FidoNet spec to contradict that and support a 35 character maximum area tag length. I think Mystic also has a 50 character area tag limit. So 50 character area tags are fine I guess.
      
      So up to 50 characters are now supported in SBBSecho and SCFG for area tags (for message and file echoes). The exception is the (new to 3.19) optional area tag stored in msgs.cnf/file.cnf is limited to 40 characters due to reserved space limitations. If you need a tag stored per sub (most sysops do not) and it needs to be longer than 40 chars, use the newsgroup name instead (limited to 63 chars).
      
      Changed at the request of Keyop via IRC.
      85a2de04
  30. May 28, 2021
    • Rob Swindell's avatar
      Add optional "temp file transfer" module (defaults to "tempxfer"[.js]) · 89979874
      Rob Swindell authored
      This module (name configurable in SCFG->System->Loadable Modules) replaces the old hard-coded temp/archive file menu in v3.18 and earlier, going all the way back to v1a. Good-bye to yet more old and crufty Synchronet C source code. :-/
      
      Change the "Pre Xtrn Prog" and "Post Xtrn Prop" menu option in SCFG->System->Loadable Modules to just "Pre Xtrn" and "Post Xtrn". The help text had the wrong names anyway (now fixed).
      Save the menu lightbar position in the "Loadable Modules" SCFG menu.
      89979874
  31. Apr 28, 2021
    • Rob Swindell's avatar
      Add a separate "area tag" string configured per sub-board · 5134f09d
      Rob Swindell authored
      According to  Lupine Furmen (FURFOL):
      It says in the help that the field is used for both the Newsgroup name AND the
      Fido Echo-tag.
      
      These really should be 2 different fields.
      
      Now, the echo/area tag is usually configured in the area file (areas.bbs) and so does not need to match *any* string configured in SCFG. But since an area file *can* be generated from SCFG (Export Areas option) and its possible to use SBBSecho withOUT an area file at all, then it's possible someone would like to have their FidoNet-style area tags configured different from any other strings related to a sub-board (e.g. newsgroup name) - why? I'm not clear, but there it is: another string that  a sysop can set (or not).
      
      Since I'd recently added an area tag field per directory for use by hatchit.js, this does create some logical symmetry. And there were enough free bytes per-sub in the msgs.cnf, so why not.
      5134f09d
  32. Apr 04, 2021
    • Rob Swindell's avatar
      A poll() failure with EINTR does not mean a socket is closed. · 925e3b0a
      Rob Swindell authored
      This won't impact Synchronet as it has a separate signal handling
      thread, but we still need to behave properly for processes that
      don't.  I'm also saying that ENOMEM does not indicate a disconnection,
      though it may be better to pretend it was disconnected...
      925e3b0a
  33. Feb 19, 2021
  34. Dec 21, 2020
    • Rob Swindell's avatar
      Fix next-forced-exclusive event time calculation · fda749ac
      Rob Swindell authored
      Jump the time forward (in 24-hour chunks) to find the next date/time the event will run rather than just adding 24-hours and assuming it's an event that runs every day (of the week or month) at a specific time.
      
      Also, expose the next-run-date/time for an event as a new `next_run` property for `xtrn_area.event[]` (in `time_t` format) for easier debugging of these kinds of issues.
      Also expose the error log level as a new property: `error_level` while we're here.
      fda749ac
Loading