Note: Uses a Jabber server hosted on yourfqdn.
The 10.6 OS X ichat server has an autobuddy feature, but this feature only works with a user’s original shortname: if they have multiple shortname aliases, these additional shortnames will not have a buddy list associated with them when they login, as the jabber database keys off of the logged in name: each shortname maintains it’s own buddy list, and aliases are not handled by autobuddy population.
To get around this limitation I have created a shell script residing at: /usr/local/bin/createAutoBuddyLists.sh. This script when ran traverses the Open Directory user database and inits jabber accounts for all user shortnames (using /usr/bin/jabber_autobuddy –inituser shortname@yourfqdn). This creates an active record for that shortname. After this is created for all shortnames in the system, the script then calls /usr/bin/jabber_autobuddy -m, which creates a buddy list for all users that contains an entry for all active records.
Unfortunately there is no way to auto-fire this script when a new user alias is added, it must be run by hand. To do so, after creating a new user account (or add a new shortname to an existing account) simply open a terminal window and type the following command:
sudo /usr/local/bin/createAutoBuddyLists.sh
You will then be prompted for authentication. Once you authenticate, the script will process and create/init the appropriate accounts and ensure that they are buddied with all existing users.
Contents of /usr/local/bin/createAutoBuddyLists.sh:
#!/bin/bash
PATH=/usr/bin
## Specify search base
declare -x SEARCHBASE=”/LDAPv3/127.0.0.1″
## Specify our jabber domain
declare -x JABBERDOMAIN=”yourFQDN”
## Iterate through all of our OD users
for user in $(dscl $SEARCHBASE list /Users); do
case “$user” in
“root”)
continue;;
vpn_*)
continue;;
esac
echo “Resolving aliases for: $user”
## Read all shortnames for the user
for shortname in $(dscl -url $SEARCHBASE read /Users/$user RecordName | grep -v RecordName | sed -e ‘s/^\ //g’); do
echo “Initing jabber for username: $shortname”
## Init the shortname
jabber_autobuddy –inituser “${shortname//%20/ }@$JABBERDOMAIN”
done
done
## Populate all inited accounts
jabber_autobuddy -m