* Fri Sep 26 2025 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-3.sme
- fix smanager caching issue [SME: 13098] - fix Disabled functions displays [SME: 12347] - add ErrorReporting and DisplayErrors [SME: 11692]
This commit is contained in:
@@ -24,35 +24,20 @@ use esmith::ConfigDB;
|
||||
use esmith::DomainsDB;
|
||||
use esmith::php;
|
||||
|
||||
our $adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
our $cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
my ($adb,$cdb);
|
||||
|
||||
#TODO those 3 variables should be exported from esmith::php
|
||||
our $defaultdisabledfunc='system,show_source,' .
|
||||
'symlink,exec,dl,shell_exec,' .
|
||||
'passthru,phpinfo,' .
|
||||
'escapeshellarg,escapeshellcmd';
|
||||
|
||||
our $BASEPHP = 54;
|
||||
|
||||
our %defaultproperties = (
|
||||
MemoryLimit => '128M',
|
||||
MaxExecutionTime => '30',
|
||||
MaxInputTime => '60',
|
||||
AllowUrlFopen => 'disabled',
|
||||
PostMaxSize => '20M',
|
||||
UploadMaxFilesize => '10M',
|
||||
FileUpload => 'enabled',
|
||||
PHPBaseDir => '/home/e-smith/files/ibays/$key:/var/lib/php/$key',
|
||||
DisabledFunctions => $defaultdisabledfunc,
|
||||
MailForceSender => "admin@".$cdb->get_value('DomainName'),
|
||||
AllowPHTML => 'disabled',
|
||||
|
||||
ModDav => "disabled",
|
||||
AllowOverride => "None",
|
||||
FollowSymLinks => "disabled",
|
||||
Indexes => "enabled",
|
||||
);
|
||||
# those 3 variables should be exported from esmith::php
|
||||
our $BASEPHP = esmith::php::PHPbase();
|
||||
our $defaultdisabledfunc = $esmith::php::defaultdisabledfunc;
|
||||
# this one we add some locally
|
||||
our %defaultproperties = (%esmith::php::defaultPHPproperties,
|
||||
ModDav => "disabled",
|
||||
AllowOverride => "None",
|
||||
FollowSymLinks => "disabled",
|
||||
Indexes => "enabled",
|
||||
DisplayErrors => 'disabled',
|
||||
ErrorReporting => 'E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT'
|
||||
);
|
||||
|
||||
# those are ok to be defined here and not in core.
|
||||
our %sizehash = ('20M' => 'S0020MB', '30M' => 'S0030MB', '40M' => 'S0040MB', '50M' => 'S0050MB',
|
||||
@@ -79,20 +64,25 @@ our %optionsproperties =(
|
||||
DisabledFunctions => $defaultdisabledfunc,
|
||||
AllowPHTML => {%binary},
|
||||
ModDav => {%binary},
|
||||
AllowOverride => { None =>'None' ,
|
||||
All => 'All',
|
||||
AuthConfig => 'AuthConfig',
|
||||
FileInfo => 'FileInfo',
|
||||
Indexes => 'Indexes',
|
||||
Limit => 'Limit',
|
||||
'FileInfo Indexes' => 'FileInfo Indexes',
|
||||
},
|
||||
AllowOverride => { None =>'None' ,
|
||||
All => 'All',
|
||||
AuthConfig => 'AuthConfig',
|
||||
FileInfo => 'FileInfo',
|
||||
Indexes => 'Indexes',
|
||||
Limit => 'Limit',
|
||||
'FileInfo Indexes' => 'FileInfo Indexes',
|
||||
},
|
||||
FollowSymLinks => {%binary},
|
||||
Indexes => {%binary},
|
||||
DisplayErrors => {%binary},
|
||||
ErrorReporting => $defaultproperties{ErrorReporting}
|
||||
);
|
||||
|
||||
sub main {
|
||||
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
@@ -111,6 +101,9 @@ sub main {
|
||||
|
||||
sub do_display {
|
||||
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
|
||||
my $c = shift;
|
||||
$c->app->log->info($c->log_req);
|
||||
|
||||
@@ -126,36 +119,38 @@ sub do_display {
|
||||
|
||||
if ( $trt eq 'UPD' ) {
|
||||
|
||||
my $rec = $adb->get($ibay);
|
||||
if ($rec and $rec->prop('type') eq 'ibay') {
|
||||
$wh_datas{ibay} = $ibay;
|
||||
$wh_datas{description} = $rec->prop('Name');
|
||||
$wh_datas{indexes} = get_current_value($c, $ibay, 'Indexes');
|
||||
$wh_datas{followsymLinks} = get_current_value($c, $ibay, 'FollowSymLinks');
|
||||
$wh_datas{allowoverride} = get_current_value($c, $ibay, 'AllowOverride');
|
||||
$wh_datas{allowurlfopen} = get_current_value($c, $ibay, 'AllowUrlFopen');
|
||||
$wh_datas{memorylimit} = get_current_value($c, $ibay, 'MemoryLimit');
|
||||
$wh_datas{uploadmaxfilesize} = get_current_value($c, $ibay, 'UploadMaxFilesize');
|
||||
$wh_datas{postmaxsize} = get_current_value($c, $ibay, 'PostMaxSize');
|
||||
$wh_datas{maxexecutiontime} = get_current_value($c, $ibay, 'MaxExecutionTime');
|
||||
$wh_datas{maxinputtime} = get_current_value($c, $ibay, 'MaxInputTime');
|
||||
$wh_datas{fileupload} = get_current_value($c, $ibay, 'FileUpload');
|
||||
$wh_datas{allowphtml} = get_current_value($c, $ibay, 'AllowPHTML');
|
||||
$wh_datas{mailforcesender} = $rec->prop('MailForceSender');
|
||||
my $df = ($rec->prop('DisabledFunctions'))? $rec->prop('DisabledFunctions') : $defaultdisabledfunc;
|
||||
$wh_datas{disabledfunctions} = $df; # yes we want todo this one this way.
|
||||
$wh_datas{phpbasedir} = $rec->prop('PHPBaseDir'); # yes we keep this one simple
|
||||
$wh_datas{moddav} = get_current_value($c, $ibay, 'ModDav');
|
||||
$wh_datas{phpversion} = get_current_php_value($c, $ibay, 'PHPVersion');
|
||||
# we set phpversion using function called by cgi file
|
||||
}
|
||||
my $rec = $adb->get($ibay);
|
||||
if ($rec and $rec->prop('type') eq 'ibay') {
|
||||
$wh_datas{ibay} = $ibay;
|
||||
$wh_datas{description} = $rec->prop('Name');
|
||||
$wh_datas{indexes} = get_current_value($c, $ibay, 'Indexes');
|
||||
$wh_datas{followsymLinks} = get_current_value($c, $ibay, 'FollowSymLinks');
|
||||
$wh_datas{allowoverride} = get_current_value($c, $ibay, 'AllowOverride');
|
||||
$wh_datas{allowurlfopen} = get_current_value($c, $ibay, 'AllowUrlFopen');
|
||||
$wh_datas{memorylimit} = get_current_value($c, $ibay, 'MemoryLimit');
|
||||
$wh_datas{uploadmaxfilesize} = get_current_value($c, $ibay, 'UploadMaxFilesize');
|
||||
$wh_datas{postmaxsize} = get_current_value($c, $ibay, 'PostMaxSize');
|
||||
$wh_datas{maxexecutiontime} = get_current_value($c, $ibay, 'MaxExecutionTime');
|
||||
$wh_datas{maxinputtime} = get_current_value($c, $ibay, 'MaxInputTime');
|
||||
$wh_datas{fileupload} = get_current_value($c, $ibay, 'FileUpload');
|
||||
$wh_datas{allowphtml} = get_current_value($c, $ibay, 'AllowPHTML');
|
||||
$wh_datas{mailforcesender} = $rec->prop('MailForceSender');
|
||||
my $df = (defined $rec->prop('DisabledFunctions'))? $rec->prop('DisabledFunctions') : $defaultdisabledfunc;
|
||||
$wh_datas{disabledfunctions} = $df; # yes we want todo this one this way.
|
||||
$wh_datas{phpbasedir} = $rec->prop('PHPBaseDir'); # yes we keep this one simple
|
||||
$wh_datas{moddav} = get_current_value($c, $ibay, 'ModDav');
|
||||
$wh_datas{phpversion} = get_current_php_value($c, $ibay, 'PHPVersion');
|
||||
$wh_datas{DisplayErrors} = get_current_value($c, $ibay, 'DisplayErrors');
|
||||
$wh_datas{ErrorReporting} = (defined $rec->prop('ErrorReporting') ) ? $rec->prop('ErrorReporting') : $defaultproperties{ErrorReporting};
|
||||
# we set phpversion using function called by cgi file
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( $trt eq 'LIST' ) {
|
||||
my @ibays = $adb->ibays();
|
||||
my @ibays = $adb->ibays();
|
||||
$c->stash( ibays => \@ibays );
|
||||
}
|
||||
}
|
||||
|
||||
$c->stash( title => $title, modul => $modul, wh_datas => \%wh_datas );
|
||||
$c->render( template => 'webhosting' );
|
||||
@@ -182,29 +177,29 @@ sub do_action {
|
||||
|
||||
if ( $trt eq 'UPD' ) {
|
||||
|
||||
my $name = ($c->param('ibay') || '');
|
||||
my $name = ($c->param('ibay') || '');
|
||||
|
||||
# controls
|
||||
$res = validate_up_post( $c );
|
||||
$result .= $res unless $res eq 'OK';
|
||||
# controls
|
||||
$res = validate_up_post( $c );
|
||||
$result .= $res unless $res eq 'OK';
|
||||
|
||||
if ( ! $result ) {
|
||||
$res = modify_ibay( $c, $name );
|
||||
$result .= $res unless $res eq 'OK';
|
||||
if ( ! $result ) {
|
||||
$result = $c->l('wh_SUCCESSFULLY_MODIFIED_IBAY') . ' ' . $name;
|
||||
$wh_datas{trt} = 'LST';
|
||||
}
|
||||
}
|
||||
if ( ! $result ) {
|
||||
$res = modify_ibay( $c, $name );
|
||||
$result .= $res unless $res eq 'OK';
|
||||
if ( ! $result ) {
|
||||
$result = $c->l('wh_SUCCESSFULLY_MODIFIED_IBAY') . ' ' . $name;
|
||||
$wh_datas{trt} = 'LST';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# common parts
|
||||
|
||||
if ($res ne 'OK') {
|
||||
$c->stash( error => $result );
|
||||
$c->stash( title => $title, wh_datas => \%wh_datas );
|
||||
return $c->render('webhosting');
|
||||
$c->stash( error => $result );
|
||||
$c->stash( title => $title, wh_datas => \%wh_datas );
|
||||
return $c->render('webhosting');
|
||||
}
|
||||
|
||||
my $message = "'Ibays' updates ($trt) DONE";
|
||||
@@ -217,12 +212,15 @@ sub do_action {
|
||||
|
||||
sub modify_ibay {
|
||||
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
|
||||
my ($c, $name) = @_;
|
||||
|
||||
my $msg;
|
||||
my $acct = $adb->get($name);
|
||||
if ( ! $acct or $acct->prop('type') ne 'ibay') {
|
||||
return $c->l('wh_CANT_FIND_IBAY') if $msg ne 'OK';
|
||||
return $c->l('wh_CANT_FIND_IBAY') if $msg ne 'OK';
|
||||
}
|
||||
|
||||
# real & current ibay
|
||||
@@ -242,34 +240,44 @@ sub modify_ibay {
|
||||
MailForceSender => 'mailforcesender',
|
||||
DisabledFunctions => 'disabledfunctions',
|
||||
PHPBaseDir => 'phpbasedir',
|
||||
DisplayErrors => 'DisplayErrors',
|
||||
ErrorReporting => 'ErrorReporting',
|
||||
);
|
||||
foreach my $prop (keys %doing) {
|
||||
my $value = $c->param($doing{$prop});
|
||||
$value = "" if ( $value eq "$BASEPHP" && $prop eq 'PHPVersion');
|
||||
my $default = $defaultproperties{$prop} || "";
|
||||
# exceptions to handle
|
||||
# DisabledFunctions if equal def delprop
|
||||
if ($prop eq 'DisabledFunctions' && $value eq $default) {
|
||||
$acct->delete_prop($prop) ;
|
||||
next;
|
||||
}
|
||||
# MailForceSender if empty delprop
|
||||
if ($prop eq 'MailForceSender' && $value eq "" ) {
|
||||
$acct->delete_prop($prop) ;
|
||||
next
|
||||
}
|
||||
# PHPBaseDir if empty delprop
|
||||
if ($prop eq 'PHPBaseDir' && $value eq "" ) {
|
||||
my $value = $c->param($doing{$prop});
|
||||
$value = "" if ( $value eq $BASEPHP && $prop eq 'PHPVersion');
|
||||
my $default = $defaultproperties{$prop} || "";
|
||||
# exceptions to handle
|
||||
# DisabledFunctions if equal def delprop
|
||||
if ($prop eq 'DisabledFunctions' && $value eq $default) {
|
||||
$acct->delete_prop($prop) ;
|
||||
next;
|
||||
}
|
||||
if ($prop eq 'DisplayErrors' && $value eq $default) {
|
||||
$acct->delete_prop($prop) ;
|
||||
next;
|
||||
}
|
||||
if ($prop eq 'ErrorReporting' && $value eq $default) {
|
||||
$acct->delete_prop($prop) ;
|
||||
next;
|
||||
}
|
||||
# MailForceSender if empty delprop
|
||||
if ($prop eq 'MailForceSender' && $value eq "" ) {
|
||||
$acct->delete_prop($prop) ;
|
||||
next
|
||||
}
|
||||
# others if == default delprop
|
||||
if ($value eq "default") {
|
||||
$acct->delete_prop($prop) ;
|
||||
next;
|
||||
}
|
||||
$acct->merge_props($prop => $value);
|
||||
#TODO store them in a hash and call merge_props once
|
||||
}
|
||||
# PHPBaseDir if empty delprop
|
||||
if ($prop eq 'PHPBaseDir' && $value eq "" ) {
|
||||
$acct->delete_prop($prop) ;
|
||||
next
|
||||
}
|
||||
# others if == default delprop
|
||||
if ($value eq "default") {
|
||||
$acct->delete_prop($prop) ;
|
||||
next;
|
||||
}
|
||||
$acct->merge_props($prop => $value);
|
||||
#TODO store them in a hash and call merge_props once
|
||||
}
|
||||
|
||||
# Untaint $name before use in system()
|
||||
@@ -288,12 +296,14 @@ sub modify_ibay {
|
||||
|
||||
|
||||
sub get_current_value{
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
$cdb = esmith::ConfigDB->open() || die "Couldn't open config db";
|
||||
my ($c, $name, $property) = @_;
|
||||
my $ibay = $adb->get($name);
|
||||
my $key = $ibay->key;
|
||||
my $default = $defaultproperties{$property} || "";
|
||||
$default =~ s/\$key/$key/g if $property eq "PHPBaseDir";
|
||||
my $value = ($ibay->prop($property))? $ibay->prop($property) : "default" ;
|
||||
my $value = (defined $ibay->prop($property))? $ibay->prop($property) : "default" ;
|
||||
return $value;
|
||||
|
||||
}
|
||||
@@ -310,25 +320,26 @@ sub validate_up_post{
|
||||
my $c = shift;
|
||||
my $upmaxfilesize = $c->param('uploadmaxfilesize');
|
||||
my $postmaxsizeform = $c->param('postmaxsize');
|
||||
##set value to "0M" if disabled in order to compare uploadmaxfilesize and postmaxsize
|
||||
$upmaxfilesize = "0M" if $upmaxfilesize eq 'disabled';
|
||||
$upmaxfilesize = $defaultproperties{'UploadMaxFilesize'} if $upmaxfilesize eq 'default';
|
||||
$postmaxsizeform = "0M" if $postmaxsizeform eq 'disabled';
|
||||
$postmaxsizeform =$defaultproperties{'PostMaxSize'} if $postmaxsizeform eq 'default';
|
||||
##remove the 'M' unit
|
||||
##set value to "0M" if disabled in order to compare uploadmaxfilesize and postmaxsize
|
||||
$upmaxfilesize = "0M" if $upmaxfilesize eq 'disabled';
|
||||
$upmaxfilesize = $defaultproperties{'UploadMaxFilesize'} if $upmaxfilesize eq 'default';
|
||||
$postmaxsizeform = "0M" if $postmaxsizeform eq 'disabled';
|
||||
$postmaxsizeform =$defaultproperties{'PostMaxSize'} if $postmaxsizeform eq 'default';
|
||||
##remove the 'M' unit
|
||||
my $upmaxfilesizechop = chop($upmaxfilesize);
|
||||
my $postmaxsizeformchop = chop($postmaxsizeform);
|
||||
##test the condition
|
||||
if ( $upmaxfilesize > $postmaxsizeform ) {
|
||||
return $c->l('wh_UPLOADMAXFILESIZE_IS_GREATER_THAN_POSTMAXSIZE');
|
||||
} else {
|
||||
return "OK";
|
||||
}
|
||||
##test the condition
|
||||
if ( $upmaxfilesize > $postmaxsizeform ) {
|
||||
return $c->l('wh_UPLOADMAXFILESIZE_IS_GREATER_THAN_POSTMAXSIZE');
|
||||
} else {
|
||||
return "OK";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub get_current_php_value {
|
||||
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
my ($c, $name) = @_;
|
||||
my $ibay= $adb->get($name);
|
||||
return "default" unless defined $ibay->prop('PHPVersion');
|
||||
@@ -345,7 +356,7 @@ sub get_php_options {
|
||||
# transform options list
|
||||
my @opts = [ "$translate: ".PHPdefault(), 'default' ];
|
||||
foreach my $key ( sort keys %opts ) {
|
||||
push @opts, [ $opts{$key}, $key ];
|
||||
push @opts, [ $opts{$key}, $key ];
|
||||
}
|
||||
# push @opts, [ "$translate: ".PHPdefault(), 'default' ];
|
||||
|
||||
@@ -356,6 +367,8 @@ sub get_php_options {
|
||||
|
||||
sub print_options {
|
||||
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
|
||||
my ($c, $property) = @_;
|
||||
|
||||
my $translate = $c->l('wh_DEFAULT');
|
||||
@@ -369,7 +382,7 @@ sub print_options {
|
||||
# transform options list
|
||||
my @opts;
|
||||
foreach my $key ( sort keys %{$optionsproperties{$property}} ) {
|
||||
push @opts, [ $c->l($optionsproperties{$property}{$key}), $key ];
|
||||
push @opts, [ $c->l($optionsproperties{$property}{$key}), $key ];
|
||||
}
|
||||
push @opts, ["$translate: ".$default => 'default'];
|
||||
|
||||
@@ -380,10 +393,12 @@ sub print_options {
|
||||
|
||||
sub print_disabledfunctions {
|
||||
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
|
||||
my ($c) = @_;
|
||||
my $translate = $c->l('wh_DESC_DISABLEDFUNCTIONS');
|
||||
my $name = $c->param('ibay');
|
||||
my $ibay= $adb->get($name); # ??
|
||||
my $ibay= $adb->get($name); # ??
|
||||
return "$translate : ". $defaultdisabledfunc ;
|
||||
|
||||
}
|
||||
@@ -391,6 +406,8 @@ sub print_disabledfunctions {
|
||||
|
||||
sub print_phpbasedir {
|
||||
|
||||
$adb = esmith::AccountsDB->open() || die "Couldn't open accounts db";
|
||||
|
||||
my ($c) = @_;
|
||||
my $translate = $c->l('wh_DESC_PHPBASEDIR');
|
||||
my $name = $c->param('ibay');
|
||||
|
@@ -83,3 +83,5 @@
|
||||
'wh_MAILFORCESENDER' => 'Force an email sender address for the script in this I-bay.',
|
||||
'wh_DISABLEDFUNCTIONS' => 'List of php disabled functions (disable_functions)',
|
||||
'wh_DESC_DISABLEDFUNCTIONS' => 'Leave empty or with a random string to disable. Copy and paste the following default list to reset to default',
|
||||
'wh_DisplayErrors' => 'PHP Display Errors (DisplayErrors)',
|
||||
'wh_ErrorReporting' => 'PHP Error Reporting (ErrorReporting)'
|
||||
|
@@ -112,6 +112,21 @@
|
||||
%= select_field 'allowphtml' => $c->print_options('AllowPHTML'), class => 'input'
|
||||
<br></span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'wh_DisplayErrors'
|
||||
</span><span class=data>
|
||||
% param 'DisplayErrors' => $wh_datas->{DisplayErrors} unless param 'DisplayErrors';
|
||||
%= select_field 'DisplayErrors' => $c->print_options('DisplayErrors'), class => 'input'
|
||||
<br></span></p>
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'wh_ErrorReporting'
|
||||
</span><span class=data>
|
||||
% param 'ErrorReporting' => $wh_datas->{ErrorReporting} unless param 'ErrorReporting';
|
||||
%=text_field 'ErrorReporting' => size => '60', class => 'input'
|
||||
<br></span></p>
|
||||
|
||||
|
||||
<p><span class=label>
|
||||
%=l 'wh_MAILFORCESENDER'
|
||||
</span><span class=data>
|
||||
|
Reference in New Issue
Block a user