Guida ai servizi di Open-Xchange
1 – OpenLDAP.
Il servizio di directory ldap di OX per gestisce gli utenti, i
gruppi, gli addressbook, l’autenticazione e memorizza tutte le
informazioni di sola lettura riguardanti il sistema.
CentOS, come debian, mette a disposizione uno script per la
gestione del servizio, prima di effettuare un backup di LDAP è
necessario arrestare il servizio.
# service ldap stop
oppure
# /etc/init.d/ldap stop
NOTA:
Il comando “service” è un’interfaccia tipica della distribuzione
RedHat/Fedora, su altri sistemi (BSD, *NIX, Debian, etc.) è
necessario dare la path completa al file di avvio come sopra.
Spostiamoci nella directory /var/lib/ e creiamo un tar.gz della
directory ldap.
# tar –zcvvf
ldap_backup.tar.gz ldap
Qualora si desideri creare un backup di uno specifico ramo del
grafo LDAP è sufficiente collegarsi con un ldapbrowser qualsiasi
ed effettuare un export su un file LDIF.
Per effettuare un backup, anche a caldo estraendo i dati dal
servizio stesso, si utilizza il comando slapcat con la seguente
sintassi:
# slapcat –l FILE_DI_BACKUP.ldif
Per reinserire i dati nel database, con il servizio non avviato,
si usa il seguente comando:
# slapadd –v –l
FILE_DI_BACKUP.ldif –f /etc/openldap/slapd.conf
Ricordarsi sempre di riavviare il servizio dopo aver fatto il
restore del database LDAP
# service ldap start
Per la procedura di backup passo passo fare riferimento al
paragrafo 1.1.1.
1.1 – Gestione di OpenLDAP con script.
Copiamo il seguente script in /etc/init.d/ldap
CUT
#! /bin/sh
IP="*"
PORT="389"
# OpenLDAP directory and files
SLAPD_PATH="/usr/local/openldap"
DATA_PATH="$SLAPD_PATH/var/openldap-data"
SLAPD_PID_FILE="$SLAPD_PATH/var/run/slapd.pid"
SLAPD_CONF="$SLAPD_PATH/etc/openldap/slapd.conf"
SLAPD_SERVICES="ldap://$IP:$PORT"
SLAPD_PARAMS=""
SLAPD_BIN="$SLAPD_PATH/libexec/slapd"
SLAPD_USER=""
SLAPD_GROUP=""
SLAPCAT_BIN="$SLAPD_PATH/sbin/slapcat"
SLAPINDEX_BIN="$SLAPD_PATH/sbin/slapindex"
SLAPTEST_BIN="$SLAPD_PATH/sbin/slaptest"
SLURPD_PID_FILE="$SLAPD_PATH/var/run/slurpd.pid"
SLURPD_PARAMS=""
SLURPD_BIN="$SLAPD_PATH/libexec/slurpd"
# BerkeleyDB directory and files
BDB_PATH="/usr/bin/BerkeleyDB.4.2"
DB_ARCHIVE_BIN="$BDB_PATH/bin/db_archive"
DB_RECOVER_BIN="$BDB_PATH/bin/db_recover"
RECOVER_AT_STARTUP="1" # 0 for OpenLDAP 2.3.x
# Backup
BACKUP_AT_SHUTDOWN="1"
BACKUP_PATH="/tmp/openldap"
BACKUP_FILE="$BACKUP_PATH/data_`date +%Y%m%d%H%M%S`.ldif"
# Other
TIMEOUT="60" # Max time to stop process
FD_LIMIT="2048" # Max file descriptor
# Script specific
PROG_NAME=`basename $0 | sed 's/^[KS][0-9][0-9]//'` # For nice messages
OS=`uname -s` # To adapt message printing
#====================================================================
# Message function
#====================================================================
message() {
# $1: syslog level
# $2: message
if [ $OS = "Linux" ]
then
logger -p "user.$1" -s -t $PROG_NAME -i "$2"
else
# Try without option -s
logger -p "user.$1" -t $PROG_NAME -i "$2"
echo "$PROG_NAME: $2"
fi
}
#====================================================================
# Load specific parameters
#====================================================================
if [ -f /etc/default/$PROG_NAME ]
then
. /etc/default/$PROG_NAME
message "info" "[INFO] using /etc/default/$PROG_NAME for configuration"
else
message "info" "[INFO] using built-in configuration - this may cause some
problems"
fi
#====================================================================
# Initiate 'su' command
#====================================================================
if [ "$SLAPD_USER" -a `id -u` -eq 0 ]
then
SU="su - $SLAPD_USER -c "
fi
for i in "$SLAPD_BIN" "$SLAPCAT_BIN" "$SLAPINDEX_BIN" "$SLAPTEST_BIN"
"$SLURPD_BIN" "$DB_ARCHIVE_BIN" "$DB_RECOVER_BIN"
do
if [ ! -x $i ]
then
message "alert" "[ALERT] can't execute $i"
exit 1
fi
done
# Rights to read files
for i in "$SLAPD_CONF"
do
if [ ! -r $i ]
then
message "alert" "[ALERT] can't read $i"
exit 1
fi
done
# Are you root (for port < 1024)?
if [ $PORT -lt 1024 -a `id -u` -ne 0 ]
then
message "alert" "[ALERT] only root can launch OpenLDAP on port $PORT"
exit 1
fi
start_slapd() {
# Check if db_recover is required
if [ $RECOVER_AT_STARTUP -eq 1 ]
then
db_recover
else
message "info" "[INFO] no db_recover done"
fi
# Start message
message "info" "Launching OpenLDAP..."
# File descriptor limit, only for root
if [ `id -u` -eq 0 ]
then
ulimit -n $FD_LIMIT
if [ $? -eq 0 ]
then
message "info" "[OK] file descriptor limit set to $FD_LIMIT"
else
message "warning" "[WARNING] Fail to set file descriptor limit
to $FD_LIMIT, going to next step"
fi
else
message "info" "[INFO] file descriptor limit not modified (require
root privileges)"
fi
# Parameters
if [ "$SLAPD_CONF" ]
then
SLAPD_PARAMS="$SLAPD_PARAMS -f $SLAPD_CONF"
fi
if [
then
"$SLAPD_USER" -a `id -u` -eq 0 ]
SLAPD_PARAMS="$SLAPD_PARAMS -u $SLAPD_USER"
fi
if [ "$SLAPD_GROUP" -a `id -u` -eq 0 ]
then
SLAPD_PARAMS="$SLAPD_PARAMS -g $SLAPD_GROUP"
fi
# It's time to start slapd
$SLAPD_BIN -h "$SLAPD_SERVICES" $SLAPD_PARAMS
sleep 1
# Presence of PID file
if [ ! -r $SLAPD_PID_FILE ]
then
message "alert" "[ALERT] no PID file for slapd"
exit 1
fi
# Is slapd launched?
PID=`cat $SLAPD_PID_FILE`
if [ ! -e /proc/$PID ]
then
message "alert" "[ALERT] slapd not running"
exit 1
else
message "info" "[OK] OpenLDAP started on port $PORT"
fi
}
start_slurpd() {
# Start message
message "info" "Launching OpenLDAP replication..."
# Activate slurpd?
ACTIVATE_SLURPD=`cat $SLAPD_CONF | grep "^replica" | wc -l`
if [ $ACTIVATE_SLURPD -eq 0 ]
then
message "info" "[INFO] no replica found in configuration, aborting
lauching slurpd"
return 1
fi
# Parameters
if [ "$SLAPD_CONF" ]
then
SLURPD_PARAMS="$SLURPD_PARAMS -f $SLAPD_CONF"
fi
# It's time to start slurpd
if [ -z "$SU" ]
then
$SLURPD_BIN $SLURPD_PARAMS
else
$SU "$SLURPD_BIN $SLURPD_PARAMS"
fi
sleep 1
# Presence of PID file
if [ ! -r $SLURPD_PID_FILE ]
then
message "alert" "[ALERT] no PID file for slurpd"
exit 1
fi
# Is slurpd launched?
PID=`cat $SLURPD_PID_FILE`
if [ ! -e /proc/$PID ]
then
message "alert" "[ALERT] slurpd not running"
exit 1
else
message "info" "[OK] OpenLDAP replication started"
fi
}
stop_slapd() {
# Stop message
message "info" "Halting OpenLDAP..."
# Presence of PID file
if [ ! -r $SLAPD_PID_FILE ]
then
message "info" "[INFO] can't read PID file, to stop slapd try: $0
forcestop"
return 1
else
PID=`cat $SLAPD_PID_FILE`
kill -INT $PID
# Waiting loop
i=0
while [ -e /proc/$PID ]
do
if [ $i -eq $TIMEOUT ]
then
# Timeout
message "alert" "[ALERT] slapd still running (PID $PID),
try: $0 forcestop"
exit 1
fi
i=`expr $i + 1`
sleep 1
done
message "info" "[OK] OpenLDAP stopped after $i seconds"
fi
# Backup if necessary
if [ $BACKUP_AT_SHUTDOWN -eq 1 ]
then
backup
else
message "info" "[INFO] no data backup done"
fi
}
stop_slurpd() {
# Stop message
message "info" "Halting OpenLDAP replication..."
# Desctivate slurpd?
DESACTIVATE_SLURPD=`cat $SLAPD_CONF | grep "^replica" | wc -l`
if [ $DESACTIVATE_SLURPD -eq 0 ]
then
message "info" "[INFO] no replica found in configuration, aborting
stopping slurpd"
return 1
fi
# Presence of PID file
if [ ! -r $SLURPD_PID_FILE ]
then
message "warning" "[WARNING] can't read PID file, to stop slurpd
try: $0 forcestop"
else
PID=`cat $SLURPD_PID_FILE`
kill -INT $PID
# Waiting loop
i=0
while [ -e /proc/$PID ]
do
if [ $i -eq $TIMEOUT ]
then
# Timeout, need to kill
message "alert" "[ALERT] slurpd still running (PID
$PID), try: $0 forcestop"
return 1
fi
i=`expr $i + 1`
sleep 1
done
message "info" "[OK] OpenLDAP replication stopped after $i seconds"
fi
}
forcestop() {
# Stop message
message "info" "Killing OpenLDAP with force..."
# Presence of PID file
if [ ! -r $SLAPD_PID_FILE ]
then
# Check if any slapd process are running
if [ `ps axwww | grep $SLAPD_BIN | grep "$SLAPD_SERVICES" | grep -v
grep | wc -l` -eq 0 ]
then
message "info" "[INFO] Found no slapd process running with
$SLAPD_SERVICES"
else
# Try a killall
/usr/bin/killall -KILL $SLAPD_BIN
if [ $? -eq 0 ]
then
message "info" "[OK] all slapd process killed with
force"
else
message "alert" "[ALERT] Unable to kill slapd with
force"
exit 1
fi
fi
else
PID=`cat $SLAPD_PID_FILE`
kill -KILL $PID
if [ $? -eq 0 ]
then
message "info" "[OK] slapd process killed with force (PID
$PID)"
else
message "alert" "[ALERT] Unable to kill slapd with force (PID
$PID)"
exit 1
fi
fi
# Stop message
message "info" "Killing OpenLDAP replication with force..."
# Presence of PID file
if [ ! -r $SLURPD_PID_FILE ]
then
# Check if any slapd process are running
if [ `ps axwww | grep $SLURPD_BIN | grep -v grep | wc -l` -eq 0 ]
then
message "info" "[INFO] Found no slurpd process running"
else
# Try a killall
/usr/bin/killall -KILL $SLURPD_BIN
if [ $? -eq 0 ]
then
message "info" "[OK] slurpd process killed with force"
else
message "alert" "[ALERT] Unable to kill slurpd with
force"
exit 1
fi
fi
else
PID=`cat $SLURPD_PID_FILE`
kill -KILL $PID
if [ $? -eq 0 ]
then
message "info" "[OK] slurpd process killed with force (PID
$PID)"
else
message "alert" "[ALERT] Unable to kill slurpd with force (PID
$PID)"
exit 1
fi
fi
}
slapd_status() {
# Return 0 if slapd is running, 1 if slapd is stopped, 2 if we can't say
if [ ! -r $SLAPD_PID_FILE ]
then
# Check if any slapd process are running
if [ `ps axwww | grep $SLAPD_BIN | grep "$SLAPD_SERVICES" | grep -v
grep | wc -l` -eq 0 ]
then
return 1
else
return 2
fi
else
PID=`cat $SLAPD_PID_FILE`
fi
if [ ! -e /proc/$PID ]
then
return 1
else
return 0
fi
}
configtest() {
# Start message
message "info" "Launching OpenLDAP configuration test..."
# slapd must be stopped
slapd_status
if [ $? -ne 1 ]
then
message "alert" "[ALERT] slapd is running or was not correctly shut
down, aborting configuration test"
exit 1
else
# slaptest
if [ -z "$SU" ]
then
$SLAPTEST_BIN -f "$SLAPD_CONF" -u > /dev/null 2>&1
else
$SU "$SLAPTEST_BIN -f \"$SLAPD_CONF\" -u > /dev/null 2>&1"
fi
if [ $? -eq 0 ]
then
message "info" "[OK] OpenLDAP configuration test successful"
else
message "alert" "[ALERT] OpenLDAP configuration test failed"
exit 1
fi
fi
}
db_recover() {
# Start message
message "info" "Launching OpenLDAP database recovery..."
# slapd must be stopped
slapd_status
if [ $? -ne 1 ]
then
message "alert" "[ALERT] slapd is running or was not correctly shut
down, aborting database recovery"
exit 1
else
# db_recover
if [ -z "$SU" ]
then
$DB_RECOVER_BIN -h "$DATA_PATH"
else
$SU "$DB_RECOVER_BIN -h \"$DATA_PATH\""
fi
if [ $? -eq 0 ]
then
message "info" "[OK] OpenLDAP database recovery successful"
else
message "alert" "[ALERT] OpenLDAP database recovery failed"
exit 1
fi
fi
}
reindex() {
# Start message
message "info" "Launching OpenLDAP database reindexing..."
# slapd must be stopped
slapd_status
if [ $? -ne 1 ]
then
message "alert" "[ALERT] slapd is running or was not correctly shut
down, aborting reindexing"
exit 1
else
# slapindex
if [ -z "$SU" ]
then
$SLAPINDEX_BIN -f "$SLAPD_CONF"
else
$SU "$SLAPINDEX_BIN -f \"$SLAPD_CONF\""
fi
if [ $? -eq 0 ]
then
message "info" "[OK] OpenLDAP database reindexing successful"
else
message "alert" "[ALERT] OpenLDAP database reindexing failed"
exit 1
fi
fi
}
removelogs() {
# Start message
message "info" "Launching OpenLDAP database logs archiving..."
# slapd must be stopped
slapd_status
if [ $? -ne 1 ]
then
message "alert" "[ALERT] slapd is running or was not correctly shut
down, aborting archiving"
exit 1
else
# db_archive
if [ -z "$SU" ]
then
$DB_ARCHIVE_BIN -h "$DATA_PATH" -d
else
$SU "$DB_ARCHIVE_BIN -h \"$DATA_PATH\" -d"
fi
if [ $? -eq 0 ]
then
message "info" "[OK] OpenLDAP database logs archiving
successful"
else
message "alert" "[ALERT] OpenLDAP database logs archiving
failed"
exit 1
fi
fi
}
backup() {
# Start message
message "info" "Launching OpenLDAP database backup..."
# Backup directory
if [ -z "$SU" ]
then
mkdir -p "$BACKUP_PATH"
else
$SU "mkdir -p \"$BACKUP_PATH\""
fi
# slapcat
if [ -z "$SU" ]
then
$SLAPCAT_BIN -f "$SLAPD_CONF" -l "$BACKUP_FILE"
else
$SU "$SLAPCAT_BIN -f \"$SLAPD_CONF\" -l \"$BACKUP_FILE\""
fi
if [ $? -eq 0 ]
then
message "info" "[OK] data save in $BACKUP_FILE"
else
message "alert" "[ALERT] OpenLDAP database backup failed"
exit 1
fi
}
#====================================================================
# Action switch
#====================================================================
case $1 in
start)
configtest
start_slurpd
start_slapd
;;
stop)
stop_slapd
stop_slurpd
;;
forcestop)
forcestop
;;
restart)
stop_slapd
stop_slurpd
configtest
start_slurpd
start_slapd
;;
configtest)
configtest
;;
db_recover)
db_recover
;;
reindex)
reindex
;;
removelogs)
removelogs
;;
backup)
backup
;;
*)
echo "Usage: $0
{start|stop|forcestop|restart|configtest|db_recover|reindex|removelogs|backup}"
exit 1
;;
esac
exit 0
CUT
NOTA IMPORTANTE
ogni volta che decidete di impiegare tale script ricordarsi sempre
di impostare le giuste variabili all’inizio del file.
Lo script, ad ogni avvio, fa un recover del database ldap con il
comando:
# /etc/init.d/ldap start
Per fermare il servizio prima di un db recover:
# /etc/init.d/ldap stop
# /etc/init.d/ldap db_recover
Per effettuare un backup a caldo del database:
# /etc/init.d/ldap backup
Dato questo comando sarà creato nella directory BACKUP_PATH il file
ldif estratto dal server ldap con la relativa data specificata nel filename.
Per ricaricare il file ldif, con il server non avviato, utilizzare
sempre il comando:
# slapadd –l BACKUP_FILE.ldif –f /etc/openldap/slapd
Quindi avviare il servizio:
# service ldap start
1.1.1 – Procedura per il backup di un server OpenLDAP.
Per questa procedura di backup stiamo utilizzando lo script
riportato nel paragrafo precedente.
IMPORTANTE:
Impostare i seguenti paramentri in /etc/init.d/ldap
BACKUP_PATH=”/root/ldap_backups/”
BACKUP_FILE= “$BACKUP_PATH/data_`date +%Y`_`date +%m`_`date
+%d`_`date +%H`_`date +%M`_`date +%S`.ldif”
Fatto ciò diamo il comando:
# service ldap backup
Verrà creato il file
/root/ldap_backups/data_ANNO_MESE_GIORNO_ORA_MINUTI_SECONDI.ldif
Per fare il restore della base di dati si utilizza:
# slapadd –l /root/ldap_backups/FILE_DI_BACKUP.ldif –f
/etc/openldap/slapd
2 – PostgreSQL
Postgres si occupa di gestire tutti i dati relativi al Groupware
di OX, dal forum ai documenti, task, appuntamenti etc.
La directory nella quale sarà memorizzato il database è
/var/lib/pgsql/data, ovviamente per fare un backup della stessa è
necessario fermare il servizio e usare il comando tar come si è
visto per OpenLDAP.
Avviamo il DBMS con il comando:
# service postgresql start
Per arrestarlo usiamo:
# service postgresql stop
Per eseguire un backup a caldo del DB utilizziamo il seguente
comando:
# pg_dump –U USERNAME NOME_DB > BACKUP.sql
USERNAME e NOMEDB sono, solitamente, “openxchange”.
Fatto il dump del DB possiamo reinserire i dati con il comando:
# psql –d NOME_DB –f BACKUP.sql
3 – Struttura imap di Cyrus-imapd.
Cyrus memorizza tutte le email su /var/spool/cyrus inoltre tiene
un elenco ordinato di tutte le email su un database /var/lib/imap,
l’unico modo per fare dei backup tramite il servizio è che ogni
utente salvi sul proprio PC le email.
Nel caso fosse necessario un backup integrale è sufficiente fare
il tar della directory di spool e del database seguendo la
seguente procedura:
1. Fermare l’MTA: # service postfix stop
2. Fermare il server imap e pop3: # service cyrus-imapd stop
3. Fare il tar della directory di spool: # tar zcvvfp
backup_cyrus.tar.gz /var/spool/cyrus
4. Fare il tar del databse: #tar zcvvfp imapdb.tar.gz
/var/lib/imap
E’ assolutamente necessario fermare il servizio “cyrus-imapd” per
mantenere sincronizzato il database con la directory di spool.
Inoltre è necessario arrestare l’MTA per evitare l’arrivo di email
che non potranno essere memorizzate a causa dell’arresto del
server POP3/IMAP.
L’opzione “z” di tar indica di utilizzare il compressore gunzin
(estensione .gz), è possibile sostituire questo comando con “j”
che permette di utilizzare la compressione bunzip2 (estensione
.bz2) notoriamente più efficiente. (# tar –jcvvfp […])
L’opzione “p” di tar permette di preservare i diritti d’accesso al
file; l’ID dell’owner e l’ID del gruppo al momento
dell’estrazione, così non si avrà il problema di dover settare UID
e GID.
Se vogliamo ripristinare tutte le maildir del server è sufficiente
fare un:
# cd /var/spool/
# rm –rf cyrus
# tar zxvf backup_cyrus.tar.gz
E’opportuno fare il reboot dei servizi:
# service cyrus-imapd restart
# service openxchange restart
Se si desidera ripristinare una singola maildir estrarre il backup
in una directory temporanea e copiare solo le maildir necessarie:
# mkdir /var/spool/tmp
# cd /var/spool/tmp
# tar zxvf ../backup_cyrus.tar.gz
Non resta che copiare le maildir interessate da
/var/spool/tmp/cyrus/mail/ a
/var/spool/cyrus/mail/, cancellare la dir /var/spool/tmp/ e
riavviare il servizio.
# service cyrus-imapd start
# service postfix start
3.1 – Routing delle email.
La gestione delle email è totalmente gestita da due servizi che
sono:
1. Servizio di MTA, ovvero il server SMTP (Postfix).
2. Servizio di POP3/IMAP, ovvero Cyrus-imapd
Le email in uscita verso internet sono gestite dall’MTA che,
creato il pacchetto SMTP, le inoltra presso lo SMARTHOST e lascia
una copia di esse, tramite socket di tipo LMTP, al server Cyrus
che le memorizzerà nella directory “Sent” dell’utente interessato.
Le email inviate localmente vengono girate da Postfix direttamente
sul server Cyrus in locale.
Le email in entrata, arrivate al server SMTP, verranno routate,
sempre attraverso la socket LMTP, al server Cyrus che le
memorizzerà in /var/spool/cyrus/mail e provvedera alla loro
indicizzazione nel database situato in /var/lib/imap.
4 – File di configurazione e di avvio.
I file di configurazione dei vari servizi sono usualmente situati
nella directory /etc.
In particolare abbiamo i file relativi ai processi slapd ed ldap
in /etc/openldap/ :
 slapd.conf; file di configurazione del demone OpenLDAP.
 ldap.conf; file di configurazione dei client OpenLDAP.
Lo script di avvio di OpenLDAP:
 /etc/ini.d/ldap
I file del demone saslauthd:
 /etc/init.d/saslauthd
 /etc/sysconfig/saslauthd
 /etc/sasluathd.conf
File di configurazione relativi al server web:
 /etc/htttpd; Directory della configurazione di apache2
5 – Aggiungere e rimuovere un utente da OX.
Per aggiungere un utente ad OX è necessario dare questo comando.
ATTENZIONE: Non inserire caratteri maiuscoli nel nome utente per
evitare problemi d’interazione tra il server LDAP ed il server
SQL.
# adduser_ox --username=ALIAS_UTENTE \
--passwd=PASSWORD \
--name=NOME_UTENTE \
--sname=COGNOME_UTENTE \
--maildomain=DOMINIO_EMAIL \
--ox_timezone=TIMEZONE_UTENTE \
--write_global_address=FALSE
L’opzione --write_global_address=FALSE deve essere impostata a
FALSE per impedire agli utenti normali l’accesso in scruttura al
Global AddressBook (GAB) del server;
gli utenti amministratori.
impostare a TRUE solo per
Come TIMEZONE_UTENTE in Italia si utilizza “Europe/Rome”.
Il DOMINIO_EMAIL in questo caso è “sogeas.it”.
Per una lista completa delle opzioni dare il comando:
# adduser_ox --help
Per rimuovere un utente da OX utilizziamo il comando deluser_ox
nel seguente modo:
# deluser_ox --username=ALIAS_UTENTE
Per consultare l’help di tale comando utilizzare:
# deluser_ox --help
Nel caso in cui il comando deluser_ox restituisce questo output:
ldap_search: No such object (32)
significa che si sta cercando di cancellare un utente inesistente.
Quando eseguiamo lo script adduser_ox utente, password, shell di
sistema e timezone sono memorizzati nel server LDAP sotto il nodo
ou=Users,ou=OxObjects,dc=os4e,dc=org.
I dati inerenti la configurazione personale dell’utente sono
inizializzati nel DBMS (postgresql) nella base di dati
“openxchange”.
Per ogni utente troviamo delle tabelle che specificano i dati
personali.
La tabella “folderssettings” specifica le directory IMAP
dell’utente.
 SELECT * FROM foldersettings;
test
| INBOX/Sent | INBOX/Trash | INBOX/Drafts | INBOX/Spam |
La tabella “layout” specifica semplicemente proprietà
d’interfaccia dell’utente.
La tabella usrdata contiente le tuple di ogni utente ove sono
specificate le sue impostazioni personali, un esempio sono le
colonne “compose_type” che specifica il tipo di messaggio (testo o
html), “signature” contiene le firme degli utenti.
La directory di spool dell’utente viene creata dal demone IMAPD
(cyrus-imapd) nel momento in cui l’user riceve un’email o effettua
l’accesso all’account email.
La directory è creata in /var/spool/cyrus/mail/s/user/scaruso per
l’utente “scaruso”.
NOTA:
Il quinto nodo dell’albero directory fa riferimento alla prima
lettera del nickname dell’utente.
Per l’utente Mario Rossi, con nickname “mrossi” la directory di
spool sarà /var/spool/cyrus/mail/m/user/mrossi.
Durante l’inserimento di un utente tramite script “adduser_ox” è
spesso presente l’errore “SQL error”.
Questo errore è dovuto ad una mancata comunicazione tra la java
machine e il DBMS postgreSQL.
Le soluzioni al problema possono essere varie;
1. Controllare che il DBMS sia avviato e rangingibile alla porta
TCP 5432.
2. Controllare che sia stato inizializzato il DBMS con le
impostazioni base si OX.
3. Accertarsi di utilizzare una versione appropiata del
connettore java/DBMS in base alla versione dei DBMS.
La versione del JDBC deve essere scelta in base alla versione
della JDK che stiamo utilizzando e della versione del DBMS al
quale desideriamo collegarci.
Per le JDK di ultima generazione (1.5 ed 1.4) si utilizza la
versione 3 del JDBC, che possiamo trovare per postgreSQL 7.3, 7.4,
8.0, 8.1, 8.2-dev.
Per uno schema dettagliato fare riferimento a
http://jdbc.postgresql.org/download.html.
Riguardo l’errore “ERROR: not activated” la soluzione è di
aggiungere al comando adduser_ox il paramentro “--mail_enabled=OK”
5.1 – Processo di creazione/rimozione utente; problemsolvin.
Come abbiamo visto il processo di aggiunta/rimozione utente è
gestito da due script bash: adduser_ox e deluser_ox.
I passaggi seguiti per l’aggiunta dell’user sono:
1. Creazione della entry
uid=NICKNAME,ou=Users,ou=OxObjects,dc=sogeas,dc=it
2. Aggiunta di una tupla riguardante l’user nella tabella
usr_general_rights nella base dati “openxchange”
Con questa configurazione nativa di OpenXchange si ha il problema
gli utenti creati si trovano sprovvisti di mailbox, la conseguenza
è l’impossibilità di ricevere email finché gli users non
effettuino la prima login.
Il tutto è dovuto semplicemente al fatto che lo script adduser_ox
non si occupa di creare la mailbox e lascia questo compito al
demone Cyrus che, al momento della login (e solo in quel momento),
creerà la mailbox.
La soluzione individuata e testata consiste nel patchare
oppurtunamente lo script in modo da fargli creare anticipatamente
le mailbox; per fare ciò abbiamo bisogno dei seguenti requisiti:
 Un utente amministratore di Cyrus, solitamente l’user Cyrus.
 Un programma/script di appoggio per la creazione della
mailbox.
L’utente Cyrus lo troviamo gia presente sul sistema ma, come già
sappiamo, l’autenticazione del demone Cyrus avviene sul server
LDAP; ne consegue la necessità di creare un utente Cyrus nel nodo
Users dell’albero ldap con il comando adduser_ox.
Non resta che inserire lo script
/usr/lib/cyrus-imapd/addmbox.pl nello script adduser_ox:
#vim /usr/OX/sbin/adduser_ox
Assicurandosi di modificare le varibili locali CYRADM e CYRPASS.
La variabile CYRADM deve essere settata con il nome utente
dell’amministrator del demone Cyrus (cyrus), la variabile CYRPASS
deve contenere la password LDAP di tale user.
Alla riga 334 trovere il riferimento allo script perl per la
creazione della mailbox.
Possiamo riscontrare la medesima problematica all’atto d’eliminare
un utente dal server OpenXchange; lo script si occuperà della
rimozione deli nodi relativi l’user dall’albero ldap e delle tuble
nella base dati, mentre la mailbox continuerà ad occupare risorse
su disco.
Per ovviare a tale problema ho impiegato il metodo precedentemente
utilizzato nello script adduser, ho modificato tale script in modo
da far rimuovere, all’occorrenza, la mailbox dell’utente.
La configurazione dello script è la medesima esplicitata
antecedentemente; la variabile CYRADM deve contenere l’username
dell’amministratore del demone Cyrus e CYRPASS la password
relativa a tale utente.
Alla riga 131 troviamo il riferimento allo script di rimozione
della mailbox; questa volta in aggiunta si puo notare l’opzione
“–d” che impone l’eliminazione della mailbox.