Skip to content

Commit 68ec437

Browse files
committed
Merged revisions 3670-3683 from 3.0.5 stable branch.
1 parent bfcdef6 commit 68ec437

21 files changed

+322
-95
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
UPDATE `web_domain` SET `redirect_path` = CONCAT(`redirect_path`, '/') WHERE `redirect_path` != '' AND RIGHT(`redirect_path`, 1) != '/' AND (LEFT(`redirect_path`, 7) = 'http://' OR LEFT(`redirect_path`, 8) = 'https://' OR LEFT(`redirect_path`, 11) = '[scheme]://');

install/tpl/debian6_dovecot-sql.conf.master

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ driver = mysql
1313
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
1414
default_pass_scheme = CRYPT
1515

16-
password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
16+
password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
1717
user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
1818

1919
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.

install/tpl/debian_dovecot-sql.conf.master

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ driver = mysql
120120
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
121121
default_pass_scheme = CRYPT
122122

123-
password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
123+
password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
124124
user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
125125

126126
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.

install/tpl/fedora_dovecot-sql.conf.master

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ driver = mysql
133133
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
134134
default_pass_scheme = CRYPT
135135

136-
password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
136+
password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
137137
user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
138138

139139
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.

install/tpl/opensuse_dovecot-sql.conf.master

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ driver = mysql
133133
connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password}
134134
default_pass_scheme = CRYPT
135135

136-
password_query = SELECT password FROM mail_user WHERE login = '%u' AND disable%Ls = 'n'
136+
password_query = SELECT password FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
137137
user_query = SELECT email as user, maildir as home, CONCAT('maildir:', maildir, '/Maildir') as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND disable%Ls = 'n'
138138

139139
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.

install/tpl/server.ini.master

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ dnsserver=mydns
55

66

77
[server]
8-
auto_network_configuration=n
9-
ip_address=0.0.0.0
10-
netmask=255.255.255.0
11-
gateway=0.0.0.0
12-
hostname=server1.domain.tld
13-
nameservers=8.8.8.8,8.8.4.4
8+
auto_network_configuration=n
9+
ip_address=0.0.0.0
10+
netmask=255.255.255.0
11+
v6_prefix=
12+
gateway=0.0.0.0
13+
hostname=server1.domain.tld
14+
nameservers=8.8.8.8,8.8.4.4
1415
firewall=bastille
1516
loglevel=2
1617
backup_dir=/var/backup
@@ -40,12 +41,13 @@ getmail_config_dir=/etc/getmail
4041
[web]
4142
server_type=apache
4243
website_basedir=/var/www
43-
website_path=/var/www/clients/client[client_id]/web[website_id]
44-
website_symlinks=/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/
45-
website_symlinks_rel=n
46-
vhost_conf_dir=/etc/apache2/sites-available
47-
vhost_conf_enabled_dir=/etc/apache2/sites-enabled
48-
nginx_vhost_conf_dir=/etc/nginx/sites-available
44+
website_path=/var/www/clients/client[client_id]/web[website_id]
45+
website_symlinks=/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/
46+
website_symlinks_rel=n
47+
vhost_rewrite_v6=n
48+
vhost_conf_dir=/etc/apache2/sites-available
49+
vhost_conf_enabled_dir=/etc/apache2/sites-enabled
50+
nginx_vhost_conf_dir=/etc/nginx/sites-available
4951
nginx_vhost_conf_enabled_dir=/etc/nginx/sites-enabled
5052
security_level=20
5153
user=www-data

interface/lib/classes/listform.inc.php

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -243,21 +243,65 @@ public function getPagingSQL($sql_where = '1')
243243
public function getPagingHTML($vars)
244244
{
245245
global $app;
246-
$content = '<a href="'."javascript:loadContent('".$vars['list_file'].'?page=0'.$vars['page_params']."');".'">'
247-
.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow_stop_180.png"></a> &nbsp; ';
246+
247+
// we want to show at max 17 page numbers (8 left, current, 8 right)
248+
$show_pages_count = 17;
249+
250+
$show_pages = array(0); // first page
251+
if($vars['pages'] > 0) $show_pages[] = $vars['pages']; // last page
252+
for($p = $vars['page'] - 2; $p <= $vars['page'] + 2; $p++) { // surrounding pages
253+
if($p > 0 && $p < $vars['pages']) $show_pages[] = $p;
254+
}
255+
256+
$l_start = $vars['page'] - 13;
257+
$l_start -= ($l_start % 10) + 1;
258+
$h_end = $vars['page'] + 23;
259+
$h_end -= ($h_end % 10) + 1;
260+
for($p = $l_start; $p <= $h_end; $p += 10) { // surrounding pages
261+
if($p > 0 && $p < $vars['pages'] && !in_array($p, $show_pages, true) && count($show_pages) < $show_pages_count) $show_pages[] = $p;
262+
}
263+
264+
$l_start = $vars['page'] - 503;
265+
$l_start -= ($l_start % 100) + 1;
266+
$h_end = $vars['page'] + 603;
267+
$h_end -= ($h_end % 100) + 1;
268+
for($p = $l_start; $p <= $h_end; $p += 100) { // surrounding pages
269+
if($p > 0 && $p < $vars['pages'] && !in_array($p, $show_pages, true) && count($show_pages) < $show_pages_count) $show_pages[] = $p;
270+
}
271+
272+
$l_start = $vars['page'] - 203;
273+
$l_start -= ($l_start % 25) + 1;
274+
$h_end = $vars['page'] + 228;
275+
$h_end -= ($h_end % 25) + 1;
276+
for($p = $l_start; $p <= $h_end; $p += 25) { // surrounding pages
277+
if($p > 0 && $p < $vars['pages'] && abs($p - $vars['page']) > 30 && !in_array($p, $show_pages, true) && count($show_pages) < $show_pages_count) $show_pages[] = $p;
278+
}
279+
280+
sort($show_pages);
281+
$show_pages = array_unique($show_pages);
282+
248283
//* Show Back
249284
if(isset($vars['show_page_back']) && $vars['show_page_back'] == 1){
250-
$content .= '<a href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['last_page'].$vars['page_params']."');".'">'
285+
$content = '<a class="btn-page first-page" href="'."javascript:loadContent('".$vars['list_file'].'?page=0'.$vars['page_params']."');".'">'
286+
.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow_stop_180.png"></a> &nbsp; ';
287+
$content .= '<a class="btn-page previous-page" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['last_page'].$vars['page_params']."');".'">'
251288
.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow_180.png"></a> &nbsp; ';
252289
}
253-
$content .= ' '.$this->lng('page_txt').' '.$vars['next_page'].' '.$this->lng('page_of_txt').' '.$vars['max_pages'].' &nbsp; ';
290+
$content .= ' '.$this->lng('page_txt').' ';
291+
$prev = -1;
292+
foreach($show_pages as $p) {
293+
if($prev != -1 && $p > $prev + 1) $content .= '<span class="page-spacer">...</span>';
294+
$content .= '<a class="link-page' . ($p == $vars['page'] ? ' current-page' : '') . '" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$p.$vars['page_params']."');".'">'. ($p+1) .'</a>';
295+
$prev = $p;
296+
}
297+
//.$vars['next_page'].' '.$this->lng('page_of_txt').' '.$vars['max_pages'].' &nbsp; ';
254298
//* Show Next
255299
if(isset($vars['show_page_next']) && $vars['show_page_next'] == 1){
256-
$content .= '<a href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['next_page'].$vars['page_params']."');".'">'
300+
$content .= '<a class="btn-page next-page" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['next_page'].$vars['page_params']."');".'">'
257301
.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow.png"></a> &nbsp; ';
258-
}
259-
$content .= '<a href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['pages'].$vars['page_params']."');".'">'
302+
$content .= '<a class="btn-page last-page" href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['pages'].$vars['page_params']."');".'">'
260303
.'<img src="themes/'.$_SESSION['s']['theme'].'/icons/x16/arrow_stop.png"></a>';
304+
}
261305
return $content;
262306
}
263307

interface/lib/classes/tform.inc.php

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -884,12 +884,43 @@ function validateField($field_name, $field_value, $validators) {
884884
$this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
885885
} else {
886886
$this->errorMessage .= $errmsg."<br />\r\n";
887-
}
888-
}
889-
break;
890-
case 'ISIPV4':
891-
$vip=1;
892-
if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
887+
}
888+
}
889+
break;
890+
case 'ISV6PREFIX':
891+
$v6_prefix_ok = 0;
892+
$explode_field_value = explode(':',$field_value);
893+
if ($explode_field_value[count($explode_field_value)-1]=='' && $explode_field_value[count($explode_field_value)-2]=='' ){
894+
if ( count($explode_field_value) <= 9 ) {
895+
if(filter_var(substr($field_value,0,strlen($field_value)-2),FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) or filter_var(substr($field_value,0,strlen($field_value)-2).'::0',FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) or filter_var(substr($field_value,0,strlen($field_value)-2).':0',FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) ) {
896+
$v6_prefix_ok = 1;
897+
}
898+
}
899+
} else {
900+
$v6_prefix_ok = 2;
901+
}
902+
// check subnet against defined server-ipv6
903+
$sql_v6 = $app->db->queryOneRecord("SELECT ip_address FROM server_ip WHERE ip_type = 'IPv6' AND virtualhost = 'y' LIMIT 0,1");
904+
$sql_v6_explode=explode(':',$sql_v6['ip_address']);
905+
if ( count($sql_v6_explode) < count($explode_field_value) && isset($sql_v6['ip_address']) ) {
906+
$v6_prefix_ok = 3;
907+
}
908+
if($v6_prefix_ok == 0) {
909+
$errmsg = $validator['errmsg'];
910+
}
911+
if($v6_prefix_ok == 2) {
912+
$errmsg = 'IPv6 Prefix must end with ::';
913+
}
914+
if($v6_prefix_ok == 3) {
915+
$errmsg = 'IPv6 Prefix too long (according to Server IP Addresses)';
916+
}
917+
if($v6_prefix_ok <> 1){
918+
$this->errorMessage .= $errmsg."<br />\r\n";
919+
}
920+
break;
921+
case 'ISIPV4':
922+
$vip=1;
923+
if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
893924
$groups=explode(".",$field_value);
894925
foreach($groups as $group){
895926
if($group<0 OR $group>255)

interface/web/admin/form/server_config.tform.php

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,20 @@
8383
'errmsg' => 'netmask_error_wrong'),
8484
),
8585
'value' => '',
86-
'width' => '15',
87-
'maxlength' => '255'
88-
),
89-
'gateway' => array(
90-
'datatype' => 'VARCHAR',
91-
'formtype' => 'TEXT',
86+
'width' => '15',
87+
'maxlength' => '255'
88+
),
89+
'v6_prefix' => array(
90+
'datatype' => 'VARCHAR',
91+
'formtype' => 'TEXT',
92+
'validators' => array(0 => array('type' => 'ISV6PREFIX',
93+
'errmsg' => 'v6_prefix_wrong'),
94+
),
95+
'default' => ''
96+
),
97+
'gateway' => array(
98+
'datatype' => 'VARCHAR',
99+
'formtype' => 'TEXT',
92100
'default' => '192.168.0.1',
93101
'validators' => array(0 => array('type' => 'ISIPV4',
94102
'errmsg' => 'gateway_error_wrong'),
@@ -402,12 +410,22 @@
402410
'formtype' => 'TEXT',
403411
'default' => '',
404412
'value' => '',
405-
'width' => '40',
406-
'maxlength' => '255'
407-
),
408-
'vhost_conf_dir' => array(
409-
'datatype' => 'VARCHAR',
410-
'formtype' => 'TEXT',
413+
'width' => '40',
414+
'maxlength' => '255'
415+
),
416+
417+
'vhost_rewrite_v6' => array (
418+
'datatype' => 'VARCHAR',
419+
'formtype' => 'CHECKBOX',
420+
'default' => 'n',
421+
'value' => array(0 => 'n',1 => 'y')
422+
),
423+
424+
425+
426+
'vhost_conf_dir' => array(
427+
'datatype' => 'VARCHAR',
428+
'formtype' => 'TEXT',
411429
'default' => '',
412430
'validators' => array(0 => array('type' => 'NOTEMPTY',
413431
'errmsg' => 'vhost_conf_dir_error_empty'),

interface/web/admin/lib/lang/de_system_config.lng

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ $wb['dashboard_atom_url_reseller_txt'] = 'Dashboard atom feed URL (für Reseller
2424
$wb['dashboard_atom_url_client_txt'] = 'Dashboard atom feed URL (für Kunden)';
2525
$wb['webdavuser_prefix_txt'] = 'WebDAV Benutzer Präfix';
2626
$wb['webdavuser_prefix_error_regex'] = 'Zeichen nicht zulässig im WebDAV Benutzer Präfix.';
27-
$wb['use_domain_module_txt'] = 'Das Domain Modul benutzen, um neue Domains hinzuzufügen';
28-
$wb['use_domain_module_hint'] = 'Falls Sie dieses Modul benutzen, können Ihre Kunden nur eine der Domains auswählen, die der Admin für sie angelegt hat. Die Kunden können das Domain-Feld nicht frei editieren. Sie müssen sich neu einloggen, wenn Sie diesen Wert ändern.';
27+
$wb['use_domain_module_txt'] = 'Domain Limits im Kundenmodul benutzen, um neue Domains hinzuzufügen';
28+
$wb['use_domain_module_hint'] = 'Falls Sie die Domain Limits benutzen, können Ihre Kunden nur eine der Domains auswählen, die der Admin für sie angelegt hat. Die Kunden können das Domain-Feld nicht frei editieren. Sie müssen sich neu einloggen, wenn Sie diesen Wert ändern.';
2929
$wb['new_domain_txt'] = 'HTML Text zum Anlegen einer neuen Domain';
3030
$wb['webftp_url_txt'] = 'WebFTP URL';
3131
$wb['enable_custom_login_txt'] = 'Abweichenden Login Namen erlauben';

0 commit comments

Comments
 (0)