<<

Sympa installation howto Stefano Brivio [email protected]

Riccardo Setti [email protected]

Diario delle Revisioni Revisione 1.0.0 2005/08/14 1.0.0

Sympa integration with groupware HOWTO

1. Abstract

In this how-to we will go through the steps needed to install and configure the Sympa mailing list in order to provide integration with the Kolab Groupware Project, using OpenLDAP for distribution lists and authentication, MySQL for storing Sympa accounts and Postfix as MTA.

2. Sympa installation

This how-to refers to 5.1 version of Sympa which is downloadable from www.sympa.org. As an OpenPKG package is still unavailable you will need to install it from source.

wget http://www.sympa.org/distribution/sympa-5.1.tar.gz

With this command you download just the manager itself, without its dependencies (mostly classes), listed here:

1 Sympa installation howto

• DBI

wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.48.tar.gz

• DBD--3.0002

wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0002.tar.gz

• MHonArc-2.6.15

wget http://search.cpan.org/CPAN/authors/id/E/EH/EHOOD/MHonArc-2.6.15.tar.gz

• libintl-perl-1.14

wget http://search.cpan.org/CPAN/authors/id/G/GU/GUIDO/libintl-perl-1.14.tar.gz

• XML-LibXML-Common-0.13

wget http://search.cpan.org/CPAN/authors/id/P/PH/PHISH/XML-LibXML-Common-0.13.tar.gz

• XML-LibXML-1.58

wget http://search.cpan.org/CPAN/authors/id/P/PH/PHISH/XML-LibXML-1.58.tar.gz

• perl-ldap-0.3202

wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/perl-ldap-0.33.tar.gz

• Template-Toolkit-2.14

wget http://www.cpan.org/modules/by-module/Template/Template-Toolkit-2.14.tar.gz

• CGI::FAST class

wget http://search.cpan.org/CPAN/authors/id/L/LD/LDS/CGI.pm-3.11.tar.gz

To download the classes needed by Sympa you can proceed in two ways: by downloading them manually from CPAN or through the CPAN shell.

2 Sympa installation howto

Let’s now decompress the Perl classes. In every directory you have to issue these commands:

eval ‘/kolab/bin/ rc --eval all env‘ to set the environment variables according to OpenPKG system; wget ftp://ftp.openpkg.org/release/2.4/SRC/mysql-4.1.12-2.4.0.src.rpm /kolab/bin/openpkg rpm --rebuild mysql-4.1.12-2.4.0.src.rpm /kolab/bin/openpkg rpm -Uvh /kolab/RPM/PKG/mysql-4.1.12-2.4.0.ix86-debian3.1-kolab.rpm /kolab/etc/rc mysql start /kolab/bin/mysqladmin -u root password ’what_you_want’

tar xzf DBI-1.48.tar.gz cd DBI-1.48 perl Makefile.pm make make install

tar xzf DBD-mysql-3.0002.tar.gz cd DBD-mysql-3.0002 perl Makefile.pm make make install

tar xzf MHonArc-2.6.15.tar.gz cd MHonArc-2.6.15 perl Makefile.PL make make install

tar xzf libintl-perl-1.14.tar.gz cd libintl-perl-1.14 perl Makefile.PL make make install

tar xzf perl-ldap-0.33.tar.gz perl Makefile.PL make make install

tar xzf Template-Toolkit-2.14.tar.gz cd Template-Toolkit-2.14 perl Makefile.PL (answer yes by all questions it should go) make make install

tar xzf XML-LibXML-Common-0.13.tar.gz cd XML-LibXML-Common-0.13 perl Makefile.PL make make install

tar xvf XML-LibXML-1.58.tar.gz cd XML-LibXML-1.58

3 Sympa installation howto

perl Makefile.PL make make install

tar xzf CGI.pm-3.11.tar.gz cd CGI.pm-3.11 perl Makefile.PL make make install

finally: wget http://www.sympa.org/distribution/sympa-5.1.tar.gz

Let’s now decompress the Sympa distribution archive this way:

tar xzf sympa-5.1.tar.gz

Now cd into ‘sympa’ and copy inside it the configure-sympa.opts file that we provide in < Appendix A You are now ready to properly configure and install Sympa: touch /kolab/etc/postfix/aliases ./configure-sympa.opts make make install configure-sympa.opts file provides the switches needed to configure Sympa with the correct paths according to OpenPKG default locations.

3. Sympa general configuration

Once you are done with Sympa installation, you can set the general options for Sympa (/kolab/etc/sympa/sympa.conf). The variables that need to be changed to obtain a working environment are (a sample configuration file can be found in Appendix B): vim /kolab/etc/sympa/sympa.conf

• line 45: domain kolab-ei.khamsa.

• line 48: listmaster [user@domain]

• line 106: /kolab/sbin/sendmail

• line 149: db_type mysql

• line 152: db_name sympa

• line 155: db_host localhost

• line 158: db_user sympa

• line 162: db_passwd [password]

• line 192: css_url http://[URL]/sympa/css/ css_url isn’t present by default and must be set to the URL of CSS files. For more detailed information about graphical customization, see Appendix G. The remaining options are commented in sympa.conf. See Appendix J for notes about multi-domain configuration.

4 Sympa installation howto 4. MySQL setup

Listed below there are the commands to be issued in order to set up the database needed by Sympa:

mysqladmin -uroot -p create sympa mysql -uroot -p mysql> grant all on sympa.* to sympa@localhost identified by ’[password]; mysql> flush privileges; mysql> quit

5. Apache CGI setup

Create a new file in /kolab/etc/apache called apache.sympa: (provided in Appendix C )

vim /kolab/etc/apache/apache.sympa Alias /wwsicons /kolab//sympa/icons ScriptAlias /wws /kolab/var/kolab/www/cgi-bin/wwsympa.fcgi AddHandler cgi-script .fcgi

You must include this file in /kolab/etc/apache/apache.conf, inserting a line like this at the end: (this file is regenerated every time OpenPKG system gets restarted! You’d better be using a modified template as provided in Appendix I)

vim /kolab/etc/kolab/templates/httpd.conf Include /kolab/etc/apache/apache.sympa

at the end of the file. Then: kolabconf

6. Postfix Configuration

To get Sympa working with postfix the following files need to be changed (template files are provided in Appendix D):

• master.cf

• main.cf

• virtual_regexp

• transport_regexp virtual_regexp and transport_regexp need to be created if they don’t exist. The two files are used by Postfix to parse the addresses and thus create the transport tables. transport_regexp includes the regexps

5 Sympa installation howto to tell if the mail is addressed to the list owner or to the list itself and to choose the right rule in master.cf . For every list, transport rules need to be created. The rules should look like t hese (change according to your hostname):

6.1. transport_regexp

vim /kolab/etc//transport_regexp /^.*+owner\@YOUR\.DOMAIN\.TLD$/ sympabounce: /^.*\@YOUR\.DOMAIN\.TLD$/ sympa:

6.1.1. virtual_regexp

Then you need to add a line to virtual_regexp for every list. This line is needed to find the owner’s name and to create the virtual address (again, you need to change it according to the hostname):

vim /kolab/etc/postfix/virtual_regepx /^(.*)-owner\@YOUR\.DOMAIN\.TLD$/ [email protected].

6.1.1.1. main.cf master.cf

Then you have to change some lines in main.cf. Use the lines in main.cf.template to change the lines in main.cf with the same line numbers in /kolab/etc/kolab/templates. Then just restart Postfix. vim /kolab/etc/kolab/templates/main.cf

58 transport_maps = hash:/kolab/etc/postfix/transport, ldap:/kolab/etc/postfix/ldaptransport.cf, regexp:/kolab/etc/postfix/transport_regex 62 virtual_alias_maps= regexp:/kolab/etc/postfix/virtual_regexp 63 local_recipient_maps = $alias_maps 64 sympa_destination_recipient_limit = 1 65 sympabounce_destination_recipient_limit = 1 vim /kolab/etc/kolab/templates/master.cf add the following lines at the end of the file. master.cf.template:

112 sympa - n n - - pipe flags=R user=kolab-n argv=/kolab/lib/sympa queue ${recipient} sympabounce unix - n n - - pipe flags=R user=kolab-n argv=/kolab/lib/sympa bouncequeue ${user}

6 Sympa installation howto

After that you must re-run kolabconf YOU NEED TO ACCEPT SMTP EXETERN CONNECTION --> YOU MUST CONFIGURE KOLAB FOR DO THIS FROM THE MANAGER WEB INTERFACE

7. Sympa authentication by means of LDAP

Sympa authentication options are stored in auth.conf (see Appendix E), which can be found, according to Kolab path conventions, in /kolab/etc/sympa/ directory. The paragraphs needed will look like these ones:

vim /kolab/etc/sympa/auth.conf

ldap regexp .* host localhost:389 timeout 30 suffix dc=[@your@],dc=[@your@],dc=[@your@] get_dn_by_uid_filter (uid=[sender]) get_dn_by_email_filter (mail=[sender]) email_attribute mail scope sub

user_table regexp .*

information between @@ are varibles you need to change it with your hostname

The ldap paragraph contains information related to LDAP access, while the user_table paragraph is needed for internal Sympa authentication. These lines provides a working configuration for Kolab Groupware. A fully commented auth.conf file is provided in Appendix E. More detailed information can be found at http://www.sympa.org/distribution/sympa-5.0.1/doc/html/node12.html#auth-conf (http://www.sympa.org/distribution/sympa-5.0.1/doc/html/node12.html#auth-conf).

8. Sympa mailing lists synchronization with LDAP distribution lists

Let’s now log on the administration interface at http://[hostname]/wws/. Create and configure a the mailing lists: Sympa provides differents templates for speeding up this process. Then, edit /kolab/lib/sympa/expl/[listname]/config, adding these lines (NOTE: line spacing must remain the same!) at beginning of file: (an commented example is provided in Appendix F)

vim /kolab/lib/sympa/expl/[listname]/config

7 Sympa installation howto

ttl 240

user_data_source include2

include_ldap_2level_query host localhost:389 suffix1 cn=dl_name,dc=[your],dc=[your],dc=[your] timeout1 30 filter1 (objectClass=kolabGroupOfNames) attrs1 member select1 all scope1 sub suffix2 [attrs1] timeout2 30 filter2 (objectClass=kolabInetOrgPerson) attrs2 mail scope2 sub select2 all

These parameters provide a working environment for LDAP synchronization, defining a two-level query. Remember to set suffix1 to the wanted DN (dl_name must be set according to the complete distribution list name). The value for suffix2 listed above set it to the same value as of suffix1. filter1 and filter2 provide the filters for the LDAP search, while attrs1 and attrs2 are set to the attributes that must be fetched on the two levels. More details can be found at http://www.sympa.org/doc/html/node19.html#par-user-data-source

9. Conclusion

Firt you need:

1. download necessary software 2. install mysql 3. untar the necessary software and build it 4. configure and install sympa 5. configure sympa.conf 6. configure auth.conf 7. configure apache 8. create a list 9. modify the list template 10. configure postfix 11. use sympa and enojoy it

8 Sympa installation howto

For do this things you need 1. root password 2. mysql root password 3. you must be a manager of kolab

10. Copyright

Copyright 2005 Riccardo Setti e Stefano Brivio

This howto is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Foundation; either version 2, or any later version. All this work was sponsored by Khamsa sa www.khamsa.ch (http://www.khamsa.ch)

A. ‘configure’ file needed to build Sympa

In order to build Sympa for the OpenPKG Sympa, i.e. following the OpenPKG path naming conventions etc., you need to use the configure file listed below:

./configure \ #by default all file of will be installed here --with-prefix=/kolab/lib \ #same --prefix=/kolab/lib/sympa/ \ # where config file are installed --with-confdir=/kolab/etc/sympa \ #the etc dir --with-etcdir=/kolab/etc/sympa \ #the init.d dir --with-initdir=/kolab/etc/rc.d \ #the pid dir --with-piddir=/kolab/var/sympa \ #spoll dir where sympa stores mails --with-spooldir=/kolab/var/spool/sympa \ #where the lists are (configuration files) --with-expldir=/kolab/lib/sympa/expl \ #alias wrapper and virtualwrapper utilty are here --with-libexecdir=/kolab/libexec/sympa/bin \ #default location of the cgi --with-cgidir=/kolab/var/kolab/www/cgi-bin \ #the user that sympa uses for run --with-user=kolab-n \ #the group tha sympa uses for run --with-group=kolab-n \

9 Sympa installation howto

#where sympa will store binaries --with-bindir=/kolab/lib/sympa \ #binaries dir --bindir=/kolab/lib/sympa/bin \ #sbin dir --with-sbindir=/kolab/lib/sympa \ #where sympa stores all perl script --with-libdir=/kolab/lib/sympa/bin \ #share documents of sympa --with-datadir=/kolab/share/sympa \ #icons :) --with-iconsdir=/kolab/share/sympa/icons \ #man pages --with-mandir=/kolab/man \ #where sympa will write aliases :) --with-virtual_aliases=/kolab/etc/postfix/aliases \ #what newaliases program will run sympa after a creation of a list --with-newaliases=/kolab/sbin/newaliases

B. sympa.conf

A sample sympa.conf. This file has to be put in /kolab/etc/sympa.

###\\\\ Directories and file location ////###

## Directory containing mailing lists subdirectories home /kolab/lib/sympa/expl

## Directory for configuration files ; it also contains scenari/ and templates/ directories etc /kolab/etc/sympa

## File containing Sympa PID while running. ## Sympa also locks this file to ensure that it is not running more than once. Caution : user sympa need to write access without special privilegee. pidfile /kolab/var/sympa/sympa.pid

## Umask used for file creation by Sympa umask 027

## Directory containing available NLS catalogues (Message internationalization) localedir /kolab/lib/sympa//locale

## The main spool containing various specialized spools ## All spool are created at runtime by sympa.pl spool /kolab/var/spool/sympa

## Incoming spool queue /kolab/var/spool/sympa/msg

10 Sympa installation howto

## Bounce incoming spool queuebounce /kolab/var/spool/sympa/bounce

###\\\\ Syslog ////###

## The syslog facility for sympa ## Do not forget to edit syslog.conf syslog LOCAL1

## Communication mode with syslogd is either unix (via Unix sockets) or inet (use of UDP) log_socket_type unix

## Log intensity ## 0 : normal, 2,3,4 for debug log_level 0

###\\\\ General definition ////###

## Main robot hostname domain kolab-ei.khamsa.ch

## Listmasters list comma separated listmaster [email protected]

## Local part of sympa email adresse ## Effective address will be [EMAIL]@[HOST] email sympa

## Default lang (fr | en_US | hu | it) lang us

## Who is able to create lists ## This parameter is a scenario, check sympa documentation about scenarios if you want to define one create_list public_listmaster

## Sympa commands priority sympa_priority 1

## Default priority for list messages default_list_priority 5

## Secret used by Sympa to make MD5 fingerprint in web cookies secure ## Should not be changed ! May invalid all user password cookie 242402405

## The default maximum size (in bytes) for messages (can be re-defined for each list) max_size 5242880

## Specify which rfc2369 mailing list headers to add # was rfc2369_header_fields ARRAY(0x856b048) rfc2369_header_fields help,subscribe,unsubscribe,post,owner,archive

11 Sympa installation howto

## Specify header fields to be removed before message distribution # was remove_headers ARRAY(0x856b0d8) remove_headers Return-Receipt-To,Precedence,X-Sequence,Disposition-Notification-To

###\\\\ Errors management ////###

## Bouncing email rate for warn list owner bounce_warn_rate 30

## Bouncing email rate for halt the list (not implemented) ## Not yet used in current version, Default is 50 bounce_halt_rate 50

## Task name for expiration of old bounces expire_bounce_task daily

## Welcome message return-path ## If set to unique, new subcriber is removed if welcome message bounce welcome_return_path owner

## Remind message return-path ## If set to unique, subcriber is removed if remind message bounce, use with care remind_return_path owner

###\\\\ MTA related ////###

## Path to the MTA (sendmail, postfix, or ) ## should point to a sendmail-compatible binary (eg: a binary named ’sendmail’ is distributed with Postfix) sendmail /kolab/sbin/sendmail

## Maximum number of recipients per call to Sendmail nrcpt 25

## Max. number of different domains per call to Sendmail avg 10

## Max. number of Sendmail processes (launched by Sympa) running simultaneously ## Proposed value is quite low, you can rise it up to 100, 200 or even 300 with powerfull systems. maxsmtp 40

###\\\\ Pluggin ////###

## Path to the antivirus scanner engine ## supported antivirus : McAfee/uvscan, Fsecure/fsav, Sophos, AVP and Trend Micro/VirusWall # antivirus_path /usr/local/uvscan/uvscan

## Antivirus pluggin command argument # antivirus_args --secure --summary --dat /usr/local/uvscan

###\\\\ S/MIME pluggin ////###

## Path to OpenSSL ## Sympa knowns S/MIME if is installed

12 Sympa installation howto

# openssl /usr/local/bin/openssl

## The directory path use by OpenSSL for trusted CA certificates # capath /kolab/etc/sympa/ssl.crt

## This parameter sets the all-in-one file where you can assemble the Certificates of Certification Authorities (CA) cafile /kolab/share/sympa/ca-bundle.crt

## User CERTs directory ssl_cert_dir /kolab/lib/sympa/expl/X509-user-certs

## Password used to crypt lists private keys # key_passwd your_password

###\\\\ Database ////###

## Database type (mysql | Pg | Oracle | Sybase) ## be carefull to the case db_type mysql

## Name of the database db_name sympa

## The host hosting your sympa database db_host localhost

## Database user for connexion db_user sympa

## Database password (associated to the db_user) ## What ever you use a password or not, you must protect the SQL (is it a not a public internet service ?) db_passwd kolab-ei

## Database private extention to user table ## You need to extend the database format with these fields # db_additional_user_fields age,address

## Database private extention to subscriber table ## You need to extend the database format with these fields # db_additional_subscriber_fields billing_delay,subscription_expiration

###\\\\ Web interface ////###

## Sympa’s main page URL wwsympa_url http://kolab-ei.khamsa.ch/sympa

## web interface color : dark dark_color #006666

## web interface color : selected_color selected_color #996666

## web interface color : light

13 Sympa installation howto

light_color #cccc66

## web_interface color : shaded shaded_color #66cccc

## web_interface color : background bg_color #ffffcc

css_url http://kolab-ei.khamsa.ch/sympa/css/

C. apache.sympa

This is a sample Apache configuration file for Sympa. You should name it /kolab/etc/apache/apache.sympa, and include it in main apache.conf.

Alias /wwsicons /kolab/share/sympa/icons ScriptAlias /wws /kolab/var/kolab/www/cgi-bin/wwsympa.fcgi AddHandler cgi-script .fcgi

D. Postfix configuration

Here are Postfix template files needed to get Sympa working with Postfix. master.cf.template:

112 sympa unix - n n - - pipe flags=R user=kolab-n argv=/kolab/lib/sympa queue ${recipient} 113 sympabounce unix - n n - - pipe flags=R user=kolab-n argv=/kolab/lib/sympa/bouncequeue ${user}

main.cf.template:

58 transport_maps = hash:/kolab/etc/postfix/transport, ldap:/kolab/etc/postfix/ldaptransport.cf, regexp:/kolab/etc/postfix/transport_regex 62 virtual_alias_maps= regexp:/kolab/etc/postfix/virtual_regexp 63 local_recipient_maps = $alias_maps 64 sympa_destination_recipient_limit = 1 65 sympabounce_destination_recipient_limit = 1

virtual_regexp.template:

/^(.*)-owner\@kolab-ei\.khamsa\.ch$/ [email protected]

14 Sympa installation howto

transport_regexp.template:

/^.*+owner\@kolab-ei\.khamsa\.ch$/ sympabounce: /^.*\@kolab-ei\.khamsa\.ch$/ sympa:

E. auth.conf

This file must be put in /kolab/etc/sympa. It provides LDAP and internal (i.e. the method chosen in sympa.conf, MySQL in our case) access for authentication for web interface and mail interface. Sympa will first try LDAP authentication, and if it doesn’t succeed, will try to authenticate through MySQL.

## Here is the default auth.conf ## It defines the authentication backends used by Sympa

# parameters for LDAP authentication ldap

# the regexp applied to the login to decide # whether accept or not this authentication method regexp .*

host localhost:389 # LDAP comma-separated server:port list (supports replication) # NOTE: this parameter is mandatory

timeout 30 # maximum time allowed for a LDAP search

suffix dc=[your],dc=[your],dc=[your] # the DN in which the search is to be performed

get_dn_by_uid_filter (uid=[sender]) # the search filter corresponding to the ldap_uid. (RFC 2254 # compliant): the ’[sender]’ value applies the filter on the user

# the search filter corresponding to the email addresses get_dn_by_email_filter (mail=[sender])

# the name of the email attribute email_attribute mail

# search the whole tree below the base object scope sub

# parameter for internal (MySQL) Sympa authentication user_table

15 Sympa installation howto

# same as above regexp .*

F. Mailing lists configuration

This is a sample mailing list configuration file. It provides synchronization with Kolab’s distribution lists (LDAP) as well as access to Sympa’s own MySQL for user subscription options and user account created through the Sympa web interface. Its pathname is /kolab/lib/sympa/expl/[ml_name]/config.

## Configuration de la liste sympa-l ## Cree le Mercredi 31 Mars 99 #send editorkey

ttl 240

user_data_source include2

include_ldap_2level_query host localhost:389 suffix1 cn=abuse@,dc=kolab-ei,dc=khamsa,dc=ch timeout1 30 filter1 (objectClass=kolabGroupOfNames) attrs1 member select1 all scope1 sub suffix2 [attrs1] timeout2 30 filter2 (objectClass=kolabInetOrgPerson) attrs2 mail select2 all scope2 sub

subject prova2

status open visibility noconceal

subscribe open_notify

unsubscribe open_notify

owner email [email protected] profile privileged

send privateoreditorkey

16 Sympa installation howto topics computing/network web_archive access public archive access owner period week digest 1,4 13:26 review owner shared_doc d_edit default d_read public creation date_epoch 1124188652 date 16 ago 2005 at 12:37:32 email [email protected]

WARNING: configuration parameters must be separated by blank lines and BLANK LINES ONLY! Specific parameters for Kolab synchronization begin are: ttl

Time-to-live of user data extracted by distribution lists user_data_source

Method of loading subscribers data: we use include2 method for reading subscribers both from kolab distribution list (ldap) and main database (MySQL, configured in sympa.conf) and keeping subscribers accounts in main database, avoiding DB file and thus improving performance dramatically. include_ldap_2level_query

This paragraph defines parameters for a two-level LDAP query returning a list of subscribers: the first level query returns a list of DNs and the second level queries convert the DNs into e-mail addresses. host

LDAP host:port comma-separated list (supports replication). suffix1

Naming space covered by the first level search. NOTE: the cn field in the search domain must be set to the complete distribution list name (abuse@, in this case). timeout1

Timeout for the first level query.

17 Sympa installation howto

filter1

Defines the LDAP search filter for the first level query (RFC 2254 compliant).

attrs1

The attribute containing the data in the returned object that will be used for the second-level query.

select1

In this case, use all the attribute values.

scope1

First level search scope: here is the whole tree below the base object.

suffix2

Naming space covered by the second level search: ’[attrs1]’ means the same as the domain covered by the first one.

timeout2 30 filter2 (objectClass=kolabInetOrgPerson) attrs2 mail select2 all scope2 sub

Other parameters for the second level search: see description above.

G. Graphical customization

Sympa graphical customization can be achieved through CSS and an optional logo image. The parameters to be added to sympa.conf are:

css_url

The URL of style.css file (you can find a CSS example in Appendix H).

logo_html_definition

An html string for insertion in the header of pages generated by Sympa, e.g.:

logo_html_definition

18 Sympa installation howto H. Sample CSS file

Here you can find a sample CSS file for sympa.

@media screen { *{ background-color: transparent; border: 0px solid #999; color: #333; font-size: 12px; font-family: "Trebuchet MS", "Bitstream Vera Sans", verdana, lucida, arial, helvetica, sans-serif; padding: 0px; margin: 0px; } body { background: silver; text-align: center; }

/* ########## Blocks, id and class ########## */

#Canvas {margin: 7px 7px 0px 7px;} #Stretcher {margin: 0px 0px 0px 190px; text-align: left;} #Paint { vertical-align:top; text-align: center; } #Header { background: #929292; border: 1px solid #333; font-size: 10px; text-align: left; vertical-align: top; } #ActionHeader { background: silver; border: 1px solid #333; font-size: 10px; text-align: left; vertical-align: top; padding-bottom: 0px; padding-top: 3px; padding-left: 3px; padding-right: 3px; margin-bottom: 10px; }

#Clock {float: right; padding-right: 3px; vertical-align:top; font-family: Arial, sans-serif;} #Login {text-align: left; padding-left: 5px; vertical-align:top; font-family: Arial, sans-serif;} #Search input.textbox {width: 90%;} #Logo {text-align: left; padding-top: 5px; padding-left: 5px;} #Logo a {font-size: 72px;} #Title {} .menuInactive {padding-left: 20px} .menuInactive2 {font-size: 14px; text-decoration: none;} #FormLabel {font-size: 12px; font-weight: bold;}

19 Sympa installation howto

#ArcCalendar {padding-bottom: 10px;} /* #SITELINKS {position: relative; text-align: center;} */ ul#MainMenuLinks li {list-style: none; display: inline;}

/* #top {height:1px;width:1px;display: none;} */ #toggleMenu {float: right; padding-right: 3px;} #Menus { float: left; width: 180px; /* width: 25%; nogo w/ ie yet */ border: 0px solid #999; padding-top: 0px; text-align: left; } #Footer { background: #929292; border: 1px solid #333; clear: both; font-size: 10px; padding: 2px; padding-left: 8px; padding-right: 8px; text-align: center; } #Identity {text-align: left; font-size: 12px; font-weight: bold; overflow: hidden;}

.Help {display: none; border: 1px doted #333; z-index: 1000; background: #ffffcc; }

.MenuBlock { background: #fff; padding: 5px; border: 1px solid #333; text-align: left; margin-bottom: 10px; } .MenuBlock h1 {text-indent: 0px; font-size: 16px; padding-bottom:10px;} .MenuBlock strong {text-indent: 0px; font-size: 16px; padding-bottom:10px;} .ContentBlock { margin: -3px 0px 0px 0px; background: #fff; border: 1px solid #333; padding: 10px; text-align: left; } .ContentBlock p {padding: 10px;} .ContentBlock > * { padding: 0px; border-bottom: 0px dotted #999; text-align: left; } .ContentBlock * a { border-bottom: 1px dotted #3366CC; text-align: left; }

20 Sympa installation howto

.ContentBlock * a:hover {text-decoration:none;} .ContentBlock * a img {border: 0px;}

.navBar {margin: 0px 0px 0px 190px;}

.displayNone {display: none;height:0px;width:0px;} .printNone {} .title {position: absolute; top: 60px; font-size: 16px; text-indent: 30px;} .customMenu {text-indent: 0px; } a.dingbat {text-align: center;} .dingbat {text-indent: 0px; text-align: center; font-family: serif; font-weight: 100;}

.button { background:silver !important; border: 3px solid; padding: 0px 2px 0px 2px; margin:2px; border-top-color: #99ccff; border-right-color: #999;border-bottom-color: #999; border-left-color: #99ccff;} .button:hover {background: silver; border-top-color: #999; border-right-color: #99ccff; border-bottom-color: #99ccff; border-left-color: #999;}

.smalltext {font-size: 10px;} .smalltext a {font-size: 10px;} .smallblacktext {color: #000; font-size: 12px;} .mediumtext {font-size: 12px;} .largetext {font-size: 16px;}

/* ########## Elements ########## */ img {} .MainMenuLinks {border: 1px solid #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.MainMenuLinks {border: 1px solid #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.MainMenuLinks:link {border: 1px solid #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.MainMenuLinks:visited {border: 1px solid #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.MainMenuLinks:hover {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.MainMenuLinks:active {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.MainMenuLinksCurrentPage {border: 1px solid #333; background: silver; border-bottom: 1px solid silver; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.MainMenuLinksCurrentPage:hover {border: 1px solid #333; background: silver; border-bottom: 1px solid silver; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.ActionMenuLinks {border: 1px solid #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.ActionMenuLinks:link {border: 1px solid #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.ActionMenuLinks:visited {border: 1px solid #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.ActionMenuLinks:hover {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.ActionMenuLinks:active {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.ActionMenuLinksCurrentPage {border: 1px solid #333; background: #fff; border-bottom: 1px solid #fff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.ActionMenuLinksCurrentPage:hover {border: 1px solid #333; background: #fff; border-bottom: 1px solid #fff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} ul li.ActionMenuLinksInactive {border: 1px doted #333; background: #999; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinks {border: 1px solid #333; background: transparent; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinks:link {border: 1px solid #333; background: transparent; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinks:visited {border: 1px solid #333; background: transparent; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinks:hover {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinks:active {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinksCurrentPage {border: 1px solid #333; background: #99ccff; color: #3366CC text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinksCurrentPage:hover {border: 1px solid #333; background: #99ccff; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinksInactive { border-bottom: 1px solid #333; border-right: 1px solid #777777; border-top: 1px solid #777777; border-left: 1px solid #777777; background: transparent; color: #777777; text-decoration: none; padding: 0px 10px 0px 10px;} a.ArcMenuLinksInactive:hover { border-bottom: 1px solid #333; border-right: 1px solid #777777; border-top: 1px solid #777777; border-left: 1px solid #777777; background: transparent; color: #777777; text-decoration: none; padding: 0px 10px 0px 10px;}

21 Sympa installation howto

#ArcMenuLinksInactive {border: 0px solid #333; text-decoration: none; padding: 0px 0px 0px 3px;} a.actionMenuLinks {border: 1px solid #333; background:silver ; text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinks:link {border: 1px solid #333; background: silver; text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinks:visited {border: 1px solid #333; background: silver; text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinks:hover {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinks:active {border: 1px solid #333; background: #99ccff; color: #3366CC; text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinksCurrentPage {border: 1px solid #333; background: #99ccff; color: #3366CC text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinksCurrentPage:hover {border: 1px solid #333; background: #99ccff; text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinksInactive { border-bottom: 1px solid #333; border-right: 1px solid #777777; border-top: 1px solid #777777; border-left: 1px solid #777777; background: transparent; color: #777777; text-decoration: none; padding: 0px 10px 0px 10px;} a.actionMenuLinksInactive:hover { border-bottom: 1px solid #333; border-right: 1px solid #777777; border-top: 1px solid #777777; border-left: 1px solid #777777; background: transparent; color: #777777; text-decoration: none; padding: 0px 10px 0px 10px;} #actionnuLinksInactive {border: 0px solid #333; text-decoration: none; padding: 0px 0px 0px 3px;}

.block {border: 1px dotted #333; padding: 7px;} h1.block {text-align: center; background: silver;} h2.block {text-align: center; background: silver;} h3.block {text-align: center; background: silver;} h4.block {text-align: center; background: silver;} h5.block {text-align: center; background: silver;} h6.block {text-align: center; background: silver;}

.listTitle {text-align: center; border: solid 1px #333; padding: 5px; background: #fff;}

.ErrorBlock {border: 1px solid #333; font-size: 14px; background: #ff99cc; padding: 10px; text-decoration: underline overline; } ul.listenum {list-style: none;} ul li.listenum {padding : 5px;} ul.menuLinks {list-style-type: none;} ul.menuLinks li {font-size: 14px; list-style-type: none;} ul li.menuLinks {font-size: 14px; list-style-type: none;} a.menuLinks {padding: 0px 10px 0px 0px; text-decoration: none;} a.menuLinks:link {text-decoration: none;} a.menuLinks:visited {text-decoration: none;} a.menuLinks:hover {border: 1px solid #DEE7F7; background: #99ccff; text-decoration: none;} a.menuLinks:active {border: 1px solid #99ccff; background: #DEE7F7; text-decoration: none;} a.menuLinksCurrentPage {border: 1px solid #DEE7F7; background: #99ccff; padding: 0px 10px 0px 0px; text- decoration: none;} a.menuLinksCurrentPage:hover {border: 1px solid #DEE7F7; background: #99ccff; padding: 0px 10px 0px 0px; text-decoration: none;} strong a.menuLinks {font-size: 14px;} strong a.menuLinksCurrentPage {font-size: 14px; border: 1px solid #DEE7F7; background: #99ccff;} strong a.menuLinksCurrentPage:hover {font-size: 14px; border: 1px solid #DEE7F7; background: #99ccff; text-decoration: none;} ul a.menuLinks {padding: 0px 10px 0px 20px;} ul a.menuLinksCurrentPage {padding: 0px 10px 0px 20px; font-weight: bold;} ul a.menuLinksCurrentPage:hover {padding: 0px 10px 0px 20px; font-weight: bold; text-decoration: none;} ul.calendar a {font-size: 10px;} ul.calendar li {list-style: none; display: inline; padding: 0px 1px 0px 2px; font-size: 10px; text-decoration: none; border: 1px solid #333;} ul li.calendarLinks {background: #ffffcc;} ul li.calendarLinks:hover {background: #99ccff; color: #3366CC; }

22 Sympa installation howto ul li.calendarLinksCurrentPage {background: #99ccff;} ul li.calendarLinksCurrentPage:hover {background: #99ccff;} ul li.calendarLinksInactive {} a img {border: 0px;} a {text-decoration: none;} a:link {text-decoration: none;} a:visited {text-decoration: none;} a:hover {color: #3366CC; text-decoration:underline overline;} abbr, acronym, .info { border-bottom: 1px dotted #3366CC; cursor: help; } h1 a:hover {text-indent: 30px; font-size: 16px; padding-bottom:10px;} p a:hover {text-indent: 30px;} p a:first-letter {font-size: 16px; font-weight: bold;} ul {margin-left: 10px; } p {text-indent: 0px;} h1 {text-indent: 0px; font-size: 20px;} h2 {text-indent: 0px; font-size: 16px;} h3 {text-indent: 0px; font-size: 14px;} h4 {text-indent: 0px; font-size: 14px;} h5 {text-indent: 0px; font-size: 12px;} h6 {text-indent: 0px; font-size: 12px;} /* strong {text-indent: 30px; font-size: 16px; padding-bottom:10px;} */ /* strong {text-indent: 30px; font-size: 16px;} */ a.input {background: #ffffcc; border: 1px solid #333; padding: 3px; text-decoration: none;} input {background: #ffffcc; border: 1px solid #333; padding: 0px;} input:hover {background: #ffffcc;} textarea {background: #ffffcc; border: 1px solid #333; padding: 3px;} textarea:hover {background: #ffffcc;} textarea.textbox {background: #99ccff; border: 1px solid #333; padding: 3px;} textarea.textbox:hover {background: #99ccff;} input.textbox {background: #99ccff; border: 1px solid #333; padding: 3px;} input.textbox:hover {background: #99ccff;} input.button { background:silver !important; border: 1px solid; padding: 0px 2px 0px 2px; margin:2px; border-top-color: #99ccff; border-right-color: #999;border-bottom-color: #999; border-left-color: #99ccff; } input.button:hover {background: silver; border-top-color: #999; border-right-color: #99ccff; border-bottom-color: #99ccff; border-left-color: #999;}

} /* EOF */

23 Sympa installation howto I. Multi-domain configuration

This requires a robot.conf looking like the one listed below:

## To deduce which Virtual Robot is being queried http_host kolab-ei.tolla.net ## Listmasters email addresses listmaster [email protected] ## Title for the ML service ## It is displayed as a title in the web interface title Your MailingLists Service create_list listmaster ## The default action when entering the web interface ## Can be ’lists’, ’home’ or ’which’ default_home lists ## You can define custom colors for the Virtual Robot’s ## Web interface dark_color #00aa00 light_color #ddffdd selected_color #0099cc

24