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.