diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp index 1d3401112db9be12f6969bbe7e28e3a98aae4c2f..0bbb3509d1baf6987ff686750627ec7c0849571a 100644 --- a/src/sbbs3/ctrl/MainFormUnit.cpp +++ b/src/sbbs3/ctrl/MainFormUnit.cpp @@ -480,7 +480,9 @@ __fastcall TMainForm::TMainForm(TComponent* Owner) bbs_startup.first_node=1; bbs_startup.last_node=4; bbs_startup.telnet_port=IPPORT_TELNET; - bbs_startup.interface_addr=INADDR_ANY; + bbs_startup.telnet_interface=INADDR_ANY; + bbs_startup.rlogin_port=513; + bbs_startup.rlogin_interface=INADDR_ANY; bbs_startup.lputs=bbs_lputs; bbs_startup.status=bbs_status; bbs_startup.clients=bbs_clients; @@ -672,9 +674,11 @@ void __fastcall TMainForm::SaveSettings(void) Registry->WriteInteger("MailLogFile",MailLogFile); Registry->WriteInteger("FtpLogFile",FtpLogFile); - Registry->WriteInteger("TelnetInterface",bbs_startup.interface_addr); + Registry->WriteInteger("TelnetInterface",bbs_startup.telnet_interface); + Registry->WriteInteger("RLoginInterface",bbs_startup.rlogin_interface); Registry->WriteInteger("TelnetPort",bbs_startup.telnet_port); + Registry->WriteInteger("RLoginPort",bbs_startup.rlogin_port); Registry->WriteInteger("FirstNode",bbs_startup.first_node); Registry->WriteInteger("LastNode",bbs_startup.last_node); @@ -1225,10 +1229,14 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) FtpLogFile=true; if(Registry->ValueExists("TelnetInterface")) - bbs_startup.interface_addr=Registry->ReadInteger("TelnetInterface"); + bbs_startup.telnet_interface=Registry->ReadInteger("TelnetInterface"); + if(Registry->ValueExists("RLoginInterface")) + bbs_startup.rlogin_interface=Registry->ReadInteger("RLoginInterface"); if(Registry->ValueExists("TelnetPort")) bbs_startup.telnet_port=Registry->ReadInteger("TelnetPort"); + if(Registry->ValueExists("RLoginPort")) + bbs_startup.rlogin_port=Registry->ReadInteger("RLoginPort"); if(Registry->ValueExists("FirstNode")) bbs_startup.first_node=Registry->ReadInteger("FirstNode"); diff --git a/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp b/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp index db865d33980e41123c062ba223c85d0b770fb3e1..988a2e89dc0ac527de2858a4306774b01643bfdf 100644 --- a/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp +++ b/src/sbbs3/ctrl/TelnetCfgDlgUnit.cpp @@ -38,6 +38,7 @@ #pragma hdrstop #include "MainFormUnit.h" +#include "TextFileEditUnit.h" #include "TelnetCfgDlgUnit.h" #include <stdio.h> // sprintf() #include <mmsystem.h> // sndPlaySound() @@ -54,18 +55,31 @@ void __fastcall TTelnetCfgDlg::FormShow(TObject *Sender) { char str[128]; - if(MainForm->bbs_startup.interface_addr==0) - NetworkInterfaceEdit->Text="<ANY>"; + if(MainForm->bbs_startup.telnet_interface==0) + TelnetInterfaceEdit->Text="<ANY>"; else { sprintf(str,"%d.%d.%d.%d" - ,(MainForm->bbs_startup.interface_addr>>24)&0xff - ,(MainForm->bbs_startup.interface_addr>>16)&0xff - ,(MainForm->bbs_startup.interface_addr>>8)&0xff - ,MainForm->bbs_startup.interface_addr&0xff + ,(MainForm->bbs_startup.telnet_interface>>24)&0xff + ,(MainForm->bbs_startup.telnet_interface>>16)&0xff + ,(MainForm->bbs_startup.telnet_interface>>8)&0xff + ,MainForm->bbs_startup.telnet_interface&0xff ); - NetworkInterfaceEdit->Text=AnsiString(str); + TelnetInterfaceEdit->Text=AnsiString(str); + } + if(MainForm->bbs_startup.rlogin_interface==0) + RLoginInterfaceEdit->Text="<ANY>"; + else { + sprintf(str,"%d.%d.%d.%d" + ,(MainForm->bbs_startup.rlogin_interface>>24)&0xff + ,(MainForm->bbs_startup.rlogin_interface>>16)&0xff + ,(MainForm->bbs_startup.rlogin_interface>>8)&0xff + ,MainForm->bbs_startup.rlogin_interface&0xff + ); + RLoginInterfaceEdit->Text=AnsiString(str); } TelnetPortEdit->Text=AnsiString((int)MainForm->bbs_startup.telnet_port); + RLoginPortEdit->Text=AnsiString((int)MainForm->bbs_startup.rlogin_port); + FirstNodeEdit->Text=AnsiString((int)MainForm->bbs_startup.first_node); LastNodeEdit->Text=AnsiString((int)MainForm->bbs_startup.last_node); AutoStartCheckBox->Checked=MainForm->SysAutoStart; @@ -77,7 +91,12 @@ void __fastcall TTelnetCfgDlg::FormShow(TObject *Sender) AutoLogonCheckBox->Checked=MainForm->bbs_startup.options&BBS_OPT_AUTO_LOGON; HostnameCheckBox->Checked =!(MainForm->bbs_startup.options&BBS_OPT_NO_HOST_LOOKUP); + RLoginEnabledCheckBox->Checked + =MainForm->bbs_startup.options&BBS_OPT_ALLOW_RLOGIN; + RLogin2ndNameCheckBox->Checked + =MainForm->bbs_startup.options&BBS_OPT_USE_2ND_RLOGIN; + RLoginEnabledCheckBoxClick(Sender); PageControl->ActivePage=GeneralTabSheet; } //--------------------------------------------------------------------------- @@ -88,7 +107,26 @@ void __fastcall TTelnetCfgDlg::OKBtnClick(TObject *Sender) DWORD addr; sprintf(str,"%.*s",sizeof(str)-1 - ,NetworkInterfaceEdit->Text.c_str()); + ,TelnetInterfaceEdit->Text.c_str()); + p=str; + while(*p && *p<=' ') p++; + if(*p && isdigit(*p)) { + addr=atoi(p)<<24; + while(*p && *p!='.') p++; + if(*p=='.') p++; + addr|=atoi(p)<<16; + while(*p && *p!='.') p++; + if(*p=='.') p++; + addr|=atoi(p)<<8; + while(*p && *p!='.') p++; + if(*p=='.') p++; + addr|=atoi(p); + MainForm->bbs_startup.telnet_interface=addr; + } else + MainForm->bbs_startup.telnet_interface=0; + + sprintf(str,"%.*s",sizeof(str)-1 + ,RLoginInterfaceEdit->Text.c_str()); p=str; while(*p && *p<=' ') p++; if(*p && isdigit(*p)) { @@ -102,10 +140,13 @@ void __fastcall TTelnetCfgDlg::OKBtnClick(TObject *Sender) while(*p && *p!='.') p++; if(*p=='.') p++; addr|=atoi(p); - MainForm->bbs_startup.interface_addr=addr; + MainForm->bbs_startup.rlogin_interface=addr; } else - MainForm->bbs_startup.interface_addr=0; + MainForm->bbs_startup.rlogin_interface=0; + MainForm->bbs_startup.telnet_port=TelnetPortEdit->Text.ToIntDef(23); + MainForm->bbs_startup.rlogin_port=RLoginPortEdit->Text.ToIntDef(513); + MainForm->bbs_startup.first_node=FirstNodeEdit->Text.ToIntDef(1); MainForm->bbs_startup.last_node=LastNodeEdit->Text.ToIntDef(1); MainForm->SysAutoStart=AutoStartCheckBox->Checked; @@ -135,6 +176,14 @@ void __fastcall TTelnetCfgDlg::OKBtnClick(TObject *Sender) MainForm->bbs_startup.options|=BBS_OPT_NO_HOST_LOOKUP; else MainForm->bbs_startup.options&=~BBS_OPT_NO_HOST_LOOKUP; + if(RLoginEnabledCheckBox->Checked==true) + MainForm->bbs_startup.options|=BBS_OPT_ALLOW_RLOGIN; + else + MainForm->bbs_startup.options&=~BBS_OPT_ALLOW_RLOGIN; + if(RLoginEnabledCheckBox->Checked==true) + MainForm->bbs_startup.options|=BBS_OPT_USE_2ND_RLOGIN; + else + MainForm->bbs_startup.options&=~BBS_OPT_USE_2ND_RLOGIN; MainForm->SaveSettings(); } @@ -160,3 +209,26 @@ void __fastcall TTelnetCfgDlg::HangupSoundButtonClick(TObject *Sender) } //--------------------------------------------------------------------------- +void __fastcall TTelnetCfgDlg::RLoginEnabledCheckBoxClick(TObject *Sender) +{ + RLoginPortEdit->Enabled = RLoginEnabledCheckBox->Checked; + RLoginInterfaceEdit->Enabled = RLoginEnabledCheckBox->Checked; + RLoginIPallowButton->Enabled = RLoginEnabledCheckBox->Checked; + RLogin2ndNameCheckBox->Enabled = RLoginEnabledCheckBox->Checked; +} +//--------------------------------------------------------------------------- + +void __fastcall TTelnetCfgDlg::RLoginIPallowButtonClick(TObject *Sender) +{ + char filename[MAX_PATH]; + + sprintf(filename,"%sRLOGIN.CAN" + ,MainForm->cfg.text_dir); + Application->CreateForm(__classid(TTextFileEditForm), &TextFileEditForm); + TextFileEditForm->Filename=AnsiString(filename); + TextFileEditForm->Caption="Allowed IP addresses for RLogin"; + TextFileEditForm->ShowModal(); + delete TextFileEditForm; +} +//--------------------------------------------------------------------------- + diff --git a/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm b/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm index 102ec7863a2697f8e8f43c1907356935b72d42cc..b4cd891ed4b39672374fe6d12dee637dcd77a3fb 100644 --- a/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm +++ b/src/sbbs3/ctrl/TelnetCfgDlgUnit.dfm @@ -1,6 +1,6 @@ object TelnetCfgDlg: TTelnetCfgDlg - Left = 484 - Top = 622 + Left = 766 + Top = 707 BorderStyle = bsDialog Caption = 'Telnet Server Configuration' ClientHeight = 234 @@ -17,29 +17,13 @@ object TelnetCfgDlg: TTelnetCfgDlg Top = 3 Width = 278 Height = 186 - ActivePage = GeneralTabSheet + ActivePage = RLoginTabSheet TabOrder = 0 object GeneralTabSheet: TTabSheet Caption = 'General' - object InterfaceLabel: TLabel - Left = 7 - Top = 29 - Width = 78 - Height = 20 - AutoSize = False - Caption = 'Interface (IP)' - end - object TelnetPortLabel: TLabel - Left = 7 - Top = 55 - Width = 78 - Height = 20 - AutoSize = False - Caption = 'Listening Port' - end object FirstNodeLabel: TLabel Left = 7 - Top = 81 + Top = 10 Width = 78 Height = 20 AutoSize = False @@ -47,15 +31,15 @@ object TelnetCfgDlg: TTelnetCfgDlg end object LastNodeLabel: TLabel Left = 7 - Top = 107 - Width = 78 + Top = 36 + Width = 74 Height = 20 AutoSize = False Caption = 'Last Node' end object AutoStartCheckBox: TCheckBox - Left = 7 - Top = 5 + Left = 148 + Top = 10 Width = 117 Height = 19 Hint = 'Automatically start Telnet server' @@ -64,9 +48,82 @@ object TelnetCfgDlg: TTelnetCfgDlg ShowHint = True TabOrder = 0 end - object NetworkInterfaceEdit: TEdit + object FirstNodeEdit: TEdit + Left = 85 + Top = 10 + Width = 39 + Height = 21 + Hint = 'First node number available for Telnet logins' + ParentShowHint = False + ShowHint = True + TabOrder = 1 + end + object XtrnMinCheckBox: TCheckBox + Left = 148 + Top = 62 + Width = 117 + Height = 20 + Hint = 'External programs run in a minimized window' + Caption = 'Minimize Externals' + ParentShowHint = False + ShowHint = True + TabOrder = 2 + end + object LastNodeEdit: TEdit + Left = 85 + Top = 36 + Width = 39 + Height = 21 + Hint = 'Last node number available for Telnet logins' + ParentShowHint = False + ShowHint = True + TabOrder = 3 + end + object HostnameCheckBox: TCheckBox + Left = 148 + Top = 36 + Width = 117 + Height = 19 + Hint = 'Automatically lookup client'#39's hostnames via DNS' + Caption = 'Hostname Lookup' + ParentShowHint = False + ShowHint = True + TabOrder = 4 + end + end + object TelnetTabSheet: TTabSheet + Caption = 'Telnet' + ImageIndex = 1 + object InterfaceLabel: TLabel + Left = 7 + Top = 36 + Width = 78 + Height = 21 + AutoSize = False + Caption = 'Interface (IP)' + end + object TelnetPortLabel: TLabel + Left = 7 + Top = 10 + Width = 78 + Height = 21 + AutoSize = False + Caption = 'Listening Port' + end + object CmdLogCheckBox: TCheckBox + Left = 7 + Top = 88 + Width = 169 + Height = 21 + Hint = 'Log (debug) all received Telnet commands' + Caption = 'Log Received Commands' + ParentShowHint = False + ShowHint = True + TabOrder = 0 + end + object TelnetInterfaceEdit: TEdit Left = 85 - Top = 29 + Top = 36 Width = 156 Height = 21 Hint = @@ -78,7 +135,7 @@ object TelnetCfgDlg: TTelnetCfgDlg end object TelnetPortEdit: TEdit Left = 85 - Top = 55 + Top = 10 Width = 39 Height = 21 Hint = 'TCP port for incoming connections (default=23)' @@ -87,83 +144,98 @@ object TelnetCfgDlg: TTelnetCfgDlg TabOrder = 2 end object KeepAliveCheckBox: TCheckBox - Left = 148 - Top = 55 + Left = 7 + Top = 62 Width = 117 - Height = 20 + Height = 21 Hint = 'Instruct WinSock to keep your dial-up connection active' Caption = 'Send Keep-Alives' ParentShowHint = False ShowHint = True TabOrder = 3 end - object FirstNodeEdit: TEdit - Left = 85 - Top = 81 - Width = 39 - Height = 21 - Hint = 'First node number available for Telnet logins' + object AutoLogonCheckBox: TCheckBox + Left = 7 + Top = 114 + Width = 117 + Height = 19 + Hint = 'Allow V-exempt users to auto-logon based on their IP address' + Caption = 'AutoLogon via IP' ParentShowHint = False ShowHint = True TabOrder = 4 end - object XtrnMinCheckBox: TCheckBox - Left = 148 - Top = 80 - Width = 117 - Height = 20 - Hint = 'External programs run in a minimized window' - Caption = 'Minimize Externals' - ParentShowHint = False - ShowHint = True - TabOrder = 5 + end + object RLoginTabSheet: TTabSheet + Caption = 'RLogin' + ImageIndex = 3 + object Label1: TLabel + Left = 7 + Top = 10 + Width = 78 + Height = 21 + AutoSize = False + Caption = 'Listening Port' end - object LastNodeEdit: TEdit + object Label2: TLabel + Left = 7 + Top = 36 + Width = 78 + Height = 21 + AutoSize = False + Caption = 'Interface (IP)' + end + object RLoginPortEdit: TEdit Left = 85 - Top = 107 + Top = 10 Width = 39 Height = 21 - Hint = 'Last node number available for Telnet logins' + Hint = 'TCP port for incoming connections (default=513)' ParentShowHint = False ShowHint = True - TabOrder = 6 + TabOrder = 0 end - object AutoLogonCheckBox: TCheckBox - Left = 148 - Top = 106 - Width = 117 - Height = 19 - Hint = 'Allow V-exempt users to auto-logon based on their IP address' - Caption = 'AutoLogon via IP' + object RLoginInterfaceEdit: TEdit + Left = 85 + Top = 36 + Width = 156 + Height = 21 + Hint = + 'Enter your Network adapter'#39's static IP address here or blank for' + + ' <ANY>' ParentShowHint = False ShowHint = True - TabOrder = 7 + TabOrder = 1 end - object HostnameCheckBox: TCheckBox - Left = 148 - Top = 5 - Width = 117 - Height = 19 - Hint = 'Automatically lookup client'#39's hostnames via DNS' - Caption = 'Hostname Lookup' - ParentShowHint = False - ShowHint = True - TabOrder = 8 + object RLoginEnabledCheckBox: TCheckBox + Left = 184 + Top = 10 + Width = 73 + Height = 17 + Caption = 'Enabled' + TabOrder = 2 + OnClick = RLoginEnabledCheckBoxClick end - end - object LogTabSheet: TTabSheet - Caption = 'Log' - ImageIndex = 1 - object CmdLogCheckBox: TCheckBox + object RLoginIPallowButton: TButton + Left = 158 + Top = 62 + Width = 83 + Height = 21 + Hint = 'RLOGIN.CAN' + Caption = 'Allowed IPs' + TabOrder = 3 + OnClick = RLoginIPallowButtonClick + end + object RLogin2ndNameCheckBox: TCheckBox Left = 7 - Top = 5 - Width = 169 - Height = 19 - Hint = 'Log (debug) all received Telnet commands' - Caption = 'Received Commands' + Top = 62 + Width = 138 + Height = 21 + Hint = 'Instruct WinSock to keep your dial-up connection active' + Caption = 'Use 2nd Login Name' ParentShowHint = False ShowHint = True - TabOrder = 0 + TabOrder = 4 end end object SoundTabSheet: TTabSheet diff --git a/src/sbbs3/ctrl/TelnetCfgDlgUnit.h b/src/sbbs3/ctrl/TelnetCfgDlgUnit.h index 38db8d1748dfe5fa6a57d2ec1f946fe42c5581c3..f111cab4105f61359c87d72479d5ed5881691214 100644 --- a/src/sbbs3/ctrl/TelnetCfgDlgUnit.h +++ b/src/sbbs3/ctrl/TelnetCfgDlgUnit.h @@ -56,7 +56,7 @@ __published: TOpenDialog *OpenDialog; TPageControl *PageControl; TTabSheet *GeneralTabSheet; - TTabSheet *LogTabSheet; + TTabSheet *TelnetTabSheet; TTabSheet *SoundTabSheet; TLabel *AnswerSoundLabel; TEdit *AnswerSoundEdit; @@ -66,25 +66,35 @@ __published: TButton *HangupSoundButton; TCheckBox *CmdLogCheckBox; TCheckBox *AutoStartCheckBox; - TLabel *InterfaceLabel; - TEdit *NetworkInterfaceEdit; - TLabel *TelnetPortLabel; - TEdit *TelnetPortEdit; - TCheckBox *KeepAliveCheckBox; TLabel *FirstNodeLabel; TEdit *FirstNodeEdit; TCheckBox *XtrnMinCheckBox; TLabel *LastNodeLabel; TEdit *LastNodeEdit; - TCheckBox *AutoLogonCheckBox; TCheckBox *HostnameCheckBox; TButton *OKBtn; TButton *CancelBtn; TButton *ApplyBtn; + TLabel *InterfaceLabel; + TEdit *TelnetInterfaceEdit; + TLabel *TelnetPortLabel; + TEdit *TelnetPortEdit; + TCheckBox *KeepAliveCheckBox; + TCheckBox *AutoLogonCheckBox; + TTabSheet *RLoginTabSheet; + TLabel *Label1; + TEdit *RLoginPortEdit; + TLabel *Label2; + TEdit *RLoginInterfaceEdit; + TCheckBox *RLoginEnabledCheckBox; + TButton *RLoginIPallowButton; + TCheckBox *RLogin2ndNameCheckBox; void __fastcall FormShow(TObject *Sender); void __fastcall OKBtnClick(TObject *Sender); void __fastcall AnswerSoundButtonClick(TObject *Sender); void __fastcall HangupSoundButtonClick(TObject *Sender); + void __fastcall RLoginEnabledCheckBoxClick(TObject *Sender); + void __fastcall RLoginIPallowButtonClick(TObject *Sender); private: public: virtual __fastcall TTelnetCfgDlg(TComponent* AOwner);