- Dec 06, 2024
-
-
Rob Swindell authored
-
Rob Swindell authored
-
Rob Swindell authored
Convert more log messages to use de-duplication as solution to issue #619. A lot more lprintf() -> errprintf() conversions will be needed to fully realize this solution (e.g. in the mail, ftp, web, services serverss).
-
Rob Swindell authored
In printfile() and printtail() which are used by menu() and many other functions. These should be helpful to sysops that just want to know what file is being displayed under what conditions (e.g. for trouble-shooting or customization reasons).
-
Rob Swindell authored
... instead of just the file name, as was expected.
-
- Dec 05, 2024
-
-
Rob Swindell authored
Under heavy loads, I've found periodic non-blocking lock attempts just aren't reliable enough: in particular, on Vertrauen, the guest user account record in the user.tab file gets read and written-to A LOT (updating stats), and under heavy loads (especially with hundreds of web client sessions), I'd get timeouts attempting to lock the guest record in the user.tab (after about a minute of periodic retries) - so let's just block "forever" to get the user record lock (or until signaled or notified of a deadlock). With this change, I've not had any user.tab lock errors or apparent deadlocks. Let the underlying OS/filesystem handle queuing and deadlock detection, when supported. lock() still behaves as before: non-blocking lock attempt.
-
Rob Swindell authored
... from ERROR to WARNING, so the repeats won't be logged to error.log file and won't (normally) be sent as notifications (e.g. emails) to the sysop. The duplicates are identified as from the same source file and line number as the immediately previous logged error within the last 12 hours. String comparison doesn't really work for deduplication since if you look closely, the errors usually are *not* exact duplicates (i.e. there's a node number or a socket descriptor or something that uniquely identifies the user/client/session). Repeated errors don't increment the node's error counter either. This does not de-duplicate errors logged via other means (e.g. direct calls to log()/lputs(),lprintf() with a severity of LOG_ERR or higher), but will solve the majority of duplicate errors that can be logged from the terminal server. So this at least partially addresses issue #619.
-
- Dec 03, 2024
-
-
Rob Swindell authored
Even though we use O_EXCL, networked file systems still sometimes allow the secondary open() to succeed. We use record locking in xpdev's sopen() implementation for *nix, so this lock will insure such opens (and locks) will now fail. This is an attempt to address occassional error on Vertrauen: ERROR 2 (No such file or directory) renaming *.rep to *.bad
-
Rob Swindell authored
-
Rob Swindell authored
Return correct error value upon seek failure.
-
- Dec 02, 2024
-
-
Rob Swindell authored
"performing custom action" Normally, the sysop would set the NodeActionCustom text.dat string to override this.
-
Rob Swindell authored
This is to be used (e.g. instead of NODE_BXFR) for sysop-custom node actions.
-
Rob Swindell authored
-
Rob Swindell authored
-
Rob Swindell authored
so that if multiple entities call these functions at the same time, they don't retry at exactly the same times.
-
Rob Swindell authored
-
Rob Swindell authored
Add/use SOCKET_STRERROR which gets the description of the *last* socket error. We should start using socket_errno(true) in place of ERROR_VALUE (horribly named macro) for comparing last socket error nubers against values/macros from errno.h. Eliminate get_socket_errno(), unused and redundant with socket_errno().
-
Rob Swindell authored
-
Rob Swindell authored
-
Rob Swindell authored
Addresses Clang warnings about deprecation
-
- Dec 01, 2024
-
-
Rob Swindell authored
These functions now return a common set of non-zero error values (where appropriate), defined in userdat.h Don't return errno.
-
Rob Swindell authored
getnodedat() now performs a non-locked read by default. Perform more checks of getnodedat() return value before calling putnodedat() to avoid unintentionally zeroing out node.dab records. Add/use unlocknodedat() method for unlocking a node.dab record without writing. Note: The userdat.c getnodedat() and putnodedat() still return int (i.e. 0 on success), so that can be confusing.
-
Rob Swindell authored
-
Rob Swindell authored
It's possible now for clients to easily exceed the configured max concurrent connections limit, even though they just get an error 429 page. Let's at least track and log when a new highwater mark is reached.
-
Rob Swindell authored
-
Rob Swindell authored
Can't backup (make copies of) an open file.
-
Deucе authored
-
Deucе authored
We can't send a 4xx error (ie: client did something wrong) in plaintext on a TLS connection. Untested beyond a basic compile check.
-
Rob Swindell authored
Clean-up the web server config menu quite a bit by condensing options.
-
Rob Swindell authored
You can also disable filebase access by setting the vpath prefix to blank.
-
- Nov 30, 2024
-
-
Rob Swindell authored
We have this feature for the FTP, Mail, and Terminal servers (with no default limit) but crazy abuse of my Synchronet web servers has now made this a necessity for Vertrauen. A limit of 2 used to be considered reasonable long ago. Today, 10 seems fair enough. Setting to 0 will impose no max-connections per IP address (other than the total client limit per server).
-
Rob Swindell authored
Apparently JSVAL_IS_STRING() can return true even when argv[1] is out of range (I guess I assumed it'd alwasy be NULL or VOID/undefined) and this can lead to crash when calling JS_ValueToString() on it.
-
- Nov 26, 2024
-
-
Rob Swindell authored
to notify sysop (user #1) that they were paged. Previously, this was a hard-coded string. The new string in text.dat is the same, but adds 2 BELs (CTRL-G chars) and is now customizable. Created an sbbs_t::notify() method to make this easier to use and that method supports @-code expansion, so this text.dat string supports @-codes (which I used). This addresses the feature request in issue #828 (beep the sysop in the telegram/short message, when they're paged).
-
- Nov 24, 2024
-
-
Deucе authored
1) Initialize saverobot.name since this is checked unconditionally. This has a side effect of initializing everything else, but name is the only thing that actually matters. 2) Add a bar to the global settings menu. Previously, if you scrolled near the bottom and selected an option, after changing the option, you would jump up to the last item on the initial screen. 3) Fix the AreaMgr Support default value to be the current, not the opposite of current. 4) Use the correct variable for EchoMail Relay Filtered Messages setting default.
-
Deucе authored
We're carefully counting the errors, but never looking at the count.
-
Rob Swindell authored
Upon any node.dab lock or read failure, this code would cause errormsg() which would often/usually end up claling getnodedat() which would block forever trying to acquire the ndoefile_mutex (introduced in commit b9633069, I'm not clear why). Unlock/release the mutex *before* calling errormsg().
-
- Nov 23, 2024
-
-
Rob Swindell authored
Don't deref that null pointer
-
Rob Swindell authored
-
Rob Swindell authored
-
Rob Swindell authored
I dislike this particular code a little less now: - no more redundant string compares - less deeply nested if() and for() blocks - remove added areas from the add list, rather than zeroing out the tag - a little more common code between areas.bbs and areas.ini handling No functional change (I hope).
-