From 98f89449090eda0981b69ea5f51cf2d979f182c5 Mon Sep 17 00:00:00 2001 From: mysticbbs Date: Sat, 17 Aug 2013 22:06:47 -0400 Subject: [PATCH] A37 --- mystic/bbs_cfg_main.pas | 6 ++++- mystic/bbs_cfg_syscfg.pas | 32 ++++++++++++++++++++++ mystic/mis.pas | 44 ++++++++++++++++++++++-------- mystic/mis_common.pas | 13 +++++++++ mystic/mis_server.pas | 2 +- mystic/mpl_common.pas | 2 +- mystic/mpl_execute.pas | 57 ++++++++++++++++++++++++++++++--------- mystic/records.pas | 10 +++++-- mystic/todo.pas | 3 +++ mystic/whatsnew.txt | 27 ++++++++++++++++++- 10 files changed, 167 insertions(+), 29 deletions(-) diff --git a/mystic/bbs_cfg_main.pas b/mystic/bbs_cfg_main.pas index 1321a7d..33dab0a 100644 --- a/mystic/bbs_cfg_main.pas +++ b/mystic/bbs_cfg_main.pas @@ -204,7 +204,7 @@ Begin End; End; 2 : Begin - BoxOpen (25, 4, 53, 11); + BoxOpen (25, 4, 53, 13); CoolBoxOpen (24, 'Servers'); Form.AddNone ('I', ' I Internet Server Options', 26, 5, 26, 5, 27, ''); @@ -213,6 +213,8 @@ Begin Form.AddNone ('3', ' 3 POP3 Server Options', 26, 8, 26, 8, 27, ''); Form.AddNone ('4', ' 4 SMTP Server Options', 26, 9, 26, 9, 27, ''); Form.AddNone ('5', ' 5 NNTP Server Options', 26, 10, 26, 10, 27, ''); + Form.AddNone ('6', ' 6 BINKP Server Options', 26, 11, 26, 11, 27, ''); + Form.AddNone ('7', ' 7 FTN-FTP Server Options', 26, 12, 26, 12, 27, ''); Res := Form.Execute; MenuPos[2] := Form.ItemPos; @@ -232,6 +234,8 @@ Begin '3' : Configuration_POP3Server; '4' : Configuration_SMTPServer; '5' : Configuration_NNTPServer; + '6' : Configuration_BINKPServer; +// '7' : Configuration_FTNFTPServer; 'X' : Break; Else MenuPtr := 0; diff --git a/mystic/bbs_cfg_syscfg.pas b/mystic/bbs_cfg_syscfg.pas index bf568c0..e1d1f2d 100644 --- a/mystic/bbs_cfg_syscfg.pas +++ b/mystic/bbs_cfg_syscfg.pas @@ -16,6 +16,7 @@ Procedure Configuration_TelnetServer; Procedure Configuration_POP3Server; Procedure Configuration_SMTPServer; Procedure Configuration_NNTPServer; +Procedure Configuration_BINKPServer; Procedure Configuration_MessageSettings; Procedure Configuration_NewUser1Settings; Procedure Configuration_NewUser2Settings; @@ -387,6 +388,37 @@ Begin Box.Free; End; +Procedure Configuration_BINKPServer; +Var + Box : TAnsiMenuBox; + Form : TAnsiMenuForm; + Topic : String[80]; +Begin + Topic := '|03(|09BINKP Server|03) |01-|09> |15'; + + Box := TAnsiMenuBox.Create; + Form := TAnsiMenuForm.Create; + + Box.Header := ' BINKP Server '; + + Box.Open (27, 8, 53, 17); + + VerticalLine (45, 10, 15); + + Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @Config.inetBINKPUse, Topic + 'Enable BINKP server'); + Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @Config.inetBINKPPort, Topic + 'BINKP Server port'); + Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @Config.inetBINKPMax, Topic + 'Max Connections'); + Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @Config.inetBINKPDupes, Topic + 'Max connections with same IP'); + Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @Config.inetBINKPTimeout, Topic + 'Connection timeout (seconds)'); + Form.AddBol ('F', ' Force CRAM-MD5', 29, 15, 47, 15, 16, 3, @Config.inetBINKPCram5, Topic + 'Force CRAM-MD5 auth'); + + Form.Execute; + Form.Free; + + Box.Close; + Box.Free; +End; + Procedure Configuration_SMTPServer; Var Box : TAnsiMenuBox; diff --git a/mystic/mis.pas b/mystic/mis.pas index a3b5e42..5d69604 100644 --- a/mystic/mis.pas +++ b/mystic/mis.pas @@ -48,7 +48,8 @@ Uses MIS_Client_SMTP, MIS_Client_POP3, MIS_Client_FTP, - MIS_Client_NNTP; + MIS_Client_NNTP, + MIS_Client_BINKP; Const FocusTelnet = 0; @@ -56,7 +57,8 @@ Const FocusPOP3 = 2; FocusFTP = 3; FocusNNTP = 4; - FocusMax = 4; + FocusBINKP = 5; + FocusMax = 5; Var Keyboard : TInput; @@ -65,6 +67,7 @@ Var POP3Server : TServerManager; SMTPServer : TServerManager; NNTPServer : TServerManager; + BINKPServer : TServerManager; FocusPTR : TServerManager; FocusCurrent : Byte; TopPage : Integer; @@ -122,6 +125,7 @@ Begin FocusPOP3 : GetFocusPtr := POP3Server; FocusFTP : GetFocusPtr := FTPServer; FocusNNTP : GetFocusPtr := NNTPServer; + FocusBINKP : GetFocusPtr := BINKPServer; End; End; @@ -160,7 +164,8 @@ Begin 1, 2, 3, - 4: If (Count <= FocusPtr.ClientList.Count) And (FocusPtr.ClientList[Count - 1] <> NIL) Then Begin + 4, + 5 : If (Count <= FocusPtr.ClientList.Count) And (FocusPtr.ClientList[Count - 1] <> NIL) Then Begin Console.WriteXY (3, 3 + PosY, Attr, strPadL(strI2S(Count), 3, '0') + ' ' + strPadR(TFTPServer(FocusPtr.ClientList[Count - 1]).User.Handle, 31, ' ') + ' ' + @@ -219,17 +224,19 @@ Begin FocusPOP3 : If Pop3Server <> NIL Then Break; FocusFTP : If FtpServer <> NIL Then Break; FocusNNTP : If NNTPServer <> NIL Then Break; + FocusBINKP : If BINKPServer <> NIL Then Break; End; Until False; - Console.WriteXY (50, 1, 112, 'telnet/smtp/pop3/ftp/nntp/http'); + Console.WriteXY (49, 1, 112, 'telnet/smtp/pop3/ftp/nntp/binkp'); Case FocusCurrent of - FocusTelnet : Console.WriteXY (50, 1, 113, 'TELNET'); - FocusSMTP : Console.WriteXY (57, 1, 113, 'SMTP'); - FocusPOP3 : Console.WriteXY (62, 1, 113, 'POP3'); - FocusFTP : Console.WriteXY (67, 1, 113, 'FTP'); - FocusNNTP : Console.WriteXY (71, 1, 113, 'NNTP'); + FocusTelnet : Console.WriteXY (49, 1, 113, 'TELNET'); + FocusSMTP : Console.WriteXY (56, 1, 113, 'SMTP'); + FocusPOP3 : Console.WriteXY (61, 1, 113, 'POP3'); + FocusFTP : Console.WriteXY (66, 1, 113, 'FTP'); + FocusNNTP : Console.WriteXY (70, 1, 113, 'NNTP'); + FocusBINKP : Console.WriteXY (75, 1, 113, 'BINKP'); End; FocusPtr := GetFocusPtr; @@ -348,7 +355,9 @@ Begin TelnetServer := NIL; FTPServer := NIL; POP3Server := NIL; + SMTPServer := NIL; NNTPServer := NIL; + BINKPServer := NIL; NodeData := TNodeData.Create(bbsConfig.INetTNNodes); If bbsConfig.InetTNUse Then Begin @@ -396,6 +405,15 @@ Begin Result := True; End; + If bbsConfig.InetBINKPUse Then Begin + BINKPServer := TServerManager.Create(bbsConfig, bbsConfig.InetBINKPPort, bbsConfig.inetBINKPMax, NodeData, @CreateBINKP); + + BINKPServer.Server.FTelnetServer := False; + BINKPServer.ClientMaxIPs := bbsConfig.inetBINKPDupes; + + Result := True; + End; + {$IFDEF UNIX} SetUserOwner; {$ENDIF} @@ -451,6 +469,7 @@ Begin POP3Server.Free; FTPServer.Free; NNTPServer.Free; + BinkPServer.Free; NodeData.Free; Halt(0); End; @@ -487,6 +506,7 @@ Begin Repeat WaitMS(60000); // Heartbeat + // change to wait 45 and check for event Until False; End; {$ENDIF} @@ -518,8 +538,7 @@ Begin If Not ServerStartup Then Begin Console.ClearScreen; - Console.WriteLine('ERROR: No servers are configured as active. Run MYSTIC -CFG to configure'); - Console.WriteLine('Internet server options.'); + Console.WriteLine('ERROR: No servers are configured as active.'); NodeData.Free; Keyboard.Free; @@ -619,6 +638,9 @@ Begin Console.WriteStr (' NNTP'); NNTPServer.Free; + Console.WriteStr (' BINKP'); + BINKPServer.Free; + Console.WriteLine (' (DONE)'); NodeData.Free; diff --git a/mystic/mis_common.pas b/mystic/mis_common.pas index d7a4bcc..089965d 100644 --- a/mystic/mis_common.pas +++ b/mystic/mis_common.pas @@ -19,6 +19,7 @@ Var Function SearchForUser (UN: String; Var Rec: RecUser; Var RecPos: LongInt) : Boolean; Function CheckAccess (User: RecUser; IgnoreGroup: Boolean; Str: String) : Boolean; Function GetSecurityLevel (Level: Byte; SecLevel: RecSecurity) : Boolean; +Function strAddr2Str (Addr : RecEchoMailAddr) : String; Implementation @@ -214,4 +215,16 @@ Begin Result := True; End; +Function strAddr2Str (Addr : RecEchoMailAddr) : String; +Var + Temp : String[20]; +Begin + Temp := strI2S(Addr.Zone) + ':' + strI2S(Addr.Net) + '/' + + strI2S(Addr.Node); + + If Addr.Point <> 0 Then Temp := Temp + '.' + strI2S(Addr.Point); + + Result := Temp; +End; + End. diff --git a/mystic/mis_server.pas b/mystic/mis_server.pas index 4661fcc..3c6ca5e 100644 --- a/mystic/mis_server.pas +++ b/mystic/mis_server.pas @@ -206,7 +206,7 @@ Begin If Terminated Then Exit; If ClientMax = 0 Then - Status('WARNING: At least one server is configured with 0 max clients.'); + Status('WARNING: At least one server is configured 0 max clients'); Status('Opening server socket on port ' + strI2S(Port)); diff --git a/mystic/mpl_common.pas b/mystic/mpl_common.pas index 7bc2f33..b4c4e7f 100644 --- a/mystic/mpl_common.pas +++ b/mystic/mpl_common.pas @@ -376,7 +376,7 @@ Begin AddStr ({$IFDEF MPLPARSER} 'useremail', {$ENDIF} iString, 60); AddStr ({$IFDEF MPLPARSER} 'userinfo', {$ENDIF} iString, 30); - AddStr ({$IFDEF MPLPARSER} 'useropts', {$ENDIF} iString, 10 * 60 - 1); + AddStr ({$IFDEF MPLPARSER} 'useropts', {$ENDIF} iString, 10 * 61 - 1); CV[X]^.ArrPos := 1; {$IFNDEF MPLPARSER} CV[X]^.VarSize := 61; diff --git a/mystic/mpl_execute.pas b/mystic/mpl_execute.pas index 043fa66..2df1c2c 100644 --- a/mystic/mpl_execute.pas +++ b/mystic/mpl_execute.pas @@ -145,30 +145,54 @@ Uses {$IFDEF LOGGING} Procedure TInterpEngine.LogVarInformation (Num: LongInt); +Var + TypeStr : String; + DimStr : String; + Count : LongInt; Begin Session.SystemLog(' DUMP VAR ' + strI2S(Num)); + Case VarData[Num]^.vType of + iNone : TypeStr := 'None'; + iString : TypeStr := 'String'; + iChar : TypeStr := 'Char'; + iByte : TypeStr := 'Byte'; + iShort : TypeStr := 'Short'; + iWord : TypeStr := 'Word'; + iInteger : TypeStr := 'Integer'; + iLongInt : TypeStr := 'LongInt'; + iCardinal : TypeStr := 'Cardinal'; + iReal : TypeStr := 'Real'; + iBool : TypeStr := 'Boolean'; + iFile : TypeStr := 'File'; + iRecord : TypeStr := 'Record'; + iPointer : TypeStr := 'Pointer'; + Else + TypeStr := 'Unknown'; + End; + + DimStr := ''; + + For Count := 1 to VarData[Num]^.ArrPos Do Begin + If DimStr <> '' Then DimStr := DimStr + ','; + DimStr := DimStr + strI2S(VarData[Num]^.ArrDim[Count]); + End; + With VarData[Num]^ Do Begin Session.SystemLog(' ID: ' + strI2S(VarID)); - Session.SystemLog(' Type: ' + strI2S(Ord(vType))); + Session.SystemLog(' Type: ' + strI2S(Ord(vType)) + ', ' + TypeStr); Session.SystemLog(' DataSize: ' + strI2S(DataSize)); Session.SystemLog(' VarSize: ' + strI2S(VarSize)); Session.SystemLog(' Kill: ' + strI2S(Ord(Kill))); + Session.SystemLog(' ProcPos: ' + strI2S(ProcPos)); + Session.SystemLog(' NumParams: ' + strI2S(NumParams)); + Session.SystemLog(' ArrPos: ' + strI2S(ArrPos) + '(' + DimStr + ')'); If Data <> NIL Then Session.SystemLog(' Data: Assigned') Else Session.SystemLog(' Data: NIL'); End; - -// Params : Array[1..mplMaxProcParams] of Char; -// NumParams : Byte; -// pID : Array[1..mplMaxProcParams] of Word; -// ProcPos : LongInt; -// Data : PStack; -// ArrPos : Byte; -// ArrDims : TArrayInfo; - End; {$ENDIF} @@ -2405,8 +2429,8 @@ Begin Case TTokenOpsRec(Byte(Ch)) of {0} opBlockOpen : Begin -// PrevChar; -// Self.ExecuteBlock(CurVarNum); + //PrevChar; + //Self.ExecuteBlock(CurVarNum); End; {1} opBlockClose : Break; {2} opVarDeclare : DefineVariable; @@ -2564,6 +2588,11 @@ Begin Exit; End; + {$IFDEF LOGGING} + Session.SystemLog('-'); + Session.SystemLog('[!] BEGIN EXECUTION: ' + FN); + {$ENDIF} + InitProcedures (Owner, Self, VarData, CurVarNum, CurVarID, 0); ExecuteBlock (CurVarNum); @@ -2574,6 +2603,10 @@ Begin Session.io.AllowArrow := SavedArrow; Result := Ord(ReloadMenu) + 1; + + {$IFDEF LOGGING} + Session.SystemLog('[!] END EXECUTION: ' + FN); + {$ENDIF} End; Function ExecuteMPL (Owner: Pointer; Str: String) : Byte; diff --git a/mystic/records.pas b/mystic/records.pas index 8c3d3c7..70df126 100644 --- a/mystic/records.pas +++ b/mystic/records.pas @@ -23,7 +23,7 @@ Const mysSoftwareID = 'Mystic BBS'; mysCopyYear = '1997-2013'; // its been a long time! - mysVersion = '1.10 A36'; // current version + mysVersion = '1.10 A37'; // current version mysDataChanged = '1.10 A11'; // version of last records change {$IFDEF WIN32} @@ -327,7 +327,13 @@ Type //AllowEmailPWReset ForceNodeList : Boolean; inetInterface : String[23]; - Reserved : Array[1..787] of Char; + inetBINKPUse : Boolean; + inetBINKPPort : Word; + inetBINKPMax : Word; + inetBINKPDupes : Byte; + inetBINKPTimeOut: Word; + inetBINKPCram5 : Boolean; + Reserved : Array[1..778] of Char; End; Const diff --git a/mystic/todo.pas b/mystic/todo.pas index 6ed5bfa..781a205 100644 --- a/mystic/todo.pas +++ b/mystic/todo.pas @@ -32,6 +32,9 @@ BUGS AND POSSIBLE ISSUES FUTURE / IDEAS / WORK IN PROGRESS / NOTES ========================================= +- when mutil is tossing a packet and auto creates an area figure out if there + can be a way to automatically create the uplink back to the originating + node. - global user editor for user flags, def protocol, etc etc - ability to configure auto signatures (2 of them) one for handle and one for real names diff --git a/mystic/whatsnew.txt b/mystic/whatsnew.txt index 9fed86f..bac68df 100644 --- a/mystic/whatsnew.txt +++ b/mystic/whatsnew.txt @@ -3482,6 +3482,8 @@ ! Mystic should now will properly display the file base "display file" before listing files. + ! Date corruption with MUTIL echomail export has hopefully been fixed. + + MPL now has the ability to interface directly with internal Mystic BBS classes. This opens up a whole world of new possibilities in the future (for example) sockets, full remote ANSI screen library (boxes, listboxes) @@ -3515,6 +3517,29 @@ ! Once a default protocol was selected, the GE command (option 22) to change the default was not working. - + MPL now supports ANSI screen class. NEED TO DOCUMENT AND SHOW EXAMPLE + + MPL now supports ANSI screen class. This allows the ability to save and + restore portions of the user's screen. The example below saves the screen + coordinates defined as: X1:20, Y1:5, X2:60, Y2:10. It then clears the + screen and then restores the saved portion of the screen. + + Var SavedScreen : LongInt; + + ClassCreate (SavedScreen, 'image'); + ImageGet (SavedScreen, 20, 5, 60, 10); + + ClrScr; + WriteLn ('Press a key to restore'); + + Pause; + + ImagePut (SavedScreen); + ClassFree (SavedScreen); + + Pause; + + ! Fixed an issue with useropts variable in MPL which could cause memory + corruption. + + \ No newline at end of file