Dead zombies and other fixes - see WHATSNEW
This commit is contained in:
parent
eaa1abb2fd
commit
257a17a944
|
@ -700,4 +700,9 @@ Initialization
|
|||
Console := NIL;
|
||||
Keyboard := NIL;
|
||||
|
||||
Finalization
|
||||
|
||||
If Assigned(Console) Then Console.Free;
|
||||
If Assigned(Keyboard) Then Keyboard.Free;
|
||||
|
||||
End.
|
||||
|
|
|
@ -3896,7 +3896,7 @@ Begin
|
|||
End Else
|
||||
Msg^.SetMailType (mmtEchoMail);
|
||||
|
||||
Msg^.SetOrig(bbsCfg.NetAddress[mArea.NetAddr]);
|
||||
Msg^.SetOrig (GetMatchedAddress(bbsCfg.NetAddress[mArea.NetAddr], mAddr));
|
||||
|
||||
Case mArea.NetType of
|
||||
1 : If mArea.QwkConfID = 0 Then
|
||||
|
|
|
@ -534,8 +534,6 @@ Begin
|
|||
Console.WriteLine('ERROR: No servers are configured as active.');
|
||||
|
||||
NodeData.Free;
|
||||
Keyboard.Free;
|
||||
Console.Free;
|
||||
|
||||
Halt(10);
|
||||
End;
|
||||
|
|
|
@ -82,7 +82,6 @@ Begin
|
|||
BarOne.Free;
|
||||
BarAll.Free;
|
||||
INI.Free;
|
||||
Console.Free;
|
||||
End;
|
||||
|
||||
Procedure ApplicationStartup;
|
||||
|
|
|
@ -60,7 +60,7 @@ Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
|||
Function GetFTNOutPath (EchoNode: RecEchoMailNode) : String;
|
||||
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
||||
Function GetNodeByRoute (Dest: RecEchoMailAddr; Var TempNode: RecEchoMailNode) : Boolean;
|
||||
Function IsValidAKA (Zone, Net, Node: Word) : Boolean;
|
||||
Function IsValidAKA (Zone, Net, Node, Point: Word) : Boolean;
|
||||
|
||||
Implementation
|
||||
|
||||
|
@ -579,20 +579,17 @@ Begin
|
|||
Close (F);
|
||||
End;
|
||||
|
||||
Function IsValidAKA (Zone, Net, Node: Word) : Boolean;
|
||||
Function IsValidAKA (Zone, Net, Node, Point: Word) : Boolean;
|
||||
Var
|
||||
Count : Byte;
|
||||
Begin
|
||||
Result := False;
|
||||
|
||||
// this doesn't check points because a point is not in the PKT header so
|
||||
// we cannot compare it against the point aspect. maybe PKT 2.2 fixes
|
||||
// this? research it someday
|
||||
|
||||
For Count := 1 to 30 Do Begin
|
||||
Result := (bbsCfg.NetAddress[Count].Zone = Zone) And
|
||||
(bbsCfg.NetAddress[Count].Net = Net) And
|
||||
(bbsCfg.NetAddress[Count].Node = Node);
|
||||
Result := (bbsCfg.NetAddress[Count].Zone = Zone) And
|
||||
(bbsCfg.NetAddress[Count].Net = Net) And
|
||||
(bbsCfg.NetAddress[Count].Node = Node) And
|
||||
(bbsCfg.NetAddress[Count].Point = Point);
|
||||
|
||||
If Result Then Break;
|
||||
End;
|
||||
|
|
|
@ -342,7 +342,7 @@ Begin
|
|||
// IsNetMail := True;
|
||||
End;
|
||||
End;
|
||||
(*
|
||||
|
||||
If MsgText[MsgLines]^[1] = #1 Then Begin
|
||||
If Copy(MsgText[MsgLines]^, 2, 4) = 'INTL' Then
|
||||
Str2Addr(strWordGet(2, MsgText[MsgLines]^, ' '), MsgDest)
|
||||
|
@ -350,7 +350,7 @@ Begin
|
|||
If (Copy(MsgText[MsgLines]^, 2, 5) = 'MSGID') Then
|
||||
Str2Addr(strWordGet(2, MsgText[MsgLines]^, ' '), MsgOrig);
|
||||
End;
|
||||
*)
|
||||
|
||||
Inc (MsgSize, Length(MsgText[MsgLines]^));
|
||||
Inc (MsgLines);
|
||||
|
||||
|
|
|
@ -181,7 +181,7 @@ Var
|
|||
// if netmail is TO someone on this system do not export
|
||||
|
||||
If MBase.NetType = 3 Then
|
||||
If IsValidAKA(MsgBase^.GetDestAddr.Zone, MsgBase^.GetDestAddr.Net, MsgBase^.GetDestAddr.Node) Then
|
||||
If IsValidAKA(MsgBase^.GetDestAddr.Zone, MsgBase^.GetDestAddr.Net, MsgBase^.GetDestAddr.Node, MsgBase^.GetDestAddr.Point) Then
|
||||
Exit;
|
||||
|
||||
Log (2, '+', ' Export #' + strI2S(MsgBase^.GetMsgNum) + ' to ' + Addr2Str(EchoNode.Address));
|
||||
|
|
|
@ -86,6 +86,7 @@ Var
|
|||
CurTag : String;
|
||||
MBase : RecMessageBase;
|
||||
Count : LongInt;
|
||||
Route : RecEchoMailNode;
|
||||
Begin
|
||||
If Not PKT.Open(PktFN) Then Begin
|
||||
Log (3, '!', ' ' + JustFile(PktFN) + ' is not valid PKT');
|
||||
|
@ -93,7 +94,7 @@ Var
|
|||
Exit;
|
||||
End;
|
||||
|
||||
If Not IsValidAKA(PKT.PKTDest.Zone, PKT.PKTDest.Net, PKT.PKTDest.Node) Then Begin
|
||||
If Not IsValidAKA(PKT.PKTDest.Zone, PKT.PKTDest.Net, PKT.PKTDest.Node, 0) Then Begin
|
||||
Log (3, '!', ' ' + JustFile(PktFN) + ' does not match an AKA');
|
||||
|
||||
PKT.Close;
|
||||
|
@ -118,31 +119,44 @@ Var
|
|||
If PKT.MsgArea = 'NETMAIL' Then Begin
|
||||
|
||||
If Not ProcessedByAreaFix(PKT) Then
|
||||
If GetMBaseByNetZone (PKT.PKTHeader.DestZone, MBase) Then Begin
|
||||
For Count := 1 to ForwardSize Do
|
||||
If strUpper(strStripB(strWordGet(1, ForwardList[Count], ';'), ' ')) = strUpper(PKT.MsgTo) Then
|
||||
PKT.MsgTo := strStripB(strWordGet(2, ForwardList[Count], ';'), ' ');
|
||||
If IsValidAKA(PKT.MsgDest.Zone, PKT.MsgDest.Net, PKT.MsgDest.Node, PKT.MsgDest.Point) Then Begin
|
||||
|
||||
CurTag := '';
|
||||
If GetMBaseByNetZone(PKT.MsgDest.Zone, MBase) Then Begin
|
||||
For Count := 1 to ForwardSize Do
|
||||
If strUpper(strStripB(strWordGet(1, ForwardList[Count], ';'), ' ')) = strUpper(PKT.MsgTo) Then
|
||||
PKT.MsgTo := strStripB(strWordGet(2, ForwardList[Count], ';'), ' ');
|
||||
|
||||
If MsgBase <> NIL Then Begin
|
||||
MsgBase^.CloseMsgBase;
|
||||
CurTag := '';
|
||||
|
||||
Dispose (MsgBase, Done);
|
||||
If MsgBase <> NIL Then Begin
|
||||
MsgBase^.CloseMsgBase;
|
||||
|
||||
MsgBase := NIL;
|
||||
Dispose (MsgBase, Done);
|
||||
|
||||
MsgBase := NIL;
|
||||
End;
|
||||
|
||||
MessageBaseOpen (MsgBase, MBase);
|
||||
SavePKTMsgToBase (MsgBase, PKT, True);
|
||||
|
||||
Log (2, '+', ' Netmail from ' + PKT.MsgFrom + ' to ' + PKT.MsgTo);
|
||||
|
||||
Inc (TotalNet);
|
||||
End;
|
||||
|
||||
MessageBaseOpen(MsgBase, MBase);
|
||||
|
||||
SavePKTMsgToBase(MsgBase, PKT, True);
|
||||
|
||||
Log (2, '+', ' Netmail from ' + PKT.MsgFrom + ' to ' + PKT.MsgTo);
|
||||
|
||||
Inc (TotalNet);
|
||||
End Else
|
||||
Log (3, '!', ' No NETMAIL base for zone ' + strI2S(PKT.PKTHeader.DestZone));
|
||||
If GetNodeByRoute(PKT.MsgDest, Route) Then Begin
|
||||
If Route.Active Then Begin
|
||||
// generate outbound packet name etc etc
|
||||
// add Via to the bottom
|
||||
// write OUT file
|
||||
End;
|
||||
Log (1, '!', ' DEBUG Pass-through netmail located to ' + Addr2Str(Route.Address));
|
||||
End Else
|
||||
Log (2, '!', ' No netmail destination: ' + PKT.MsgTo + ' ' + Addr2Str(PKT.MsgDest));
|
||||
// option to toss to badmsg?
|
||||
End Else Begin
|
||||
// Echomail msg
|
||||
|
||||
If Dupes.IsDuplicate(PKT.MsgCRC) Then Begin
|
||||
Log (3, '!', ' Duplicate message found in ' + PKT.MsgArea);
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ Begin
|
|||
While Not Eof(InFile) Do Begin
|
||||
ReadLn(InFile, Str);
|
||||
|
||||
Str := strStripB(Str, ' ');
|
||||
Str := strReplace(strStripB(Str, ' '), #9, ' ');
|
||||
|
||||
If strWordGet(1, strUpper(Str), ' ') <> 'AREA' Then Continue;
|
||||
|
||||
|
@ -97,6 +97,9 @@ Begin
|
|||
FBase.CommentACS := INI.ReadString(Header_FILEBONE, 'acs_comment', '');
|
||||
FBase.SysopACS := INI.ReadString(Header_FILEBONE, 'acs_sysop', 's255');
|
||||
|
||||
FBase.FileName := strReplace(FBase.FileName, '/', '_');
|
||||
FBase.FileName := strReplace(FBase.FileName, '\', '_');
|
||||
|
||||
If INI.ReadString(Header_FILEBONE, 'free_files', '0') = '1' Then
|
||||
FBase.Flags := FBase.Flags OR FBFreeFiles;
|
||||
|
||||
|
|
|
@ -44,19 +44,13 @@ Begin
|
|||
While Not Eof(InFile) Do Begin
|
||||
ReadLn(InFile, Str);
|
||||
|
||||
Str := strStripB(Str, ' ');
|
||||
Str := strReplace(strStripB(Str, ' '), #9, ' ');
|
||||
|
||||
If (Str[1] = ';') or (Str = '') Then Continue;
|
||||
|
||||
TagName := strStripLow(strWordGet(1, Str, ' '));
|
||||
BaseName := strStripLow(strStripB(Copy(Str, Pos(' ', Str), 255), ' '));
|
||||
|
||||
// TagName := strReplace(TagName, '/', '_');
|
||||
// TagName := strReplace(TagName, '\', '_');
|
||||
|
||||
// If Pos(TagName, '/') > 0 Then Continue;
|
||||
// If Pos(TagName, '\') > 0 Then Continue;
|
||||
|
||||
ProcessStatus (BaseName, False);
|
||||
|
||||
If Not IsDupeMBase(TagName) Then Begin
|
||||
|
|
|
@ -86,8 +86,6 @@ End;
|
|||
Procedure DisposeClasses;
|
||||
Begin
|
||||
Session.Free;
|
||||
Keyboard.Free;
|
||||
Console.Free;
|
||||
End;
|
||||
|
||||
Var
|
||||
|
@ -457,7 +455,8 @@ Begin
|
|||
ExitProc := @ExitHandle;
|
||||
|
||||
If Session.ConfigMode Then Begin
|
||||
Session.NodeNum := 0;
|
||||
Session.NodeNum := 0;
|
||||
Session.User.ThisUser.Flags := Session.User.ThisUser.Flags XOR UserNoTimeout;
|
||||
|
||||
Console.SetWindowTitle ('Mystic Configuration');
|
||||
|
||||
|
|
|
@ -19,6 +19,10 @@ design elements/issues.
|
|||
|
||||
BUGS AND POSSIBLE ISSUES
|
||||
========================
|
||||
! FIDONET.NA import when tab separated causes problems
|
||||
! Zombie processes on MIS linux wait() needs to be called to acknowledge that
|
||||
a child is dead? try it...
|
||||
|
||||
- fidonet NA export
|
||||
- shift+c key in OSX does not work without shiftlock (rudi)?
|
||||
- need to add QWK network ID to all message bases (remove QWK net flag?)
|
||||
|
|
|
@ -3849,4 +3849,21 @@
|
|||
! Fixed a bug when using spaces in menu filenames which caused the menu
|
||||
editor to fail to edit, copy, and delete menus.
|
||||
|
||||
! When posting a text file to a netmail base using the MX menu command, the
|
||||
origin address was not begin AKA matched with the destination address.
|
||||
|
||||
! MIS telnet in Linux should no longer create zombie processes.
|
||||
|
||||
+ Inactivity timeout is now disabled when running Mystic with the -CFG
|
||||
option from the command line.
|
||||
|
||||
! MUTIL import of FIDONET.NA will now not blow up if you used tabs instead
|
||||
of spaces to separate echotag with description.
|
||||
|
||||
! MUTIL import of FIDOBONE.NA will now not blow up if you used tabs instead
|
||||
of spaces to separate tag with description.
|
||||
|
||||
! MUTIL import of FIDOBONE will now replace / and \ characters when
|
||||
calculating the datafile name, if they exist in the echotag.
|
||||
|
||||
<ALPHA 38 RELEASED>
|
||||
|
|
Loading…
Reference in New Issue