Hello Warpslide!
22 Mar 26 07:18, you wrote to me:
Have you used the "-tooold 60" statement in your echo line in the
hpt config? That helps a lot.
I do have -tooOld 90 -tooNew 30 set with EchoAreaDefaults but it only seems to check the packet date, not the date on the message.
I've seen messages in my bad area with the note: "message is too old....", so it's working here.
I posted a patch to the husky echo back on 10th October last year
that, covers something like what your script is doing for the
date issue.
I missed that, do you know if that patch also made it to github?
Here it is. I've also got another one, but it hasn't been posted.
This first patch has caught 8 or so packets sofar. Most have come from a system in Z2, posting received new file messages.
'C' isn't my strength, so if it breaks your system you have to glue it back together.
=== Cut ===
= fidosoft.husky (3:633/280) ==================================================
Msg : 3782 of 3824 Snt Loc
From : Stephen Walsh 3:633/280 10 Oct 25 10:38:04
To : All
Subj : HPT Bug: Corrupted packets not rejected due to missing date validation =============================================================================== @MSGID: 3:633/280 68e847d8
@CHRS: CP437 2
@TZUTC: 1100
Hi Husky developers,
I've discovered a bug in HPT where packets with corrupted/empty message date fields are not properly rejected and renamed to .bad as they should be.
PROBLEM DESCRIPTION:
===================
When processing packets, HPT reads the 20-byte datetime field from each
message header (pktread.c:771) and calls parse_ftsc_date() to parse it
(line 777). However, the return value from parse_ftsc_date() is ignored.
The parse_ftsc_date() function returns flag_t values indicating:
- FTSC_BROKEN (2) - field cannot be parsed
- FTSC_FLAWY (1) - field has correctable errors
- FTSC_TS_BROKEN (128) - timestamp broken but date OK
Currently, even when parse_ftsc_date() returns FTSC_BROKEN, the badmsg
counter is not incremented, so the packet is not renamed to .bad and
continues to be processed.
REAL-WORLD IMPACT:
==================
I encountered a packet in the wild (from 2:341/66) that contains:
- Message 3: Empty date field (0 bytes)
- Message 4: Invalid date field (1 byte: '0')
The bad packet can be obtained at:
https://vk3heg.net/badpkt.zip
HPT processed this packet instead of rejecting it.
PROPOSED FIX:
=============
After calling parse_ftsc_date(), check if the FTSC_BROKEN flag is set and increment badmsg accordingly. This ensures corrupted packets are properly renamed to .bad.
Patch attached below. Please review and consider applying to the codebase.
--- hpt/src/pktread.c.orig 2025-10-09 10:00:00.000000000 +1100
+++ hpt/src/pktread.c 2025-10-09 10:05:00.000000000 +1100
@@ -734,6 +734,7 @@
{
s_message * msg;
size_t len;
+ flag_t date_flags;
int badmsg = 0;
struct tm tm;
long unread;
@@ -774,7 +775,16 @@
}
msg->datetime[20] = 0; /* ensure it's null-terminated */
- parse_ftsc_date(&tm, (char *)msg->datetime);
+ date_flags = parse_ftsc_date(&tm, (char *)msg->datetime);
+
+ /* Check if the date field is broken and cannot be parsed */
+ if(date_flags & FTSC_BROKEN)
+ {
+ w_log(LL_ERR,
+ "wrong msg header: datetime field is broken ('%s')",
+ msg->datetime);
+ badmsg++;
+ }
/* val: make_ftsc_date((char*)msg->datetime, &tm); */
if(globalBuffer == NULL)
TESTING:
========
With this patch applied, packets with broken date fields will be properly rejected and renamed to .bad instead of being processed.
Best Regards,
Stephen
=== Cut ===
=== cut ===
--- a/hpt/src/toss.c
+++ b/hpt/src/toss.c
@@ -733,8 +733,14 @@ void forwardToLinks(s_message * msg,
}
}
makePktHeader(NULL, &header);
- header.origAddr = *(newLinks[i]->link->ourAka);
+ /* Use echo area's useAka if available (respects -a parameter for zone gating),
+ * otherwise fall back to link's ourAka.
+ * This fixes zone mismatches in passthrough areas crossing zone boundaries.
+ */
+ header.origAddr = (echo->useAka != NULL) ?
+ *(echo->useAka) :
+ *(newLinks[i]->link->ourAka);
header.destAddr = newLinks[i]->link->hisAka;
if(newLinks[i]->link->pktPwd != NULL)
=== cut ===
Vorlon
--- GoldED+/LNX 1.1.5-b20250409
* Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (21:1/195)