Closed brunopistone closed 5 years ago
@bp91 Actually the mod_admin_extra
is not activated by default (at least until #187), so for using shared roster groups you need to additionally set EJABBERD_MOD_ADMIN_EXTRA
to true
. After merging #187 using of the special directive @all@
will be available in the following format:
DIRECTIVE@VIRTUALHOST:GROUPNAME@VIRTUALHOST
For example:
EJABBERD_GROUP_MEMBERS=@all@@example.com:shared@example.com
Hi @youmad, I found a parsing error into the script 30_ejabberd_setup_groups.sh, in the methods register_group_member
and register_all_group_members
:
register_group_member() {
local user=$1
local host=$2
local group=$3
local grouphost=$4
echo "Adding ${user} ${host} to roster group ${group}@${grouphost}"
# Do not exit if user is already a member
${EJABBERDCTL} srg_user_add ${user} ${host} ${group} ${grouphost} || true
}
register_all_group_members() {
# register shared roster group members from environment $EJABBERD_GROUP_MEMBERS
# Use whitespace to seperate groups.
#
# sample:
# - add two users to groups:
# -e "EJABBERD_GROUP_MEMBERS=user@xmpp.kx.gd:group@xmpp.kx.gd user2@xmpp.kx.gd:group@xmpp.kx.gd"
for member in ${EJABBERD_GROUP_MEMBERS} ; do
local user=${member%%:*}
local group=${member#*:}
if [ $user = @all@ ]
then
local username=@all@
local userhost=${user#*@}
else
local username=${user%%@*}
local userhost=${user#*@}
fi
local groupname=${group%%@*}
local grouphost=${group#*@}
echo 'user: ' $user
echo 'group: ' $group
echo 'username: ' $username
echo 'userhost: ' $userhost
echo 'groupname: ' $groupname
echo 'grouphost: ' $grouphost
register_group_member ${username} ${userhost} ${groupname} ${grouphost}
done
}
The problem now is solved, I don't know if you want to insert this in the repo. I can close. Thanks.
@bp91 similar corrections are present here: https://github.com/rroemhild/docker-ejabberd/pull/187/files#diff-c60c65c4756d6a1b70d29ddcd05e8728
Great, in register_all_group_members()
should be local username=${user%%@*}
instead of local username=${user%@*}
. Thanks again
With ${user%%@*}
it doesn't match @all@
directive:
$ cat test.sh
#!/bin/bash
set -e
register_all_group_members() {
echo '----------'
for member in ${EJABBERD_GROUP_MEMBERS} ; do
local user=${member%%:*}
local group=${member#*:}
local username=${user%%@*}
local userhost=${user##*@}
local groupname=${group%@*}
local grouphost=${group##*@}
echo 'username: ' $username
echo 'userhost: ' $userhost
echo 'groupname: ' $groupname
echo 'grouphost: ' $grouphost
echo '----------'
done
}
register_all_group_members
exit 0
$ EJABBERD_GROUP_MEMBERS='user@xmpp.kx.gd:group@xmpp.kx.gd user2@xmpp.kx.gd:group@xmpp.kx.gd @all@@example.com:group@example.com' ./test.sh
----------
username: user
userhost: xmpp.kx.gd
groupname: group
grouphost: xmpp.kx.gd
----------
username: user2
userhost: xmpp.kx.gd
groupname: group
grouphost: xmpp.kx.gd
----------
username:
userhost: example.com
groupname: group
grouphost: example.com
----------
with local username=${user%@*}
it does:
$ cat test.sh
#!/bin/bash
set -e
register_all_group_members() {
echo '----------'
for member in ${EJABBERD_GROUP_MEMBERS} ; do
local user=${member%%:*}
local group=${member#*:}
local username=${user%@*}
local userhost=${user##*@}
local groupname=${group%@*}
local grouphost=${group##*@}
echo 'username: ' $username
echo 'userhost: ' $userhost
echo 'groupname: ' $groupname
echo 'grouphost: ' $grouphost
echo '----------'
done
}
register_all_group_members
exit 0
$ EJABBERD_GROUP_MEMBERS='user@xmpp.kx.gd:group@xmpp.kx.gd user2@xmpp.kx.gd:group@xmpp.kx.gd @all@@example.com:group@example.com' ./test.sh
----------
username: user
userhost: xmpp.kx.gd
groupname: group
grouphost: xmpp.kx.gd
----------
username: user2
userhost: xmpp.kx.gd
groupname: group
grouphost: xmpp.kx.gd
----------
username: @all@
userhost: example.com
groupname: group
grouphost: example.com
----------
Hi, I've tried to create a container docker with a docker-compose file with the following configuration:
So I tried to create a shared roaster group with members @all@, but it not working. The group was created correctly, but with no members. Is it possible to do this?