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.