From 4f6eb2c277e6d06e24ed7b974d3535f911b697b1 Mon Sep 17 00:00:00 2001 From: Michael Seevogel <git@michaelseevogel.de> Date: Sun, 11 Feb 2024 00:13:37 +0100 Subject: [PATCH] Transform the domain placeholder in command_format function --- interface/lib/classes/validate_cron.inc.php | 24 ++++++++++++++++++- interface/web/sites/templates/cron_edit.htm | 8 +++---- server/plugins-available/cron_plugin.inc.php | 11 +++++++-- .../shelluser_jailkit_plugin.inc.php | 1 + 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/interface/lib/classes/validate_cron.inc.php b/interface/lib/classes/validate_cron.inc.php index 888fdd5cb7..c99f13ef52 100644 --- a/interface/lib/classes/validate_cron.inc.php +++ b/interface/lib/classes/validate_cron.inc.php @@ -45,15 +45,37 @@ class validate_cron { Validator function to check if a given cron command is in correct form (url only). */ function command_format($field_name, $field_value, $validator) { + global $app, $page; + if(preg_match("'^(\w+):\/\/'", $field_value, $matches)) { + if(preg_match("/\{DOMAIN\}/", $field_value)) { + if(isset($app->remoting_lib->primary_id)) { + $domain = $app->remoting_lib->dataRecord; + } else { + $domain = $page->dataRecord; + } + + if($domain['parent_domain_id'] > 0){ + $parent_domain = $app->db->queryOneRecord("SELECT `domain` FROM `web_domain` WHERE `domain_id` = ?", $domain['parent_domain_id']); + } + + $trans = array( + '{DOMAIN}' => $parent_domain['domain'] + ); + + $field_value = strtr($field_value, $trans); + } $parsed = parse_url($field_value); + if($parsed === false) return $this->get_error($validator['errmsg']); if($parsed["scheme"] != "http" && $parsed["scheme"] != "https") return $this->get_error($validator['errmsg']); + if(preg_match("'^([a-z0-9][a-z0-9\-]{0,62}\.)+([A-Za-z0-9\-]{2,63})$'i", $parsed["host"]) == false) return $this->get_error($validator['errmsg']); + - if(preg_match("'^([a-z0-9][a-z0-9_\-]{0,62}\.)+([A-Za-z0-9\-]{2,63})$'i", $parsed["host"]) == false) return $this->get_error($validator['errmsg']); } + if(strpos($field_value, "\n") !== false || strpos($field_value, "\r") !== false || strpos($field_value, chr(0)) !== false) { return $this->get_error($validator['errmsg']); } diff --git a/interface/web/sites/templates/cron_edit.htm b/interface/web/sites/templates/cron_edit.htm index 9eef8091d8..20417849fb 100644 --- a/interface/web/sites/templates/cron_edit.htm +++ b/interface/web/sites/templates/cron_edit.htm @@ -1,7 +1,8 @@ <div class="form-group"> <tmpl_if name="edit_disabled"> + <label for="parent_domain_id" class="col-sm-3 control-label">{tmpl_var name='parent_domain_id_txt'}</label> - <div class="col-sm-9"><select name="parent_domain_id" id="parent_domain_id" class="form-control" disabled="disabled"> + <div class="col-sm-9"><i class="fa-solid fa-circle-info"></i><select name="parent_domain_id" id="parent_domain_id" class="form-control" disabled="disabled"> {tmpl_var name='parent_domain_id'} </select></div> <input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" /> @@ -12,6 +13,7 @@ </select></div> </tmpl_if> </div> + <div class="form-group"> <label for="run_min" class="col-sm-3 control-label">{tmpl_var name='run_min_txt'}</label> <div class="col-sm-9"> @@ -70,8 +72,6 @@ {tmpl_var name='active'} </div> </div> - - <input type="hidden" name="id" value="{tmpl_var name='id'}"> <div class="clear"><div class="right"> @@ -85,7 +85,7 @@ jQuery('#parent_domain_id').trigger('change'); }); // Reload cron placeholders if a different domain was selected - jQuery('#parent_domain_id').change(function(){ + jQuery('#parent_domain_id').change(function() { reloadCronPlaceholders(); }); diff --git a/server/plugins-available/cron_plugin.inc.php b/server/plugins-available/cron_plugin.inc.php index b0bc507b5e..c11b4b06af 100644 --- a/server/plugins-available/cron_plugin.inc.php +++ b/server/plugins-available/cron_plugin.inc.php @@ -231,6 +231,7 @@ class cron_plugin { $cron_line = str_replace(" ", "", $job['run_min']) . "\t" . str_replace(" ", "", $job['run_hour']) . "\t" . str_replace(" ", "", $job['run_mday']) . "\t" . str_replace(" ", "", $job['run_month']) . "\t" . str_replace(" ", "", $job['run_wday']); } + $web_domain = $this->parent_domain['domain']; $log_target = ""; $log_wget_target = '/dev/null'; $log_root = ''; @@ -242,8 +243,16 @@ class cron_plugin { $log_wget_target = $log_root . '/cron_wget.log'; } + + $cron_line .= "\t{$this->parent_domain['system_user']}"; //* running as user if($job['type'] == 'url') { + $trans = array( + '{DOMAIN}' => $web_domain + ); + + $job['command'] = strtr($job['command'], $trans); + $cron_line .= "\t{$cron_config['wget']} --no-check-certificate --user-agent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0' -q -t 1 -T 7200 -O " . $log_wget_target . " " . escapeshellarg($job['command']) . " " . $log_target; } else { if(strpos($job['command'], "\n") !== false || strpos($job['command'], "\r") !== false || strpos($job['command'], chr(0)) !== false) { @@ -253,8 +262,6 @@ class cron_plugin { $web_docroot_client = ''; - $web_domain = $this->parent_domain['domain']; - // web folder is hardcoded to /web: $web_folder = '/web'; diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php index d462e4a693..05e0315f0a 100755 --- a/server/plugins-available/shelluser_jailkit_plugin.inc.php +++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php @@ -726,6 +726,7 @@ class shelluser_jailkit_plugin { } if($app->system->is_redhat_os() == true) { + //$bashrc = $this->web['document_root'] . '/home/' . $this->web['system_user'] . '/.bashrc'; $bashrc = $this->web['document_root'] . '/etc/bashrc'; } else { $bashrc = $this->web['document_root'] . '/etc/bash.bashrc'; -- GitLab