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. 03 Aug, 2019 1 commit
    • rswindell's avatar
      When listing messages: · 09a87ec7
      rswindell authored
      - Use the P_TRUNCATE pmode flag to prevent long msg subj from wrapping the
        terminal
      - Use msghdr_text() to do the magic UTF-8/CP437 dance for messages with UTF-8
        header fields (e.g. to/from/subject)
      
      This is why I assigned MSG_HFIELDS_UTF8 the same bit-flag value as P_UTF8. :-)
      09a87ec7
  2. 02 May, 2019 1 commit
  3. 10 Apr, 2019 3 commits
  4. 24 Mar, 2019 1 commit
    • rswindell's avatar
      New JS bbs methods: · b4d31140
      rswindell authored
      - bbs.show_msg()
      - bbs.show_msg_header()
      Re-worked the JS bbs.netmail() implementation
      sbbs::show_msg(), show_msghdr(), msgtotxt() now take an smb_t* argument
      (don't use the pseudo-global 'smb' in these functions any longer)
      sbbs_t::putmsg() and JS console.putmsg() now accept an optional orig_columns
      argument to specify the original column width of a text for intelligent
      re-word-wrapping (e.g. as taken from a message header field). Previously, the
      original-column value was hard-coded to 80 columns (technically, 79).
      sbbs_t::show_msghdr() no longer sends a CRLF if the cursor is already at the
      top-of-screen (TOS).
      sbbs_t::show_msg() now uses the stored "columns" msg header fields to pass to
      putmsg() to intelligently re-word-wrap message bodies for display.
      sbbs_t::show_msg() and msgtotxt() return bool now instead of void.
      JS MsgBase.get_all_msg_headers() now supports an optional "expand_fields"
      argument (defaults to true). I contemplated just getting rid of the (few)
      expanding header fields (more like default-value-header fields, like 'id'), but
      decided against it, at least for now.
      JS MsgBase.put_msg_header(), the "number_or_offset" argument is optional and
      not needed if a header object argument is provided. Make this clear in this JS
      docs for this method
      
      Note:
      I sat on this commit for a while because I noticed occasional errors like this:
          Node 1 <Digital Man> !ERROR 2 (No such file or directory) (WinError 0) in
          readmsgs.cpp line 217 (sbbs_t::loadposts) locking
          "path/to/sub" access=-100 info=smb_locksmbhdr msgbase not open
      started cropping up after introducing these changes and which I never
      root-caused. But after a clean-build and waiting a week, I haven't seen it
      again, so hopefully it was just a incomplete rebuild issue and not a new bug.
      b4d31140
  5. 20 Feb, 2019 1 commit
    • rswindell's avatar
      Reversed course on the WM_QUOTE mode handling in sbbs_t::postmsg() · 57424543
      rswindell authored
      (JS bbs.post_msg()): If the WM_QUOTE mode flag is *not* set, then it will auto-
      create the quote file (quotes.txt) and add the WM_QUOTE mode bit before calling
      sbbs_t::writemsg(). So if existing JS scripts call bbs.post_msg(..., WM_QUOTE)
      with a custom-created quote file (e.g. with msg tails), that'll still work as
      before (e.g. DDMsgReader.js).
      
      bbs.email() and bbs.netmail() now support an optional reply_header_object
      argument which works like bbs.post_msg(). These methods (and the underlying
      C++ methods: sbbs_t::email(), netmail(), inetmail(), all auto-create the
      quote file now, when the WM_QUOTE mode flag is *not* set.
      
      The auto-created quotes.txt now includes the plain-text version of MIME-encoded
      messages.
      
      the bbs.post_msg(), email(), and netmail() methods now all support reply
      header objects that came directly from bbs.get_msg_header() *or* copies of
      such header objects (but the auto-quoting feature won't work when supplied
      this type of header object). So if passed a header object returned from
      bbs.get_msg_header(), we can now use the message base (for auto-quoting) and
      the underlying msg storage directly (no JS parsing necessary). This is what
      the new js_GetMsgHeaderObjectPrivates() function is used for.
      
      js_ParseMsgHeaderObject() (and the underlying parse_header_object() function)
      now supports either an actual internally-generated msg header object (e.g.
      returned from bbs.get_msg_header()) or one that is a copy or hand-constructed.
      
      quotemsg() no longer tries to get a copy of the msg index/header. It shouldn't
      have to since we can now get to underlying msg storage in the js_msgbase.c
      via js_GetMsgHeaderObjectPrivates().
      
      quotemsg() now reads only the plain-text portion of MIME-encoded messages.
      
      As part of this effort, I modernized the method prototypes using default
      argument values (e.g. WM_NONE for wm_mode arguments) and removed some
      extraneous WM_EMAIL and WM_NETMAIL specifications (these wm_mode flags are
      automatically added by the sbbs_t::email() and *netmail() functions).
      
      savemsg() now *does* support reply-IDs/thread-linkage via the additional
      'remsg' argument (when non-NULL).
      
      Replaced some use of nulstr with NULL.
      
      Replaced more boilerplate SMB open code with calls to smb_open_sub().
      57424543
  6. 19 Feb, 2019 1 commit
    • rswindell's avatar
      sbbs_t::postmsg() and JS's bbs.post_msg() changes: · d95d30ea
      rswindell authored
      When the WM_QUOTE mode flag is set and the 'remsg' is specified, the original
      message will quoted (excluding message tails, using the proper word-wrapping).
      If the quote file already exists before calling postmsg()/bbs.post_msg(), it
      will be over-written. This allows JS script to initiate reply-posts with quoted
      text without having to create their own quotes file. It also means there's no
      need to call sbbs_t::quotemsg() before calling sbbs_t::postmsg().
      sbbs_t::quotemsg() now takes an smb_t* arg (stop using the sbbs_t 'global'
      smb) and now returns bool.
      d95d30ea
  7. 02 Feb, 2019 1 commit
  8. 31 Dec, 2018 1 commit
  9. 30 Dec, 2018 3 commits
  10. 23 Oct, 2018 1 commit
  11. 03 Aug, 2018 1 commit
  12. 07 Jul, 2018 1 commit
    • rswindell's avatar
      Restore the 'U' command back to "User Edit" and commented-out the · 5b629cc7
      rswindell authored
      experimental 'U' (View Unread-Only toggle) command. The 'U' command from
      the e-mail menu (e.g. email_sec.js) works better than the toggle approach and
      is probably all that is needed.
      Also, the user number lookup in the User Edit bit is better at finding the
      proper user account (e.g. for received netmail).
      5b629cc7
  13. 10 Jun, 2018 1 commit
    • rswindell's avatar
      JS bbs object changes: · a32a52cb
      rswindell authored
      - finduser() method no longer prints "Unknown user" upon failure (the calling
        script can do this if/when it wants).
      - read_mail() method now accepts an optional 3rd argumnet (loadmail_mode)
        which may be used to load *only* un-read mail (for example), see LM_* in
        sbbsdefs.js
      
      Pass the lm_mode as a 4th argument to any readmail mod (if one is installed) -
      this correlates with the LM_* mode flag values (0 is normal/usual).
      
      File attachments can also be in a file/####.out directory (e.g. outbound
      Internet email attachments), so try deleting from there too when deleting
      mail with attachments.
      a32a52cb
  14. 09 Jun, 2018 2 commits
  15. 08 Jun, 2018 1 commit
  16. 27 Nov, 2017 1 commit
  17. 26 Nov, 2017 1 commit
  18. 15 Nov, 2017 1 commit
  19. 14 Nov, 2017 1 commit
  20. 13 Nov, 2017 1 commit
    • rswindell's avatar
      New feature: control of SPAM visibility when reading mail on the Terminal · d18bd3bd
      rswindell authored
      Server via the new 'V' command from the Reading Mail prompt allows you to
      toggle between all mail (including SPAM, the default), SPAM only, or HAM only.
      Also added a new '/' (search text) command from the reading mail prompts.
      Mail imported before the mailsrvr added support (recently) for the MSG_SPAM
      attribute flag will not be counted/filtered as SPAM.
      SBBSecho will have a commit (next) to support the new loadmail() usage, it
      will not compile until then.
      d18bd3bd
  21. 18 Nov, 2016 1 commit
    • rswindell's avatar
      Introduced 2 new poll concepts: · 0ac4f937
      rswindell authored
      - Closures (polls can be closed for new voting by the pollster)
      - Results can have configurable visibility:
        a. Only to voters (and the pollster) - the default
        b. Everyone
        c. Everyone once the poll has closed
        d. Only the pollster
      
      Changes to smb_getmsgtxt():
      Main change: poll questions can now be quoted when replying to a posted poll
      (the results cannot be quoted).
      Also: there's now automatically a blank line inserted between comment header
      fields and poll answers or the msg body text.
      Also: upon any malloc failure, the function now returns NULL.
      New functions: smb_msg_is_from() and smb_addpollclosure().
      0ac4f937
  22. 16 Nov, 2016 1 commit
    • rswindell's avatar
      loadmsg() now returns < 0 on error, >= 0 on success, this change was necessary · 742f1901
      rswindell authored
      to be able to delete messages that have no hfields, for example, with sub-op
      'D' command.
      Now support polls with comments (displayed before the poll answers).
      Poll results/statistics are only displayed to sub-ops and users who have voted
      already. This may be optoinal behavior determined by the pollster in the future.
      Sub-ops can now add comments to any post using the 'A' command from the
      [O]perator menu - use with caution.
      742f1901
  23. 04 Dec, 2015 1 commit
  24. 26 Nov, 2015 2 commits
  25. 20 Sep, 2015 1 commit
  26. 05 May, 2015 1 commit
  27. 27 Apr, 2015 1 commit
    • rswindell's avatar
      Enhancement at the request of Nightfox: · d57c3830
      rswindell authored
      Optionally, external modules may be executed in place of "built-in" operations
      for:
      - reading mail (email or netmail)
      - scanning posts (searching/scanning/reading a single sub-board)
      - scanning sub-boards (all, one, or a group)
      
      Each of these may be configured (in SCFG->System->Loadable Modules)
      with command-line options for a total length of up to 63 characters.
      
      Note to module programmers: each module here will be passed additional
      command-line arguments to indicate how or why the user operation was invoked.
      
      For the Reading Mail module, the 'which' value (in decimal) and the user-number
      is passed (in decimal). Usually the user-number will be the current user logged
      in, but not always (e.g. if the user is a sysop and reading other user's mail).
      The 'which' values (defined in load/sbbsdefs.js) of MAIL_YOUR, MAIL_SENT,
      and MAIL_ALL must be handled (MAIL_ANY won't be used).
      
      For the Scan Posts module, the sub-board number and scan mode (both in decimal)
      and the 'find' string (text being searched for) are passed as arguments
      (in that order). The scan mode values (defined in sbbsdefs.js) are the same as
      those supported by bbs.scan_posts(). All of the values should be supported
      and they can be combined (e.g. SCAN_CONST|SCAN_NEW
      and SCAN_NEW|SCAN_TOYOU). The 'find' string is only used if the SCAN_FIND mode
      bit is set. It is the responsibilty of the module (if configured) to enforce
      sub-board read access restrictions.
      
      For the Scan Subs module, the first argument is 1 if "all subs" are being
      scanned, 0 otherwise (normally the user is prompted for the breadth of the
      scan in this case, but that's up to the module author), and the scan 'mode' is
      passed in decimal, in that order. If the SCAN_FIND mode flag is passed in, this
      module should prompt the user for the text string to search for. If this module
      is not configured, the Scan Posts module will be executed for each sub-board
      scanned.
      
      Recursion protection was added, so it is actually possible for the Read Mail
      module, for example, to call bbs.read_mail() and it'll work, but why would you?
      
      If any of these user operations are initiated during logon, at the request of
      Baja or JavaScript module, or whatever, and if the module is actually
      configured (and not already executing to handle the operation), the module
      will be executed in-place-of the built-in functionality. Feedback welcome,
      d57c3830
  28. 12 May, 2013 1 commit
  29. 13 Feb, 2013 2 commits
  30. 06 Jan, 2013 1 commit
  31. 24 Oct, 2012 1 commit
  32. 03 Sep, 2011 1 commit
  33. 25 Aug, 2011 1 commit