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