diff --git a/install/dist/lib/debian60.lib.php b/install/dist/lib/debian60.lib.php index 981e6cff92a70216656435bddb10a393f01dca54..7889be30fa04490c6f8510cc8366669a2cf90260 100644 --- a/install/dist/lib/debian60.lib.php +++ b/install/dist/lib/debian60.lib.php @@ -204,6 +204,35 @@ class installer extends installer_base { chown($config_dir.'/'.$configfile, 'root'); chgrp($config_dir.'/'.$configfile, 'root'); + //* dovecot-sql-lastlogin.conf + $configfile = 'dovecot-sql-lastlogin.conf'; + if(is_file($config_dir.'/'.$configfile)){ + copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~'); + chmod($config_dir.'/'.$configfile.'~', 0400); + } + $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian6_dovecot-sql-lastlogin.conf.master', 'tpl/debian6_dovecot-sql-lastlogin.conf.master'); + + if ($conf['mysql']['master_slave_setup'] == 'y') { // Master or single_server setup. + $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content); + $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content); + $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content); + $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); + $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content); + } + else { // Slave server, push the last_login updates straight to the master. + $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content); + $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); + $content = str_replace('{mysql_server_database}', $conf['mysql']['master_database'], $content); + $content = str_replace('{mysql_server_host}', $conf['mysql']['master_host'], $content); + $content = str_replace('{mysql_server_port}', $conf['mysql']['master_port'], $content); + } + + wf($config_dir.'/'.$configfile, $content); + + chmod($config_dir.'/'.$configfile, 0640); + chown($config_dir.'/'.$configfile, 'root'); + chgrp($config_dir.'/'.$configfile, 'dovecot'); + // Dovecot shall ignore mounts in website directory if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null"); diff --git a/install/tpl/debian6_dovecot-sql-lastlogin.conf.master b/install/tpl/debian6_dovecot-sql-lastlogin.conf.master new file mode 100644 index 0000000000000000000000000000000000000000..bf8657ad2a94a47e2b15310adad860840bf047f0 --- /dev/null +++ b/install/tpl/debian6_dovecot-sql-lastlogin.conf.master @@ -0,0 +1,13 @@ +connect = host={mysql_server_host} dbname={mysql_server_database} user={mysql_server_ispconfig_user} password={mysql_server_ispconfig_password} port={mysql_server_port} + +map { + pattern = shared/lastlogin/$email + table = mail_user + username_field = email + value_field = last_access + value_type = uint + + fields { + email = $email + } +} diff --git a/install/tpl/debian6_dovecot2.conf.master b/install/tpl/debian6_dovecot2.conf.master index 36ae86fa6df7023218ba12d686fdb6a6c964ec38..215224186957b9a9f820a98522d2538630729441 100644 --- a/install/tpl/debian6_dovecot2.conf.master +++ b/install/tpl/debian6_dovecot2.conf.master @@ -38,6 +38,13 @@ plugin { sieve_max_script_size = 2M sieve_max_actions = 100 sieve_max_redirects = 25 + + last_login_dict = proxy::lastlogin + last_login_key = lastlogin/%u +} + +dict { + lastlogin = mysql:/etc/dovecot/dovecot-sql-lastlogin.conf } service auth { unix_listener /var/spool/postfix/private/auth { @@ -68,12 +75,12 @@ service imap-login { process_limit = 512 } protocol imap { - mail_plugins = $mail_plugins quota imap_quota + mail_plugins = $mail_plugins quota imap_quota last_login auth_verbose = yes } protocol pop3 { pop3_uidl_format = %08Xu%08Xv - mail_plugins = $mail_plugins quota + mail_plugins = $mail_plugins quota last_login auth_verbose = yes } protocol lda {