diff --git a/install/update.php b/install/update.php index 87866582fea4a8f6f42abeeaa309ed59207c16f3..8e00a879fa37b9bbd147af5c5487202cde5f27dd 100644 --- a/install/update.php +++ b/install/update.php @@ -96,7 +96,7 @@ $conf["mysql"]["ispconfig_user"] = $conf_old["db_user"]; $conf["mysql"]["ispconfig_password"] = $conf_old["db_password"]; $conf['language'] = $conf_old['language']; if($conf['language'] == '{language}') $conf['language'] = 'en'; -$conf['timezone'] = $conf_old['timezone']; +$conf['timezone'] = (isset($conf_old['timezone']))?$conf_old['timezone']:'UTC'; if($conf['timezone'] == '{timezone}' or trim($conf['timezone']) == '') $conf['timezone'] = 'UTC'; if(isset($conf_old["dbmaster_host"])) $conf["mysql"]["master_host"] = $conf_old["dbmaster_host"]; diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php index 3e926aeec7bd37c23626343586062c062d486733..b744e35688c5cb21004195df82ee065d5408d919 100644 --- a/interface/lib/classes/functions.inc.php +++ b/interface/lib/classes/functions.inc.php @@ -45,6 +45,7 @@ class functions { $content = file_get_contents($filepath); $content = chunk_split(base64_encode($content)); $uid = strtoupper(md5(uniqid(time()))); + $subject = "=?utf-8?B?".base64_encode($subject)."?="; if($filename == '') { $path_parts = pathinfo($filepath); @@ -75,6 +76,7 @@ class functions { $header = "From: $from\nReply-To: $from\n"; $header .= "Content-Type: text/plain;\n\tcharset=\"UTF-8\"\n"; $header .= "Content-Transfer-Encoding: 8bit\n\n"; + $subject = "=?utf-8?B?".base64_encode($subject)."?="; mail($to, $subject, $text, $header); } diff --git a/interface/lib/classes/remoting.inc.php b/interface/lib/classes/remoting.inc.php index cfdc227f484d6f0ec57e8e3dd91d265de3fb6d88..9f88cfc0fdd1c88a2c6ae7bd62c4a15ce4ddedad 100644 --- a/interface/lib/classes/remoting.inc.php +++ b/interface/lib/classes/remoting.inc.php @@ -348,8 +348,8 @@ class remoting { $this->server->fault('permission_denied','You do not have the permissions to access this function.'); return false; } - $affected_rows = $this->deleteQuery('../mail/form/mail_user_filter.tform.php', $primary_id); - $app->plugin->raiseEvent('mail:mail_user_filter:on_after_delete',$this); + $affected_rows = $this->deleteQuery('../mail/form/mail_user_filter.tform.php', $primary_id,'mail:mail_user_filter:on_after_delete'); + // $app->plugin->raiseEvent('mail:mail_user_filter:on_after_delete',$this); return $affected_rows; } @@ -2180,20 +2180,29 @@ class remoting { //* Get the SQL query $sql = $app->remoting_lib->getSQL($params,'INSERT',0); - $app->db->query($sql); //* Check if no system user with that username exists $username = $app->db->quote($params["username"]); - $tmp = $app->db->queryOneRecord("SELECT count(userid) as number FROm sys_user WHERE username = '$username'"); + $tmp = $app->db->queryOneRecord("SELECT count(userid) as number FROM sys_user WHERE username = '$username'"); if($tmp['number'] > 0) $app->remoting_lib->errorMessage .= "Duplicate username
"; + //* Stop on error while preparing the sql query if($app->remoting_lib->errorMessage != '') { $this->server->fault('data_processing_error', $app->remoting_lib->errorMessage); return false; } + //* Execute the SQL query + $app->db->query($sql); $insert_id = $app->db->insertID(); + + //* Stop on error while executing the sql query + if($app->remoting_lib->errorMessage != '') { + $this->server->fault('data_processing_error', $app->remoting_lib->errorMessage); + return false; + } + $this->id = $insert_id; $this->dataRecord = $params; @@ -2332,22 +2341,23 @@ class remoting { // set a few values for compatibility with tform actions, mostly used by plugins $this->oldDataRecord = $old_rec; $this->id = $primary_id; - $this->dataRecord = $params; + $this->dataRecord = $old_rec; + //$this->dataRecord = $params; //* Get the SQL query $sql = $app->remoting_lib->getDeleteSQL($primary_id); - + $app->db->errorMessage = ''; $app->db->query($sql); + $affected_rows = $app->db->affectedRows(); if($app->db->errorMessage != '') { - - if($event_identifier != '') $app->plugin->raiseEvent($event_identifier,$this); - $this->server->fault('database_error', $app->db->errorMessage . ' '.$sql); return false; } - $affected_rows = $app->db->affectedRows(); + if($event_identifier != '') { + $app->plugin->raiseEvent($event_identifier,$this); + } //* Save changes to Datalog if($app->remoting_lib->formDef["db_history"] == 'yes') { diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php index 06d5dfd7b25316ba479ce7a465aa148bb354d720..1d732af854307e7dde55b7616c557a856f5d33e9 100644 --- a/interface/lib/classes/remoting_lib.inc.php +++ b/interface/lib/classes/remoting_lib.inc.php @@ -536,11 +536,16 @@ class remoting_lib { if($field['formtype'] == 'PASSWORD') { $sql_insert_key .= "`$key`, "; if($field['encryption'] == 'CRYPT') { - $record[$key] = $app->auth->crypt_password(stripslashes($record[$key])); + $record[$key] = $app->auth->crypt_password(stripslashes($record[$key])); + $sql_insert_val .= "'".$app->db->quote($record[$key])."', "; + } elseif ($field['encryption'] == 'MYSQL') { + $sql_insert_val .= "PASSWORD('".$app->db->quote($record[$key])."'), "; + } elseif ($field['encryption'] == 'CLEARTEXT') { + $sql_insert_val .= "'".$app->db->quote($record[$key])."', "; } else { - $record[$key] = md5($record[$key]); + $record[$key] = md5(stripslashes($record[$key])); + $sql_insert_val .= "'".$app->db->quote($record[$key])."', "; } - $sql_insert_val .= "'".$record[$key]."', "; } elseif ($field['formtype'] == 'CHECKBOX') { $sql_insert_key .= "`$key`, "; if($record[$key] == '') { @@ -645,7 +650,11 @@ class remoting_lib { foreach($primary_id as $key => $val) { $key = $app->db->quote($key); $val = $app->db->quote($val); - $sql_where .= "$key = '$val' AND "; + if(stristr($val,'%')) { + $sql_where .= "$key like '$val' AND "; + } else { + $sql_where .= "$key = '$val' AND "; + } } $sql_where = substr($sql_where,0,-5); $sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$sql_where; diff --git a/interface/web/admin/software_update_list.php b/interface/web/admin/software_update_list.php index 03d2658667c4b00856ec4f6aa1b176baec28a7c0..734f369343b78ba3429d880f466c2d46f7ac1977 100644 --- a/interface/web/admin/software_update_list.php +++ b/interface/web/admin/software_update_list.php @@ -161,7 +161,7 @@ if(is_array($installed_packages)) { foreach($installed_packages as $ip) { // Get version number of the latest installed version - $sql = "SELECT v1, v2, v3, v4 FROM software_update, software_update_inst WHERE software_update.software_update_id = software_update_inst.software_update_id AND server_id = 1 ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC LIMIT 0,1"; + $sql = "SELECT v1, v2, v3, v4 FROM software_update, software_update_inst WHERE software_update.software_update_id = software_update_inst.software_update_id AND server_id = ".$server_id." ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC LIMIT 0,1"; $lu = $app->db->queryOneRecord($sql); // Get all installable updates diff --git a/interface/web/dns/dns_slave_edit.php b/interface/web/dns/dns_slave_edit.php index dc43a4b905922e15a53dfd91e6859ea3d14954ff..4564da1dddd76503b6ef2a2ccc9aadfb2d656836 100644 --- a/interface/web/dns/dns_slave_edit.php +++ b/interface/web/dns/dns_slave_edit.php @@ -106,6 +106,14 @@ class page_action extends tform_actions { } + if($this->id > 0) { + //* we are editing a existing record + $app->tpl->setVar("edit_disabled", 1); + $app->tpl->setVar("server_id_value", $this->dataRecord["server_id"]); + } else { + $app->tpl->setVar("edit_disabled", 0); + } + parent::onShowEnd(); } diff --git a/interface/web/dns/dns_soa_edit.php b/interface/web/dns/dns_soa_edit.php index 7ec02785668c5b97756c1e8e95a80ec2711a122b..173ec7b034b6988abec53b626cb348357a387cc5 100644 --- a/interface/web/dns/dns_soa_edit.php +++ b/interface/web/dns/dns_soa_edit.php @@ -116,6 +116,14 @@ class page_action extends tform_actions { } + if($this->id > 0) { + //* we are editing a existing record + $app->tpl->setVar("edit_disabled", 1); + $app->tpl->setVar("server_id_value", $this->dataRecord["server_id"]); + } else { + $app->tpl->setVar("edit_disabled", 0); + } + parent::onShowEnd(); } @@ -180,19 +188,36 @@ class page_action extends tform_actions { // make sure that the record belongs to the client group and not the admin group when a dmin inserts it if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) { $client_group_id = intval($this->dataRecord["client_group_id"]); - $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id WHERE id = ".$this->id); + $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE id = ".$this->id); // And we want to update all rr records too, that belong to this record $app->db->query("UPDATE dns_rr SET sys_groupid = $client_group_id WHERE zone = ".$this->id); } if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) { $client_group_id = intval($this->dataRecord["client_group_id"]); - $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id WHERE id = ".$this->id); + $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE id = ".$this->id); // And we want to update all rr records too, that belong to this record $app->db->query("UPDATE dns_rr SET sys_groupid = $client_group_id WHERE zone = ".$this->id); } } + function onBeforeUpdate () { + global $app, $conf; + + //* Check if the server has been changed + // We do this only for the admin or reseller users, as normal clients can not change the server ID anyway + if($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) { + //* We do not allow users to change a domain which has been created by the admin + $rec = $app->db->queryOneRecord("SELECT origin from dns_soa WHERE id = ".$this->id); + if(isset($this->dataRecord["origin"]) && $rec['origin'] != $this->dataRecord["origin"] && $app->tform->checkPerm($this->id,'u')) { + //* Add a error message and switch back to old server + $app->tform->errorMessage .= $app->lng('The Zone (soa) can not be changed. Please ask your Administrator if you want to change the Zone name.'); + $this->dataRecord["origin"] = $rec['origin']; + } + unset($rec); + } + } + function onAfterUpdate() { global $app, $conf; @@ -206,13 +231,13 @@ class page_action extends tform_actions { // make sure that the record belongs to the client group and not the admin group when a dmin inserts it if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) { $client_group_id = intval($this->dataRecord["client_group_id"]); - $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id WHERE id = ".$this->id); + $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id, sys_perm_group = 'ru' WHERE id = ".$this->id); // And we want to update all rr records too, that belong to this record $app->db->query("UPDATE dns_rr SET sys_groupid = $client_group_id WHERE zone = ".$this->id); } if($app->auth->has_clients($_SESSION['s']['user']['userid']) && isset($this->dataRecord["client_group_id"])) { $client_group_id = intval($this->dataRecord["client_group_id"]); - $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id WHERE id = ".$this->id); + $app->db->query("UPDATE dns_soa SET sys_groupid = $client_group_id, sys_perm_group = 'riud' WHERE id = ".$this->id); // And we want to update all rr records too, that belong to this record $app->db->query("UPDATE dns_rr SET sys_groupid = $client_group_id WHERE zone = ".$this->id); } diff --git a/interface/web/dns/form/dns_alias.tform.php b/interface/web/dns/form/dns_alias.tform.php index 21089827195dfd4b4c06904efc78a6f007bc65b7..8d103f6be9f3bca3b0a048707db330c105d68b17 100644 --- a/interface/web/dns/form/dns_alias.tform.php +++ b/interface/web/dns/form/dns_alias.tform.php @@ -80,7 +80,7 @@ $form["tabs"]['dns'] = array ( 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', 'errmsg'=> 'name_error_empty'), 1 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{1,64}$/', + 'regex' => '/^[\w\.\-]{1,255}$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_cname.tform.php b/interface/web/dns/form/dns_cname.tform.php index 48ac925ead5bddbcdbbb9226a93b2463f2ae33d6..aedadc6ab1530fcec4486d5b9bc28e752524a9c9 100644 --- a/interface/web/dns/form/dns_cname.tform.php +++ b/interface/web/dns/form/dns_cname.tform.php @@ -78,7 +78,7 @@ $form["tabs"]['dns'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-\*]{0,64}$/', + 'regex' => '/^[\w\.\-\*]{0,255}$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_ns.tform.php b/interface/web/dns/form/dns_ns.tform.php index 8fbb157e86c812d55a4bd6c9af9e9925e35dfaac..6fcc7a56983b5fd8c2dda10dfc435ead25c6a795 100644 --- a/interface/web/dns/form/dns_ns.tform.php +++ b/interface/web/dns/form/dns_ns.tform.php @@ -78,7 +78,7 @@ $form["tabs"]['dns'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{0,64}$/', + 'regex' => '/^[\w\.\-]{0,255}$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_rp.tform.php b/interface/web/dns/form/dns_rp.tform.php index 938aa616db49adb50fc5fa630ddeb567fe204221..aa94b55caeffbbdebc93e4492d0c971eaaed6838 100644 --- a/interface/web/dns/form/dns_rp.tform.php +++ b/interface/web/dns/form/dns_rp.tform.php @@ -78,7 +78,7 @@ $form["tabs"]['dns'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{0,64}$/', + 'regex' => '/^[\w\.\-]{0,255}$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_slave.tform.php b/interface/web/dns/form/dns_slave.tform.php index 1094e7c71c3e4ab96c74d56f5fd5526df11f2932..097602e8e5f88faab9d2047e10334dc85f4e83a1 100644 --- a/interface/web/dns/form/dns_slave.tform.php +++ b/interface/web/dns/form/dns_slave.tform.php @@ -94,7 +94,7 @@ $form["tabs"]['dns_slave'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{1,64}$/', + 'regex' => '/^[\w\.\-]{1,255}$/', 'errmsg'=> 'ns_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php index 4490d5573e2749aa5b336f6e04c76c7c8b934d9d..53b408ef3a1cab68a3a48c977815de7ec5765cd4 100644 --- a/interface/web/dns/form/dns_soa.tform.php +++ b/interface/web/dns/form/dns_soa.tform.php @@ -94,7 +94,7 @@ $form["tabs"]['dns_soa'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{1,64}$/', + 'regex' => '/^[\w\.\-]{1,255}$/', 'errmsg'=> 'ns_error_regex'), ), 'default' => '', @@ -108,7 +108,7 @@ $form["tabs"]['dns_soa'] = array ( 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', 'errmsg'=> 'mbox_error_empty'), 1 => array ( 'type' => 'REGEX', - 'regex' => '/^[[a-zA-Z0-9\.\-\_]{0,64}\.$/', + 'regex' => '/^[[a-zA-Z0-9\.\-\_]{0,255}\.$/', 'errmsg'=> 'mbox_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_srv.tform.php b/interface/web/dns/form/dns_srv.tform.php index 0de461656a20139925bfbf21bb067893a24581b6..a30f6f32bf470017b75d39eeee2105ee9e6f2b23 100644 --- a/interface/web/dns/form/dns_srv.tform.php +++ b/interface/web/dns/form/dns_srv.tform.php @@ -78,7 +78,7 @@ $form["tabs"]['dns'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{0,64}$/', + 'regex' => '/^[\w\.\-]{0,255}$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/form/dns_txt.tform.php b/interface/web/dns/form/dns_txt.tform.php index a198d4e276eccf6d2c6e809c7c5ca2a073bba72c..e9d616d65d83da7a0d71d69fe0cb9d7eb4913330 100644 --- a/interface/web/dns/form/dns_txt.tform.php +++ b/interface/web/dns/form/dns_txt.tform.php @@ -78,7 +78,7 @@ $form["tabs"]['dns'] = array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[\w\.\-]{0,64}$/', + 'regex' => '/^[\w\.\-]{0,255}$/', 'errmsg'=> 'name_error_regex'), ), 'default' => '', diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng index 5d45f3409b5aa0ee4633c7e37a17f772a5770e9b..95afad415f7063b30478cf3e4961a23efcca1024 100644 --- a/interface/web/dns/lib/lang/en_dns_soa.lng +++ b/interface/web/dns/lib/lang/en_dns_soa.lng @@ -28,4 +28,5 @@ $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; $wb['eg_ns1_domain_tld'] = 'e.g. ns1.domain.tld'; $wb['eg_webmaster_domain_tld'] = 'e.g. webmaster@domain.tld'; +$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = 'The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'; ?> diff --git a/interface/web/dns/templates/dns_slave_edit.htm b/interface/web/dns/templates/dns_slave_edit.htm index 3305e63bf1d54a0b2ea8b313132c6dd21ecf5112..4cc0fde05c261d72c8fbd9fcee963f32cb0be08f 100644 --- a/interface/web/dns/templates/dns_slave_edit.htm +++ b/interface/web/dns/templates/dns_slave_edit.htm @@ -7,10 +7,18 @@
Secondary DNS Zone
- + + + + + + + {tmpl_var name='server_id'} + +
diff --git a/interface/web/dns/templates/dns_soa_edit.htm b/interface/web/dns/templates/dns_soa_edit.htm index 82e8fc20cf3188d97b5d846896e875e49316b619..fa8312304047f65e978917d8dbc56ca34c0198ab 100644 --- a/interface/web/dns/templates/dns_soa_edit.htm +++ b/interface/web/dns/templates/dns_soa_edit.htm @@ -7,10 +7,18 @@
DNS Zone
- + + + + + + + {tmpl_var name='server_id'} + +
diff --git a/interface/web/mail/lib/lang/en_mail_get.lng b/interface/web/mail/lib/lang/en_mail_get.lng index efb9628d12c5173e8f479b2a0a7c565c985e9f9c..85bf147558845ec74183e47eb2c760a6ba7af061 100644 --- a/interface/web/mail/lib/lang/en_mail_get.lng +++ b/interface/web/mail/lib/lang/en_mail_get.lng @@ -14,4 +14,5 @@ $wb["source_username_error_isempty"] = 'Username is empty.'; $wb["source_password_error_isempty"] = 'Password is empty.'; $wb["destination_error_isemail"] = 'No destination selected.'; $wb["source_server_error_regex"] = 'Pop3/Imap Server is not a valid domain name.'; +$wb["error_delete_read_all_combination"] = 'Illegal combination of options. You can not use "Delete emails after retrieval" = no together with "Retrieve all emails" = yes'; ?> \ No newline at end of file diff --git a/interface/web/mail/mail_get_edit.php b/interface/web/mail/mail_get_edit.php index 5bc512a75214c1907988a59c137a54ffcb81f02c..41434c05e583383413953b2d41d5d306bb5021c9 100644 --- a/interface/web/mail/mail_get_edit.php +++ b/interface/web/mail/mail_get_edit.php @@ -85,11 +85,17 @@ class page_action extends tform_actions { } } // end if user is not admin + // Set the server ID according to the selected destination $tmp = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE email = '".$app->db->quote($this->dataRecord["destination"])."'"); $this->dataRecord["server_id"] = $tmp["server_id"]; unset($tmp); + //* Check that no illegal combination of options is set + if((!isset($this->dataRecord['source_delete']) || @$this->dataRecord['source_delete'] == 'n') && $this->dataRecord['source_read_all'] == 'y') { + $app->tform->errorMessage .= $app->tform->lng('error_delete_read_all_combination')."
"; + } + parent::onSubmit(); } diff --git a/interface/web/sites/templates/web_aliasdomain_edit.htm b/interface/web/sites/templates/web_aliasdomain_edit.htm index e4f5cd192e72b780ede87ae41c7dae7823cbd768..9d8cd9d2415f784645d635ea81573a61dbe8b8b6 100644 --- a/interface/web/sites/templates/web_aliasdomain_edit.htm +++ b/interface/web/sites/templates/web_aliasdomain_edit.htm @@ -78,6 +78,7 @@ jQuery('#redirect_type option[value="R"]').hide(); jQuery('#redirect_type option[value="L"]').hide(); jQuery('#redirect_type option[value="R,L"]').hide(); + jQuery('#redirect_type option[value="R=301,L"]').hide(); jQuery('#redirect_type option[value="last"]').show(); jQuery('#redirect_type option[value="break"]').show(); @@ -94,8 +95,9 @@ jQuery('#redirect_type option[value="R"]').show(); jQuery('#redirect_type option[value="L"]').show(); jQuery('#redirect_type option[value="R,L"]').show(); + jQuery('#redirect_type option[value="R=301,L"]').show(); - if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } }); } diff --git a/interface/web/sites/templates/web_domain_redirect.htm b/interface/web/sites/templates/web_domain_redirect.htm index d3d8637c2a0a2cecc63256abdf05541a603fb10b..1c78b4146fbbf17288c5d5631d23a7b16ef15a48 100644 --- a/interface/web/sites/templates/web_domain_redirect.htm +++ b/interface/web/sites/templates/web_domain_redirect.htm @@ -51,13 +51,14 @@ jQuery('#redirect_type option[value="R"]').hide(); jQuery('#redirect_type option[value="L"]').hide(); jQuery('#redirect_type option[value="R,L"]').hide(); + jQuery('#redirect_type option[value="R=301,L"]').hide(); if(selected != "no" && selected != "" && selected != "last" && selected != "break" && selected != "redirect" && selected != "permanent") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } else { jQuery('#redirect_type option[value="last"]').hide(); jQuery('#redirect_type option[value="break"]').hide(); jQuery('#redirect_type option[value="redirect"]').hide(); jQuery('#redirect_type option[value="permanent"]').hide(); - if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } }); } diff --git a/interface/web/sites/templates/web_subdomain_edit.htm b/interface/web/sites/templates/web_subdomain_edit.htm index f25cc6e068b67dc360a76315fb53ef4ad36014b4..85f35c77fa01b885af45674f98c529b9f69186c9 100644 --- a/interface/web/sites/templates/web_subdomain_edit.htm +++ b/interface/web/sites/templates/web_subdomain_edit.htm @@ -65,6 +65,7 @@ jQuery('#redirect_type option[value="R"]').hide(); jQuery('#redirect_type option[value="L"]').hide(); jQuery('#redirect_type option[value="R,L"]').hide(); + jQuery('#redirect_type option[value="R=301,L"]').hide(); jQuery('#redirect_type option[value="last"]').show(); jQuery('#redirect_type option[value="break"]').show(); @@ -81,8 +82,9 @@ jQuery('#redirect_type option[value="R"]').show(); jQuery('#redirect_type option[value="L"]').show(); jQuery('#redirect_type option[value="R,L"]').show(); + jQuery('#redirect_type option[value="R=301,L"]').show(); - if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } }); } diff --git a/interface/web/sites/tools.inc.php b/interface/web/sites/tools.inc.php index 11285e66d289b3975924500c2b2592d796384568..38e8804322c066850b3ee6777202fe3dc735aa7f 100644 --- a/interface/web/sites/tools.inc.php +++ b/interface/web/sites/tools.inc.php @@ -55,9 +55,7 @@ function replacePrefix($name, $dataRecord) { function getClientName($dataRecord) { global $app, $conf; - /* FS#1234 - CLIENTNAME value when in reseller account - need check this workarround impact */ - //if($_SESSION["s"]["user"]["typ"] != 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) { - if($_SESSION["s"]["user"]["typ"] != 'admin' && ! $app->auth->has_clients($_SESSION['s']['user']['userid'])) { + if($_SESSION["s"]["user"]["typ"] != 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) { // Get the group-id of the user $client_group_id = $_SESSION["s"]["user"]["default_group"]; } else { diff --git a/interface/web/sites/web_domain_edit.php b/interface/web/sites/web_domain_edit.php index 16643649b279dd84d0c2675ce61f433ac5ea6cae..b6236bd3fad5e1f8c44dc84b105a5957daacf952 100644 --- a/interface/web/sites/web_domain_edit.php +++ b/interface/web/sites/web_domain_edit.php @@ -537,7 +537,7 @@ class page_action extends tform_actions { function onAfterUpdate() { global $app, $conf; - // make sure that the record belongs to the clinet group and not the admin group when a admin inserts it + // make sure that the record belongs to the client group and not the admin group when a admin inserts it // also make sure that the user can not delete domain created by a admin if($_SESSION["s"]["user"]["typ"] == 'admin' && isset($this->dataRecord["client_group_id"])) { $client_group_id = intval($this->dataRecord["client_group_id"]); diff --git a/remoting_client/examples/mail_forward_get.php b/remoting_client/examples/mail_forward_get.php index e47d5784bcd1557e64115c47913289733a9f9646..31c35ca483b272352f0517aa59d820486d6b867a 100644 --- a/remoting_client/examples/mail_forward_get.php +++ b/remoting_client/examples/mail_forward_get.php @@ -18,6 +18,7 @@ try { $forwarding_id = 1; $mail_forwarding_record = $client->mail_forward_get($session_id, $forwarding_id); + // $mail_forwarding_record = $client->mail_forward_get($session_id, array('source' => '%@test.int')); print_r($mail_forwarding_record); diff --git a/remoting_client/examples/sites_database_add.php b/remoting_client/examples/sites_database_add.php index 2d2ee33d22d65f2335aaecd604c930a82075967a..0337dad1648713635dbf277007cc346e4edab5e5 100644 --- a/remoting_client/examples/sites_database_add.php +++ b/remoting_client/examples/sites_database_add.php @@ -18,12 +18,12 @@ try { $client_id = 1; $params = array( 'server_id' => 1, - 'type' => 'y', - 'database_name' => 'db_o', - 'database_user' => 'test', - 'database_password' => 'test', + 'type' => 'mysql', + 'database_name' => 'db_name1', + 'database_user' => 'db_name1', + 'database_password' => 'db_name1', 'database_charset' => 'UTF8', - 'remote_access' => 'y', + 'remote_access' => 'n', 'remote_ips' => '', 'active' => 'y' ); diff --git a/remoting_client/examples/soap_config.php b/remoting_client/examples/soap_config.php index b3c282d0f9b2affe2de61aa6a922bd1e2e88308d..34876770117a075fe570410e273a21571a15ef2f 100644 --- a/remoting_client/examples/soap_config.php +++ b/remoting_client/examples/soap_config.php @@ -8,7 +8,7 @@ $soap_location = 'http://localhost:8080/ispconfig3/interface/web/remote/index.ph $soap_uri = 'http://localhost:8080/ispconfig3/interface/web/remote/'; */ -$soap_location = 'http://192.168.0.110:8080/remote/index.php'; -$soap_uri = 'http://192.168.0.110:8080/remote/'; +$soap_location = 'http://192.168.0.105:8080/remote/index.php'; +$soap_uri = 'http://192.168.0.105:8080/remote/'; ?> diff --git a/server/conf/awstats_index.php.master b/server/conf/awstats_index.php.master index f3867d371074b5372b7cdcffc400db0fc4a6b34e..f7222c968721c87da286dc0ec937e25346bd58cc 100644 --- a/server/conf/awstats_index.php.master +++ b/server/conf/awstats_index.php.master @@ -32,9 +32,12 @@ if ($handle = opendir('.')) } $current = $year.$month; - $awprev[$current] = $year."-".$month; + if ( $month < 10 ) { + $current = $year."0".$month; + } + $awprev[$current] = $year."-".$month; - closedir($handle); + closedir($handle); } arsort($awprev); diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 11bc4bcfa38ab6833b86cf60598ccf08d7f9fc82..1d29d0709e333da386eb31a4e674968761d5ad89 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -26,7 +26,7 @@ ErrorLog /var/log/ispconfig/httpd//error.log - + Alias /error/ "/error/" ErrorDocument 400 /error/400.html ErrorDocument 401 /error/401.html ErrorDocument 403 /error/403.html diff --git a/server/cron_daily.php b/server/cron_daily.php index 3f86a262b87dcc5d671c8f3d5f1f26667fd2e05f..67d9945875dba6d3d7b3549d259abf9cb08c8775 100644 --- a/server/cron_daily.php +++ b/server/cron_daily.php @@ -180,7 +180,7 @@ foreach($records as $rec) { if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file); - $sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR type = 'subdomain') server_id = ".$conf['server_id']; + $sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR type = 'subdomain') AND server_id = ".$conf['server_id']; $aliases = $app->db->queryAllRecords($sql); $aliasdomain = ''; diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 5de2f8150433b54410bb8bb63b86e22d99f989b5..7537ef4b3eb4b9ddfad6a09cc366748ac67af86c 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -1253,6 +1253,24 @@ class system{ $app->log('Created Maildir '.$maildir_path.' with subfolder: '.$subfolder,LOGLEVEL_DEBUG); } + + //* Function to create directory paths and chown them to a user and group + function mkdirpath($path, $mode = 0755, $user = '', $group = '') { + $path_parts = explode('/',$path); + $new_path = ''; + if(is_array($path_parts)) { + foreach($path_parts as $part) { + $new_path .= '/'.$part; + if(!@is_dir($new_path)) { + mkdir($new_path); + chmod($new_path,$mode); + if($user != '') chown($new_path,$user); + if($group != '') chgrp($new_path,$group); + } + } + } + + } } ?> diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 935fc9ea851a816d47c6b11fc90044539a28a908..66940a55db023d6800f497e42ffafc493de19e04 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -363,7 +363,13 @@ class apache2_plugin { unset($tmp_docroot[count($tmp_docroot)-1]); $old_dir = implode('/',$tmp_docroot); - exec('rm -rf '.$data['new']['document_root']); + //* Check if there is already some data in the new docroot and rename it as we need a clean path to move the existing site to the new path + if(@is_dir($data['new']['document_root'])) { + rename($data['new']['document_root'],$data['new']['document_root'].'_bak_'.date('Y_m_d')); + $app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d'),LOGLEVEL_DEBUG); + } + + //* Create new base directory, if it does not exist yet if(!is_dir($new_dir)) exec('mkdir -p '.$new_dir); exec('mv '.$data['old']['document_root'].' '.$new_dir); $app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir,LOGLEVEL_DEBUG); diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php index e5a7120d16d1e53402eb6f4e259c36da6642a81e..bb98f363b51afae6f8a43f3b71c9a5593e948507 100644 --- a/server/plugins-available/bind_plugin.inc.php +++ b/server/plugins-available/bind_plugin.inc.php @@ -208,6 +208,16 @@ class bind_plugin { if(is_file($filename)) unset($filename); } + //* Ensure that the named slave directory is writable by the named user + if (file_exists('/etc/gentoo-release')) { + $slave_record_dir = $dns_config['bind_zonefiles_dir'].'/sec'; + } else { + $slave_record_dir = $dns_config['bind_zonefiles_dir'].'/slave'; + } + if(!@is_dir($slave_record_dir)) mkdir($slave_record_dir,0770); + chown($slave_record_dir,$dns_config['bind_user']); + chgrp($slave_record_dir,$dns_config['bind_group']); + //* Reload bind nameserver $app->services->restartServiceDelayed('bind','reload'); diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php index 6781fb63684655586d9168530cd498811f9809f6..4c6912f3fd9fcb37de87714c747b6567149ebd09 100644 --- a/server/plugins-available/mail_plugin.inc.php +++ b/server/plugins-available/mail_plugin.inc.php @@ -91,18 +91,18 @@ class mail_plugin { $tmp_basepath_parts = explode('/',$tmp_basepath); unset($tmp_basepath_parts[count($tmp_basepath_parts)-1]); $base_path = implode('/',$tmp_basepath_parts); - - //* Create the mail domain directory, if it does not exist if(!empty($base_path) && !is_dir($base_path)) { - exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']); + //exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']); + $app->system->mkdirpath($base_path, 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']); $app->log('Created Directory: '.$base_path,LOGLEVEL_DEBUG); } // Dovecot uses a different mail layout with a separate 'Maildir' subdirectory. if($mail_config['pop3_imap_daemon'] == 'dovecot') { - exec("su -c 'mkdir -p ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']); + //exec("su -c 'mkdir -p ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']); + $app->system->mkdirpath($maildomain_path, 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']); $app->log('Created Directory: '.$maildomain_path,LOGLEVEL_DEBUG); $maildomain_path .= '/Maildir'; } @@ -160,24 +160,30 @@ class mail_plugin { //* Send the welcome email message if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt')) { - $tmp = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt'); + $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$conf['language'].'.txt'); } elseif(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt')) { - $tmp = file($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt'); + $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_en.txt'); } elseif(file_exists($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt')) { - $tmp = file($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt'); + $lines = file($conf['rootpath'].'/conf/mail/welcome_email_'.$conf['language'].'.txt'); } else { - $tmp = file($conf['rootpath'].'/conf/mail/welcome_email_en.txt'); + $lines = file($conf['rootpath'].'/conf/mail/welcome_email_en.txt'); } - $welcome_mail_from = trim(substr($tmp[0],5)); - $welcome_mail_subject = trim(substr($tmp[1],8)); - unset($tmp[0]); - unset($tmp[1]); - $welcome_mail_message = trim(implode($tmp)); - unset($tmp); + //* Get from address + $parts = explode(':',trim($lines[0])); + unset($parts[0]); + $welcome_mail_from = implode(':',$parts); + unset($lines[0]); - $welcomeFromEmail = $mail_config['admin_mail']; - $welcomeFromName = $mail_config['admin_name']; + //* Get subject + $parts = explode(':',trim($lines[1])); + unset($parts[0]); + $welcome_mail_subject = implode(':',$parts); + unset($lines[1]); + + //* Get message + $welcome_mail_message = trim(implode($lines)); + unset($tmp); $mailHeaders = "MIME-Version: 1.0" . "\n"; $mailHeaders .= "Content-type: text/plain; charset=utf-8" . "\n"; @@ -185,12 +191,10 @@ class mail_plugin { $mailHeaders .= "From: $welcome_mail_from" . "\n"; $mailHeaders .= "Reply-To: $welcome_mail_from" . "\n"; $mailTarget = $data["new"]["email"]; - // $mailSubject = "=?utf-8?Q?" . imap_8bit($welcome_mail_subject) . "?="; $mailSubject = "=?utf-8?B?".base64_encode($welcome_mail_subject)."?="; mail($mailTarget, $mailSubject, $welcome_mail_message, $mailHeaders); - } function user_update($event_name,$data) { @@ -221,13 +225,14 @@ class mail_plugin { //* Create the mail domain directory, if it does not exist if(!empty($base_path) && !is_dir($base_path)) { - exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']); + //exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']); + $app->system->mkdirpath($base_path, 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']); $app->log('Created Directory: '.$base_path,LOGLEVEL_DEBUG); } // Dovecot uses a different mail layout with a separate 'Maildir' subdirectory. if($mail_config['pop3_imap_daemon'] == 'dovecot') { - exec("su -c 'mkdir -p ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']); + $app->system->mkdirpath($maildomain_path, 0700, $mail_config['mailuser_name'], $mail_config['mailuser_group']); $app->log('Created Directory: '.$base_path,LOGLEVEL_DEBUG); $maildomain_path .= '/Maildir'; } diff --git a/server/plugins-available/mailman_plugin.inc.php b/server/plugins-available/mailman_plugin.inc.php index fd2fa7a59277a5689c0a3de5f8d971aa0becdebf..ac360700d875b768ddbed35e4a0d0369da009676 100644 --- a/server/plugins-available/mailman_plugin.inc.php +++ b/server/plugins-available/mailman_plugin.inc.php @@ -113,7 +113,11 @@ class mailman_plugin { $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); // load files - $content = file_get_contents($conf["rootpath"]."/conf/mm_cfg.py.master"); + if(file_exists($conf["rootpath"]."/conf/mm_cfg.py.master")) { + $content = file_get_contents($conf["rootpath"]."/conf-custom/mm_cfg.py.master"); + } else { + $content = file_get_contents($conf["rootpath"]."/conf/mm_cfg.py.master"); + } $old_file = file_get_contents($this->mailman_config_dir."/mm_cfg.py"); $old_options = array(); diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 79fa68d093363af528d9e321230acbed5341ffa6..149a4d1ce7cf09305d4f0a95d5c3c1b2339ed398 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -41,7 +41,7 @@ class nginx_plugin { function onInstall() { global $conf; - if($conf['services']['web'] == true) { + if($conf['services']['web'] == true && !@is_link('/usr/local/ispconfig/server/plugins-enabled/apache2_plugin.inc.php')) { return true; } else { return false; @@ -256,7 +256,13 @@ class nginx_plugin { function update($event_name,$data) { global $app, $conf; - + + //* Check if the apache plugin is enabled + if(@is_link('/usr/local/ispconfig/server/plugins-enabled/apache2_plugin.inc.php')) { + $app->log('The nginx plugin can not be used together with the apache2 plugin..',LOGLEVEL_WARN); + return 0; + } + if($this->action != 'insert') $this->action = 'update'; if($data['new']['type'] != 'vhost' && $data['new']['parent_domain_id'] > 0) { @@ -333,8 +339,14 @@ class nginx_plugin { $tmp_docroot = explode('/',$data['old']['document_root']); unset($tmp_docroot[count($tmp_docroot)-1]); $old_dir = implode('/',$tmp_docroot); - - exec('rm -rf '.$data['new']['document_root']); + + //* Check if there is already some data in the new docroot and rename it as we need a clean path to move the existing site to the new path + if(@is_dir($data['new']['document_root'])) { + rename($data['new']['document_root'],$data['new']['document_root'].'_bak_'.date('Y_m_d')); + $app->log('Renaming existing directory in new docroot location. mv '.$data['new']['document_root'].' '.$data['new']['document_root'].'_bak_'.date('Y_m_d'),LOGLEVEL_DEBUG); + } + + //* Create new base directory, if it does not exist yet if(!is_dir($new_dir)) exec('mkdir -p '.$new_dir); exec('mv '.$data['old']['document_root'].' '.$new_dir); $app->log('Moving site to new document root: mv '.$data['old']['document_root'].' '.$new_dir,LOGLEVEL_DEBUG);