diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index ed3c04330a24f475b8a85c59c7bdbe7e3b821ec4..d68a20842a64c8eb6d3843268bb5722d4e890633 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -233,33 +233,10 @@ class installer_base {
$sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);";
$this->db->query($sql);
- //* insert the ispconfig user in the remote server
- $from_host = $conf['hostname'];
- $from_ip = gethostbyname($conf['hostname']);
-
//* username for the ispconfig user
$conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
-
- //* Delete ISPConfig user in the master database, in case that it exists
- $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';");
- $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';");
- $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';");
- $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';");
- $this->dbmaster->query('FLUSH PRIVILEGES;');
-
- //* Create the ISPConfig database user in the remote database
- $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
- ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_host."' "
- ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
- if(!$this->dbmaster->query($query)) {
- $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
- }
- $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
- ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_ip."' "
- ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
- if(!$this->dbmaster->query($query)) {
- $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
- }
+
+ $this->grant_master_database_rights();
} else {
//* Insert the server, if its not a mster / slave setup
@@ -272,6 +249,78 @@ class installer_base {
}
+ public function grant_master_database_rights()
+ {
+ global $conf;
+
+ if($conf['mysql']['master_slave_setup'] != 'y') return;
+
+ //* insert the ispconfig user in the remote server
+ $from_host = $conf['hostname'];
+ $from_ip = gethostbyname($conf['hostname']);
+
+ //* Delete ISPConfig user in the master database, in case that it exists
+ $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';");
+ $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';");
+ $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';");
+ $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';");
+ $this->dbmaster->query('FLUSH PRIVILEGES;');
+
+ $hosts = array($from_host, $from_ip);
+
+ foreach($hosts as $src_host) {
+ //* Create the ISPConfig database user in the remote database
+ $query = "GRANT SELECT ON ".$conf['mysql']['master_database'].".`server` "
+ ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
+ ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+ if(!$this->dbmaster->query($query)) {
+ $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
+ }
+
+ $query = "GRANT SELECT, INSERT ON ".$conf['mysql']['master_database'].".`sys_log` "
+ ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
+ ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+ if(!$this->dbmaster->query($query)) {
+ $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
+ }
+
+ $query = "GRANT SELECT, UPDATE(`status`) ON ".$conf['mysql']['master_database'].".`sys_datalog` "
+ ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
+ ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+ if(!$this->dbmaster->query($query)) {
+ $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
+ }
+
+ $query = "GRANT UPDATE(`status`) ON ".$conf['mysql']['master_database'].".`software_update_inst` "
+ ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
+ ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+ if(!$this->dbmaster->query($query)) {
+ $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
+ }
+
+ $query = "GRANT UPDATE (`ssl_request`, `ssl_cert`, `ssl_action`) ON ".$conf['mysql']['master_database'].".`web_domain` "
+ ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
+ ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+ if(!$this->dbmaster->query($query)) {
+ $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
+ }
+
+ $query = "GRANT SELECT ON ".$conf['mysql']['master_database'].".`sys_group` "
+ ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
+ ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+ if(!$this->dbmaster->query($query)) {
+ $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
+ }
+
+ $query = "GRANT INSERT , DELETE ON ".$conf['mysql']['master_database'].".`monitor_data` "
+ ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
+ ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
+ if(!$this->dbmaster->query($query)) {
+ $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
+ }
+ }
+
+ }
//** writes postfix configuration files
public function process_postfix_config($configfile)
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index e6f9dc8970e2cac4d528d8d544baaf3eb72d17f9..448c0a846a9846efcf1e07276771540e334308ee 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1010,6 +1010,7 @@ CREATE TABLE `web_database` (
`database_password` varchar(64) default NULL,
`database_charset` varchar(64) default NULL,
`remote_access` enum('n','y') NOT NULL default 'y',
+ `remote_ips` text NOT NULL,
`active` enum('n','y') NOT NULL default 'y',
PRIMARY KEY (`database_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1;
diff --git a/install/update.php b/install/update.php
index d4d0058e5e3f6d7655987d58fdb8c020f7493295..727dfd0e53c7672bdbf830a53157e2a07d5c3683 100644
--- a/install/update.php
+++ b/install/update.php
@@ -165,6 +165,9 @@ if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['mysql']['database']) ) {
//** Create the mysql database
$inst->configure_database();
+//** Update master database rights
+$inst->grant_master_database_rights();
+
//** empty all databases
$db_tables = $inst->db->getTables();
diff --git a/interface/lib/classes/validate_database.inc.php b/interface/lib/classes/validate_database.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..c4ea5d027801f0db3811e00b7423adc5fb18b42b
--- /dev/null
+++ b/interface/lib/classes/validate_database.inc.php
@@ -0,0 +1,72 @@
+255)
+ $valid=false;
+ }
+ } else {
+ $valid = false;
+ }
+
+ if($valid == false) {
+ $errmsg = $validator['errmsg'];
+ if(isset($app->tform->wordbook[$errmsg])) {
+ return $app->tform->wordbook[$errmsg]."
\r\n";
+ } else {
+ return $errmsg."
\r\n";
+ }
+ }
+ }
+ }
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/interface/lib/classes/validate_ftpuser.inc.php b/interface/lib/classes/validate_ftpuser.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e04cb99ca367f1a7e40270b42cfa1467e453cb2
--- /dev/null
+++ b/interface/lib/classes/validate_ftpuser.inc.php
@@ -0,0 +1,89 @@
+tform->primary_id == 0) {
+ $errmsg = $validator['errmsg'];
+ if(isset($app->tform->wordbook[$errmsg])) {
+ return $app->tform->wordbook[$errmsg]."
\r\n";
+ } else {
+ return $errmsg."
\r\n";
+ }
+ }
+
+
+ $ftp_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM ftp_user WHERE ftp_user_id = '".$app->db->quote($app->tform->primary_id)."'");
+ if(!$ftp_data["parent_domain_id"]) {
+ $errmsg = $validator['errmsg'];
+ if(isset($app->tform->wordbook[$errmsg])) {
+ return $app->tform->wordbook[$errmsg]."
\r\n";
+ } else {
+ return $errmsg."
\r\n";
+ }
+ }
+
+ $domain_data = $app->db->queryOneRecord("SELECT domain_id, document_root FROM web_domain WHERE domain_id = '".$app->db->quote($ftp_data["parent_domain_id"])."'");
+ if(!$domain_data["domain_id"]) {
+ $errmsg = $validator['errmsg'];
+ if(isset($app->tform->wordbook[$errmsg])) {
+ return $app->tform->wordbook[$errmsg]."
\r\n";
+ } else {
+ return $errmsg."
\r\n";
+ }
+ }
+
+ $doc_root = $domain_data["document_root"];
+ $is_ok = false;
+ if($doc_root == $field_value) $is_ok = true;
+
+ $doc_root .= "/";
+ if(substr($field_value, 0, strlen($doc_root)) == $doc_root) $is_ok = true;
+
+ if($is_ok == false) {
+ $errmsg = $validator['errmsg'];
+ if(isset($app->tform->wordbook[$errmsg])) {
+ return $app->tform->wordbook[$errmsg]."
\r\n";
+ } else {
+ return $errmsg."
\r\n";
+ }
+ }
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/interface/web/admin/software_package_list.php b/interface/web/admin/software_package_list.php
index 19a7518a12fc177b4c769eb3e55e7bfb10243810..24c53ec455cc3ec08d4e3b469e13e752315bd326 100644
--- a/interface/web/admin/software_package_list.php
+++ b/interface/web/admin/software_package_list.php
@@ -62,7 +62,46 @@ if(is_array($repos)) {
}
}
}
-
+
+ $packages = $app->db->queryAllRecords("SELECT software_package.package_name, v1, v2, v3, v4 FROM software_package LEFT JOIN software_update ON ( software_package.package_name = software_update.package_name ) GROUP BY package_name ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC");
+ if(is_array($packages)) {
+ foreach($packages as $p) {
+
+ $version = $p['v1'].'.'.$p['v2'].'.'.$p['v3'].'.'.$p['v4'];
+ $updates = $client->get_updates($p['package_name'], $version,$repo['repo_username'], $repo['repo_password']);
+
+ if(is_array($updates)) {
+ foreach($updates as $u) {
+
+ $version_array = explode('.',$u['version']);
+ $v1 = intval($version_array[0]);
+ $v2 = intval($version_array[1]);
+ $v3 = intval($version_array[2]);
+ $v4 = intval($version_array[3]);
+
+ $package_name = $app->db->quote($u['package_name']);
+ $software_repo_id = intval($repo['software_repo_id']);
+ $update_url = $app->db->quote($u['url']);
+ $update_md5 = $app->db->quote($u['md5']);
+ $update_dependencies = (isset($u['dependencies']))?$app->db->quote($u['dependencies']):'';
+ $update_title = $app->db->quote($u['title']);
+ $type = $app->db->quote($u['type']);
+
+ // Check that we do not have this update in the database yet
+ $sql = "SELECT * FROM software_update WHERE package_name = '$package_name' and v1 = '$v1' and v2 = '$v2' and v3 = '$v3' and v4 = '$v4'";
+ $tmp = $app->db->queryOneRecord($sql);
+ if(!isset($tmp['software_update_id'])) {
+ // Insert the update in the datbase
+ $sql = "INSERT INTO software_update (software_repo_id, package_name, update_url, update_md5, update_dependencies, update_title, v1, v2, v3, v4, type)
+ VALUES ($software_repo_id, '$package_name', '$update_url', '$update_md5', '$update_dependencies', '$update_title', '$v1', '$v2', '$v3', '$v4', '$type')";
+ //die($sql);
+ $app->db->query($sql);
+ }
+
+ }
+ }
+ }
+ }
}
}
@@ -74,8 +113,8 @@ if(isset($_GET['action']) && $_GET['action'] == 'install' && $_GET['package'] !=
$tmp = $app->db->queryOneRecord($sql);
$software_update_id = $tmp['software_update_id'];
- // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
- $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
+ $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
+ // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
$app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id');
}
@@ -100,8 +139,10 @@ if(is_array($packages)) {
if($inst['status'] == 'installed') {
$installed_txt .= $s['server_name'].": Installed version $version
";
- } elseif ($inst['status'] == 'installing') {
- $installed_txt .= $s['server_name'].": Installation in progress
";
+ } elseif ($inst['status'] == 'installing') {
+ $installed_txt .= $s['server_name'].": Installation in progress
";
+ } elseif ($inst['status'] == 'failed') {
+ $installed_txt .= $s['server_name'].": Installation failed
";
} elseif ($inst['status'] == 'deleting') {
$installed_txt .= $s['server_name'].": Deletion in progress
";
} else {
diff --git a/interface/web/admin/software_update_list.php b/interface/web/admin/software_update_list.php
index d4255b76c6279582182355ba0d61dedd2db3dfc6..03d2658667c4b00856ec4f6aa1b176baec28a7c0 100644
--- a/interface/web/admin/software_update_list.php
+++ b/interface/web/admin/software_update_list.php
@@ -104,8 +104,8 @@ if(isset($_GET['action']) && $_GET['action'] == 'install' && $_GET['package'] !=
$server_id = intval($_GET['server_id']);
$software_update_id = intval($_GET['id']);
- // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
- $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
+ $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
+ // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
$app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id');
}
diff --git a/interface/web/sites/form/database.tform.php b/interface/web/sites/form/database.tform.php
index 7ea10eed6f6b9da83495072a2be92029b975dc6d..3a7a947daa4294241830a71fc65ff2fac92cb760 100644
--- a/interface/web/sites/form/database.tform.php
+++ b/interface/web/sites/form/database.tform.php
@@ -133,6 +133,18 @@ $form["tabs"]['database'] = array (
'default' => 'y',
'value' => array(0 => 'n',1 => 'y')
),
+ 'remote_ips' => array (
+ 'datatype' => 'TEXT',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'CUSTOM',
+ 'class' => 'validate_database',
+ 'function' => 'valid_ip_list',
+ 'errmsg' => 'database_remote_error_ips'),
+ ),
+ 'default' => '',
+ 'value' => '',
+ 'width' => '60'
+ ),
##################################
# ENDE Datatable fields
##################################
diff --git a/interface/web/sites/form/ftp_user.tform.php b/interface/web/sites/form/ftp_user.tform.php
index 4950a1b2d649abc0206c2261aacb67661a5333d9..a1d6e156fefb2b26ad692998210a3551e9b73664 100644
--- a/interface/web/sites/form/ftp_user.tform.php
+++ b/interface/web/sites/form/ftp_user.tform.php
@@ -131,93 +131,125 @@ $form["tabs"]['ftp'] = array (
if($_SESSION["s"]["user"]["typ"] == 'admin') {
$form["tabs"]['advanced'] = array (
- 'title' => "Options",
- 'width' => 100,
- 'template' => "templates/ftp_user_advanced.htm",
- 'fields' => array (
- ##################################
- # Begin Datatable fields
- ##################################
- 'uid' => array (
- 'datatype' => 'VARCHAR',
- 'formtype' => 'TEXT',
- 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
- 'errmsg'=> 'uid_error_empty'),
- ),
- 'default' => '0',
- 'value' => '',
- 'width' => '30',
- 'maxlength' => '255'
- ),
- 'gid' => array (
- 'datatype' => 'VARCHAR',
- 'formtype' => 'TEXT',
- 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
- 'errmsg'=> 'uid_error_empty'),
- ),
- 'default' => '0',
- 'value' => '',
- 'width' => '30',
- 'maxlength' => '255'
- ),
- 'dir' => array (
- 'datatype' => 'VARCHAR',
- 'formtype' => 'TEXT',
- 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
- 'errmsg'=> 'directory_error_empty'),
- ),
- 'default' => '',
- 'value' => '',
- 'width' => '30',
- 'maxlength' => '255'
- ),
- 'quota_files' => array (
- 'datatype' => 'INTEGER',
- 'formtype' => 'TEXT',
- 'default' => '0',
- 'value' => '',
- 'width' => '7',
- 'maxlength' => '7'
- ),
- 'ul_ratio' => array (
- 'datatype' => 'INTEGER',
- 'formtype' => 'TEXT',
- 'default' => '0',
- 'value' => '',
- 'width' => '7',
- 'maxlength' => '7'
- ),
- 'dl_ratio' => array (
- 'datatype' => 'INTEGER',
- 'formtype' => 'TEXT',
- 'default' => '0',
- 'value' => '',
- 'width' => '7',
- 'maxlength' => '7'
- ),
- 'ul_bandwidth' => array (
- 'datatype' => 'INTEGER',
- 'formtype' => 'TEXT',
- 'default' => '0',
- 'value' => '',
- 'width' => '7',
- 'maxlength' => '7'
- ),
- 'dl_bandwidth' => array (
- 'datatype' => 'INTEGER',
- 'formtype' => 'TEXT',
- 'default' => '0',
- 'value' => '',
- 'width' => '7',
- 'maxlength' => '7'
- ),
- ##################################
- # ENDE Datatable fields
- ##################################
- )
+ 'title' => "Options",
+ 'width' => 100,
+ 'template' => "templates/ftp_user_advanced.htm",
+ 'fields' => array (
+ ##################################
+ # Begin Datatable fields
+ ##################################
+ 'uid' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'uid_error_empty'),
+ ),
+ 'default' => '0',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ 'gid' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'uid_error_empty'),
+ ),
+ 'default' => '0',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ 'dir' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'directory_error_empty'),
+ ),
+ 'default' => '',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ 'quota_files' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'default' => '0',
+ 'value' => '',
+ 'width' => '7',
+ 'maxlength' => '7'
+ ),
+ 'ul_ratio' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'default' => '0',
+ 'value' => '',
+ 'width' => '7',
+ 'maxlength' => '7'
+ ),
+ 'dl_ratio' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'default' => '0',
+ 'value' => '',
+ 'width' => '7',
+ 'maxlength' => '7'
+ ),
+ 'ul_bandwidth' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'default' => '0',
+ 'value' => '',
+ 'width' => '7',
+ 'maxlength' => '7'
+ ),
+ 'dl_bandwidth' => array (
+ 'datatype' => 'INTEGER',
+ 'formtype' => 'TEXT',
+ 'default' => '0',
+ 'value' => '',
+ 'width' => '7',
+ 'maxlength' => '7'
+ ),
+ ##################################
+ # ENDE Datatable fields
+ ##################################
+ )
+);
+
+} else {
+
+$form["tabs"]['advanced'] = array (
+ 'title' => "Options",
+ 'width' => 100,
+ 'template' => "templates/ftp_user_advanced_client.htm",
+ 'fields' => array (
+ ##################################
+ # Begin Datatable fields
+ ##################################
+ 'dir' => array (
+ 'datatype' => 'VARCHAR',
+ 'formtype' => 'TEXT',
+ 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY',
+ 'errmsg'=> 'directory_error_empty'),
+ 1 => array ( 'type' => 'CUSTOM',
+ 'class' => 'validate_ftpuser',
+ 'function' => 'ftp_dir',
+ 'errmsg' => 'directory_error_notinweb'),
+ ),
+ 'default' => '',
+ 'value' => '',
+ 'width' => '30',
+ 'maxlength' => '255'
+ ),
+ ##################################
+ # ENDE Datatable fields
+ ##################################
+ )
);
}
+
?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/de_database.lng b/interface/web/sites/lib/lang/de_database.lng
index 8224fa31292c1a0b707cc3cc1f2072fe54463c68..66241efa8761b2f01a44c4a0d866ea1fba54d2bd 100644
--- a/interface/web/sites/lib/lang/de_database.lng
+++ b/interface/web/sites/lib/lang/de_database.lng
@@ -6,6 +6,8 @@ $wb['database_user_txt'] = 'Datenbank Benutzer';
$wb['database_password_txt'] = 'Datenbank Passwort';
$wb['database_charset_txt'] = 'Datenbank Zeichensatz';
$wb['remote_access_txt'] = 'Remotezugang';
+$wb['remote_ips_txt'] = 'Remotezugang-IPs (mit Komma trennen, keine Eingabe für alle)';
+$wb['database_remote_error_ips'] = 'Mindestens eine der eingegebenen IP Adressen ist ungültig.';
$wb['client_txt'] = 'Kunde';
$wb['active_txt'] = 'Aktiv';
$wb['database_name_error_empty'] = 'Datenbankname ist leer.';
diff --git a/interface/web/sites/lib/lang/de_ftp_user.lng b/interface/web/sites/lib/lang/de_ftp_user.lng
index ea02532350b325cd1ab8ee22d1ba5059b66556d3..39912890baebed06700e2b1f559fe302ce230e97 100644
--- a/interface/web/sites/lib/lang/de_ftp_user.lng
+++ b/interface/web/sites/lib/lang/de_ftp_user.lng
@@ -22,4 +22,5 @@ $wb['quota_size_error_empty'] = 'Quota ist leer.';
$wb['uid_error_empty'] = 'GID ist leer.';
$wb['directory_error_empty'] = 'Verzeichniss ist leer.';
$wb['password_strength_txt'] = 'Passwortkomplexität';
+$wb['directory_error_notinweb'] = 'Das Verzeichnis befindet sich nicht innerhalb des Verzeichnisses der Website.';
?>
diff --git a/interface/web/sites/lib/lang/en_database.lng b/interface/web/sites/lib/lang/en_database.lng
index df47802c955371b35a16bc75b80694d2e5e231b4..555511af3a3fcf5914e7c688c7ae7a7fa1fc104a 100644
--- a/interface/web/sites/lib/lang/en_database.lng
+++ b/interface/web/sites/lib/lang/en_database.lng
@@ -7,6 +7,8 @@ $wb["database_password_txt"] = 'Database password';
$wb["password_strength_txt"] = 'Password strength';
$wb["database_charset_txt"] = 'Database charset';
$wb["remote_access_txt"] = 'Remote Access';
+$wb["remote_ips_txt"] = 'Remote Access IPs (separate by , and leave blank for any)';
+$wb["database_remote_error_ips"] = 'At least one of the entered ip addresses is invalid.';
$wb["client_txt"] = 'Client';
$wb["active_txt"] = 'Active';
$wb["database_name_error_empty"] = 'Database name is empty.';
diff --git a/interface/web/sites/lib/lang/en_ftp_user.lng b/interface/web/sites/lib/lang/en_ftp_user.lng
index 691bc7d0f2d290d0acffefdd1333467958244ef8..f4554de80223af2f91ec910826d060eae0a6c34d 100644
--- a/interface/web/sites/lib/lang/en_ftp_user.lng
+++ b/interface/web/sites/lib/lang/en_ftp_user.lng
@@ -23,4 +23,5 @@ $wb["quota_size_error_empty"] = 'Quota is empty.';
$wb["uid_error_empty"] = 'UID empty.';
$wb["uid_error_empty"] = 'GID empty.';
$wb["directory_error_empty"] = 'Directory empty.';
+$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
diff --git a/interface/web/sites/templates/database_edit.htm b/interface/web/sites/templates/database_edit.htm
index cb982f3854a860cb889e883d02765a90281391c7..da5ffecf1a2a9e5c74416c95ca3612729b460621 100644
--- a/interface/web/sites/templates/database_edit.htm
+++ b/interface/web/sites/templates/database_edit.htm
@@ -80,11 +80,15 @@
{tmpl_var name='remote_access_txt'}
-{tmpl_var name='remote_access_txt'}
+{tmpl_var name='active_txt'}