Skip to content
Snippets Groups Projects
  1. Jan 21, 2025
  2. Jan 16, 2025
  3. Jan 15, 2025
  4. Jan 14, 2025
  5. Jan 11, 2025
  6. Jan 08, 2025
    • Rob Swindell's avatar
      Support "virtual shortcuts" to directory configured in SCFG->File Areas · 0dde9df8
      Rob Swindell authored
      As an alternative to directory aliases configured in ftpalias.cfg and/or
      web_alias.ini, a sysop can specify a shortcut (virtual directory name) per
      directory in SCFG->File Areas. These shortcuts will appears as top/root level
      directories in the FTP and Web servers for quick user access to important
      directories.
      
      The advantages (over ftpalias.cfg / web_alias.ini) are:
      - one place to configure
      - FILE_FTP_PATH and FILE_WEB_PATH @-codes will use the shortcut
        (usually a shorter, preferred virtual path to the directory)
      
      * New JS file_area.dir[].vshortcut property
      0dde9df8
  7. Dec 02, 2024
  8. Nov 18, 2024
  9. Nov 17, 2024
  10. Nov 16, 2024
    • Rob Swindell's avatar
      Leave the user/*.ftp lock file open for better protection · 8f2102a7
      Rob Swindell authored
      This appears to be the only way to 100% provide mutual exclusivity between
      Windows and Linux client sharing a Samba file system.
      
      Also, make fmutex_close() take a pointer to the file descriptor so that we can
      better manage the resource (i.e. don't close a descriptor that's already been
      closed and possibly valid in another thread).
      8f2102a7
  11. Nov 15, 2024
    • Rob Swindell's avatar
      Only allow one FTP session per QWKnet user account · 9b3be7dc
      Rob Swindell authored
      Vertrauen's FTP server gets abused by QWKnet logins sometimes and handling
      the race conditions around QWK packet creation attempts is silly - there's
      no legit reason why a QWKnet account needs to be logged-in multiple times
      concurrently to the hub's FTP server, so reject the subsequent logins even
      when they're on different hosts (as is the case with Vertrauen).
      
      As part of this change:
      - fmutex() now takes an new time_t* argument to (optionally) store the
        time of the mutex file for helping logging (locked since when?).
      - time_as_hhmm() created to format a string as either HH:MM or HH:MM[a|p]
        (depending on system configuration for 12 or 24 hour time formatting).
      - renamed the old hhmmtostr ()to tm_as_hhmm() (since it takes a struct tm arg)
        and have it return a non-padded string (useful in more situations without
        requiring truncation) when the sysop prefers 24-hour time.
      9b3be7dc
  12. Nov 04, 2024
  13. Oct 23, 2024
  14. Oct 22, 2024
  15. Jul 12, 2024
  16. May 04, 2024
    • Rob Swindell's avatar
      Change client_t.protocol from pointer to buffer · dd2afc92
      Rob Swindell authored
      Fix observed crash when shutting down services server where the client_t
      protocol was pointing to a freed service's protocol description string.
      
      This was the last pointer in client_t and should resolve the last race
      conditions (memory ownership issues) with its data members.
      
      This also resolves a small memory leak in getnodeclient() where the last
      client "gotten" would have its heap-duplicated protocol string leaked.
      dd2afc92
  17. Mar 22, 2024
  18. Mar 21, 2024
    • Rob Swindell's avatar
      Reduce log severity of QWK-packet removal error log message to WARNING · b4d293c6
      Rob Swindell authored
      This allows each call to ftp_remote() to specify the log level for any remove
      failure. All others file-removal failures will continue to log at ERROR level.
      
      I get this particular (harmless) error a lot, so just reducing to warning:
      ftp  ... !ERROR 13 (Permission denied) (line 860) removing file: path/to/*.qwk
      b4d293c6
  19. Mar 07, 2024
  20. Feb 14, 2024
    • Rob Swindell's avatar
      Recycling servers reverts back to graceful (waiting for clients to disconnect) · cebed052
      Rob Swindell authored
      Commit 75c5c9e5 was initially to address server termination (sisue #236), but
      expanded in scope to include server recycling (e.g. due to semaphore/config
      file touch) and that turns out to not be what most sysops want.
      
      If you want an immediate/ungraceful recycle, do a restart (shutdown/stop and
      then start) instead.
      
      Immediate/ungraceful server shutdown/termination is still in effect however.
      
      No change to the "server pause" feature either, so combining pause with
      recycle would be effective to prevent *new* client connections while waiting
      for existing clients to disconnect and allow a recycle to happen.
      cebed052
  21. Feb 07, 2024
  22. Jan 22, 2024
  23. Jan 21, 2024
  24. Jan 20, 2024
  25. Jan 16, 2024
    • Rob Swindell's avatar
      Fix issue with "Pause Logging" buttons not staying pressed in sbbsctrl-win32 · eb9c3519
      Rob Swindell authored
      Reported by Max (WESTLINE)...
      
      Introduced in commit 75c5c9e5, since we are now calling the set_state()
      callback periodically, and in sbbsctrl, it sets/resets the pause button
      checked (depressed) state in response to this callback (should it?), this was
      resetting the pause button checked/depressed state peridically (at the
      configured sem file check interval, default 2 seconds).
      
      The fix: if the new server state is the same as the previously set server
      state, don't call the set_state() callback. I considered this as a potential
      optimization when I first wrote that commit, but didn't see any obvious
      downside to calling the set_state() callback redundantly. Now that I see a
      downside, let's implement this saving/checking of the state to avoid
      redundant "set" calls.
      eb9c3519
  26. Jan 13, 2024
    • Rob Swindell's avatar
      Check for shutdown and recycle semaphores even while clients are connected · 75c5c9e5
      Rob Swindell authored
      We have checks/loops/timeouts waiting for active clients to disconnect and
      child thread threads to terminate whenever shutting down or recycling already,
      so this should be safe. This pretty simple change fixes issue #236 (can't
      terminate server under heavy load).
      
      Also as part of this commit, introduced the ability to "pause" a server
      (prevent it from accepting new connections) with the ctrl/pause semaphore
      file or via the MQTT server/pause (and resume) topics. This feature is useful
      when debugging server issues where you don't necessarily want to fully
      shutdown/terminate the server, but don't want any new connections to be
      accepted (the listen backlog will fill up with incoming connections though).
      Unlike a server shutdown, a server pause can be "undone" via MQTT (by
      publishing a message to the "resume" topic).
      
      The "pause" semaphore file is just an "existence" semaphore file - its
      date/time stamp doesn't matter. If the file exists, the server will enter
      a paused state (and periodically log messages to that fact) until the semfile
      is deleted.
      
      This server pause feature is not the same as the pause button function in
      sbbsctrl, which just pauses server log output.
      75c5c9e5
  27. Jan 10, 2024
    • Rob Swindell's avatar
      Restore ftpalias.cfg support for MLSx commands · 263abb98
      Rob Swindell authored
      Support was accidentally removed as part of commit 22e8d2e3, meaning
      the ftpalias.cfg wasn't used at all in responses to the MLSx commands as
      reported by Max (WESTLINE) using Total Commander, FileZilla and Directory
      opus. The traditional "LIST" commands still worked fine with ftpalias.cfg
      contents just fine.
      
      The reason this code was accidentally removed was due to the errant
      copy/pasted comparison with startup->html_index_file that did not belong here
      and made the block appear related to HTML index file generation. It was not.
      This was just a bug in the initial implementation of MLSx support in
      commit d4deb4b3.
      
      Also included in this commit:
      - Return the date/size of the user's QWK packet file, if it exists, in MLSx
        response.
      - send_mlsx_entry() won't report negative time_t values as file modify dates
       (flength returns -1 upon failure/file-not-found).
      - get_owner_name() returns the string, making it easier to use in function
        calls.
      
      There appears to still be some work to do to make the MLSx commands fully
      compliant with RFC 3659 (e.g. "mlst filename" from ftpalias.cfg should work
      but does not), but at least FileZilla displays ftpalias.cfg files and
      directories correctly now.
      263abb98
  28. Jan 09, 2024
Loading