[1/2] mail.cgi: add support for implicit TLS usage

Message ID c63f3f2c-2c8e-b73f-b9dd-9872732a40b5@ipfire.org
State Superseded
Headers
Series [1/2] mail.cgi: add support for implicit TLS usage |

Commit Message

Peter Müller Jan. 31, 2020, 4:31 p.m. UTC
  Fixes #12161

Reported-by: Michael Tremer <michael.tremer@ipfire.org>
Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
---
 html/cgi-bin/mail.cgi | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)
  

Comments

Michael Tremer Feb. 3, 2020, 3:51 p.m. UTC | #1
Hi,

Unfortunately this does not execute. I cannot even load the page without submitting the form:

I have this in my errors log file:

exists argument is not a HASH or ARRAY element or a subroutine at /srv/web/ipfire/cgi-bin/mail.cgi line 159.
[Mon Feb 03 15:49:48.783276 2020] [cgid:error] [pid 5562:tid 128451449181952] [client 192.168.190.117:61657] End of script output before headers: mail.cgi, referer: https://192.168.190.1:444/

Best,
-Michael

> On 31 Jan 2020, at 16:31, Peter Müller <peter.mueller@ipfire.org> wrote:
> 
> Fixes #12161
> 
> Reported-by: Michael Tremer <michael.tremer@ipfire.org>
> Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
> ---
> html/cgi-bin/mail.cgi | 20 +++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
> 
> diff --git a/html/cgi-bin/mail.cgi b/html/cgi-bin/mail.cgi
> index 25589046e..8c1b2d4e4 100755
> --- a/html/cgi-bin/mail.cgi
> +++ b/html/cgi-bin/mail.cgi
> @@ -2,7 +2,7 @@
> ###############################################################################
> #                                                                             #
> # IPFire.org - A linux based firewall                                         #
> -# Copyright (C) 2015  IPFire Team  <alexander.marx@ipfire.org>                #
> +# Copyright (C) 2007-2020  IPFire Team  <info@ipfire.org>                     #
> #                                                                             #
> # This program is free software: you can redistribute it and/or modify        #
> # it under the terms of the GNU General Public License as published by        #
> @@ -110,8 +110,8 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}"){ #SaveButton on configsite
> 
> 		$dma{'SMARTHOST'}		= $cgiparams{'txt_mailserver'};
> 		$dma{'PORT'}			= $cgiparams{'txt_mailport'};
> -		$dma{'STARTTLS'}		= '' if ($cgiparams{'mail_tls'});
> -		$dma{'SECURETRANSFER'}	= '' if exists $dma{'STARTTLS'};
> +		$dma{'STARTTLS'}		= '' if ($cgiparams{'mail_tls'}{'explicit'});
> +		$dma{'SECURETRANS'}	= '' if ($cgiparams{'mail_tls'}{'explicit'} || $cgiparams{'mail_tls'}{'implicit'});
> 		$dma{'SPOOLDIR'}		= "/var/spool/dma";
> 		$dma{'FULLBOUNCE'}		= '';
> 		$dma{'MAILNAME'}		= "$mainsettings{'HOSTNAME'}.$mainsettings{DOMAINNAME}";
> @@ -140,8 +140,6 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'email testmail'}"){ #Testmail button on
> 
> #FUNCTIONS
> sub configsite{
> -	
> -
> 	#If update set fieldvalues new
> 	if($cgiparams{'update'} eq 'on'){
> 		$mail{'USEMAIL'}	= 'on';
> @@ -156,7 +154,9 @@ sub configsite{
> 	}
> 	#find preselections
> 	$checked{'usemail'}{$mail{'USEMAIL'}}	= 'CHECKED';
> -	$checked{'mail_tls'}{'on'}				= 'CHECKED' if exists $dma{'STARTTLS'};
> +	$selected{'mail_tls'}{'explicit'} = 'selected' if exists $dma{'STARTTLS'};
> +	$selected{'mail_tls'}{'implicit'} = 'selected' if exists $dma{'SECURETRANS'} and not $dma{'STARTTLS'};
> +	$selected{'mail_tls'}{'disabled'} = 'selected' if not exists ($dma{'SECURETRANS'} and $dma{'STARTTLS'});
> 	
> 	#Open site
> 	&Header::openpage($Lang::tr{'email settings'}, 1, '');
> @@ -226,7 +226,13 @@ END
> 		</tr>
> 		<tr>
> 			<td>$Lang::tr{'email tls'}</td>
> -			<td><input type='checkbox' name='mail_tls' $checked{'mail_tls'}{'on'}></td>
> +			<td>
> +				<select name='mail_tls'>
> +					<option value='implicit' $selected{'mail_tls'}{'implicit'}>$Lang::tr{'email tls implicit'}</option>
> +					<option value='explicit' $selected{'mail_tls'}{'explicit'}>$Lang::tr{'email tls explicit'}</option>
> +					<option value='disabled' $selected{'mail_tls'}{'disabled'}>$Lang::tr{'disabled'}</option>
> +				</select>
> +			</td>
> 		</tr>
> END
> 		if (! -z $dmafile && $mail{'USEMAIL'} eq 'on' && !$errormessage){
> -- 
> 2.16.4
  
Peter Müller Feb. 3, 2020, 5:52 p.m. UTC | #2
Hello Michael,

thanks for your reply.

That's funny, I am able to reproduce this on a fresh installation, although
it works fine on my testing machine. Will come back with a second version of
this patchset... :-/

Thanks, and best regards,
Peter Müller

> Hi,
> 
> Unfortunately this does not execute. I cannot even load the page without submitting the form:
> 
> I have this in my errors log file:
> 
> exists argument is not a HASH or ARRAY element or a subroutine at /srv/web/ipfire/cgi-bin/mail.cgi line 159.
> [Mon Feb 03 15:49:48.783276 2020] [cgid:error] [pid 5562:tid 128451449181952] [client 192.168.190.117:61657] End of script output before headers: mail.cgi, referer: https://192.168.190.1:444/
> 
> Best,
> -Michael
> 
>> On 31 Jan 2020, at 16:31, Peter Müller <peter.mueller@ipfire.org> wrote:
>>
>> Fixes #12161
>>
>> Reported-by: Michael Tremer <michael.tremer@ipfire.org>
>> Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
>> ---
>> html/cgi-bin/mail.cgi | 20 +++++++++++++-------
>> 1 file changed, 13 insertions(+), 7 deletions(-)
>>
>> diff --git a/html/cgi-bin/mail.cgi b/html/cgi-bin/mail.cgi
>> index 25589046e..8c1b2d4e4 100755
>> --- a/html/cgi-bin/mail.cgi
>> +++ b/html/cgi-bin/mail.cgi
>> @@ -2,7 +2,7 @@
>> ###############################################################################
>> #                                                                             #
>> # IPFire.org - A linux based firewall                                         #
>> -# Copyright (C) 2015  IPFire Team  <alexander.marx@ipfire.org>                #
>> +# Copyright (C) 2007-2020  IPFire Team  <info@ipfire.org>                     #
>> #                                                                             #
>> # This program is free software: you can redistribute it and/or modify        #
>> # it under the terms of the GNU General Public License as published by        #
>> @@ -110,8 +110,8 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}"){ #SaveButton on configsite
>>
>> 		$dma{'SMARTHOST'}		= $cgiparams{'txt_mailserver'};
>> 		$dma{'PORT'}			= $cgiparams{'txt_mailport'};
>> -		$dma{'STARTTLS'}		= '' if ($cgiparams{'mail_tls'});
>> -		$dma{'SECURETRANSFER'}	= '' if exists $dma{'STARTTLS'};
>> +		$dma{'STARTTLS'}		= '' if ($cgiparams{'mail_tls'}{'explicit'});
>> +		$dma{'SECURETRANS'}	= '' if ($cgiparams{'mail_tls'}{'explicit'} || $cgiparams{'mail_tls'}{'implicit'});
>> 		$dma{'SPOOLDIR'}		= "/var/spool/dma";
>> 		$dma{'FULLBOUNCE'}		= '';
>> 		$dma{'MAILNAME'}		= "$mainsettings{'HOSTNAME'}.$mainsettings{DOMAINNAME}";
>> @@ -140,8 +140,6 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'email testmail'}"){ #Testmail button on
>>
>> #FUNCTIONS
>> sub configsite{
>> -	
>> -
>> 	#If update set fieldvalues new
>> 	if($cgiparams{'update'} eq 'on'){
>> 		$mail{'USEMAIL'}	= 'on';
>> @@ -156,7 +154,9 @@ sub configsite{
>> 	}
>> 	#find preselections
>> 	$checked{'usemail'}{$mail{'USEMAIL'}}	= 'CHECKED';
>> -	$checked{'mail_tls'}{'on'}				= 'CHECKED' if exists $dma{'STARTTLS'};
>> +	$selected{'mail_tls'}{'explicit'} = 'selected' if exists $dma{'STARTTLS'};
>> +	$selected{'mail_tls'}{'implicit'} = 'selected' if exists $dma{'SECURETRANS'} and not $dma{'STARTTLS'};
>> +	$selected{'mail_tls'}{'disabled'} = 'selected' if not exists ($dma{'SECURETRANS'} and $dma{'STARTTLS'});
>> 	
>> 	#Open site
>> 	&Header::openpage($Lang::tr{'email settings'}, 1, '');
>> @@ -226,7 +226,13 @@ END
>> 		</tr>
>> 		<tr>
>> 			<td>$Lang::tr{'email tls'}</td>
>> -			<td><input type='checkbox' name='mail_tls' $checked{'mail_tls'}{'on'}></td>
>> +			<td>
>> +				<select name='mail_tls'>
>> +					<option value='implicit' $selected{'mail_tls'}{'implicit'}>$Lang::tr{'email tls implicit'}</option>
>> +					<option value='explicit' $selected{'mail_tls'}{'explicit'}>$Lang::tr{'email tls explicit'}</option>
>> +					<option value='disabled' $selected{'mail_tls'}{'disabled'}>$Lang::tr{'disabled'}</option>
>> +				</select>
>> +			</td>
>> 		</tr>
>> END
>> 		if (! -z $dmafile && $mail{'USEMAIL'} eq 'on' && !$errormessage){
>> -- 
>> 2.16.4
>
  

Patch

diff --git a/html/cgi-bin/mail.cgi b/html/cgi-bin/mail.cgi
index 25589046e..8c1b2d4e4 100755
--- a/html/cgi-bin/mail.cgi
+++ b/html/cgi-bin/mail.cgi
@@ -2,7 +2,7 @@ 
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2015  IPFire Team  <alexander.marx@ipfire.org>                #
+# Copyright (C) 2007-2020  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -110,8 +110,8 @@  if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}"){ #SaveButton on configsite
 
 		$dma{'SMARTHOST'}		= $cgiparams{'txt_mailserver'};
 		$dma{'PORT'}			= $cgiparams{'txt_mailport'};
-		$dma{'STARTTLS'}		= '' if ($cgiparams{'mail_tls'});
-		$dma{'SECURETRANSFER'}	= '' if exists $dma{'STARTTLS'};
+		$dma{'STARTTLS'}		= '' if ($cgiparams{'mail_tls'}{'explicit'});
+		$dma{'SECURETRANS'}	= '' if ($cgiparams{'mail_tls'}{'explicit'} || $cgiparams{'mail_tls'}{'implicit'});
 		$dma{'SPOOLDIR'}		= "/var/spool/dma";
 		$dma{'FULLBOUNCE'}		= '';
 		$dma{'MAILNAME'}		= "$mainsettings{'HOSTNAME'}.$mainsettings{DOMAINNAME}";
@@ -140,8 +140,6 @@  if ($cgiparams{'ACTION'} eq "$Lang::tr{'email testmail'}"){ #Testmail button on
 
 #FUNCTIONS
 sub configsite{
-	
-
 	#If update set fieldvalues new
 	if($cgiparams{'update'} eq 'on'){
 		$mail{'USEMAIL'}	= 'on';
@@ -156,7 +154,9 @@  sub configsite{
 	}
 	#find preselections
 	$checked{'usemail'}{$mail{'USEMAIL'}}	= 'CHECKED';
-	$checked{'mail_tls'}{'on'}				= 'CHECKED' if exists $dma{'STARTTLS'};
+	$selected{'mail_tls'}{'explicit'} = 'selected' if exists $dma{'STARTTLS'};
+	$selected{'mail_tls'}{'implicit'} = 'selected' if exists $dma{'SECURETRANS'} and not $dma{'STARTTLS'};
+	$selected{'mail_tls'}{'disabled'} = 'selected' if not exists ($dma{'SECURETRANS'} and $dma{'STARTTLS'});
 	
 	#Open site
 	&Header::openpage($Lang::tr{'email settings'}, 1, '');
@@ -226,7 +226,13 @@  END
 		</tr>
 		<tr>
 			<td>$Lang::tr{'email tls'}</td>
-			<td><input type='checkbox' name='mail_tls' $checked{'mail_tls'}{'on'}></td>
+			<td>
+				<select name='mail_tls'>
+					<option value='implicit' $selected{'mail_tls'}{'implicit'}>$Lang::tr{'email tls implicit'}</option>
+					<option value='explicit' $selected{'mail_tls'}{'explicit'}>$Lang::tr{'email tls explicit'}</option>
+					<option value='disabled' $selected{'mail_tls'}{'disabled'}>$Lang::tr{'disabled'}</option>
+				</select>
+			</td>
 		</tr>
 END
 		if (! -z $dmafile && $mail{'USEMAIL'} eq 'on' && !$errormessage){