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

  1. 27 Aug, 2019 2 commits
    • rswindell's avatar
      Log value of 'writable' in "could not write to passthru socket" log msg. · d9f6fce4
      rswindell authored
      May help determine if the socket is disconnected or just not writable.
      d9f6fce4
    • rswindell's avatar
      passthru_socket(): · 289ee122
      rswindell authored
      Always call recv() when select() says the passthru_socket is readable, even
      if the outbuf is full. This resolves an issue where the disconnection of the
      passthru_socket would not be detected if the outbuf was full (e.g. the
      output_thread stopped running).
      Also, check if RingBufWrite() returns a short-write count and log the values
      (actual versus expected write byte count).
      289ee122
  2. 26 Aug, 2019 1 commit
  3. 25 Aug, 2019 3 commits
    • rswindell's avatar
      Remove Windows 9x support, finally. · aaf03142
      rswindell authored
      Remove DEBUG.LOG file support for Win32-debug builds, never really looked-at.
      aaf03142
    • rswindell's avatar
      A couple of passthrough socket fixes: · de72e6c3
      rswindell authored
      1. when de-activating the passthru socket, give the passthru_thread some
         cycles to copy any remaining socket data into the outbuf before we let
         the node_thread continue on and spew its own data into the outbuf.
         This fixes the problem of final messages of a file transfer protocol
         being intermixed with BBS data (prompts, menus, and such) and causing
         file download finalization issues.
      2. Don't read from the passthru socket until there is enough room in the
         outbuf for the maximum possible telnet-expanded read size. This fixes
         streaming download protocol (ZMODEM and YMODEM-G) errors.
      
      Also, for good measure, check the passthru_socket for writability before
      send()ing on it and log a warning if it's ever not writable.
      de72e6c3
    • rswindell's avatar
      Create/use passthru_socket_activate() function which will purge the · 59f896e6
      rswindell authored
      client_socket_dup before activating the passthru_socket. This resolves the
      issue of external programs receiving stale data from the previous passthru
      session - data that was not sucessfully read by the last external program
      invoked.
      59f896e6
  4. 24 Aug, 2019 1 commit
  5. 22 Aug, 2019 1 commit
  6. 21 Aug, 2019 1 commit
    • rswindell's avatar
      Always use a passthru (proxy) socket when executing external programs that · 53884cce
      rswindell authored
      use socket I/O (e.g. sexyz, door32.sys doors, sync-xsdk doors) - not just when
      the client is connected via SSH. This solves a number of problems:
      - programs that change socket options
      - programs that don't support non-CP437 charsets (e.g. PETSCII, UTF-8)
      - programs that don't support Telnet-IAC escaping
      
      This greatly simplifies (reduces the need for) input_thread locking.
      
      The passthru_thread now handles chunks of up to 4000 bytes per transfer
      between socket and ringbuf, instead of a char at a time, greatly improving the
      performance.
      53884cce
  7. 14 Aug, 2019 1 commit
  8. 12 Aug, 2019 2 commits
    • rswindell's avatar
      Accept and store the "Internet host number" portion of the telnet · 14f8af7d
      rswindell authored
      TERMINAL LOCATION NUMBER (RFC 946) in sbbs_t::telnet_location.
      
      Some (older?) versions of fTelnet request to send this option to the BBS to
      share the real IP address of the client. Accept this option (when using
      "format 0") and store the first 32-bits (an IPv4 address) in the telnet
      location storage / caller-ID information. The same place the telnet
      SEND LOCATION value is stored if received.
      
      Now, we're not requesting this option (e.g. with a Telnet "DO" command), but
      fTelnet doesn't need that: It offers to send it, so we accept.
      14f8af7d
    • rswindell's avatar
      delfiles() now takes a 3rd argument: keep, which is a number of files to retain · 582c898a
      rswindell authored
      (not delete) from the end of the sorted list of files (normally, 0).
      Created an sbbs_t::delfiles() wrapper which defaults to keep 0 files and also
      generates a error.log message if any of the file-deletions fail.
      582c898a
  9. 05 Aug, 2019 1 commit
    • rswindell's avatar
      Buld SyncTERM/VT4xx style output rate limiting into the BBS: · 23b1912a
      rswindell authored
      - new @-code BPS:x (where x is 0/unlimited, 300, 600, 1200, 2400, ... 115200)
      - new JS property: console.output_rate
      So you can have mutliple output rate changes in a single file by using multiple
      BPS @-codes.
      Hopefully this doesn't do weird things with non-compliant terminals.
      23b1912a
  10. 04 Aug, 2019 1 commit
  11. 16 Jul, 2019 1 commit
    • rswindell's avatar
      Move login username/number parsing into a the C++ code (from login.js) since we · be7a590d
      rswindell authored
      need that internal for SSH and RLogin support of fast-logons.
      So, now, even if logging in via SSH or Rlogin, the sys_status SS_FASTLOGON
      flag will be set when the user specifies "!username-or-number" during logon and
      then the logon.js can use that to determine what to display (or not) to the
      user, during logon.
      
      The QWK logon support ("*username-or-number") is also handled in this new
      sbbs_t method: parse_login().
      
      This means the fast_logon_char is no longer configurable (hard-coded to '!')
      and the modopts.ini options are going to be parsed by logon.js from the [logon]
      section (not the [login] section).
      
      You still must set fast_logon=true in the [logon] section of modopts.ini to
      enable the fast-logon option for users.
      be7a590d
  12. 09 Jul, 2019 1 commit
    • rswindell's avatar
      petdefs.h was (silently) moved from src/sbbs3 to src/encode. · eda5afb9
      rswindell authored
      Since not *everything* that #include's sbbs.h needs the PETSCII defs,
      remove it from sbbs.h and just #include petdefs.h where we need it.
      The catch-all header file is a problematic organizational design and we are
      moving away from that.
      eda5afb9
  13. 07 Jul, 2019 1 commit
  14. 20 Jun, 2019 1 commit
  15. 03 Jun, 2019 1 commit
  16. 04 May, 2019 1 commit
    • rswindell's avatar
      Define and use a wrapper for JS_GetInstancePrivate(): js_GetClassPrivate() · 6f83c4ff
      rswindell authored
      Use this in place of JS_GetPrivate() in native class methods that need the
      class instance's private data pointer and will do bad things if that pointer
      points to something other than what is expected. mcmlxxix (matt) discovered
      that using Object.apply(), you can invoke class methods where the 'this'
      instance is a different class. This would result in
      "Internal Error: No Private Data." or a crash.
      So now, gracefully detect this condition and report a meaningful error:
      "'<class-name>' instance: No Private Data or Class Mismatch"
      
      Also, important to note: if the method uses JS_THIS_OBJECT to get the JSObject*
      to pass to JS_Get*Private, then it must do this *before* it calls JS_SET_RVAL.
      
      From jsapi.h:
       * NB: there is an anti-dependency between JS_CALLEE and JS_SET_RVAL: native
       * methods that may inspect their callee must defer setting their return value
       * until after any such possible inspection. Otherwise the return value will be
       * inspected instead of the callee function object.
      
      The js_crypt*.c files still need this treatment.
      6f83c4ff
  17. 02 May, 2019 1 commit
    • rswindell's avatar
      @-code changes: · 0868c5d9
      rswindell authored
      Expanded codes will not *not* go beyond the terminal column width (minus 1).
      If you need the old/wrap behavior, add a "-W" modifier to your @-code.
      If a length value is specified with -W, it is ignored.
      
      - MSG_TO, MSG_FROM, MSG_SUBJECT now reflect the header values passed
        to sbbs_t::show_msghdr(), JS bbs.show_msg_header() and not necessarily the
        actual stored (e.g. MIME-encoded) header values.
      
      New codes:
      - MSG_CC - reflect a message's CC list, if it has one
      - DATETIMEZONE - combines DATETIME and TIMEZONE in one string
      0868c5d9
  18. 23 Apr, 2019 1 commit
    • rswindell's avatar
      Clean up the hostname look-up stuff: · 60f996f9
      rswindell authored
      - getnameinfo() was being called with NI_NUMERICHOST in the mail server and
        web server (but nowhere else)
      - use a singly-defined macro (STR_NO_HOSTNAME) for the "<no name>" string
        rather than copying it about
      - the webserver apparently assumes that session->host_name will always have
        *some* unique value (e.g. the IP address when no hostname is available) - so
        account for that special need <grumble>
      60f996f9
  19. 11 Apr, 2019 1 commit
    • rswindell's avatar
      Define and use sbbs_t::msghdr_tos (exposed via JS as · 0ad2c4a2
      rswindell authored
      console.msghdr_top_of_screen):
      a hack to let scripts know whether the most-recently displayed message header
      was displayed on the top of the terminal screen (or not). This allows us to
      show avatars at the top of the screen when the header is up there, rather than
      relevative to the bottom of the header (the pos can vary, depending on stuff).
      0ad2c4a2
  20. 09 Apr, 2019 1 commit
  21. 21 Feb, 2019 1 commit
  22. 17 Feb, 2019 1 commit
  23. 15 Feb, 2019 1 commit
    • rswindell's avatar
      Added new semfile to clear the failed login attempt list: "ctrl/clear" · c4570e4e
      rswindell authored
      So now if you need to clear the failed-login/temp-ban list, just
         'touch /sbbs/ctrl/clear'
      Other changes to the semfiles:
      The terminal server is now identified as "term" rather than "telnet" in the
      (optional) server/protocol specific semfile naming.
      Removed support for the old telnet.rec semfile (long deprecated).
      c4570e4e
  24. 07 Jan, 2019 1 commit
    • sbbs's avatar
      Fix various JSDOCS_BUILD with gcc warnings. · 0d7eb6ee
      sbbs authored
      warning: ISO C++ forbids converting a string constant to 'char*'
      and comparision between signed/unsigned int.
      This does *not* address the reported build issue:
      In function `_start':
      (.text+0x20): undefined reference to `main'
      0d7eb6ee
  25. 30 Dec, 2018 1 commit
  26. 23 Nov, 2018 1 commit
  27. 31 Oct, 2018 1 commit
  28. 26 Oct, 2018 1 commit
  29. 22 Oct, 2018 2 commits
    • rswindell's avatar
      When logging event-thread error messages, include the "evnt " prefix before · ece4a33f
      rswindell authored
      the string (which starts with the event internal code).
      ece4a33f
    • 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:
          TelnetInterface=71.95.196.34,71.95.196.34:64,71.95.196.34:128
        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)
      31303187
  30. 17 Oct, 2018 2 commits
  31. 09 Oct, 2018 1 commit
    • rswindell's avatar
      Replaced the set of (ancient) arrays used for saving/restoring lines of · 3289d561
      rswindell authored
      terminal text and attributes with a linked-list. In doing so:
      - the save depth is no longer fixed (at 4), but dynamic and unbounded
      - the current column position is also saved/restored (bug fix)
      - no more copy/pasta from sbbsdefs.h into js_console.cpp
      - the JS console.saveline() and restore() methods now return Bool to indicate
        success/failure
      
      Also, some trailing white-space was auto-removed due to local editor settings.
      3289d561
  32. 06 Oct, 2018 1 commit
  33. 05 Oct, 2018 1 commit
  34. 01 Oct, 2018 1 commit