diff --git a/mystic/bbs_database.pas b/mystic/bbs_database.pas index 640e081..0a1ed6f 100644 --- a/mystic/bbs_database.pas +++ b/mystic/bbs_database.pas @@ -700,4 +700,9 @@ Initialization Console := NIL; Keyboard := NIL; +Finalization + + If Assigned(Console) Then Console.Free; + If Assigned(Keyboard) Then Keyboard.Free; + End. diff --git a/mystic/bbs_msgbase.pas b/mystic/bbs_msgbase.pas index 3ecc5a0..7ae6bfc 100644 --- a/mystic/bbs_msgbase.pas +++ b/mystic/bbs_msgbase.pas @@ -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 diff --git a/mystic/mis.pas b/mystic/mis.pas index e2c13ab..0ce913c 100644 --- a/mystic/mis.pas +++ b/mystic/mis.pas @@ -534,8 +534,6 @@ Begin Console.WriteLine('ERROR: No servers are configured as active.'); NodeData.Free; - Keyboard.Free; - Console.Free; Halt(10); End; diff --git a/mystic/mutil.pas b/mystic/mutil.pas index 76e6f5c..c17d1f4 100644 --- a/mystic/mutil.pas +++ b/mystic/mutil.pas @@ -82,7 +82,6 @@ Begin BarOne.Free; BarAll.Free; INI.Free; - Console.Free; End; Procedure ApplicationStartup; diff --git a/mystic/mutil_common.pas b/mystic/mutil_common.pas index b56fd1c..5cad59e 100644 --- a/mystic/mutil_common.pas +++ b/mystic/mutil_common.pas @@ -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; diff --git a/mystic/mutil_echocore.pas b/mystic/mutil_echocore.pas index 632ad71..1851dd0 100644 --- a/mystic/mutil_echocore.pas +++ b/mystic/mutil_echocore.pas @@ -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); diff --git a/mystic/mutil_echoexport.pas b/mystic/mutil_echoexport.pas index ebbc001..3bfb13d 100644 --- a/mystic/mutil_echoexport.pas +++ b/mystic/mutil_echoexport.pas @@ -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)); diff --git a/mystic/mutil_echoimport.pas b/mystic/mutil_echoimport.pas index a297ce4..02909da 100644 --- a/mystic/mutil_echoimport.pas +++ b/mystic/mutil_echoimport.pas @@ -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); diff --git a/mystic/mutil_filebone.pas b/mystic/mutil_filebone.pas index fc28ffe..f673b28 100644 --- a/mystic/mutil_filebone.pas +++ b/mystic/mutil_filebone.pas @@ -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; diff --git a/mystic/mutil_importna.pas b/mystic/mutil_importna.pas index 94007d5..e34f683 100644 --- a/mystic/mutil_importna.pas +++ b/mystic/mutil_importna.pas @@ -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 diff --git a/mystic/mystic.pas b/mystic/mystic.pas index 81d3087..21e50ec 100644 --- a/mystic/mystic.pas +++ b/mystic/mystic.pas @@ -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'); diff --git a/mystic/todo.pas b/mystic/todo.pas index 4bdc26c..28673d7 100644 --- a/mystic/todo.pas +++ b/mystic/todo.pas @@ -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?) diff --git a/mystic/whatsnew.txt b/mystic/whatsnew.txt index 3ce7ca1..fec9be7 100644 --- a/mystic/whatsnew.txt +++ b/mystic/whatsnew.txt @@ -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. +