* Sun Sep 01 2024 Jean-Philippe Pialasse <jpp@koozali.org> 1.6-1.sme

- initial version for SME11 [SME: ]
This commit is contained in:
Jean-Philippe Pialasse 2024-09-02 00:01:36 -04:00
parent dc13554e0b
commit c0a6540f34
50 changed files with 1822 additions and 25 deletions

View File

@ -1,43 +1,74 @@
#!/usr/bin/perl -w
use esmith::Build::CreateLinks qw(:all);
use esmith::Build::Backup qw(:all);
# our event specific for updating with yum without reboot
$event = 'smeserver-roundcube-update';
# Koozali event specific for updating with yum without reboot
$event = "smeserver-roundcube-update";
#add here the path to your templates needed to expand
#see the /etc/systemd/system-preset/49-koozali.preset should be present for systemd integration on all you yum update event
# Maybe need ths in here as well:
# /etc/dar/DailyBackup.dcf - if backup requested
foreach my $file (qw(
/etc/systemd/system-preset/49-koozali.preset
))
{
templates2events( $file, $event );
};
}
#action needed in case we have a systemd unit
event_link('systemd-default', $event, '10');
event_link('systemd-reload', $event, '50');
#services we might need to restart
#event_services($event, 'xxxx' => 'restart', 'yyyy' => 'restart');
#Backup contrib files
# backup_includes("smeserver-roundcube", qw(
# files(s) to be backed up
#));
#Other possible entries:
#Server manager entry
#panel_link("smeserver-roundcube", 'manager');
#Events to smeserver-roundcube
#$event = 'smeserver-roundcube-smeserver-roundcube';
# safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/smeserver-roundcube");
# templates2events("/etc/smeserver-roundcube/smeserver-roundcube.conf", $event);
event_link("systemd-default", $event, "10");
event_link("systemd-reload", $event, "50");
#action specific to this package
#event_link("some event", $event, "30");
#services we need to restart
#safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/some service");
#and Server Manager panel link
#panel_link('somefunction', 'manager');
#expand specific roundcube template
for my $event (qw(
smeserver-roundcube-update
bootstrap-console-save
conf-roundcube
roundcube-update
console-save
))
{
templates2events("/usr/share/roundcubemail/plugins/managesieve/config.inc.php", $event);
templates2events("/usr/share/roundcubemail/plugins/nextcloud_attachments/config.inc.php", $event);
templates2events("/etc/roundcubemail/config.inc.php", $event);
templates2events("/etc/e-smith/sql/init/80roundcube", $event);
}
#restart specific services to avoid to reboot after the installation
for my $event (qw(
smeserver-roundcube-update
conf-roundcube
roundcube-update
))
{
templates2events("/etc/opt/remi/php81/php-fpm.d/www.conf",$event);
templates2events("/etc/httpd/conf/httpd.conf", $event);
templates2events("/etc/dovecot/dovecot.conf", $event);
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/php81-php-fpm");
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/mysql.init");
safe_symlink("sigusr1", "root/etc/e-smith/events/$event/services2adjust/httpd-e-smith");
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/dovecot");
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/qmail");
}
#We want to expand /etc/e-smith/templates-user/.qmail
foreach my $event (qw(
smeserver-roundcube-update
conf-roundcube
roundcube-update
))
{
event_link("qmail-update-user", $event, "20");
event_link("roundcube-conf", $event, "03");
}
safe_symlink("/usr/share/php/Net/LDAP3","root/usr/share/pear/Net/LDAP3");
safe_symlink("/usr/share/php/Net/LDAP3.php","root/usr/share/pear/Net/LDAP3.php");

View File

@ -0,0 +1 @@
reserved

View File

@ -0,0 +1 @@
roundcube

View File

@ -0,0 +1 @@
roundcube

View File

@ -0,0 +1 @@
RoundCube IMAP Client

View File

@ -0,0 +1 @@
globaladdressbook,contextmenu,markasjunk,vcard_attachments,newmail_notifier,emoticons,managesieve,nextcloud_attachments

View File

@ -0,0 +1 @@
public

View File

@ -0,0 +1 @@
enabled

View File

@ -0,0 +1,17 @@
{
# If you set the server dns resolver to external
# (for the main domain) you can not login in roundcube
# with the imap authentication
use esmith::DomainsDB;
my $d = esmith::DomainsDB->open_ro;
my $domainname = $DB->get_value('DomainName') or
die ("Unable to retrieve the domain name: $!");
my $dns = $d->get_prop("$domainname",'Nameservers') or
die ("Unable to retrieve the Name Servers: $!");
if ($dns ne 'localhost') {
$DB->set_prop('imaps','access','public');
}
}

View File

@ -0,0 +1,20 @@
{
use MIME::Base64 qw(encode_base64);
my $rec = $DB->get('roundcube') || $DB->new_record('roundcube', {type => 'service'});
# migrate PublicAccess to access
if ( my $PublicAccess = $DB->get_prop_and_delete('roundcube','PublicAccess') ) {
$DB->set_prop('roundcube','access', "private");
$DB->set_prop('roundcube','access', "public") if ($PublicAccess =~ /global/);
$DB->set_prop('roundcube','status', "disabled") if ($PublicAccess == "none");
}
my $pw = $rec->prop('DbPassword');
return "" if $pw;
$rec->set_prop('DbPassword', sprintf("%15.0f", int( (1000000000000000) * rand() )));
}

View File

@ -0,0 +1,57 @@
{
use esmith::ConfigDB;
my $cdb = esmith::ConfigDB->open() || die "Couldn't open ConfigDB\n";
##Added for version smeserver-roundcube-1.1-4
my $plugins = $cdb->get_prop('roundcube','PluginsList') || '';
return unless ($plugins ne '');
#nextcloud_attachements is used
if ($plugins !~ 'nextcloud_attachments')
{
$plugins = $plugins.',nextcloud_attachments';
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
#sieverule is now used instead of
if ($plugins !~ 'managesieve')
{
$plugins = $plugins.',managesieve';
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
# sieverule deprecated
if ($plugins =~ 'sieverule')
{
$plugins =~ s/,sieverule//g;
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
# markasjunk2 deprecated
if ($plugins =~ 'markasjunk')
{
$plugins =~ s/markasjunk2/markasjunk/g;
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
#Carddav is a really bad plugin, when available it will become usefull
if ($plugins =~ 'carddav')
{
$plugins =~ s/,carddav//g;
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
#remove calendar
if ($plugins =~ 'calendar')
{
$plugins =~ s/,calendar//g;
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
#remove libcalendaring
if ($plugins =~ 'libcalendaring')
{
$plugins =~ s/,libcalendaring//g;
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
#remove tasklist
if ($plugins =~ 'tasklist')
{
$plugins =~ s/,tasklist//g;
$cdb->set_prop('roundcube','PluginsList',"$plugins");
}
}

View File

@ -0,0 +1,2 @@
#!/bin/bash
/usr/bin/rcplugin_update.sh

View File

@ -0,0 +1 @@
PERMS=0750

View File

@ -0,0 +1,3 @@
UID="root"
GID="www"
PERMS=0640

View File

@ -0,0 +1,29 @@
{
my $db = $roundcube{DbName} || 'roundcube';
my $user = $roundcube{DbUser} || 'roundcube';
my $pass = $roundcube{DbPassword} || 'changeme';
$OUT .= <<END
#! /bin/sh
if [ -d /var/lib/mysql/$db ]; then
#these plugins are no more in the core
# /usr/bin/mysql $db < /usr/share/roundcubemail/plugins/calendar/drivers/database/SQL/mysql.initial.sql
# /usr/bin/mysql $db < /usr/share/roundcubemail/plugins/calendar/drivers/kolab/SQL/mysql.initial.sql
# /usr/bin/mysql $db < /usr/share/roundcubemail/plugins/tasklist/drivers/database/SQL/mysql.initial.sql
exit
fi
/usr/bin/mysql <<EOF
CREATE DATABASE $db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use $db;
source /usr/share/roundcubemail/SQL/mysql.initial.sql;
use mysql;
GRANT ALL PRIVILEGES ON $db.* TO $user\@localhost
IDENTIFIED BY '$pass';
flush privileges;
EOF
#these plugins are no more in the core
# /usr/bin/mysql $db < /usr/share/roundcubemail/plugins/calendar/drivers/database/SQL/mysql.initial.sql
# /usr/bin/mysql $db < /usr/share/roundcubemail/plugins/calendar/drivers/kolab/SQL/mysql.initial.sql
# /usr/bin/mysql $db < /usr/share/roundcubemail/plugins/tasklist/drivers/database/SQL/mysql.initial.sql
END
}

View File

@ -0,0 +1,25 @@
{
my $status = $roundcube{'status'} || "disabled";
return " # roundcube-status is disabled."
unless $status eq 'enabled';
my $domain = $roundcube{'domain'} || "disabled";
return " # no hostname or domain for roundcube defined"
if $domain eq 'disabled';
my $DocRoot = "/usr/share/roundcubemail";
$OUT = "";
$OUT .= "\n";
$OUT .= "# Redirect an existing hostname or domain to $DocRoot.\n";
$OUT .= "<VirtualHost 0.0.0.0:80>\n";
$OUT .= " ServerName $roundcube{'domain'}\n";
$OUT .= " DocumentRoot $DocRoot\n";
$OUT .= "</VirtualHost>\n";
$OUT .= "<VirtualHost 0.0.0.0:443>\n";
$OUT .= " ServerName $roundcube{'domain'}\n";
$OUT .= " DocumentRoot $DocRoot\n";
$OUT .= " SSLEngine on\n";
$OUT .= "</VirtualHost>\n";
}

View File

@ -0,0 +1,46 @@
{
my $status = $roundcube{'status'} || "disabled";
return " # roundcube is disabled in this VirtualHost"
unless $status eq 'enabled';
$OUT = "";
my $allow = "ip $localAccess";
my $satisfy = 'all';
my $name = $roundcube{'Name'} || 'RoundCube IMAP Client';
my $version = 81; # php version to use
for ('exit-if-none')
{
if ( (exists($roundcube{'access'})) && ($roundcube{'access'} eq 'public') )
{
$allow = 'all granted';
$satisfy = 'all';
}
$OUT .= "#------------------------------------------------------------\n";
$OUT .= "# roundcube - $name\n";
$OUT .= "#------------------------------------------------------------\n";
{
if ((exists $roundcube{'URL'}) && ($roundcube{'URL'} ne ''))
{ $OUT .= "Alias /$roundcube{'URL'} /usr/share/roundcubemail\n"; }
}
$OUT .= "Alias /roundcube /usr/share/roundcubemail\n";
$OUT .= "Alias /roundcubemail /usr/share/roundcubemail\n";
$OUT .= "\n";
$OUT .= "<Directory /usr/share/roundcubemail>\n";
$OUT .= " Require $allow\n";
$OUT .= " AddType application/x-httpd-php .php\n";
$OUT .= "<FilesMatch \.php\$\>\n";
$OUT .= "SetHandler \"proxy:unix:/var/run/php-fpm/php$version-roundcube.sock|fcgi://localhost\"\n";
$OUT .= "</FilesMatch>\n";
$OUT .= "</Directory>\n";
$OUT .= qq (
<Directory /usr/share/roundcubemail/installer/>
Require all denied
</Directory>
);
}
}

View File

@ -0,0 +1,23 @@
{
my $status = $roundcube{'status'} || "disabled";
return " # roundcube is disabled in this VirtualHost"
unless $status eq 'enabled';
{
if ($port ne "443")
{
$OUT .= <<'HERE';
## Redirect roundcubeWeb Address to Secure Address
RewriteEngine on
RewriteRule ^/roundcube https://%{HTTP_HOST}/roundcube
RewriteRule ^/roundcubemail https://%{HTTP_HOST}/roundcubemail
## End Of Redirect
HERE
if ((exists $roundcube{'URL'}) && ($roundcube{'URL'} ne '')) {
$OUT .= "RewriteRule ^/$roundcube{'URL'} https://%{HTTP_HOST}/$roundcube{'URL'}\n";
}
}
}
}

View File

@ -0,0 +1,67 @@
{
my $phpversion="81";
if ($PHP_VERSION eq $phpversion){
if (($roundcube{'status'} || 'disabled') eq 'enabled'){
my $max_upload_size = ($roundcube{MaxUploadSize} || '100M');
$max_upload_size .= 'M' if ($max_upload_size =~ m/^\d+$/);
my $memory_limit = ($roundcube{MemoryLimit} || '512M');
$memory_limit .= 'M' if ($memory_limit =~ m/^\d+$/);
my $open_basedir= $roundcube{PHPBaseDir} || '';
$open_basedir = "/usr/share/roundcubemail:/etc/roundcubemail/:/var/log/roundcubemail:/var/lib/roundcubemail:/var/log/roundcube.log:/var/lib/php/roundcube:/home/e-smith/files/roundcube:/dev/urandom:/proc/meminfo:/usr/share/GeoIP/GeoLite2-Country.mmdb:/proc/cpuinfo:$open_basedir";
my $id = 'roundcube';
my $max_children = $roundcube{'PHPmaxChildren'} || 20;
my $min_spare_servers = $roundcube{'PHPminServers'} || 4;
my $start_servers = $roundcube{'PHPstartServers'} || 6;
my $max_spare_servers = $roundcube{'PHPmaxServers'} || 8;
my $max_requests = $roundcube{'PHPmaxRequests'} || 1000;
$min_spare_servers = ( $min_spare_servers > $max_spare_servers ) ? printf("%.0f",$max_spare_servers/2) : $min_spare_servers;
$start_servers = ( $start_servers > $max_spare_servers ) ? printf("%.0f", $max_spare_servers /2 + $min_spare_servers/2 ) : $start_servers;
$OUT .=<<_EOF;
[php$PHP_VERSION-$id]
user = www
group = www
listen.owner = root
listen.group = www
listen.mode = 0660
listen = /var/run/php-fpm/php$PHP_VERSION-$id.sock
pm = dynamic
pm.max_children = $max_children
pm.start_servers = $start_servers
pm.min_spare_servers = $min_spare_servers
pm.max_spare_servers = $max_spare_servers
pm.max_requests = $max_requests
php_admin_value[sys_temp_dir] = /var/lib/php/$id/tmp
php_admin_value[session.save_path] = /var/lib/php/$id/session
php_admin_value[session.gc_maxlifetime] = 86400
php_admin_value[upload_tmp_dir] = /var/lib/php/$id/tmp
php_admin_value[error_log] = /var/log/php/$id/error.log
slowlog = /var/log/php/roundcube/slow.log
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f php@{ $DomainName }
php_admin_flag[display_errors] = off
php_admin_flag[log_errors] = on
php_admin_value[error_log] = syslog
php_admin_value[memory_limit] = $memory_limit
php_admin_value[max_execution_time] = 3600
php_admin_value[post_max_size] = $max_upload_size
php_admin_value[upload_max_filesize] = $max_upload_size
php_admin_value[disable_functions] = system, show_source, symlink, dl, passthru
php_admin_value[open_basedir] = $open_basedir
php_admin_flag[allow_url_fopen] = on
php_admin_flag[file_upload] = on
php_admin_flag[session.cookie_httponly] = on
php_admin_flag[allow_url_include] = off
php_admin_value[session.save_handler] = files
php_admin_flag[output_buffering] = off
_EOF
}
else{
$OUT .= '; RoudnCube is disabled';
}
}
}

View File

@ -0,0 +1,44 @@
$config = array();
// ----------------------------------
// SQL DATABASE
// ----------------------------------
// Database connection string (DSN) for read+write operations
// Format (compatible with PEAR MDB2): db_provider://user:password@host/database
// Currently supported db_providers: mysql, pgsql, sqlite, mssql or sqlsrv
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// NOTE: for SQLite use absolute path: 'sqlite:////full/path/to/sqlite.db?mode=0646'
{
$OUT .= " \$config['db_dsnw'] = 'mysql://";
$OUT .= $roundcube{DbUser} . ":";
$OUT .= $roundcube{DbPassword} . "\@localhost/";
$OUT .= $roundcube{DbName} . "';";
}
// Database DSN for read-only operations (if empty write database will be used)
// useful for database replication
$config['db_dsnr'] = '';
// Disable the use of already established dsnw connections for subsequent reads
$config['db_dsnw_noread'] = false;
// use persistent db-connections
// beware this will not "always" work as expected
// see: http://www.php.net/manual/en/features.persistent-connections.php
$config['db_persistent'] = false;
// you can define specific table (and sequence) names prefix
$config['db_prefix'] = '';
// Mapping of table names and connections to use for ALL operations.
// This can be used in a setup with replicated databases and a DB master
// where read/write access to cache tables should not go to master.
$config['db_table_dsn'] = array(
// 'cache' => 'r',
// 'cache_index' => 'r',
// 'cache_thread' => 'r',
// 'cache_messages' => 'r',
);

View File

@ -0,0 +1,46 @@
// ----------------------------------
// LOGGING/DEBUGGING
// ----------------------------------
// system error reporting, sum of: 1 = log; 4 = show, 8 = trace
$config['debug_level'] = 1;
// log driver: 'syslog' or 'file'.
$config['log_driver'] = 'file';
// date format for log entries
// (read http://php.net/manual/en/function.date.php for all format characters)
$config['log_date_format'] = 'd-M-Y H:i:s O';
// Syslog ident string to use, if using the 'syslog' log driver.
$config['syslog_id'] = 'roundcube';
// Syslog facility to use, if using the 'syslog' log driver.
// For possible values see installer or http://php.net/manual/en/function.openlog.php
$config['syslog_facility'] = LOG_USER;
// Activate this option if logs should be written to per-user directories.
// Data will only be logged if a directry <log_dir>/<username>/ exists and is writable.
$config['per_user_logging'] = false;
// Log sent messages to <log_dir>/sendmail or to syslog
$config['smtp_log'] = true;
// Log successful/failed logins to <log_dir>/userlogins or to syslog
$config['log_logins'] = false;
// Log session authentication errors to <log_dir>/session or to syslog
$config['log_session'] = false;
// Log SQL queries to <log_dir>/sql or to syslog
$config['sql_debug'] = false;
// Log IMAP conversation to <log_dir>/imap or to syslog
$config['imap_debug'] = false;
// Log LDAP conversation to <log_dir>/ldap or to syslog
$config['ldap_debug'] = false;
// Log SMTP conversation to <log_dir>/smtp or to syslog
$config['smtp_debug'] = false;

View File

@ -0,0 +1,109 @@
// ----------------------------------
// IMAP
// ----------------------------------
// The mail host chosen to perform the log-in.
// Leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %s - domain name after the '@' from e-mail address provided at login screen
// For example %n = mail.domain.tld, %t = domain.tld
// WARNING: After hostname change update of mail_host column in users table is
// required to match old user data records with the new host.
{$OUT .= " \$config['imap_host'] = 'ssl://$DomainName:$imaps{TCPPort}';\n";}
// TCP port used for IMAP connections
//{$OUT .= " \$config['default_port'] = $imaps{TCPPort};\n";}
// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null to use
// best server supported one)
$config['imap_auth_type'] = null;
// IMAP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['imap_conn_options'] = array(
// 'ssl' => array(
// 'verify_peer' => true,
// 'verify_depth' => 3,
// 'cafile' => '/etc/openssl/certs/ca.crt',
// ),
// );
$config['imap_conn_options'] = array(
'ssl' => array(
'verify_peer' => true,
'allow_self_signed' => true,
'peer_name' => '{$DomainName}',
),
);
// IMAP connection timeout, in seconds. Default: 0 (use default_socket_timeout)
$config['imap_timeout'] = 0;
// Optional IMAP authentication identifier to be used as authorization proxy
$config['imap_auth_cid'] = null;
// Optional IMAP authentication password to be used for imap_auth_cid
$config['imap_auth_pw'] = null;
// If you know your imap's folder delimiter, you can specify it here.
// Otherwise it will be determined automatically
$config['imap_delimiter'] = null;
// If IMAP server doesn't support NAMESPACE extension, but you're
// using shared folders or personal root folder is non-empty, you'll need to
// set these options. All can be strings or arrays of strings.
// Folders need to be ended with directory separator, e.g. "INBOX."
// (special directory "~" is an exception to this rule)
// These can be used also to overwrite server's namespaces
$config['imap_ns_personal'] = null;
$config['imap_ns_other'] = null;
$config['imap_ns_shared'] = null;
// By default IMAP capabilities are readed after connection to IMAP server
// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list
// after login. Set to True if you've got this case.
$config['imap_force_caps'] = false;
// By default list of subscribed folders is determined using LIST-EXTENDED
// extension if available. Some servers (dovecot 1.x) returns wrong results
// for shared namespaces in this case. http://trac.roundcube.net/ticket/1486225
// Enable this option to force LSUB command usage instead.
// Deprecated: Use imap_disabled_caps = array('LIST-EXTENDED')
$config['imap_force_lsub'] = false;
// Some server configurations (e.g. Courier) doesn't list folders in all namespaces
// Enable this option to force listing of folders in all namespaces
$config['imap_force_ns'] = false;
// List of disabled imap extensions.
// Use if your IMAP server has broken implementation of some feature
// and you can't remove it from CAPABILITY string on server-side.
// For example UW-IMAP server has broken ESEARCH.
// Note: Because the list is cached, re-login is required after change.
$config['imap_disabled_caps'] = array();
// Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache'.
$config['imap_cache'] = null;
// Enables messages cache. Only 'db' cache is supported.
// This requires an IMAP server that supports QRESYNC and CONDSTORE
// extensions (RFC7162). See synchronize() in program/lib/Roundcube/rcube_imap_cache.php
// for further info, or if you experience syncing problems.
$config['messages_cache'] = false;
// Lifetime of IMAP indexes cache. Possible units: s, m, h, d, w
$config['imap_cache_ttl'] = '10d';
// Lifetime of messages cache. Possible units: s, m, h, d, w
$config['messages_cache_ttl'] = '10d';
// Maximum cached message size in kilobytes.
// Note: On MySQL this should be less than (max_allowed_packet - 30%)
$config['messages_cache_threshold'] = 50;

View File

@ -0,0 +1,70 @@
// ----------------------------------
// SMTP
// ----------------------------------
// SMTP server host (for sending mails).
// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
// If left blank, the PHP mail() function is used
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
{$OUT .= " \$config['smtp_host'] = 'ssl://localhost:$sqpsmtpd{'TCPPort'}';\n";}
// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
// {$OUT .= "\$config['smtp_port'] = $sqpsmtpd{'TCPPort'};\n";}
// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
{$OUT .= "\$config['smtp_user'] = '%u';\n";}
// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
{$OUT .= "\$config['smtp_pass'] = '%p';\n";}
// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use
// best server supported one)
$config['smtp_auth_type'] = '';
// Optional SMTP authentication identifier to be used as authorization proxy
$config['smtp_auth_cid'] = null;
// Optional SMTP authentication password to be used for smtp_auth_cid
$config['smtp_auth_pw'] = null;
// SMTP HELO host
// Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages
// Leave this blank and you will get the server variable 'server_name' or
// localhost if that isn't defined.
$config['smtp_helo_host'] = '';
// SMTP connection timeout, in seconds. Default: 0 (use default_socket_timeout)
// Note: There's a known issue where using ssl connection with
// timeout > 0 causes connection errors (https://bugs.php.net/bug.php?id=54511)
$config['smtp_timeout'] = 0;
// SMTP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation, and
// requires 'smtp_timeout' to be non zero.
// $config['smtp_conn_options'] = array(
// 'ssl' => array(
// 'verify_peer' => true,
// 'verify_depth' => 3,
// 'cafile' => '/etc/openssl/certs/ca.crt',
// ),
// );
$config['smtp_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'allow_self_signed' => true,
'peer_name' => '{$DomainName}',
),
);

View File

@ -0,0 +1,9 @@
// ----------------------------------
// LDAP
// ----------------------------------
// Type of LDAP cache. Supported values: 'db', 'apc' and 'memcache'.
$config['ldap_cache'] = 'db';
// Lifetime of LDAP cache. Possible units: s, m, h, d, w
$config['ldap_cache_ttl'] = '10m';

View File

@ -0,0 +1,252 @@
// ----------------------------------
// SYSTEM
// ----------------------------------
// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA.
// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING!
$config['enable_installer'] = false;
// don't allow these settings to be overriden by the user
$config['dont_override'] = array();
// define which settings should be listed under the 'advanced' block
// which is hidden by default
$config['advanced_prefs'] = array();
// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$config['support_url'] = '';
// replace Roundcube logo with this image
// specify an URL relative to the document root of this Roundcube installation
// an array can be used to specify different logos for specific template files, '*' for default logo
// for example array("*" => "/images/roundcube_logo.png", "messageprint" => "/images/roundcube_logo_print.png")
$config['skin_logo'] = null;
// automatically create a new Roundcube user when log-in the first time.
// a new user will be created once the IMAP login succeeds.
// set to false if only registered users can use this service
$config['auto_create_user'] = true;
// Enables possibility to log in using email address from user identities
$config['user_aliases'] = false;
// use this folder to store log files (must be writeable for apache user)
// This is used by the 'file' log driver.
$config['log_dir'] = '/var/log/roundcubemail/';
// use this folder to store temp files (must be writeable for apache user)
$config['temp_dir'] = '/var/lib/roundcubemail/';
// expire files in temp_dir after 48 hours
// possible units: s, m, h, d, w
$config['temp_dir_ttl'] = '48h';
// enforce connections over https
// with this option enabled, all non-secure connections will be redirected.
// set the port for the ssl connection as value of this option if it differs from the default 443
$config['force_https'] = false;
// tell PHP that it should work as under secure connection
// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set)
// e.g. when you're running Roundcube behind a https proxy
// this option is mutually exclusive to 'force_https' and only either one of them should be set to true.
$config['use_https'] = false;
// Allow browser-autocompletion on login form.
// 0 - disabled, 1 - username and host only, 2 - username, host, password
$config['login_autocomplete'] = 2;
// Forces conversion of logins to lower case.
// 0 - disabled, 1 - only domain part, 2 - domain and local part.
// If users authentication is case-insensitive this must be enabled.
// Note: After enabling it all user records need to be updated, e.g. with query:
// UPDATE users SET username = LOWER(username);
$config['login_lc'] = 2;
// Includes should be interpreted as PHP files
$config['skin_include_php'] = false;
// display software version on login screen
$config['display_version'] = false;
// Session lifetime in minutes
$config['session_lifetime'] = 10;
// Session domain: .example.org
$config['session_domain'] = '';
// Session name. Default: 'roundcube_sessid'
$config['session_name'] = null;
// Session authentication cookie name. Default: 'roundcube_sessauth'
$config['session_auth_name'] = null;
// Session path. Defaults to PHP session.cookie_path setting.
$config['session_path'] = null;
// Backend to use for session storage. Can either be 'db' (default), 'memcache' or 'php'
// If set to 'memcache', a list of servers need to be specified in 'memcache_hosts'
// Make sure the Memcache extension (http://pecl.php.net/package/memcache) version >= 2.0.0 is installed
// Setting this value to 'php' will use the default session save handler configured in PHP
$config['session_storage'] = 'db';
// Use these hosts for accessing memcached
// Define any number of hosts in the form of hostname:port or unix:///path/to/socket.file
$config['memcache_hosts'] = null; // e.g. array( 'localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock' );
// check client IP in session authorization
$config['ip_check'] = false;
// List of trusted proxies
// X_FORWARDED_* and X_REAL_IP headers are only accepted from these IPs
$config['proxy_whitelist'] = array();
// check referer of incoming requests
$config['referer_check'] = false;
// X-Frame-Options HTTP header value sent to prevent from Clickjacking.
// Possible values: sameorigin|deny. Set to false in order to disable sending them
$config['x_frame_options'] = 'sameorigin';
// this key is used to encrypt the users imap password which is stored
// in the session record (and the client cookie if remember password is enabled).
// please provide a string of exactly 24 chars.
{
use MIME::Base64 qw(encode_base64);
open( RANDOM, "/dev/urandom" );
my $buf;
read( RANDOM, $buf, 17);
my $pwd = encode_base64($buf);
chomp $pwd;
close RANDOM;
$OUT .= "\$config['des_key'] = \'$pwd\' ;\n";
}
// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with 'host' => 'domain' values to support multiple hosts
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['username_domain'] = '';
// Force domain configured in username_domain to be used for login.
// Any domain in username will be replaced by username_domain.
$config['username_domain_forced'] = false;
// This domain will be used to form e-mail addresses of new users
// Specify an array with 'host' => 'domain' values to support multiple hosts
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['mail_domain'] = '';
// Password charset.
// Use it if your authentication backend doesn't support UTF-8.
// Defaults to ISO-8859-1 for backward compatibility
$config['password_charset'] = 'ISO-8859-1';
// How many seconds must pass between emails sent by a user
$config['sendmail_delay'] = 0;
// Maximum number of recipients per message. Default: 0 (no limit)
$config['max_recipients'] = 0;
// Maximum allowednumber of members of an address group. Default: 0 (no limit)
// If 'max_recipients' is set this value should be less or equal
$config['max_group_members'] = 0;
// Name your service. This is displayed on the login screen and in the window title
$config['product_name'] = 'Roundcube Webmail';
// Add this user-agent to message headers when sending
$config['useragent'] = 'Roundcube Webmail/'.RCMAIL_VERSION;
// try to load host-specific configuration
// see http://trac.roundcube.net/wiki/Howto_Config for more details
$config['include_host_config'] = false;
// path to a text file which will be added to each sent message
// paths are relative to the Roundcube root folder
$config['generic_message_footer'] = '';
// path to a text file which will be added to each sent HTML message
// paths are relative to the Roundcube root folder
$config['generic_message_footer_html'] = '';
// add a received header to outgoing mails containing the creators IP and hostname
$config['http_received_header'] = false;
// Whether or not to encrypt the IP address and the host name
// these could, in some circles, be considered as sensitive information;
// however, for the administrator, these could be invaluable help
// when tracking down issues.
$config['http_received_header_encrypt'] = false;
// This string is used as a delimiter for message headers when sending
// a message via mail() function. Leave empty for auto-detection
$config['mail_header_delimiter'] = NULL;
// number of chars allowed for line when wrapping text.
// text wrapping is done when composing/sending messages
$config['line_length'] = 72;
// send plaintext messages as format=flowed
$config['send_format_flowed'] = true;
// According to RFC2298, return receipt envelope sender address must be empty.
// If this option is true, Roundcube will use user's identity as envelope sender for MDN responses.
$config['mdn_use_from'] = false;
// Set identities access level:
// 0 - many identities with possibility to edit all params
// 1 - many identities with possibility to edit all params but not email address
// 2 - one identity with possibility to edit all params
// 3 - one identity with possibility to edit all params but not email address
// 4 - one identity with possibility to edit only signature
$config['identities_level'] = 0;
// Mimetypes supported by the browser.
// attachments of these types will open in a preview window
// either a comma-separated list or an array: 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/pdf'
$config['client_mimetypes'] = null; # null == default
// Path to a local mime magic database file for PHPs finfo extension.
// Set to null if the default path should be used.
$config['mime_magic'] = null;
// Absolute path to a local mime.types mapping table file.
// This is used to derive mime-types from the filename extension or vice versa.
// Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system,
// download it from http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
$config['mime_types'] = '/etc/mime.types';
// path to imagemagick identify binary
$config['im_identify_path'] = null;
// path to imagemagick convert binary
$config['im_convert_path'] = null;
// Size of thumbnails from image attachments displayed below the message content.
// Note: whether images are displayed at all depends on the 'inline_images' option.
// Set to 0 to display images in full size.
$config['image_thumbnail_size'] = 240;
// maximum size of uploaded contact photos in pixel
$config['contact_photo_size'] = 160;
// Enable DNS checking for e-mail address validation
$config['email_dns_check'] = false;
// Disables saving sent messages in Sent folder (like gmail) (Default: false)
// Note: useful when SMTP server stores sent mail in user mailbox
$config['no_save_sent_messages'] = false;

View File

@ -0,0 +1,142 @@
// ----------------------------------
// USER INTERFACE
// ----------------------------------
// default messages sort column. Use empty value for default server's sorting,
// or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc'
$config['message_sort_col'] = '';
// default messages sort order
$config['message_sort_order'] = 'DESC';
// These cols are shown in the message list. Available cols are:
// subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, 'priority'
$config['list_cols'] = array('subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment');
// the default locale setting (leave empty for auto-detection)
// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR
$config['language'] = null;
// use this format for date display (date or strftime format)
$config['date_format'] = 'Y-m-d';
// give this choice of date formats to the user to select from
// Note: do not use ambiguous formats like m/d/Y
$config['date_formats'] = array('Y-m-d', 'Y/m/d', 'Y.m.d', 'd-m-Y', 'd/m/Y', 'd.m.Y', 'j.n.Y');
// use this format for time display (date or strftime format)
$config['time_format'] = 'H:i';
// give this choice of time formats to the user to select from
$config['time_formats'] = array('G:i', 'H:i', 'g:i a', 'h:i A');
// use this format for short date display (derived from date_format and time_format)
$config['date_short'] = 'D H:i';
// use this format for detailed date/time formatting (derived from date_format and time_format)
$config['date_long'] = 'Y-m-d H:i';
// store draft message is this mailbox
// leave blank if draft messages should not be stored
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['drafts_mbox'] = 'Drafts';
// store spam messages in this mailbox
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['junk_mbox'] = 'junkmail';
// store sent message is this mailbox
// leave blank if sent messages should not be stored
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['sent_mbox'] = 'sent-mail';
// move messages to this folder when deleting them
// leave blank if they should be deleted directly
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['trash_mbox'] = 'Trash';
// display these folders separately in the mailbox list.
// these folders will also be displayed with localized names
// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP)
$config['default_folders'] = array('INBOX', 'Drafts', 'sent-mail', 'junkmail', 'Trash');
// Disable localization of the default folder names listed above
$config['show_real_foldernames'] = false;
// automatically create the above listed default folders on first login
$config['create_default_folders'] = true;
// protect the default folders from renames, deletes, and subscription changes
$config['protect_default_folders'] = true;
// if in your system 0 quota means no limit set this option to true
$config['quota_zero_as_unlimited'] = false;
// Make use of the built-in spell checker. It is based on GoogieSpell.
// Since Google only accepts connections over https your PHP installatation
// requires to be compiled with Open SSL support
$config['enable_spellcheck'] = true;
// Enables spellchecker exceptions dictionary.
// Setting it to 'shared' will make the dictionary shared by all users.
$config['spellcheck_dictionary'] = false;
// Set the spell checking engine. Possible values:
// - 'googie' - the default
// - 'pspell' - requires the PHP Pspell module and aspell installed
// - 'enchant' - requires the PHP Enchant module
// - 'atd' - install your own After the Deadline server or check with the people at http://www.afterthedeadline.com before using their API
// Since Google shut down their public spell checking service, you need to
// connect to a Nox Spell Server when using 'googie' here. Therefore specify the 'spellcheck_uri'
$config['spellcheck_engine'] = 'googie';
// For locally installed Nox Spell Server or After the Deadline services,
// please specify the URI to call it.
// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 or
// the After the Deadline package from http://www.afterthedeadline.com.
// Leave empty to use the public API of service.afterthedeadline.com
$config['spellcheck_uri'] = '';
// These languages can be selected for spell checking.
// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch');
// Leave empty for default set of available language.
$config['spellcheck_languages'] = NULL;
// Makes that words with all letters capitalized will be ignored (e.g. GOOGLE)
$config['spellcheck_ignore_caps'] = false;
// Makes that words with numbers will be ignored (e.g. g00gle)
$config['spellcheck_ignore_nums'] = false;
// Makes that words with symbols will be ignored (e.g. g@@gle)
$config['spellcheck_ignore_syms'] = false;
// Use this char/string to separate recipients when composing a new message
$config['recipients_separator'] = ',';
// Number of lines at the end of a message considered to contain the signature.
// Increase this value if signatures are not properly detected and colored
$config['sig_max_lines'] = 15;
// don't let users set pagesize to more than this value if set
$config['max_pagesize'] = 200;
// Minimal value of user's 'refresh_interval' setting (in seconds)
$config['min_refresh_interval'] = 60;
// Enables files upload indicator. Requires APC installed and enabled apc.rfc1867 option.
// By default refresh time is set to 1 second. You can set this value to true
// or any integer value indicating number of seconds.
$config['upload_progress'] = false;
// Specifies for how many seconds the Undo button will be available
// after object delete action. Currently used with supporting address book sources.
// Setting it to 0, disables the feature.
$config['undo_timeout'] = 0;
// A static list of canned responses which are immutable for the user
$config['compose_responses_static'] = array(
// array('name' => 'Canned Response 1', 'text' => 'Static Response One'),
// array('name' => 'Canned Response 2', 'text' => 'Static Response Two'),
);

View File

@ -0,0 +1,70 @@
// ----------------------------------
// ADDRESSBOOK SETTINGS
// ----------------------------------
// This indicates which type of address book to use. Possible choises:
// 'sql' (default), 'ldap' and ''.
// If set to 'ldap' then it will look at using the first writable LDAP
// address book as the primary address book and it will not display the
// SQL address book in the 'Address Book' view.
// If set to '' then no address book will be displayed or only the
// addressbook which is created by a plugin (like CardDAV).
$config['address_book_type'] = 'sql';
// In order to enable public ldap search, configure an array like the Verisign
// example further below. if you would like to test, simply uncomment the example.
// Array key must contain only safe characters, ie. a-zA-Z0-9_
$config['ldap_public']['Local_LDAP'] = array('hosts' => array('localhost:389'),
{
$OUT .= " 'base_dn' \=\> " ."'". esmith::util::ldapBase($DomainName)."',";
}
'search_fields' => array('Email' => 'mail', 'Name' => 'cn'),
'name_field' => 'cn',
'email_field' => 'mail',
'jobtitle_field' => 'title',
'phone:work_field' => 'telephoneNumber',
'street_field' => 'street',
'zipcode_field' => 'postalCode',
'region_field' => 'st',
'locality_field' => 'l',
'country_field' => 'c',
'organization_field' => 'o',
'department_field' => 'ou',
'scope' => 'sub',
'fuzzy_search' => 1);
// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
{
$OUT .= "\$config['autocomplete_addressbooks'] = array('sql','Local_LDAP');";
$OUT .= "\$config['globaladdressbook_autocomplete'] = true;";
}
// The minimum number of characters required to be typed in an autocomplete field
// before address books will be searched. Most useful for LDAP directories that
// may need to do lengthy results building given overly-broad searches
$config['autocomplete_min_length'] = 1;
// Number of parallel autocomplete requests.
// If there's more than one address book, n parallel (async) requests will be created,
// where each request will search in one address book. By default (0), all address
// books are searched in one request.
$config['autocomplete_threads'] = 0;
// Max. numer of entries in autocomplete popup. Default: 15.
$config['autocomplete_max'] = 15;
// show address fields in this order
// available placeholders: \{street\}, \{locality\}, \{zipcode\}, \{country\}, \{region\}
$config['address_template'] = '\{street\}<br/>\{locality\} \{zipcode\}<br/>\{country\} \{region\}';
// Matching mode for addressbook search (including autocompletion)
// 0 - partial (*abc*), default
// 1 - strict (abc)
// 2 - prefix (abc*)
// Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode
$config['addressbook_search_mode'] = 0;

View File

@ -0,0 +1,197 @@
// ----------------------------------
// USER PREFERENCES
// ----------------------------------
// Use this charset as fallback for message decoding
$config['default_charset'] = 'ISO-8859-1';
// skin name: folder from skins/
$config['skin'] = '{ # for 1.5 we use larry and classic, elastic are vailable, for 1.6 only elastic is available.
$OUT = (-d "/usr/share/roundcubemail/skins/larry") ? "larry" : "elastic"}';
// Enables using standard browser windows (that can be handled as tabs)
// instead of popup windows
$config['standard_windows'] = false;
// show up to X items in messages list view
$config['mail_pagesize'] = 50;
// show up to X items in contacts list view
$config['addressbook_pagesize'] = 50;
// sort contacts by this col (preferably either one of name, firstname, surname)
$config['addressbook_sort_col'] = 'surname';
// the way how contact names are displayed in the list
// 0: display name
// 1: (prefix) firstname middlename surname (suffix)
// 2: (prefix) surname firstname middlename (suffix)
// 3: (prefix) surname, firstname middlename (suffix)
$config['addressbook_name_listing'] = 0;
// use this timezone to display date/time
// valid timezone identifers are listed here: php.net/manual/en/timezones.php
// 'auto' will use the browser's timezone settings
$config['timezone'] = 'auto';
// prefer displaying HTML messages
$config['prefer_html'] = true;
// display remote inline images
// 0 - Never, always ask
// 1 - Ask if sender is not in address book
// 2 - Always show inline images
$config['show_images'] = 0;
// open messages in new window
$config['message_extwin'] = false;
// open message compose form in new window
$config['compose_extwin'] = false;
// compose html formatted messages by default
// 0 - never, 1 - always, 2 - on reply to HTML message, 3 - on forward or reply to HTML message
$config['htmleditor'] = 0;
// show pretty dates as standard
$config['prettydate'] = true;
// save compose message every 300 seconds (5min)
$config['draft_autosave'] = 300;
// default setting if preview pane is enabled
$config['preview_pane'] = false;
// Mark as read when viewed in preview pane (delay in seconds)
// Set to -1 if messages in preview pane should not be marked as read
$config['preview_pane_mark_read'] = 0;
// Clear Trash on logout
$config['logout_purge'] = false;
// Compact INBOX on logout
$config['logout_expunge'] = false;
// Display attached images below the message body
$config['inline_images'] = true;
// Encoding of long/non-ascii attachment names:
// 0 - Full RFC 2231 compatible
// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default)
// 2 - Full 2047 compatible
$config['mime_param_folding'] = 1;
// Set true if deleted messages should not be displayed
// This will make the application run slower
$config['skip_deleted'] = false;
// Set true to Mark deleted messages as read as well as deleted
// False means that a message's read status is not affected by marking it as deleted
$config['read_when_deleted'] = true;
// Set to true to never delete messages immediately
// Use 'Purge' to remove messages marked as deleted
$config['flag_for_deletion'] = false;
// Default interval for auto-refresh requests (in seconds)
// These are requests for system state updates e.g. checking for new messages, etc.
// Setting it to 0 disables the feature.
$config['refresh_interval'] = 60;
// If true all folders will be checked for recent messages
$config['check_all_folders'] = false;
// If true, after message delete/move, the next message will be displayed
$config['display_next'] = true;
// Default messages listing mode. One of 'threads' or 'list'.
$config['default_list_mode'] = 'list';
// 0 - Do not expand threads
// 1 - Expand all threads automatically
// 2 - Expand only threads with unread messages
$config['autoexpand_threads'] = 0;
// When replying:
// -1 - don't cite the original message
// 0 - place cursor below the original message
// 1 - place cursor above original message (top posting)
$config['reply_mode'] = 0;
// When replying strip original signature from message
$config['strip_existing_sig'] = true;
// Show signature:
// 0 - Never
// 1 - Always
// 2 - New messages only
// 3 - Forwards and Replies only
$config['show_sig'] = 1;
// Use MIME encoding (quoted-printable) for 8bit characters in message body
$config['force_7bit'] = false;
// Defaults of the search field configuration.
// The array can contain a per-folder list of header fields which should be considered when searching
// The entry with key '*' stands for all folders which do not have a specific list set.
// Please note that folder names should to be in sync with $config['default_folders']
$config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1));
// Defaults of the addressbook search field configuration.
$config['addressbook_search_mods'] = null; // Example: array('name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1);
// 'Delete always'
// This setting reflects if mail should be always deleted
// when moving to Trash fails. This is necessary in some setups
// when user is over quota and Trash is included in the quota.
$config['delete_always'] = false;
// Directly delete messages in Junk instead of moving to Trash
$config['delete_junk'] = false;
// Behavior if a received message requests a message delivery notification (read receipt)
// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask)
// 3 = send automatically if sender is in addressbook, otherwise ask the user
// 4 = send automatically if sender is in addressbook, otherwise ignore
$config['mdn_requests'] = 0;
// Return receipt checkbox default state
$config['mdn_default'] = 0;
// Delivery Status Notification checkbox default state
// Note: This can be used only if smtp_server is non-empty
$config['dsn_default'] = 0;
// Place replies in the folder of the message being replied to
$config['reply_same_folder'] = false;
// Sets default mode of Forward feature to "forward as attachment"
$config['forward_attachment'] = false;
// Defines address book (internal index) to which new contacts will be added
// By default it is the first writeable addressbook.
// Note: Use '0' for built-in address book.
$config['default_addressbook'] = null;
// Enables spell checking before sending a message.
$config['spellcheck_before_send'] = false;
// Skip alternative email addresses in autocompletion (show one address per contact)
$config['autocomplete_single'] = false;
// Default font for composed HTML message.
// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New,
// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana
$config['default_font'] = 'Verdana';
// Default font size for composed HTML message.
// Supported sizes: 8pt, 10pt, 12pt, 14pt, 18pt, 24pt, 36pt
$config['default_font_size'] = '10pt';
// Enables display of email address with name instead of a name (and address in title)
$config['message_show_email'] = false;
// Default behavior of Reply-All button:
// 0 - Reply-All always
// 1 - Reply-List if mailing list is detected
$config['reply_all_mode'] = 0;

View File

@ -0,0 +1,27 @@
// ----------------------------------
// PLUGINS
// ----------------------------------
// List of active plugins (in plugins/ directory)
//Here we declare our activated plugins. If you want to add plugins, please do the following db command in a root terminal
//config setprop roundcube PluginsList "plugin1,plugin2,plugin3"
//Then issue
//signal-event conf-roundcube or signal-event roundcube-update
//The default list is : globaladdressbook,calendar,libcalendaring,contextmenu,markasjunk,vcard_attachments,newmail_notifier,emoticons,managesieve
{ use esmith::ConfigDB;
my $DB = esmith::ConfigDB->open_ro;
my $plugins = $DB->get_prop('roundcube','PluginsList') || "";
my @plugs = split(',',$plugins);
my @plugd ;
for my $p (@plugs) {
push @plugd, $p if -d "/usr/share/roundcubemail/plugins/$p";
}
@plugs=@plugd;
s/^(.*)$/"\1"/ for @plugs;
$plugins = join(',',@plugs);
$OUT .= "\$config['plugins'] = array($plugins);";
}

View File

@ -0,0 +1,14 @@
{
$OUT = <<HERE;
<?php
/*
HERE
$OUT .=
Text::Template::_load_text("/etc/e-smith/templates-default/template-begin");
$OUT .= <<HERE;
*/
HERE
}

View File

@ -0,0 +1,38 @@
{
# This snippet sets the managesieve_port config option of the plugin if Sieve service is enabled
# otherwise, the default value of "null" is kept for this config option.
use esmith::ConfigDB;
my $cdb = esmith::ConfigDB->open_ro || die "Couldn't open ConfigDB\n";
my $sievestatus = $cdb->get_prop('sieve','status') || 'disabled';
my $sieveport = $cdb->get_prop('sieve','TCPPort') || 'null';
$OUT .= "// managesieve server port. When empty the port will be determined automatically\n";
$OUT .= "// using getservbyname() function, with 4190 as a fallback.\n";
if ($sievestatus eq 'enabled') {
$OUT .= "\$config['managesieve_port'] = $sieveport; \n";
}
else {
$OUT .= "\$config['managesieve_port'] = null; \n";
}
$OUT .= "// managesieve server address (and optional port), default is localhost.\n";
$OUT .= "// Replacement variables supported in host name:\n";
$OUT .= "// %h - user's IMAP hostname\n";
$OUT .= "// %n - http hostname ($_SERVER['SERVER_NAME'])\n";
$OUT .= "// %d - domain (http hostname without the first part)\n";
$OUT .= "// For example %n = mail.domain.tld, %d = domain.tld\n";
$OUT .= "// If port is omitted it will be determined automatically using getservbyname()\n";
$OUT .= "// function, with 2000 or 4190 as a fallback (depending on current version).\n";
$OUT .= "// Note: Add tls:// prefix to enable explicit STARTTLS\n";
$OUT .= "// or add ssl:// prefix to enable implicit SSL.\n";
if ($sievestatus eq 'enabled') {
$OUT .= "\$config['managesieve_host'] = 'localhost:$sieveport'; \n";
}
else {
$OUT .= "\$config['managesieve_host'] = null; \n";
}
}

View File

@ -0,0 +1,58 @@
// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
// or none. Optional, defaults to best method supported by server.
$config['managesieve_auth_type'] = null;
// Optional managesieve authentication identifier to be used as authorization proxy.
// Authenticate as a different user but act on behalf of the logged in user.
// Works with PLAIN and DIGEST-MD5 auth.
$config['managesieve_auth_cid'] = null;
// Optional managesieve authentication password to be used for imap_auth_cid
$config['managesieve_auth_pw'] = null;
// use or not TLS for managesieve server connection
// Note: tls:// prefix in managesieve_host is also supported
$config['managesieve_usetls'] = false;
// default contents of filters script (eg. default spam filter)
$config['managesieve_default'] = '/etc/dovecot/sieve/global';
// The name of the script which will be used when there's no user script
$config['managesieve_script_name'] = 'managesieve';
// Sieve RFC says that we should use UTF-8 endcoding for mailbox names,
// but some implementations does not covert UTF-8 to modified UTF-7.
// Defaults to UTF7-IMAP
$config['managesieve_mbox_encoding'] = 'UTF-8';
// I need this because my dovecot (with listescape plugin) uses
// ':' delimiter, but creates folders with dot delimiter
$config['managesieve_replace_delimiter'] = '';
// disabled sieve extensions (body, copy, date, editheader, encoded-character,
// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
// Note: not all extensions are implemented
$config['managesieve_disabled_extensions'] = array();
// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
$config['managesieve_debug'] = false;
// Enables features described in http://wiki.kolab.org/KEP:14
$config['managesieve_kolab_master'] = false;
// Script name extension used for scripts including. Dovecot uses '.sieve',
// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled.
$config['managesieve_filename_extension'] = '.sieve';
// List of reserved script names (without extension).
// Scripts listed here will be not presented to the user.
$config['managesieve_filename_exceptions'] = array();
// List of domains limiting destination emails in redirect action
// If not empty, user will need to select domain from a list
$config['managesieve_domains'] = array();
// Supported methods of notify extension. Default: 'mailto'
$config['managesieve_notify_methods'] = array('mailto');

View File

@ -0,0 +1,7 @@
// Enables separate management interface for vacation responses (out-of-office)
// 0 - no separate section (roundcube default),
// 1 - add Vacation section (new SME default),
// 2 - add Vacation section, but hide Filters section
$config['managesieve_vacation'] = 1;
?>

View File

@ -0,0 +1,14 @@
{
$OUT = <<HERE;
<?php
/*
HERE
$OUT .=
Text::Template::_load_text("/etc/e-smith/templates-default/template-begin");
$OUT .= <<HERE;
*/
HERE
}

View File

@ -0,0 +1,5 @@
// Full URL to the Nextcloud server
// e.g. https://example.com/nextcloud if in sub-path
// or https://cloud.example.com if in root
$config["nextcloud_attachment_server"] = "https://{$roundcube{'nextcloudURI'}||$nextcloud{'Virtualhost'}||$DomainName."/nextcloud"}";

View File

@ -0,0 +1,11 @@
// Username resolving strategy from internal Roundcube
// username which usually is the email address e.g. user@example.com or IMAP User
// Placeholders are replaced as following
// %s => verbatim RC username as reported by rcmail->get_user_name(). Depending on config loginuser@domain or login
// %i => username used to login to imap. usually equal to %s
// %e => user email
// %l, %u => email localpart (%u is for backward compatibility)
// %d => email domain
// %h => IMAP Host
$config["nextcloud_attachment_username"] = "%u";

View File

@ -0,0 +1,4 @@
// Don't try the email password at all, because we know it won't work
// Defaults to false, i.e. try the password
$config["nextcloud_attachment_dont_try_mail_password"] = false;

View File

@ -0,0 +1,12 @@
// Name for the sub-folder to upload to
// Defaults to "Mail Attachments"
// Can't be sub-folder of sub-folder link folder/sub
$config["nextcloud_attachment_folder"] = "{$roundcube{'nextcloudFolder'}||'Mail Attachments'}";
// Translate the folder name according to the users configured locale
// When activating this $config["nextcloud_attachment_folder"] has to be an array
// of locale => name, e.g.
// $config["nextcloud_attachment_folder"] = ["en_US" => "Mail Attachments", "de_DE" => "E-Mail Anhänge"]
// If locale doesn't exist, en_US or first will be used
// Defaults to false
$config["nextcloud_attachment_folder_translate_name"] = false;

View File

@ -0,0 +1,5 @@
// Limit to show a warning at for large attachments.
// has to be smaller then $config['max_message_size']
// set to null to disable
$config["nextcloud_attachment_softlimit"] = "{$roundcube{'NCsoftlimit'}||$qmail{'MaxMessageSize'}||'25M'}";

View File

@ -0,0 +1,6 @@
// Behavior if $config['max_message_size'] is hit.
// "prompt" to show dialog a la outlook or apple
// "upload" to automatically upload without asking a la google
// Defaults to "prompt"
$config["nextcloud_attachment_behavior"] = "{$roundcube{'nextcloudBehavior'}||'prompt'}";

View File

@ -0,0 +1,57 @@
// List of users to exclude
// They won't be able to interact with the plugin at all
// No prompts, no automatic uploading, no settings.
// List by RC username or resolved username e.g. ["user@demo.com", "user"]
$config["nextcloud_attachment_exclude_users"] = [];
// Exclude users listed by uid (you need add the mapping to the address book) or email in any of the following
// address books. This allows you to configure a hidden LDAP address book containing the users
// to exclude.
//
// Hide an addressbook by setting
// $config['ldap_public'][*] = [
// ...
// 'hidden' => true,
// ...
// ];
// in the global config.
//
// Add the uid mapping via
// $config['ldap_public'][*] = [
// ...
// 'fieldmap' => [
// ...
// //internal => ldapattr
// 'uid' => 'uid',
// ...
// ],
// ...
// ]
// in the global config. Replace mapped attribute with appropriate value for your directory e.g. cn
// And replace "*" with the appropriate address book name
$config["nextcloud_attachment_exclude_users_in_addr_books"] = [];
// Exclude users that have a mapped value in an address book
// format [ [ 'address_book', 'mapped_attribute', 'matched_value' ], ... ]
//
// Resulting in every user listed in the address book "address_book"
// to be excluded if they have a "mapped_attribute", matching "matched_value".
//
// E.g. ['public', 'memberOf', 'cn=no_cloud,ou=groups,dc=example,dc=com']
//
// multiple attributes and multiple address books are supported
$config["nextcloud_attachment_exclude_users_with_addr_book_value"] = [];
// Exclude user that that are in a given group in an address book
// format [ [ 'address_book', 'group' ], ... ]
//
// Resulting in every user listed in the address book "address_book" that is
// is in group "group" to be excluded. You have to correctly configure the group
// mapping for the LDAP entry
//
// E.g. ['public', 'nocloud']
//
// multiple groups and multiple address books are supported
$config["nextcloud_attachment_exclude_users_in_addr_book_group"] = [];

View File

@ -0,0 +1,4 @@
// Enable/Disable certificate validation for https on WebDAV and API requests
// Defaults to true (enabled)
$config["nextcloud_attachment_verify_https"] = {$roundcube{'nextcloudVerifyCerts'}||'true'};

View File

@ -0,0 +1,14 @@
{
$OUT = <<HERE;
<?php
/*
HERE
$OUT .=
Text::Template::_load_text("/etc/e-smith/templates-default/template-begin");
$OUT .= <<HERE;
*/
HERE
}

14
root/usr/bin/rcplugin_update.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
pathroundcube=$(pwd)
cd /usr/share/roundcubemail
# composer seems to have issues to detect roundcubemail 1.6.6 version... so:
# we could also get it from index.php header.
export COMPOSER_ROOT_VERSION=`rpm -q roundcubemail --queryformat "%{VERSION}"`
COMPOSER_ALLOW_SUPERUSER=1 /usr/bin/php83 -d allow_url_fopen=1 /usr/bin/composer require johndoh/contextmenu --with-all-dependencies --no-interaction
COMPOSER_ALLOW_SUPERUSER=1 /usr/bin/php83 -d allow_url_fopen=1 /usr/bin/composer require johndoh/globaladdressbook ~2.1 --with-all-dependencies --no-interaction
COMPOSER_ALLOW_SUPERUSER=1 /usr/bin/php83 -d allow_url_fopen=1 /usr/bin/composer require roundcube/larry ~1.6.0 --with-all-dependencies --no-interaction
COMPOSER_ALLOW_SUPERUSER=1 /usr/bin/php83 -d allow_url_fopen=1 /usr/bin/composer require bennet0496/nextcloud_attachments --with-all-dependencies --no-interaction
COMPOSER_ALLOW_SUPERUSER=1 /usr/bin/php83 -d allow_url_fopen=1 /usr/bin/composer self-update --no-interaction
COMPOSER_ALLOW_SUPERUSER=1 /usr/bin/php83 -d allow_url_fopen=1 /usr/bin/composer update --with-all-dependencies --no-interaction
cd $pathroundcube

View File

View File

View File

0
root/var/log/php/roundcube/.gitignore vendored Normal file
View File

239
smeserver-roundcube.spec Normal file
View File

@ -0,0 +1,239 @@
%define name smeserver-roundcube
%define version 1.6
%define release 1
Summary: smserver rpm to setup roundcube, an IMAP mail client
Name: %{name}
Version: %{version}
Release: %{release}%{?dist}
Source: %{name}-%{version}.tar.gz
License: GNU GPL version 2
URL: https://www.koozali.org
Group: SMEserver/addon
BuildRoot: %{_tmppath}/%{name}-buildroot
Prefix: %{_prefix}
BuildArchitectures: noarch
BuildRequires: smeserver-devtools
Requires: smeserver-release >= 11.0
Requires: smeserver-apache >= 11.0
Requires: roundcubemail >= 1.6
Requires: roundcubemail < 1.7
Requires: composer >= 2.7.8
Requires: git
#TODO either fuse with dovecot or put in core
#Requires: smeserver-dovecot-extras
Requires: jq
Requires: php-kolab-net-ldap3
#Requires: roundcubemail_plugins
Obsoletes: roundcube
AutoReqProv: no
%description
smeserver rpm to setup the roundcube IMAP mail client.
%prep
%setup
%build
perl createlinks
%install
rm -rf $RPM_BUILD_ROOT
(cd root ; find . -depth -print | cpio -dump $RPM_BUILD_ROOT)
rm -f %{name}-%{version}-filelist
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \
--dir /var/log/php/roundcube 'attr(0755,www,www)' \
--dir /var/lib/php/roundcube 'attr(0755,www,www)' \
--dir /var/lib/php/roundcube/tmp 'attr(0755,www,www)' \
--dir /var/lib/php/roundcube/opcache 'attr(0755,www,www)' \
--dir /var/lib/php/roundcube/session 'attr(0755,www,www)' \
> %{name}-%{version}-filelist
echo "%doc COPYING" >> %{name}-%{version}-filelist
%clean
cd ..
rm -rf %{name}-%{version}
%pre
%preun
%post
%postun
#uninstall
if [ $1 = 0 ] ; then
/usr/bin/systemctl restart httpd-e-smith
fi
%files -f %{name}-%{version}-filelist
%defattr(-,root,root)
%attr(755,root,root) /usr/bin/rcplugin_update.sh
%changelog
* Sun Sep 01 2024 Jean-Philippe Pialasse <jpp@koozali.org> 1.6-1.sme
- initial version for SME11 [SME: ]
* Mon Mar 25 2024 Jean-Philippe Pialasse <jpp@koozali.org> 1.2-24.sme
- fix temp event not ending because of interactive install of plugin [SME: 12530]
- stop altering php81 ini file [SME: 12529]
- workaround Composer could not detect the root package [SME: 12531]
- workaround roundcube/plugin-installer is also a root requirement [SME: 12532]
* Fri Mar 22 2024 Jean-Philippe Pialasse <jpp@koozali.org> 1.2-23.sme
- fix roundcube unable to send mail after smeserver-qpsmtpd disabling auth on port 25
* Sat Feb 24 2024 Jean-Philippe Pialasse <tests@pialasse.com> 1.2-21.sme
- add nextcloud_attachements plugin support [SME: 12489]
- simplify access setting using access(private,public)/status [SME: 12263]
- Requires roundcube >= 1.6
up to php81, add dedicated php pool
using update event to config plugins
* Tue Oct 31 2023 Brian Read <brianr@koozali.org> 1.2-19.sme
- Update params for changes from v1.6 roundcube [SME: 12415]
* Sun Dec 11 2022 Jean-Philippe Pialasse <tests@pialasse.com> 1.2-18.sme
- fix previous patch [SME: 11430]
* Sat Dec 10 2022 Jean-Philippe Pialasse <tests@pialasse.com> 1.2-17.sme
- remove sieverules [SME: 11430]
change skin on availability for 1.6
* Wed Dec 07 2022 Jean-Philippe Pialasse <tests@pialasse.com> 1.2-14.sme
- fix list of plugins and add composer [SME: 11430]
do not load in conf plugins without an actual folder.
* Mon Aug 01 2022 Jean-Philippe Pialasse <tests@pialasse.com> 1.2-12.sme
- update to httpd 2.4 access syntax [SME: 12059]
thanks to Vasarhelyi Zsolt
- accept self signed certificates for imap and smtp [SME: 11430]
- Use of undefined constant, quote around module names [SME: 11430]
* Mon Apr 05 2021 Brian Read <brianr@bjsystems.co.uk> 1.2-11.sme
- Update spec file to take out plugin rpm [SME: 11430 ]
* Sun Apr 04 2021 Brian Read <brianr@bjsystems.co.uk> 1.2-10.sme
- Add-update-event-in-createlinks-and-fix-smtp-port-in-config [SME: 11430]
* Thu Mar 17 2016 stephane de Labrusse <stephdl@de-labrusse.fr> 1.2-9.sme
- Bump the version to force the composer update
* Mon Sep 21 2015 stephane de Labrusse <stephdl@de-labrusse.fr> 1.2-8.sme
- libcalendaring calendar and tasklist are no more in the contribs
* Wed Sep 02 2015 stephane de Labrusse <stephdl@de-labrusse.fr> 1.2-6.sme
- Initial release to contribs9
* Thu Apr 16 2015 stephane de labrusse <stephdl@de-labrusse.fr> 1.2-5
- managesieve is no more used, I prefer to use sieverules (only for new installation)
* Thu Apr 16 2015 stephane de labrusse <stephdl@de-labrusse.fr> 1.2-4
- Carddav is a hugly plugin, it is now removed
- Added a migrate fragment to remove it from DB
* Sun Feb 22 2015 stephane de labrusse <stephdl@de-labrusse.fr> 1.2-3
- Added sieverules plugins
- Added a link for kolab-LDAP3
* Thu Feb 12 2015 stephane de labrusse <stephdl@de-labrusse.fr> 1.2-2
- Add a migrate fragment if the dns of the main domain is set to external
- Plugins are updated by the %post section
- Communication beetween roundcube and imap are ssl based
- Password and login fields are saved, a random key encrypt them in cookies
- the installer folder is forbidden by apache and by configuration file
- The configuration is now templated in serveral files
* Wed Feb 11 2015 stephane de labrusse <stephdl@de-labrusse.fr> 1.2-1
- Switch to roundcubemail from Epel.
* Sun Nov 30 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.1-5
- code developed by Mats Schuh <m.schuh@neckargeo.net>
- split the config.inc.php; now the sieve vacation gets its own template
* Fri Nov 28 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.1-4
- code developed by Mats Schuh <m.schuh@neckargeo.net>
- Add a template in /opt/roundcube/plugins/managesieve/config.inc.php
- Allow managesieve following the status of sieve.
* Fri Sep 05 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.1-3
- added a template in httpd.conf to forbid to browse /tmp /config /logs
* Sun May 11 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.1-2
- adapted /etc/e-smith/sql/init/80roundcube for mysql tasklists Table
* Sat May 10 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.1-1
- removed openbasedir and uploadtmpdir for roundcube compatibility
* Mon Apr 14 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.0-7
Wed Apr 14 2014 --> Wed Apr 09 2014 or Mon Apr 14 2014 or Wed Apr 16 2014 or ....
- removed the copymessage plugin activated
* Wed Apr 02 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.0-6
- corrected issue with the tasklists db issue
- added auto-update for composer in the script rcplugin_update.sh
* Sat Feb 15 2014 stephane de labrusse <stephdl@de-labrusse.fr> 1.0-5
- adapted to the upstream update eg roundcube 1.0
* Sun Nov 10 2013 JP Pialasse <tests@pialasse.com> 0.9-18.sme
- cleaning build section [SME: 7981]
* Wed Nov 6 2013 JP Pialasse <tests@pialasse.com> 0.9-17.sme
- corrected bug: typo in patch1 [SME: 7981]
* Tue Nov 05 2013 JP Pialasse <tests@pialasse.com> 0.9-16.sme
Thu Nov 05 2013 --> Thu Oct 31 2013 or Tue Nov 05 2013 or Thu Nov 07 2013 or ....
- corrected bug [SME: 7981]
- moved out spec file sql init and other event and actions
* Sat Oct 26 2013 stephane de labrusse <stephdl@de-labrusse.fr> 0.9.15
- Change the version of roundcubemail-plugins-kolab to 3.02 : http://git.kolab.org/roundcubemail-plugins-kolab/
* Sun Oct 20 2013 stephane de labrusse <stephdl@de-labrusse.fr> 0.9.14
- Change the original https_only
* Sun Oct 13 2013 stephane de labrusse <stephdl@de-labrusse.fr> 0.9.13
Sat Oct 13 2013 --> Sat Oct 12 2013 or Sun Oct 13 2013 or Sat Oct 19 2013 or ....
- Add the Kolab calendar plugin : http://git.kolab.org/roundcubemail-plugins-kolab/tree/plugins/calendar
- Add the context menu for right click, very useful : http://www.tehinterweb.co.uk/roundcube/#picontextmenu
- Add the "Mark as Junk 2" to kick spam to junkmail : http://www.tehinterweb.co.uk/roundcube/#pimarkasjunk2
* Sat Oct 5 2013 stephane de Labrusse <stephdl@de-labrusse.fr> 0.9.12
- Add the SME Server internal LDAP addressbooks in roundcube
* Sat Sep 21 2013 Stephane de Labrusse <stephdl@de-labrusse.fr> 0.9.11
- Add carddav functionnality http://www.crash-override.net/carddav.html
* Wed Jun 05 2013 Stephane de Labrusse <stephdl@de-labrusse.fr> 0.9.9
- add a tmp folder in httpd.conf
* Mon Jun 03 2013 Stephane de Labrusse <stephdl@de-labrusse.fr>
- requires sme8 0.9-8
* Thu Jun 28 2007 Stephen Noble <stephen@dungog.net>
- add domain property to use existing host or domain 0.9-7
* Thu Jun 21 2007 Stephen Noble <stephen@dungog.net>
- update .spec file 0.9-6
* Thu Jun 21 2007 Stephen Noble <stephen@dungog.net>
- automate config file creation
- proxypass to fix https redirect bug
- [0.9-5]
* Fri Apr 6 2007 Stephen Noble <stephen@dungog.net>
- revert mysql password creation
- [0.9-4]
* Wed Feb 14 2007 Stephen Noble <stephen@dungog.net>
- remove phpinfo
- simplify mysql password creation
- don't alias / in httpd for nul values in URL
- [0.9-3]
* Thu Dec 14 2006 Stephen Noble <support@dungog.net>
- php_admin_value eaccelerator enabled
- [0.9-2]
* Tue Dec 12 2006 Stephen Noble <support@dungog.net>
- initial release
- [0.9-1]