Xmpp ejabberd e comando add-user
Pergunta
Eu tenho dois servidores Ejabberd, um local de distância online no Foobar.com.
Usando o console XMPP Pidgin, posso enviar estrofes de IQ para testes:
Servidor local HostName é EEPC
<iq to='eeepc' from='greg@eeepc' id='get-registred-users-num-1' type='set'>
<command xmlns='http://jabber.org/protocol/commands' action='execute' node='http://jabber.org/protocol/admin#get-registered-users-num'/>
</iq>
<iq from='eeepc' to='greg@eeepc/3493331071251540036345753' id='get-registred-users-num-1' type='result'>
<command xmlns='http://jabber.org/protocol/commands' sessionid='2009-08-29T14:01:55.714639Z' node='http://jabber.org/protocol/admin#get-registered-users-num' status='completed'>
<x xmlns='jabber:x:data'>
<field type='hidden' var='FORM_TYPE'>
<value>http://jabber.org/protocol/admin</value>
</field>
<field type='text-single' label='Number of registered users' var='registeredusersnum'>
<value>7</value>
</field>
</x>
</command>
</iq>
Servidor distante
<iq to='foobar.com' from='greg@foobar.com' id='get-registred-users-num-1' type='set'>
<command xmlns='http://jabber.org/protocol/commands' action='execute' node='http://jabber.org/protocol/admin#get-registered-users-num'/>
</iq>
<iq from='foobar.com' to='greg@foobar.com/36523779951251567671615394' id='get-registred-users-num-1' type='error'>
<command xmlns='http://jabber.org/protocol/commands' action='execute' node='http://jabber.org/protocol/admin#get-registered-users-num'/>
<error code='404' type='cancel'>
<item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>
</iq>
Não entendo por que recebo um, não pude ver nenhuma opção específica para dizer ao servidor para aceitar comandos do controle remoto?
Solução
Pode ser mod_configure
simplesmente não é carregado no servidor distante. Você pode verificar via lists:member(mod_configure, gen_mod:loaded_modules("foobar.com")).
em um shell de administrador ejabberd. Não consigo imaginar que se trata de ser um usuário remoto, porque não é necessária uma conexão S2S entre Foobar.com e greg@foobar.com.
Outras dicas
Olhando para dentro o código -fonte mod_configure.erl Parece haver uma verificação da ACL para garantir que os comandos de configuração do ADHOC sejam permitidos apenas quando o solicitante estiver em uma conta de usuário configurar o Priv nesse host virtual. Por padrão, acho que eles não.
acl:match_rule(LServer, configure, From)
Você pode precisar adicionar algo como ...
{access, configure, [{allow, greg@foobar.com}]}.
... para o seu arquivo Ejabberd.cfg.