Skip to content

Commit 7c2179f

Browse files
author
Marius Cramer
committed
Merge remote-tracking branch 'origin/stable-3.0.5'
Conflicts: interface/lib/lang/de.lng interface/web/admin/lib/lang/ar_server_config.lng interface/web/admin/lib/lang/bg_server_config.lng interface/web/admin/lib/lang/br_server_config.lng interface/web/admin/lib/lang/cz_server_config.lng interface/web/admin/lib/lang/de_server_config.lng interface/web/admin/lib/lang/de_software_package.lng interface/web/admin/lib/lang/de_software_repo.lng interface/web/admin/lib/lang/de_system_config.lng interface/web/admin/lib/lang/de_users.lng interface/web/admin/lib/lang/en_server_config.lng interface/web/admin/lib/lang/es_server_config.lng interface/web/admin/lib/lang/fi_server_config.lng interface/web/admin/lib/lang/fr_server_config.lng interface/web/admin/lib/lang/hr_server_config.lng interface/web/admin/lib/lang/hu_server_config.lng interface/web/admin/lib/lang/id_server_config.lng interface/web/admin/lib/lang/it_server_config.lng interface/web/admin/lib/lang/ja_server_config.lng interface/web/admin/lib/lang/nl_server_config.lng interface/web/admin/lib/lang/pl_server_config.lng interface/web/admin/lib/lang/pt_server_config.lng interface/web/admin/lib/lang/ro_server_config.lng interface/web/admin/lib/lang/ru_server_config.lng interface/web/admin/lib/lang/se_server_config.lng interface/web/admin/lib/lang/sk_server_config.lng interface/web/admin/lib/lang/tr_server_config.lng interface/web/client/lib/lang/de_client.lng interface/web/client/lib/lang/de_client_template.lng interface/web/client/lib/lang/de_reseller.lng interface/web/client/lib/lang/fr_client.lng interface/web/client/lib/lang/fr_reseller.lng interface/web/dns/lib/lang/cz_dns_dkim.lng interface/web/dns/lib/lang/de_dns_a.lng interface/web/dns/lib/lang/de_dns_aaaa.lng interface/web/dns/lib/lang/de_dns_alias.lng interface/web/dns/lib/lang/de_dns_cname.lng interface/web/dns/lib/lang/de_dns_hinfo.lng interface/web/dns/lib/lang/de_dns_mx.lng interface/web/dns/lib/lang/de_dns_ns.lng interface/web/dns/lib/lang/de_dns_ptr.lng interface/web/dns/lib/lang/de_dns_rp.lng interface/web/dns/lib/lang/de_dns_soa.lng interface/web/dns/lib/lang/de_dns_srv.lng interface/web/dns/lib/lang/de_dns_txt.lng interface/web/login/lib/lang/de.lng interface/web/mail/lib/lang/ar_mail_user.lng interface/web/mail/lib/lang/cz_mail_backup_list.lng interface/web/mail/lib/lang/de_mail_get.lng interface/web/mail/lib/lang/es_mail_user.lng interface/web/mail/lib/lang/fi_mail_user.lng interface/web/mail/lib/lang/fr_mail_user.lng interface/web/mail/lib/lang/hr_mail_user.lng interface/web/mail/lib/lang/hu_mail_user.lng interface/web/mail/lib/lang/id_mail_user.lng interface/web/mail/lib/lang/it_mail_user.lng interface/web/mail/lib/lang/ja_mail_user.lng interface/web/mail/lib/lang/nl_mail_user.lng interface/web/mail/lib/lang/pl_mail_user.lng interface/web/mail/lib/lang/pt_mail_user.lng interface/web/mail/lib/lang/ro_mail_user.lng interface/web/mail/lib/lang/ru_mail_user.lng interface/web/mail/lib/lang/se_mail_user.lng interface/web/mail/lib/lang/sk_mail_user.lng interface/web/mail/lib/lang/tr_mail_user.lng interface/web/monitor/lib/lang/de.lng interface/web/sites/form/web_vhost_subdomain.tform.php interface/web/sites/lib/lang/ar_web_vhost_domain.lng interface/web/sites/lib/lang/bg_web_vhost_domain.lng interface/web/sites/lib/lang/bg_web_vhost_subdomain.lng interface/web/sites/lib/lang/br_web_vhost_domain.lng interface/web/sites/lib/lang/br_web_vhost_subdomain.lng interface/web/sites/lib/lang/cz_web_aliasdomain.lng interface/web/sites/lib/lang/cz_web_aliasdomain_list.lng interface/web/sites/lib/lang/cz_web_childdomain.lng interface/web/sites/lib/lang/cz_web_childdomain_list.lng interface/web/sites/lib/lang/cz_web_domain.lng interface/web/sites/lib/lang/cz_web_domain_admin_list.lng interface/web/sites/lib/lang/cz_web_domain_list.lng interface/web/sites/lib/lang/cz_web_subdomain.lng interface/web/sites/lib/lang/cz_web_subdomain_list.lng interface/web/sites/lib/lang/cz_web_vhost_domain.lng interface/web/sites/lib/lang/cz_web_vhost_domain_list.lng interface/web/sites/lib/lang/cz_web_vhost_subdomain.lng interface/web/sites/lib/lang/cz_web_vhost_subdomain_list.lng interface/web/sites/lib/lang/de_cron.lng interface/web/sites/lib/lang/de_shell_user.lng interface/web/sites/lib/lang/de_web_aliasdomain_list.lng interface/web/sites/lib/lang/de_web_childdomain.lng interface/web/sites/lib/lang/de_web_subdomain.lng interface/web/sites/lib/lang/de_web_subdomain_list.lng interface/web/sites/lib/lang/de_web_vhost_domain_list.lng interface/web/sites/lib/lang/de_web_vhost_subdomain.lng interface/web/sites/lib/lang/de_web_vhost_subdomain_list.lng interface/web/sites/lib/lang/el_web_vhost_domain.lng interface/web/sites/lib/lang/el_web_vhost_subdomain.lng interface/web/sites/lib/lang/en_web_vhost_domain.lng interface/web/sites/lib/lang/es_web_vhost_domain.lng interface/web/sites/lib/lang/es_web_vhost_subdomain.lng interface/web/sites/lib/lang/fi_web_vhost_domain.lng interface/web/sites/lib/lang/fi_web_vhost_subdomain.lng interface/web/sites/lib/lang/fr_web_vhost_domain.lng interface/web/sites/lib/lang/fr_web_vhost_subdomain.lng interface/web/sites/lib/lang/hr_web_vhost_domain.lng interface/web/sites/lib/lang/hr_web_vhost_subdomain.lng interface/web/sites/lib/lang/hu_web_vhost_domain.lng interface/web/sites/lib/lang/hu_web_vhost_subdomain.lng interface/web/sites/lib/lang/id_web_vhost_domain.lng interface/web/sites/lib/lang/id_web_vhost_subdomain.lng interface/web/sites/lib/lang/it_web_vhost_domain.lng interface/web/sites/lib/lang/it_web_vhost_subdomain.lng interface/web/sites/lib/lang/ja_web_vhost_domain.lng interface/web/sites/lib/lang/ja_web_vhost_subdomain.lng interface/web/sites/lib/lang/nl_web_vhost_domain.lng interface/web/sites/lib/lang/nl_web_vhost_subdomain.lng interface/web/sites/lib/lang/pl_web_vhost_domain.lng interface/web/sites/lib/lang/pl_web_vhost_subdomain.lng interface/web/sites/lib/lang/pt_web_vhost_domain.lng interface/web/sites/lib/lang/pt_web_vhost_subdomain.lng interface/web/sites/lib/lang/ro_web_vhost_domain.lng interface/web/sites/lib/lang/ro_web_vhost_subdomain.lng interface/web/sites/lib/lang/ru_web_vhost_domain.lng interface/web/sites/lib/lang/ru_web_vhost_subdomain.lng interface/web/sites/lib/lang/se_web_vhost_domain.lng interface/web/sites/lib/lang/se_web_vhost_subdomain.lng interface/web/sites/lib/lang/sk_web_vhost_domain.lng interface/web/sites/lib/lang/sk_web_vhost_subdomain.lng interface/web/sites/lib/lang/tr_web_vhost_domain.lng interface/web/sites/lib/lang/tr_web_vhost_subdomain.lng server/mods-available/monitor_core_module.inc.php
2 parents 478a6a0 + dc9e64c commit 7c2179f

File tree

941 files changed

+2897
-316
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

941 files changed

+2897
-316
lines changed

install/dist/lib/opensuse.lib.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,23 @@
2929
*/
3030

3131
class installer_dist extends installer_base {
32-
32+
33+
public function __construct() {
34+
//** check apache modules */
35+
$mods = getapachemodules();
36+
if(in_array('authz_compat', $mods, true)) {
37+
swriteln($inst->lng(' WARNING! You are using mod_authz_compat.'));
38+
swriteln($inst->lng(' Please make sure that your apache config uses the new auth syntax:'));
39+
swriteln($inst->lng(' <Directory />'));
40+
swriteln($inst->lng(' Options None'));
41+
swriteln($inst->lng(' AllowOverride None'));
42+
swriteln($inst->lng(' Require all denied'));
43+
swriteln($inst->lng(' </Directory>'."\n"));
44+
45+
swriteln($inst->lng(' If it uses the old syntax (deny from all) ISPConfig would fail to work.'));
46+
}
47+
}
48+
3349
public function configure_mailman($status = 'insert') {
3450
global $conf;
3551

install/install.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
//** Installer Interface
8888
//****************************************************************************************************
8989
$inst = new installer();
90+
9091
swriteln($inst->lng(' Following will be a few questions for primary configuration so be careful.'));
9192
swriteln($inst->lng(' Default values are in [brackets] and can be accepted with <ENTER>.'));
9293
swriteln($inst->lng(' Tap in "quit" (without the quotes) to stop the installer.'."\n\n"));

install/lib/install.lib.php

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ function get_distname() {
160160
$distid = 'debian60';
161161
$distbaseid = 'debian';
162162
swriteln("Operating System: Debian 6.0 (Squeeze/Sid) or compatible\n");
163-
} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || strstr(trim(file_get_contents('/etc/debian_version')), '7.1') || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') {
163+
} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || substr(trim(file_get_contents('/etc/debian_version')),0,2) == '7.' || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') {
164164
$distname = 'Debian';
165165
$distver = 'Wheezy/Sid';
166166
$distid = 'debian60';
@@ -830,29 +830,55 @@ function get_system_timezone() {
830830
}
831831

832832
function getapacheversion($get_minor = false) {
833-
global $app;
834-
835-
$cmd = '';
836-
if(is_installed('apache2ctl')) $cmd = 'apache2ctl -v';
837-
elseif(is_installed('apachectl')) $cmd = 'apachectl -v';
838-
else {
839-
$app->log("Could not check apache version, apachectl not found.", LOGLEVEL_WARN);
840-
return '2.2';
841-
}
842-
843-
exec($cmd, $output, $return_var);
844-
if($return_var != 0 || !$output[0]) {
845-
$app->log("Could not check apache version, apachectl did not return any data.", LOGLEVEL_WARN);
846-
return '2.2';
847-
}
848-
849-
if(preg_match('/version:\s*Apache\/(\d+)(\.(\d+)(\.(\d+))*)?(\D|$)/i', $output[0], $matches)) {
850-
return $matches[1] . (isset($matches[3]) ? '.' . $matches[3] : '') . (isset($matches[5]) && $get_minor == true ? '.' . $matches[5] : '');
851-
} else {
852-
$app->log("Could not check apache version, did not find version string in apachectl output.", LOGLEVEL_WARN);
853-
return '2.2';
854-
}
833+
global $app;
834+
835+
$cmd = '';
836+
if(is_installed('apache2ctl')) $cmd = 'apache2ctl -v';
837+
elseif(is_installed('apachectl')) $cmd = 'apachectl -v';
838+
else {
839+
$app->log("Could not check apache version, apachectl not found.", LOGLEVEL_WARN);
840+
return '2.2';
841+
}
842+
843+
exec($cmd, $output, $return_var);
844+
if($return_var != 0 || !$output[0]) {
845+
$app->log("Could not check apache version, apachectl did not return any data.", LOGLEVEL_WARN);
846+
return '2.2';
847+
}
848+
849+
if(preg_match('/version:\s*Apache\/(\d+)(\.(\d+)(\.(\d+))*)?(\D|$)/i', $output[0], $matches)) {
850+
return $matches[1] . (isset($matches[3]) ? '.' . $matches[3] : '') . (isset($matches[5]) && $get_minor == true ? '.' . $matches[5] : '');
851+
} else {
852+
$app->log("Could not check apache version, did not find version string in apachectl output.", LOGLEVEL_WARN);
853+
return '2.2';
855854
}
855+
}
856856

857+
function getapachemodules() {
858+
global $app;
859+
860+
$cmd = '';
861+
if(is_installed('apache2ctl')) $cmd = 'apache2ctl -t -D DUMP_MODULES';
862+
elseif(is_installed('apachectl')) $cmd = 'apachectl -t -D DUMP_MODULES';
863+
else {
864+
$app->log("Could not check apache modules, apachectl not found.", LOGLEVEL_WARN);
865+
return array();
866+
}
867+
868+
exec($cmd, $output, $return_var);
869+
if($return_var != 0 || !$output[0]) {
870+
$app->log("Could not check apache modules, apachectl did not return any data.", LOGLEVEL_WARN);
871+
return array();
872+
}
873+
874+
$modules = array();
875+
for($i = 0; $i < count($output); $i++) {
876+
if(preg_match('/^\s*(\w+)\s+\((shared|static)\)\s*$/', $output[$i], $matches)) {
877+
$modules[] = $matches[1];
878+
}
879+
}
880+
881+
return $modules;
882+
}
857883

858884
?>

install/lib/installer_base.lib.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,6 +1269,10 @@ public function configure_apache() {
12691269
if(is_file('/etc/apache2/ports.conf')) {
12701270
// add a line "Listen 443" to ports conf if line does not exist
12711271
replaceLine('/etc/apache2/ports.conf', 'Listen 443', 'Listen 443', 1);
1272+
1273+
// Comment out the namevirtualhost lines, as they were added by ispconfig in ispconfig.conf file again
1274+
replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:80', '# NameVirtualHost *:80', 1);
1275+
replaceLine('/etc/apache2/ports.conf', 'NameVirtualHost *:443', '# NameVirtualHost *:443', 1);
12721276
}
12731277

12741278
if(is_file('/etc/apache2/apache.conf')) {

install/tpl/server.ini.master

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ monit_password=
2626
munin_url=
2727
munin_user=
2828
munin_password=
29+
monitor_system_updates=y
2930

3031
[mail]
3132
module=postfix_mysql

install/tpl/system.ini.master

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,5 @@ customer_no_start=1
5252
customer_no_counter=0
5353
session_timeout=0
5454
session_allow_endless=0
55+
min_password_length=5
56+
min_password_strength=0

interface/lib/classes/ispcmail.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public function setOption($key, $value) {
219219
*
220220
*/
221221
private function detectHelo() {
222-
if(isset($_SERVER['HTTP_HOST'])) $this->smtp_helo = $_SERVER['HTTP_HOST'];
222+
if(isset($_SERVER['HTTP_HOST'])) $this->smtp_helo = (strpos($_SERVER['HTTP_HOST'], ':') !== false ? substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], ':')) : $_SERVER['HTTP_HOST']);
223223
elseif(isset($_SERVER['SERVER_NAME'])) $this->smtp_helo = $_SERVER['SERVER_NAME'];
224224
else $this->smtp_helo = php_uname('n');
225225
if($this->smtp_helo == '') $this->smtp_helo = 'localhost';

interface/lib/classes/validate_dns.inc.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,5 +283,49 @@ function increase_serial($serial){
283283
}
284284
return $new_serial;
285285
}
286+
287+
function validate_xfer($field_name, $field_value, $validator) {
288+
global $app;
289+
290+
$errorMessage = '';
291+
292+
if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
293+
if($validator['allowempty'] == 'y' && $field_value == '') {
294+
//* Do nothing
295+
} elseif ($field_value == 'any') {
296+
//* Do nothing
297+
} else {
298+
//* Check if its a IPv4 or IPv6 address
299+
if(isset($validator['separator']) && $validator['separator'] != '') {
300+
//* When the field may contain several IP addresses, split them by the char defined as separator
301+
$field_value_array = explode($validator['separator'], $field_value);
302+
} else {
303+
$field_value_array[] = $field_value;
304+
}
305+
foreach($field_value_array as $field_value) {
306+
$field_value = trim($field_value);
307+
if(function_exists('filter_var')) {
308+
if(!filter_var($field_value, FILTER_VALIDATE_IP)) {
309+
$errmsg = $validator['errmsg'];
310+
$errorMessage .= $app->tform->lng($errmsg)."<br />\r\n";
311+
}
312+
} else {
313+
//* Check content with regex, if we use php < 5.2
314+
$ip_ok = 0;
315+
if(preg_match("/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i", $field_value)){
316+
$ip_ok = 1;
317+
}
318+
if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
319+
$ip_ok = 1;
320+
}
321+
if($ip_ok == 0) {
322+
$errmsg = $validator['errmsg'];
323+
$errorMessage .= $app->tform->lng($errmsg)."<br />\r\n";
324+
}
325+
}
326+
}
327+
}
328+
return $errorMessage;
329+
}
286330

287331
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?php
2+
3+
/*
4+
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
5+
Copyright (c) 2014, Marius Cramer, pixcept KG
6+
All rights reserved.
7+
8+
Redistribution and use in source and binary forms, with or without modification,
9+
are permitted provided that the following conditions are met:
10+
11+
* Redistributions of source code must retain the above copyright notice,
12+
this list of conditions and the following disclaimer.
13+
* Redistributions in binary form must reproduce the above copyright notice,
14+
this list of conditions and the following disclaimer in the documentation
15+
and/or other materials provided with the distribution.
16+
* Neither the name of ISPConfig nor the names of its contributors
17+
may be used to endorse or promote products derived from this software without
18+
specific prior written permission.
19+
20+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23+
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
24+
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
29+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30+
*/
31+
32+
class validate_password {
33+
34+
private function _get_password_strength($password) {
35+
$length = strlen($password);
36+
$points = 0;
37+
if ($length < 5) {
38+
return 1;
39+
}
40+
41+
if (preg_match('/[ABCDEFGHIJKLNMOPQRSTUVWXYZ]/', $password)) {
42+
$points += 1;
43+
}
44+
45+
if (preg_match('/[0123456789]/', $password)) {
46+
$points += 1;
47+
}
48+
49+
if (preg_match('/[`~!@#$%^&*()_+|\\=-[]}{\';:\/?.>,<" ]/', $password)) {
50+
$points += 1;
51+
}
52+
53+
if ($points == 0) {
54+
if ($length >= 5 && $length <= 6) {
55+
return 1;
56+
} else if ($length >= 7 && $length <= 8) {
57+
return 2;
58+
} else {
59+
return 3;
60+
}
61+
} else if ($points == 1) {
62+
if ($length >= 5 && $length <= 6) {
63+
return 2;
64+
} else if (length >= 7 && length <=10) {
65+
return 3;
66+
} else {
67+
return 4;
68+
}
69+
} else if ($points == 2) {
70+
if ($length >= 5 && $length <= 8) {
71+
return 3;
72+
} else if ($length >= 9 && $length <= 10) {
73+
return 4;
74+
} else {
75+
return 5;
76+
}
77+
} else if ($points == 3) {
78+
if ($length >= 5 && $length <= 6) {
79+
return 3;
80+
} else if ($length >= 7 && $length <= 8) {
81+
return 4;
82+
} else {
83+
return 5;
84+
}
85+
} else if ($points >= 4) {
86+
if ($length >= 5 && $length <= 6) {
87+
return 4;
88+
} else {
89+
return 5;
90+
}
91+
}
92+
93+
}
94+
95+
/* Validator function */
96+
function password_check($field_name, $field_value, $validator) {
97+
global $app;
98+
99+
if($field_value == '') return false;
100+
101+
$app->uses('ini_parser,getconf');
102+
$server_config_array = $app->getconf->get_global_config();
103+
104+
$min_password_strength = 0;
105+
$min_password_length = 5;
106+
if(isset($server_config_array['misc']['min_password_length'])) $min_password_length = $server_config_array['misc']['min_password_length'];
107+
if(isset($server_config_array['misc']['min_password_strength'])) $min_password_strength = $server_config_array['misc']['min_password_strength'];
108+
109+
if($min_password_strength > 0) {
110+
$lng_text = $app->lng('weak_password_txt');
111+
$lng_text = str_replace(array('{chars}', '{strength}'), array($min_password_length, $app->lng('strength_' . $min_password_strength)), $lng_text);
112+
} else {
113+
$lng_text = $app->lng('weak_password_length_txt');
114+
$lng_text = str_replace('{chars}', $min_password_length, $lng_text);
115+
}
116+
if(!$lng_text) $lng_text = 'weak_password_txt'; // always return a string, even if language is missing - otherwise validator is NOT MATCHING!
117+
118+
if(strlen($field_value) < $min_password_length) return $lng_text;
119+
if($this->_get_password_strength($field_value) < $min_password_strength) return $lng_text;
120+
121+
return false;
122+
}
123+
}

interface/lib/lang/ar.lng

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,18 @@ $wb['datalog_status_d_spamfilter_users'] = 'Delete spam filter settings';
133133
$wb['login_as_txt'] = 'Log in as';
134134
$wb['no_domain_perm'] = 'You have no permission for this domain.';
135135
$wb['no_destination_perm'] = 'You have no permission for this destination.';
136+
$wb['client_you_are_locked'] = 'You have no permission to change any settings.';
137+
$wb['gender_m_txt'] = 'Mr.';
138+
$wb['gender_f_txt'] = 'Ms.';
139+
$wb['client_cannot_be_deleted_because_of_billing_module_txt'] = 'This client has records in the billing module, therefore he cannot be deleted.';
140+
$wb['yes_txt'] = 'Yes';
141+
$wb['no_txt'] = 'No';
142+
$wb['None'] = 'None';
143+
$wb['strength_1'] = 'Weak';
144+
$wb['strength_2'] = 'Fair';
145+
$wb['strength_3'] = 'Good';
146+
$wb['strength_4'] = 'Strong';
147+
$wb['strength_5'] = 'Very Strong';
148+
$wb['weak_password_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length and have a strength of \"{strength}\".';
149+
$wb['weak_password_length_txt'] = 'The chosen password does not match the security guidelines. It has to be at least {chars} chars in length.';
136150
?>

0 commit comments

Comments
 (0)