Mac OS X Server 10.5 offre trois solutions de configuration : basic, workgroup & advanced. Dans les deux premières, lorsqu’un utilisateur se connecte au service iChat avec son client iChat pour Leopard, il reçoit immédiatement la liste complète des correspondants existants dans le service iChat Server. En mode advanced, cette fonction est désactivée.
Sous OS X Server 10.6, pour des raisons que je n’ai pas identifiées, cette fonction d’ajout automatique aux listes de contacts iChat se désactive parfois.
Traditionnellement on passe alors par le Terminal pour
1. Vérifier si la fonction AutoBuddy de Jabber est activée (jabber:enableAutoBuddy = yes) avec :
sudo serveradmin settings jabber
2. Activer AutoBuddy le cas échéant, puis redémarrer Jabber :
sudo serveradmin settings jabber:enableAutoBuddy = yes sudo serveradmin stop jabber sudo serveradmin start jabber
3. Les commandes pour gérer les listes automatiques
## La base des contacts disponibles n'est pas contenue dans l'Open Directory. ## Une base SQLlite a été crée à cet effet. ## La base n'est pas automatiquement renseignée à la création d'un compte utilisateur. ## En revanche elle doit l'être manuellement après la première connexion de chaque utilisateur. ## Bien heureusement, une ligne de commande a été mise à notre disposition pour cela : sudo /usr/bin/jabber_autobuddy -m ## Pour forcer l'ajout dans la base SQLite de Jabber avant sa première connexion : sudo /usr/bin/jabber_autobuddy -i user@moi.fr ## Pour ajouter automatiquement à la liste des contacts de tous les utilisateurs : sudo /usr/bin/jabber_autobuddy -a user@moi.fr ## Pour le retirer de la liste de contacts de tous les utilisateurs : sudo /usr/bin/jabber_autobuddy -r user@moi.fr ## Pour supprimer un utilisateur dans la base SQLite de Jabber : sudo /usr/bin/jabber_autobuddy -d user@moi.fr
Pour aller plus loin, je vous propose, en AppleScript une petite application permettant d’ajouter ou supprimer un utilisateur du service Jabber.
Le code est commenté pour vous permettre de l’adapter à vos besoins !
--Initialisation des variables d'erreur
set ERROR_1 to "0"
set ERROR_2 to "0"
--Emplacement du fichier journal
set LOGS to "/var/log/jabber-user.log"
--Création d'un journal temporaire pendant l'exécution de l'application
do shell script "LOG_TEMP=$(mktemp /tmp/templog.XXXXX); basename $LOG_TEMP"
set LOG_TEMP to "/tmp/" & result
do shell script "date"
set DATE_DU_JOUR to result
do shell script "echo \" \" >> " & LOG_TEMP
set ETOILES to "\" ****************************** \""
do shell script "echo " & ETOILES & DATE_DU_JOUR & ETOILES & " >> " & LOG_TEMP
--Test pour vérifier si le service iChat/Jabber est actif
try
do shell script "sudo serveradmin status jabber | grep -c \"RUNNING\"" with administrator privileges
on error
set JABBER_STATUS to "0"
end try
set JABBER_STATUS to result
if JABBER_STATUS = "0" then
display dialog "Le serveur Jabber n'est pas en service." & return & ¬
"Merci de l'activer et le configurer avant de relancer cette application." with icon 2 buttons {"Quitter"} default button {"Quitter"}
do shell script "echo \"Le serveur Jabber n'est pas en service.\" >> " & LOG_TEMP
do shell script "echo \"Merci de l'activer et le configurer avant de relancer cette application.\" >> " & LOG_TEMP
else if JABBER_STATUS = "1" then
--Vérification si la fonction AutoBuddy de Jabber est active
try
do shell script "sudo serveradmin settings jabber | grep -c \"jabber:enableAutoBuddy = yes\"" with administrator privileges
on error
set AUTO_BUDDY to "0"
end try
set AUTO_BUDDY to result
--Si AutoBuddy inactif on change la configuration via serveradmin puis on relance le service
if AUTO_BUDDY = "0" then
do shell script "sudo serveradmin settings jabber:enableAutoBuddy = yes >> " & LOG_TEMP with administrator privileges
do shell script "sudo serveradmin stop jabber >> " & LOG_TEMP with administrator privileges
do shell script "sudo serveradmin start jabber >> " & LOG_TEMP with administrator privileges
end if
--Récupération de la liste de domaines gérés par Jabber
do shell script "IFS=$'\\n'; CONFIG=$(sudo serveradmin fullstatus jabber); for LINE in $CONFIG; do TEST_GREP=$(echo $LINE | grep -c \"jabber:hosts:_array_index\"); if [ $TEST_GREP -eq 1 ]; then echo $LINE | grep -o '\\\".*\\\"' | sed -e 's/\"//g'; fi; done" with administrator privileges
set DOMAINS to result
set DOMAINS_LIST to paragraphs of DOMAINS
--Choix du domaine par l'utilisateur
choose from list DOMAINS_LIST with prompt "Choisissez le domaine Jabber sur lequel travailler :" OK button name "Continuer" without empty selection allowed
set DOMAIN_NAME to "@" & result
--Entrée du login
set {text returned:LOGIN, button returned:action} to (display dialog "Entrez l'identifiant Jabber à traiter et choisissez une action." default answer "m.test" with icon 1 buttons {"Ajouter", "Supprimer"} default button {"Ajouter"})
set adress to LOGIN & DOMAIN_NAME
--Traitement si ajout de l'utilisateur
if action = "Ajouter" then
do shell script "echo \"Traitement : ajout de l'utilisateur \"" & adress & " >> " & LOG_TEMP
try
do shell script "/usr/bin/jabber_autobuddy -i " & adress & " >> " & LOG_TEMP with administrator privileges
on error
set ERROR_1 to "1"
end try
try
do shell script "/usr/bin/jabber_autobuddy -a " & adress & " >> " & LOG_TEMP with administrator privileges
on error
set ERROR_2 to "1"
end try
--Test pour vérifier si l'utilisateur existe dans l'OpenDirectory
--Changer l'adresse /LDAPv3/127.0.0.1 si besoin si l'OD n'est pas sur la même machine
try
set LOGIN_EXIST to (do shell script "dscl /LDAPv3/127.0.0.1 -list /Users | grep -c \"" & LOGIN & "\"")
on error
set LOGIN_EXIST to "0"
end try
if LOGIN_EXIST = "0" then
display dialog "L'entrée a été correctement ajoutée dans Jabber mais l'utilisateur n'est pas créé dans l'OpenDirectory." with icon 2 buttons {"OK"} default button {"OK"}
do shell script "echo \"L'entrée a été correctement ajoutée dans Jabber mais l'utilisateur n'est pas créé dans l'OpenDirectory. \"" & " >> " & LOG_TEMP
end if
end if
--Traitement si l'action choisie est la suppression
if action = "Supprimer" then
do shell script "echo \"Traitement : suppression de l'utilisateur \"" & adress & " >> " & LOG_TEMP
try
do shell script "/usr/bin/jabber_autobuddy -r " & adress & " >> " & LOG_TEMP with administrator privileges
on error
set ERROR_1 to "1"
end try
try
do shell script "/usr/bin/jabber_autobuddy -d " & adress & " >> " & LOG_TEMP with administrator privileges
end try
set ERROR_2 to "1"
--Test pour vérifier si l'utilisateur existe dans l'OpenDirectory
--Changer l'adresse /LDAPv3/127.0.0.1 si besoin si l'OD n'est pas sur la même machine
try
set LOGIN_EXIST to (do shell script "dscl /LDAPv3/127.0.0.1 -list /Users | grep -c \"" & LOGIN & "\"")
on error
set LOGIN_EXIST to "0"
end try
if LOGIN_EXIST = "1" then
display dialog "L'entrée a été correctement supprimée dans Jabber mais l'utilisateur existe encore dans l'OpenDirectory." with icon 2 buttons {"OK"} default button {"OK"}
do shell script "echo \"L'entrée a été correctement supprimée dans Jabber mais l'utilisateur existe encore dans l'OpenDirectory. \"" & " >> " & LOG_TEMP
end if
end if
--Gestion d'un message d'erreur spécifique si des erreurs sont rencontrées pendant le processus
set GLOBAL_ERROR to ERROR_1 + ERROR_2
if GLOBAL_ERROR = 2 then
display dialog "Une erreur a été rencontrée." & return & ¬
"Veuillez consulter le journal : " & LOGS with icon 2 buttons {"OK"} default button {"OK"}
else
display dialog "Traitement effectué avec succès." with icon 1 buttons {"OK"} default button {"OK"}
end if
end if
--Bascule du log temporaire dans le journal de l'application
do shell script "cat " & LOG_TEMP & " >> " & LOGS with administrator privileges
do shell script "rm " & LOG_TEMP
N’hésitez pas à me faire des retours, car évidemment, tout cela est très artisanal.