Improved input validation
| | |
| | | return implode("\n", $domains); |
| | | } |
| | | |
| | | public function is_allowed_user($username, $restrict_names = false) { |
| | | global $app; |
| | | |
| | | if($username == 'root') return false; |
| | | if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false; |
| | | |
| | | return true; |
| | | } |
| | | |
| | | public function is_allowed_group($groupname, $restrict_names = false) { |
| | | global $app; |
| | | |
| | | if($groupname == 'root') return false; |
| | | if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false; |
| | | |
| | | return true; |
| | | } |
| | | |
| | | } |
| | | |
| | | ?> |
| | |
| | | // When the record is updated |
| | | if($this->id > 0) { |
| | | // restore the server ID if the user is not admin and record is edited |
| | | $tmp = $app->db->queryOneRecord("SELECT server_id, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id)); |
| | | $tmp = $app->db->queryOneRecord("SELECT server_id, `system_user`, `system_group`, `cgi`, `ssi`, `perl`, `ruby`, `python`, `suexec`, `errordocs`, `subdomain`, `ssl` FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id)); |
| | | $this->dataRecord["server_id"] = $tmp["server_id"]; |
| | | |
| | | $this->dataRecord['system_user'] = $tmp['system_user']; |
| | | $this->dataRecord['system_group'] = $tmp['system_group']; |
| | | // set the settings to current if not provided (or cleared due to limits) |
| | | if($this->dataRecord['cgi'] == 'n') $this->dataRecord['cgi'] = $tmp['cgi']; |
| | | if($this->dataRecord['ssi'] == 'n') $this->dataRecord['ssi'] = $tmp['ssi']; |
| | |
| | | var $server_id; |
| | | var $server_conf; |
| | | var $data; |
| | | var $min_uid = 500; |
| | | var $min_gid = 500; |
| | | |
| | | /** |
| | | * Construct for this class |
| | |
| | | return true; |
| | | } |
| | | |
| | | public function is_allowed_user($username, $check_id = true, $restrict_names = false) { |
| | | global $app; |
| | | |
| | | if($username == 'root') return false; |
| | | if($check_id && intval($this->getuid($username)) < $this->min_uid) return false; |
| | | |
| | | if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false; |
| | | |
| | | return true; |
| | | } |
| | | |
| | | public function is_allowed_group($groupname, $restrict_names = false) { |
| | | global $app; |
| | | |
| | | if($groupname == 'root') return false; |
| | | if(intval($this->getgid($groupname)) < $this->min_gid) return false; |
| | | |
| | | if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false; |
| | | |
| | | return true; |
| | | } |
| | | |
| | | } |
| | | |
| | | ?> |
| | |
| | | if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set', LOGLEVEL_WARN); |
| | | return 0; |
| | | } |
| | | if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') { |
| | | if(!$app->system->is_allowed_user($data['new']['system_user'], false, true) |
| | | || !$app->system->is_allowed_group($data['new']['system_group'], false, true)) { |
| | | $app->log('Websites cannot be owned by the root user or group.', LOGLEVEL_WARN); |
| | | return 0; |
| | | } |
| | |
| | | if(!$parent_domain["domain_id"]) { |
| | | $app->log("Parent domain not found", LOGLEVEL_WARN); |
| | | return 0; |
| | | } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') { |
| | | $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN); |
| | | return 0; |
| | | } |
| | | |
| | | if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true) |
| | | || !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) { |
| | | $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN); |
| | | return false; |
| | | } |
| | | |
| | | |
| | | $this->parent_domain = $parent_domain; |
| | | |
| | |
| | | if(!$parent_domain["domain_id"]) { |
| | | $app->log("Parent domain not found", LOGLEVEL_WARN); |
| | | return 0; |
| | | } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') { |
| | | } |
| | | if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true) |
| | | || !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) { |
| | | $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN); |
| | | return 0; |
| | | return false; |
| | | } |
| | | |
| | | $app->uses('system'); |
| | |
| | | if(!$parent_domain["domain_id"]) { |
| | | $app->log("Parent domain not found", LOGLEVEL_WARN); |
| | | return 0; |
| | | } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') { |
| | | } |
| | | |
| | | if(!$app->system->is_allowed_user($parent_domain['system_user'], true, true) |
| | | || !$app->system->is_allowed_group($parent_domain['system_group'], true, true)) { |
| | | $app->log("Websites (and Crons) cannot be owned by the root user or group.", LOGLEVEL_WARN); |
| | | return 0; |
| | | return false; |
| | | } |
| | | |
| | | // Get the client ID |
| | |
| | | if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set', LOGLEVEL_WARN); |
| | | return 0; |
| | | } |
| | | if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') { |
| | | |
| | | if(!$app->system->is_allowed_user($data['new']['system_user'], false, true) |
| | | || !$app->system->is_allowed_group($data['new']['system_group'], false, true)) { |
| | | $app->log('Websites cannot be owned by the root user or group.', LOGLEVEL_WARN); |
| | | return 0; |
| | | } |
| | | |
| | | if(trim($data['new']['domain']) == '') { |
| | | $app->log('domain is empty', LOGLEVEL_WARN); |
| | | return 0; |
| | |
| | | return false; |
| | | } |
| | | |
| | | if(!$app->system->is_allowed_user($data['new']['username'], false, false) |
| | | || !$app->system->is_allowed_user($data['new']['puser'], true, true) |
| | | || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) { |
| | | $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN); |
| | | return false; |
| | | } |
| | | |
| | | if($app->system->is_user($data['new']['puser'])) { |
| | | |
| | | //* Remove webfolder protection |
| | |
| | | return false; |
| | | } |
| | | |
| | | if(!$app->system->is_allowed_user($data['new']['username'], false, false) |
| | | || !$app->system->is_allowed_user($data['new']['puser'], true, true) |
| | | || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) { |
| | | $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN); |
| | | return false; |
| | | } |
| | | |
| | | if($app->system->is_user($data['new']['puser'])) { |
| | | // Get the UID of the parent user |
| | | $uid = intval($app->system->getuid($data['new']['puser'])); |
| | |
| | | $app->uses('system'); |
| | | $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']); |
| | | |
| | | if(!$app->system->is_allowed_user($data['new']['username'], false, false) |
| | | || !$app->system->is_allowed_user($data['new']['puser'], true, true) |
| | | || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) { |
| | | $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN); |
| | | return false; |
| | | } |
| | | |
| | | if($app->system->is_user($data['new']['puser'])) { |
| | | // Get the UID of the parent user |
| | | $uid = intval($app->system->getuid($data['new']['puser'])); |
| | |
| | | $app->uses('system'); |
| | | $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$data['new']['parent_domain_id']); |
| | | |
| | | if(!$app->system->is_allowed_user($data['new']['username'], false, false) |
| | | || !$app->system->is_allowed_user($data['new']['puser'], true, true) |
| | | || !$app->system->is_allowed_group($data['new']['pgroup'], true, true)) { |
| | | $app->log('Shell user must not be root or in group root.',LOGLEVEL_WARN); |
| | | return false; |
| | | } |
| | | |
| | | if($app->system->is_user($data['new']['puser'])) { |
| | | // Get the UID of the parent user |
| | | $uid = intval($app->system->getuid($data['new']['puser'])); |