Synchronet now requires the libarchive development package (e.g. libarchive-dev on Debian-based Linux distros, for more info) to build successfully.

  1. 19 Apr, 2021 1 commit
    • Rob Swindell's avatar
      Control sound-mute via semfile (ctrl/sound.muted) rather than sbbs.ini · a88cce19
      Rob Swindell authored
      There was a bug with reloading the configuration files in sbbsctrl where the sound button no longer reflected the truth and the sysop's previous click-state of the button was lost. Rather than going through writing the OPT_MUTE flag to the Options fields of all the sections of the sbbs.ini and then re-loading that file as a result, just do like we did with the sysop chat availability: use a semfile. So much simpler.
      If anyone ever needs instance-specific muting, we can create/check instance/host-specific mute semfiles then. Doubt that'll happen though.
      Also, removed the old sysavail control methods of ntsvcs too.
  2. 18 Apr, 2021 1 commit
    • Rob Swindell's avatar
      Update sound (WAV) file play-on-event support in Windows build · f26a82b0
      Rob Swindell authored
      A "hack attempt" sound file is now supported in the Terminal Server, Mail Server,  and Services.
      "login" and "logoff" sound files are now supported in the Terminal Server, FTP Server, Web Server, Mail Server, and Services.
      This enhancement fixes Issue #157
      The following sound files may now be configured in the [Global] section of the ctrl/sbbs.ini file, if desired to set the default sound files for all servers/services in on place:
      - AnswerSound
      - LoginSound
      - LogoutSound
      - HangupSound
      - HackAttemptSound
  3. 04 Apr, 2021 1 commit
  4. 16 Mar, 2021 1 commit
  5. 07 Mar, 2021 1 commit
  6. 06 Mar, 2021 1 commit
    • Rob Swindell's avatar
      Allow fine-grained control over JavaScript compiler options via *.ini · 2c7f3bc6
      Rob Swindell authored
      JavaScriptOptions bit-field can be set in sbbs.ini and jsexec.ini to over-ride the default JS compiler options which have been changed from 0 to (options previously only used by JSDoor):
      * JIT - TraceMonkey
      * METHODJIT - JägerMonkey
      * COMPILE_N_GO - compile-time scope chain resolution of consts
      * PROFILING - Choose between TraceMonkey and JägerMonkey at compile-time based on profiling results
      Other options available but not enabled by default:
      * STRICT - warn on debious practice (i.e. similar to "use strict")
      * WERROR - convert warnings to errors
      * VAROBJFIX -  use last object on scope chain as the ECMA 'variables object'
      * RELIMIT - Throw exception on any regular expression which backtracks more than n^3 times, where n is length of the input string
      * ANONFUNFIX - Disallow function () {} in statement context per ECMA-262 Edition 3.
      * METHODJIT_ALWAYS - Always whole-method JIT, don't tune at run-time.
      - Fixed JS warning string formatting (missing space separator).
      - Removed an extraneous new-line in lprintf() call in mailsrvr.
      - Added basic assertEq() global method to jsexec, required when running SpiderMonkey test scripts.
  7. 17 Dec, 2020 1 commit
    • Michael Long's avatar
      Improvements to linux dosemu support · 0bf85543
      Michael Long authored
      The hardcoded external.bat file has been moved to a templated
      /exec/external.bat which can be modified by the sysop. ENV
      vars are in there to be able to customize as needed. emusetup.bat
      is no longer needed, but still supported. The actual dosemu command line
      is now stored in /exec/dosemulaunch.ini and can be customized for
      fossil or i/o command lines. the keystroke is now only sent for i/o, and
      only sent as \n instead of \r which would trigger undesired behavior in
      certain programs. The above 2 files can also be placed in door dirs
      to override. has been removed as it was not needed. default
      external.bat includes cmd lines for share, x00, etc. (user will still
      need to provide these in xtrn/dosutils).
  8. 24 Nov, 2020 1 commit
    • Rob Swindell's avatar
      Stop pretending to configure the JavaScript Context stack · c0cd8686
      Rob Swindell authored
      The argument to JS_NewContext that we were allowing to be configured was not the contest stack size, but rather:
      "The size, in bytes, of each "stack chunk". This is a memory management tuning parameter which most users should not adjust. 8192 is a good default value." - per Mozilla.
      So we're just going to use the suggested default, hard-coded.
  9. 18 Oct, 2020 1 commit
  10. 16 Aug, 2020 1 commit
  11. 22 Mar, 2019 1 commit
    • rswindell's avatar
      Use default calling convention (__cdecl) for DLL funcs in Borland builds. · bf82a889
      rswindell authored
      Fix age-old bug with Borland/C++Builder built executables (Windows):
      to achieve compatibility with  the default __cdecl symbol naming rules of
      Visual C++, we were using __stdcall convention for DLL functions when
      building code with Borland/C++Builder tools and using the default (__cdecl)
      convention when building with Microsoft (Visual C++) tools. Although this
      allowed symbols to be located when linking, the calling convention mismatch
      caused a stack cleanup issue that very rarely manifested itself in a bug
      (e.g. exception of some kind in sbbsctrl.exe, usually). Mismatching
      the calling conventions was unintentional (I thought the default for MSVC
      DLL functions was __stdcall) - but since the calls to MSVC-Built DLL functions
      worked 99% of the time, I didn't realize there was an underlying issue. So I
      now work-around the DLL symbol naming mismatch using a command-line option (-a)
      passed to implib in src/sbbs3/ctrl/makelibs.bat
      I had previously worked-around exceptions when calling MSVC DLL functions in
      sbbsctrl.exe by calling the problematic DLL functions from a timer tick handler
      rather than a user control (e.g. button) event handler. Those work-arounds can
      now be removed.
      The erroneous "DLLCALL" definition design pattern was replicated (copy/pasted)
      to many other projects' header files in In the future, we may
      want to just remove all instances of *CALL since they now serve no purpose and
      appear as useless "Kruft" (but do allow us to more-easily globally change DLL
      function calling conventions if/when necessary in the future).
  12. 31 Oct, 2018 1 commit
  13. 22 Oct, 2018 1 commit
    • rswindell's avatar
      The big PETSCII commit: · 31303187
      rswindell authored
      So Omegix recently asked in the Synchronet Discussion group whether or not
      a PETSCII (Commodore) terminal could be used to access his Synchronet BBS.
      Now, the answer is "Yes". :-)
      The major issues addressed:
      - detecting a PETSCII terminal, solved by assigning specific (configurable):
        TCP ports to be used for incoming PETSCII connections, by default:
        port 64 is for 40-column PETSCII and port 128 is for 80-column PETSCII,
        but if the terminal sends a Telnet Window Size reply (e.g. SyncTERM), then
        either size terminal should fine on either port.
        The port numbers are configurable in the [BBS] section of your sbbs.ini
        file using the new keys: PET40Port (default value: 64) and PET80Port
        (default value: 128). Having these keys set doesn't make make the terminal
        server listen on that additional port - you'll need to add more
        IP:port combinations to one of Interfaces values, example:
        And you don't have to use Telnet for the PETSCII connections - you could use
        RLogin or SSH instead (or in addition).
      - support for terminal widths < 80 columns:
        This was achieved through a combination of text.dat changes (numerous),
        new Ctrl-A and @-codes and new optional terminal-width-specific menu files
        (e.g. text/menu/main.40col.asc)
        A side effect of these changes is actually better support for terminals
        *wider* than 80 columns as well!
      - support for terminals that don't expand tabs to spaces (e.g. PETSCII):
        The terminal server now handles tab expansion with a run-time settable
        tab-size (default size: 8)
      - conditional access based on PETSCII (or small) terminal use (or not):
        + New PETSCII ARS keyword (boolean)
        + New COLS and ROWS ARS keywords (for terminal width and height requirements)
        + New TERM (string) ARS keyword
      New @-codes:
        - WORDWRAP, when placed at the top of a file, enables auto-wordwrap for
                    lines longer than the terminal width
        - CENTER, the text following before an end of line will be displayed centered
                  on the terminal (whatever the width, in columns)
        - CLEAR, like CLS, except it ignores (doesn't display) a CRLF that follows
        - COLS, current number of terminal columns (width)
        - ROWS, current number of terminal rows (height)
        - TERM, the auto-detected or reported terminal type (e.g. ANSI, TTY, etc.)
        - SYSONLY, toggles "echo" (display) off/back-on for non-sysops
                  similar to the Ctrl-A( and ) codes, but more convenient to use
                  (and PabloDraw won't strip the @-code from the file like it does
                   with Ctrl-A codes it doesn't support)
      New Ctrl-A codes:
        - \ conditional new-line/continuation when the terminal width is < 80 cols
            prints the new text.dat string LongLineContinuationPrefix
      yesno() will now return true if passed a blank string.
      noyes() will now return false if passed a blank string.
      getstr()'s input length limiting based on terminal width is more broadly
                 applied now (not just when using the K_LINE mode flag).
      New JS bbs object method: menu_exists(<base_filename>) returns Boolean
      New JS console object property: tabstop (Number)
      New JS console object methods: getbyte() and putbyte() to recv/send raw byte
          value with (very little) interpretation/intervention by the terminal server
      New JS console object method: creturn() - performs a carriage return
          (or equivalent)
      New JS (and C) printfile() mode flag: P_TRUNCATE, causes long lines to be
          truncated, rather than displaying causing a line-wrap.
      New text.dat strings:
        - NoAccessTerminal (for ARS check failures)
        - LongLineContinuationPrefix (for breaking long lines for 40col terminals)
        - Scanning (replaces a previously hard-coded "Scanning" string)
        - Done (replaces a previusly hard-coded "Done")
        - Scanned  (when finished scannning, clears the progress bar)
  14. 24 Jul, 2018 1 commit
  15. 15 Nov, 2017 1 commit
    • rswindell's avatar
      Daily maintenance log output now goes to the event log (or the terminal · b4f888d4
      rswindell authored
      server log) using the new magic sbbs_t::lputs().
      No more SSH errors if an SSH client's IP is blocked in ip.can (trying to send
      the block msg).
      New SSHConnectTimeout cfg value (in sbbs.ini [BBS]), defaults to 10 seconds.
      Previously, fails SSH connections could block the bbs_thread for 30 seconds
      (the Cryptlib default network connection timeout).
      Overhauled a lot of the SSH-related log output to make it less chatty and more
      getmail() is now more flexibility with regards to filtering by attribute flags
      (not just SPAM).
      Allow SPAM header attribute to be toggled with sysop 'C' command.
  16. 28 Nov, 2016 2 commits
  17. 19 Nov, 2016 1 commit
  18. 18 May, 2016 1 commit
    • rswindell's avatar
      Implement IP temporary ban: · 7da4af1b
      rswindell authored
      By default, after 20 consecutive (unique) failed login attempts, *or*
      a failed login attempt wtih a name from the name.can filter file.
      The default temporary ban duration is 10 minutes.
      The temporary ban thershold is configurable via LoginAttemptTempBanThreshold
      in sbbs.ini and the ban duration is configurable via LoginAttemptTempBanDuration
      (in seconds).
  19. 22 Aug, 2015 2 commits
  20. 20 Aug, 2015 1 commit
    • deuce's avatar
      Update to 3.17a · dbbfabf1
      deuce authored
      New Features:
      - Multiple bindings for each service
        Use comma-separated interfaces on Interface= lines in the ini file.
        Default is now ",::"
      - IPv6 support
      - TLS support for the webserver and (non-static) services
        New TLS option in services.ini (ie: Options=TLS)
      - Decrease LEN_SCAN_CMD to 35 chars, increase the CID field to 45 chars,
        and rename the MAIL_CMD string to IPADDR.  I think this frees up the
        note field for SysOp use.
  21. 12 Mar, 2014 1 commit
  22. 07 Mar, 2014 1 commit
    • rswindell's avatar
      * Eliminated the sbbs.ini [BBS] Options flag: USE_2ND_RLOGIN · b45af31d
      rswindell authored
      - this option has been a default option flag for 10 years
      - this option was introduced *before* the RLogin password capability
      - Synchronet now always expects the login-ID (alias) to be the 2nd string
      received during RLogin connections (called 'server-user-name' in RFC 1282.
      * Now storing the complete terminal type/speed string received during RLogin
      connection in the bbs.rlogin_terminal property (sbbs_t.rlogin_term in C++).
      * bbs.rlogin_gate() is over-hauled:
      - arguments are: address, client-user-name, server-user-name, terminal, mode
      - if existing JS module assumes this to be: address, server-user-name, password
        those scripts will need to be updated to reflect the correct argument order
      - all arguments beyond the first are now optional
      - the terminal string can now be passed-in
      * Deprecated the telnet gateway option: TG_SENDPASS (the 'password' if desired
      to be sent as the 'client-user-name' can be specified as an argument and this
      option sent the password as the *second* RLogin string ('server-user-name'),
      which was always wrong.
      * sbbs_t::telnet() can now accept the terminal string as an optional argument.
  23. 04 Sep, 2013 1 commit
  24. 28 Oct, 2011 1 commit
  25. 01 Sep, 2011 1 commit
  26. 25 Oct, 2009 1 commit
    • rswindell's avatar
      Added errormsg callback function pointer to all startup structures to allow · e5da08ed
      rswindell authored
      error counting/logging/messages to be handled by front-end (e.g. control panel)
      regardless of log_level setting.
      Mail server now filters blocked-subjects before applying DNSBL tag.
      Received message header TO and FROM fields are no longer checked against the
      email.can file for SMTP-authenticated clients.
      SMTP MAIL FROM and RCTP TO addresses are no longer checked against the
      email.can file for SMTP-authenticated clients.
      Statistics are displayed in a more legible manner when the mail server is
      The msgs_received stats counter now includes blocked and ignored messages too.
  27. 18 Aug, 2009 1 commit
  28. 14 Aug, 2009 1 commit
    • rswindell's avatar
      Added JS load() search path extensibility: · f45e2156
      rswindell authored
      Configurable via ctrl/sbbs.ini file JavaScriptLoadPath key value
      (comma-separate listed of search directories), default value is "load".
      This list is exposed in the JS object model via the js.load_path_list array
      (may be modified by scripts).
      For JSexec, the default load path list may be over-ridden with the '-i' option.
      For relative load paths (e.g. not beginning with '/' or '\'), the path is
      assumed to be a sub-directory of the (configurable) mods or exec directories
      and is searched accordingly.
      So, by default, load("somefile.js") will search in this order:
  29. 11 Feb, 2009 1 commit
  30. 04 Jun, 2008 1 commit
  31. 23 Feb, 2008 1 commit
  32. 31 Dec, 2006 1 commit
  33. 15 Sep, 2006 1 commit
    • rswindell's avatar
      Replace the "log mask" concept with a much simpler "log level" concept: · 76a64bca
      rswindell authored
      instead of a bit-mask representing all the log levels to actually "see", use a
      single numeric (or nmemonic) level value (ERROR, WARNING, NOTICE, etc.)
      and less severe log levels (levels with a higher numeric value) will be filtered
      (e.g. not "seen" or logged). It's the basic syslog() concept.
  34. 09 Sep, 2006 1 commit
    • deuce's avatar
      Experimental SSH server support using Cryptlib. · 513c1a4d
      deuce authored
      At least Cryptlib 3.2.3a and 3.2.3 (The latest) crashes Synchronet when you
      attempt to connect using OpenSSH (SyncTERM with experiment SSH works though)
  35. 24 May, 2006 1 commit
  36. 21 Apr, 2005 1 commit
    • rswindell's avatar
      Using js_startup_t for the JS startup parameters for all servers/services. · b8ce6208
      rswindell authored
      Created sbbs_read_js_settings() and sbbs_set_js_settings() to read and write
      all settings to/from .ini files in a modular fashion.
      This is a precursor to implementing support for JavaScriptThreadStack (limit)
      support for all JS-enabled servers and services (working around the ircd bug).
  37. 06 Nov, 2004 1 commit
  38. 03 Nov, 2004 1 commit