From ed75ed707d14fccbe150ba7d121ae89865ed1912 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Mon, 5 Mar 2018 02:12:54 +0000 Subject: [PATCH] Added controls to enable/configure the new SMTP/TLS and POP3/TLS features created so graciously by Deuce, or as I like to call him: Mr. Crypto. --- src/sbbs3/ctrl/MailCfgDlgUnit.cpp | 62 +++++++++++------ src/sbbs3/ctrl/MailCfgDlgUnit.dfm | 109 +++++++++++++++++++++--------- src/sbbs3/ctrl/MailCfgDlgUnit.h | 9 ++- 3 files changed, 127 insertions(+), 53 deletions(-) diff --git a/src/sbbs3/ctrl/MailCfgDlgUnit.cpp b/src/sbbs3/ctrl/MailCfgDlgUnit.cpp index a270b344ef..c700ba4235 100644 --- a/src/sbbs3/ctrl/MailCfgDlgUnit.cpp +++ b/src/sbbs3/ctrl/MailCfgDlgUnit.cpp @@ -90,7 +90,7 @@ void __fastcall TMailCfgDlg::FormShow(TObject *Sender) if(MainForm->mail_startup.max_msg_size == 0) MaxMsgSizeEdit->Text="N/A"; else - MaxMsgSizeEdit->Text=AnsiString(MainForm->mail_startup.max_msg_size); + MaxMsgSizeEdit->Text=AnsiString(byte_count_to_str(MainForm->mail_startup.max_msg_size, str, sizeof(str))); if(MainForm->mail_startup.max_msgs_waiting == 0) MaxMsgsWaitingEdit->Text="N/A"; else @@ -105,6 +105,7 @@ void __fastcall TMailCfgDlg::FormShow(TObject *Sender) HostnameCheckBox->Checked =!(MainForm->mail_startup.options&MAIL_OPT_NO_HOST_LOOKUP); UseSubPortCheckBox->Checked=MainForm->mail_startup.options&MAIL_OPT_USE_SUBMISSION_PORT; + TLSSubPortCheckBox->Checked=MainForm->mail_startup.options&MAIL_OPT_TLS_SUBMISSION; DefCharsetEdit->Text=AnsiString(MainForm->mail_startup.default_charset); RelayServerEdit->Text=AnsiString(MainForm->mail_startup.relay_server); @@ -112,7 +113,9 @@ void __fastcall TMailCfgDlg::FormShow(TObject *Sender) RelayAuthPassEdit->Text=AnsiString(MainForm->mail_startup.relay_pass); SMTPPortEdit->Text=AnsiString(MainForm->mail_startup.smtp_port); SubPortEdit->Text=AnsiString(MainForm->mail_startup.submission_port); + TLSSubPortEdit->Text=AnsiString(MainForm->mail_startup.submissions_port); POP3PortEdit->Text=AnsiString(MainForm->mail_startup.pop3_port); + TLSPOP3PortEdit->Text=AnsiString(MainForm->mail_startup.pop3s_port); RelayPortEdit->Text=AnsiString(MainForm->mail_startup.relay_port); if(isalnum(MainForm->mail_startup.dns_server[0])) DNSServerEdit->Text=AnsiString(MainForm->mail_startup.dns_server); @@ -139,6 +142,8 @@ void __fastcall TMailCfgDlg::FormShow(TObject *Sender) =!(MainForm->mail_startup.options&MAIL_OPT_NO_NOTIFY); POP3EnabledCheckBox->Checked=MainForm->mail_startup.options &MAIL_OPT_ALLOW_POP3; + TLSPOP3EnabledCheckBox->Checked=MainForm->mail_startup.options + &MAIL_OPT_TLS_POP3; POP3LogCheckBox->Checked=MainForm->mail_startup.options &MAIL_OPT_DEBUG_POP3; RelayRadioButton->Checked=MainForm->mail_startup.options @@ -154,8 +159,6 @@ void __fastcall TMailCfgDlg::FormShow(TObject *Sender) UserNumberCheckBox->Checked=MainForm->mail_startup.options &MAIL_OPT_ALLOW_RX_BY_NUMBER; #endif - AllowRelayCheckBox->Checked=MainForm->mail_startup.options - &MAIL_OPT_ALLOW_RELAY; AuthViaIpCheckBox->Checked=MainForm->mail_startup.options &MAIL_OPT_SMTP_AUTH_VIA_IP; if(MainForm->mail_startup.options&MAIL_OPT_DNSBL_REFUSE) @@ -183,6 +186,8 @@ void __fastcall TMailCfgDlg::FormShow(TObject *Sender) =(MainForm->mail_startup.options&MAIL_OPT_ALLOW_RX_BY_NUMBER); AdvancedCheckListBox->Checked[i++] =(MainForm->mail_startup.options&MAIL_OPT_ALLOW_SYSOP_ALIASES); + AdvancedCheckListBox->Checked[i++] + =(MainForm->mail_startup.options&MAIL_OPT_ALLOW_RELAY); AdvancedCheckListBox->Checked[i++] =(MainForm->mail_startup.options&MAIL_OPT_DNSBL_CHKRECVHDRS); @@ -197,9 +202,9 @@ void __fastcall TMailCfgDlg::FormShow(TObject *Sender) DNSRadioButtonClick(Sender); POP3EnabledCheckBoxClick(Sender); SendMailCheckBoxClick(Sender); - AllowRelayCheckBoxClick(Sender); RelayAuthRadioButtonClick(Sender); UseSubPortCheckBoxClick(Sender); + TLSSubPortCheckBoxClick(Sender); PageControl->ActivePage=GeneralTabSheet; } //--------------------------------------------------------------------------- @@ -218,12 +223,14 @@ void __fastcall TMailCfgDlg::OKBtnClick(TObject *Sender) MainForm->mail_startup.smtp_port=SMTPPortEdit->Text.ToIntDef(IPPORT_SMTP); MainForm->mail_startup.submission_port=SubPortEdit->Text.ToIntDef(IPPORT_SUBMISSION); + MainForm->mail_startup.submissions_port=TLSSubPortEdit->Text.ToIntDef(IPPORT_SUBMISSIONS); MainForm->mail_startup.pop3_port=POP3PortEdit->Text.ToIntDef(IPPORT_POP3); + MainForm->mail_startup.pop3s_port=TLSPOP3PortEdit->Text.ToIntDef(IPPORT_POP3S); MainForm->mail_startup.relay_port=RelayPortEdit->Text.ToIntDef(IPPORT_SMTP); MainForm->mail_startup.max_clients=MaxClientsEdit->Text.ToIntDef(MAIL_DEFAULT_MAX_CLIENTS); MainForm->mail_startup.max_inactivity=MaxInactivityEdit->Text.ToIntDef(MAIL_DEFAULT_MAX_INACTIVITY); MainForm->mail_startup.max_recipients=MaxRecipientsEdit->Text.ToIntDef(MAIL_DEFAULT_MAX_RECIPIENTS); - MainForm->mail_startup.max_msg_size=MaxMsgSizeEdit->Text.ToIntDef(0); + MainForm->mail_startup.max_msg_size=parse_byte_count(MaxMsgSizeEdit->Text.c_str(), 1); MainForm->mail_startup.max_msgs_waiting=MaxMsgsWaitingEdit->Text.ToIntDef(0); MainForm->mail_startup.max_delivery_attempts=DeliveryAttemptsEdit->Text.ToIntDef(MAIL_DEFAULT_MAX_DELIVERY_ATTEMPTS); MainForm->mail_startup.rescan_frequency=RescanFreqEdit->Text.ToIntDef(MAIL_DEFAULT_RESCAN_FREQUENCY); @@ -287,14 +294,14 @@ void __fastcall TMailCfgDlg::OKBtnClick(TObject *Sender) MainForm->mail_startup.options|=MAIL_OPT_ALLOW_POP3; else MainForm->mail_startup.options&=~MAIL_OPT_ALLOW_POP3; + if(TLSPOP3EnabledCheckBox->Checked==true) + MainForm->mail_startup.options|=MAIL_OPT_TLS_POP3; + else + MainForm->mail_startup.options&=~MAIL_OPT_TLS_POP3; if(POP3LogCheckBox->Checked==true) MainForm->mail_startup.options|=MAIL_OPT_DEBUG_POP3; else MainForm->mail_startup.options&=~MAIL_OPT_DEBUG_POP3; - if(AllowRelayCheckBox->Checked==true) - MainForm->mail_startup.options|=MAIL_OPT_ALLOW_RELAY; - else - MainForm->mail_startup.options&=~MAIL_OPT_ALLOW_RELAY; if(AuthViaIpCheckBox->Checked==true) MainForm->mail_startup.options|=MAIL_OPT_SMTP_AUTH_VIA_IP; else @@ -303,6 +310,10 @@ void __fastcall TMailCfgDlg::OKBtnClick(TObject *Sender) MainForm->mail_startup.options|=MAIL_OPT_USE_SUBMISSION_PORT; else MainForm->mail_startup.options&=~MAIL_OPT_USE_SUBMISSION_PORT; + if(TLSSubPortCheckBox->Checked==true) + MainForm->mail_startup.options|=MAIL_OPT_TLS_SUBMISSION; + else + MainForm->mail_startup.options&=~MAIL_OPT_TLS_SUBMISSION; /* DNSBL */ MainForm->mail_startup.options&= @@ -344,6 +355,9 @@ void __fastcall TMailCfgDlg::OKBtnClick(TObject *Sender) setBit(&MainForm->mail_startup.options ,MAIL_OPT_ALLOW_SYSOP_ALIASES ,AdvancedCheckListBox->Checked[i++]); + setBit(&MainForm->mail_startup.options + ,MAIL_OPT_ALLOW_RELAY + ,AdvancedCheckListBox->Checked[i++]); setBit(&MainForm->mail_startup.options ,MAIL_OPT_DNSBL_CHKRECVHDRS ,AdvancedCheckListBox->Checked[i++]); @@ -392,10 +406,15 @@ void __fastcall TMailCfgDlg::POP3EnabledCheckBoxClick(TObject *Sender) { POP3PortEdit->Enabled=POP3EnabledCheckBox->Checked; POP3PortLabel->Enabled=POP3EnabledCheckBox->Checked; - POP3SoundEdit->Enabled=POP3EnabledCheckBox->Checked; - POP3SoundLabel->Enabled=POP3EnabledCheckBox->Checked; - POP3SoundButton->Enabled=POP3EnabledCheckBox->Checked; - POP3LogCheckBox->Enabled=POP3EnabledCheckBox->Checked; + TLSPOP3PortEdit->Enabled=POP3EnabledCheckBox->Checked; + TLSPOP3PortLabel->Enabled=POP3EnabledCheckBox->Checked; + + bool enabled = POP3EnabledCheckBox->Checked || TLSPOP3EnabledCheckBox->Checked; + + POP3SoundEdit->Enabled = enabled; + POP3SoundLabel->Enabled = enabled; + POP3SoundButton->Enabled = enabled; + POP3LogCheckBox->Enabled = enabled; } //--------------------------------------------------------------------------- @@ -462,13 +481,6 @@ void __fastcall TMailCfgDlg::DNSBLExemptionsButtonClick(TObject *Sender) delete TextFileEditForm; } //--------------------------------------------------------------------------- - -void __fastcall TMailCfgDlg::AllowRelayCheckBoxClick(TObject *Sender) -{ - AuthViaIpCheckBox->Enabled=AllowRelayCheckBox->Checked; -} -//--------------------------------------------------------------------------- - void __fastcall TMailCfgDlg::RelayAuthRadioButtonClick(TObject *Sender) { bool enabled = !RelayAuthNoneRadioButton->Checked; @@ -490,3 +502,13 @@ void __fastcall TMailCfgDlg::UseSubPortCheckBoxClick(TObject *Sender) //--------------------------------------------------------------------------- +void __fastcall TMailCfgDlg::TLSSubPortCheckBoxClick(TObject *Sender) +{ + bool enabled = TLSSubPortCheckBox->Checked; + + TLSSubPortLabel->Enabled = enabled; + TLSSubPortEdit->Enabled = enabled; + +} +//--------------------------------------------------------------------------- + diff --git a/src/sbbs3/ctrl/MailCfgDlgUnit.dfm b/src/sbbs3/ctrl/MailCfgDlgUnit.dfm index 788243ec09..a835364c81 100644 --- a/src/sbbs3/ctrl/MailCfgDlgUnit.dfm +++ b/src/sbbs3/ctrl/MailCfgDlgUnit.dfm @@ -1,6 +1,6 @@ object MailCfgDlg: TMailCfgDlg - Left = 516 - Top = 157 + Left = 1213 + Top = 393 BorderStyle = bsDialog Caption = 'Mail Server Configuration' ClientHeight = 246 @@ -53,8 +53,8 @@ object MailCfgDlg: TMailCfgDlg Top = 3 Width = 278 Height = 199 - ActivePage = AdvancedTabSheet - TabIndex = 7 + ActivePage = SMTPTabSheet + TabIndex = 1 TabOrder = 3 object GeneralTabSheet: TTabSheet Caption = 'General' @@ -232,11 +232,11 @@ object MailCfgDlg: TMailCfgDlg Width = 85 Height = 19 AutoSize = False - Caption = 'Transfer Port' + Caption = 'TCP Port' end object DefaultUserLabel: TLabel Left = 7 - Top = 88 + Top = 114 Width = 85 Height = 19 AutoSize = False @@ -244,7 +244,7 @@ object MailCfgDlg: TMailCfgDlg end object MaxRecipientsLabel: TLabel Left = 157 - Top = 62 + Top = 88 Width = 84 Height = 19 AutoSize = False @@ -252,7 +252,7 @@ object MailCfgDlg: TMailCfgDlg end object MaxMsgSizeLabel: TLabel Left = 7 - Top = 62 + Top = 88 Width = 85 Height = 19 AutoSize = False @@ -260,12 +260,20 @@ object MailCfgDlg: TMailCfgDlg end object SubPortLabel: TLabel Left = 7 - Top = 36 + Top = 60 Width = 85 Height = 19 AutoSize = False Caption = 'Submission Port' end + object TLSSubPortLabel: TLabel + Left = 7 + Top = 36 + Width = 85 + Height = 19 + AutoSize = False + Caption = 'TLS Port' + end object SMTPPortEdit: TEdit Left = 92 Top = 10 @@ -278,7 +286,7 @@ object MailCfgDlg: TMailCfgDlg end object DefaultUserEdit: TEdit Left = 92 - Top = 88 + Top = 114 Width = 143 Height = 21 Hint = @@ -288,21 +296,9 @@ object MailCfgDlg: TMailCfgDlg ShowHint = True TabOrder = 6 end - object AllowRelayCheckBox: TCheckBox - Left = 7 - Top = 116 - Width = 234 - Height = 19 - Hint = 'Allow authenticated users to relay mail through this server' - Caption = 'Allow Authenticated Users to Relay Mail' - ParentShowHint = False - ShowHint = True - TabOrder = 7 - OnClick = AllowRelayCheckBoxClick - end object MaxRecipientsEdit: TEdit Left = 241 - Top = 62 + Top = 88 Width = 26 Height = 21 Hint = 'Maximum number of recipients for a single message' @@ -312,7 +308,7 @@ object MailCfgDlg: TMailCfgDlg end object MaxMsgSizeEdit: TEdit Left = 92 - Top = 62 + Top = 88 Width = 58 Height = 21 Hint = 'Maximum received message size (in bytes)' @@ -331,7 +327,7 @@ object MailCfgDlg: TMailCfgDlg Caption = 'Allow Authentication via POP3, Telnet, etc.' ParentShowHint = False ShowHint = True - TabOrder = 8 + TabOrder = 7 end object NotifyCheckBox: TCheckBox Left = 150 @@ -346,7 +342,7 @@ object MailCfgDlg: TMailCfgDlg end object SubPortEdit: TEdit Left = 92 - Top = 36 + Top = 60 Width = 39 Height = 21 Hint = 'TCP port number for incoming SMTP submissions (default=587)' @@ -356,14 +352,34 @@ object MailCfgDlg: TMailCfgDlg end object UseSubPortCheckBox: TCheckBox Left = 150 - Top = 36 + Top = 60 Width = 117 - Height = 14 + Height = 19 Hint = 'Enable the SMTP submission port' Caption = 'Enabled' TabOrder = 3 OnClick = UseSubPortCheckBoxClick end + object TLSSubPortEdit: TEdit + Left = 92 + Top = 36 + Width = 39 + Height = 21 + Hint = 'TCP port number for incoming SMTP/TLS submissions' + ParentShowHint = False + ShowHint = True + TabOrder = 8 + end + object TLSSubPortCheckBox: TCheckBox + Left = 150 + Top = 36 + Width = 117 + Height = 19 + Hint = 'Enable the SMTP/TLS submission port' + Caption = 'Enabled' + TabOrder = 9 + OnClick = TLSSubPortCheckBoxClick + end end object POP3TabSheet: TTabSheet Caption = 'POP3' @@ -374,7 +390,15 @@ object MailCfgDlg: TMailCfgDlg Width = 83 Height = 19 AutoSize = False - Caption = 'Listening Port' + Caption = 'TCP Port' + end + object TLSPOP3PortLabel: TLabel + Left = 7 + Top = 36 + Width = 83 + Height = 19 + AutoSize = False + Caption = 'TLS Port' end object POP3PortEdit: TEdit Left = 92 @@ -388,7 +412,7 @@ object MailCfgDlg: TMailCfgDlg end object POP3LogCheckBox: TCheckBox Left = 150 - Top = 10 + Top = 62 Width = 57 Height = 19 Hint = 'Log all POP3 user activity' @@ -398,7 +422,7 @@ object MailCfgDlg: TMailCfgDlg TabOrder = 1 end object POP3EnabledCheckBox: TCheckBox - Left = 208 + Left = 150 Top = 10 Width = 66 Height = 19 @@ -409,6 +433,28 @@ object MailCfgDlg: TMailCfgDlg TabOrder = 2 OnClick = POP3EnabledCheckBoxClick end + object TLSPOP3PortEdit: TEdit + Left = 92 + Top = 36 + Width = 39 + Height = 21 + Hint = 'TCP port number for incoming POP3S connections' + ParentShowHint = False + ShowHint = True + TabOrder = 3 + end + object TLSPOP3EnabledCheckBox: TCheckBox + Left = 150 + Top = 36 + Width = 66 + Height = 19 + Hint = 'Enable the TLS POP3 port' + Caption = 'Enabled' + ParentShowHint = False + ShowHint = True + TabOrder = 4 + OnClick = POP3EnabledCheckBoxClick + end end object SendMailTabSheet: TTabSheet Caption = 'SendMail' @@ -916,6 +962,7 @@ object MailCfgDlg: TMailCfgDlg 'Retain received mail files (in temp directory)' 'Allow receipt of mail by user number' 'Allow receipt of mail to '#39'sysop'#39' and '#39'postmaster'#39 + 'Allow authenticated users to relay mail' 'Check '#39'Received'#39' header fields against DNSBL' 'Throttle DNS blacklisted server sessions' 'Auto-exempt sent-mail recipients from DNSBL' diff --git a/src/sbbs3/ctrl/MailCfgDlgUnit.h b/src/sbbs3/ctrl/MailCfgDlgUnit.h index f078e89037..c2138faac3 100644 --- a/src/sbbs3/ctrl/MailCfgDlgUnit.h +++ b/src/sbbs3/ctrl/MailCfgDlgUnit.h @@ -100,7 +100,6 @@ __published: TCheckBox *SendMailCheckBox; TLabel *DefaultUserLabel; TEdit *DefaultUserEdit; - TCheckBox *AllowRelayCheckBox; TTabSheet *DNSBLTabSheet; TButton *DNSBLServersButton; TLabel *Label1; @@ -151,6 +150,12 @@ __published: TEdit *MaxMsgsWaitingEdit; TLabel *ConnectTimeoutLabel; TEdit *ConnectTimeoutEdit; + TLabel *TLSSubPortLabel; + TEdit *TLSSubPortEdit; + TCheckBox *TLSSubPortCheckBox; + TLabel *TLSPOP3PortLabel; + TEdit *TLSPOP3PortEdit; + TCheckBox *TLSPOP3EnabledCheckBox; void __fastcall InboundSoundButtonClick(TObject *Sender); void __fastcall OutboundSoundButtonClick(TObject *Sender); void __fastcall FormShow(TObject *Sender); @@ -162,9 +167,9 @@ __published: void __fastcall DNSBLRadioButtonClick(TObject *Sender); void __fastcall DNSBLServersButtonClick(TObject *Sender); void __fastcall DNSBLExemptionsButtonClick(TObject *Sender); - void __fastcall AllowRelayCheckBoxClick(TObject *Sender); void __fastcall RelayAuthRadioButtonClick(TObject *Sender); void __fastcall UseSubPortCheckBoxClick(TObject *Sender); + void __fastcall TLSSubPortCheckBoxClick(TObject *Sender); private: public: virtual __fastcall TMailCfgDlg(TComponent* AOwner); -- GitLab