Не удалось запустить внешнюю программу аутентификации в Ejabberd 19.09.1

Я пытаюсь запустить сценарий внешней аутентификации в Ejabberd 19.09.1, работающем в Ubuntu 18.04.3, но у меня возникают проблемы. После попыток и неудач я попытался более или менее напрямую скопировать примеры из документации:

Я установил файл ejabberd.yml на это:

auth_method: [external]
extauth_program: /etc/ejabberd/pyAuth.py
extauth_instances: 3
auth_use_cache: false

И я скопировал сценарий Python eample:

#!/usr/bin/python

import sys
import struct

def read():
    (pkt_size,) = struct.unpack('>H', sys.stdin.read(2))
    pkt = sys.stdin.read(pkt_size)
    cmd = pkt.split(':')[0]
    if cmd == 'auth':
        u, s, p = pkt.split(':', 3)[1:]
        if u == "wrong":
            write(False)
        else:
            write(True)
    elif cmd == 'isuser':
        u, s = pkt.split(':', 2)[1:]
    elif cmd == 'setpass':
        u, s, p = pkt.split(':', 3)[1:]
        write(True)
    elif cmd == 'tryregister':
        u, s, p = pkt.split(':', 3)[1:]
        write(True)
    elif cmd == 'removeuser':
        u, s = pkt.split(':', 2)[1:]
        write(True)
    elif cmd == 'removeuser3':
        u, s, p = pkt.split(':', 3)[1:]
        write(True)
    else:
        write(False)
    read()

def write(result):
    if result:
        sys.stdout.write('\x00\x02\x00\x01')
    else:
        sys.stdout.write('\x00\x02\x00\x00')
    sys.stdout.flush()

if __name__ == "__main__":
    try:
        read()
    except struct.error:
        pass

Это дает мне следующие сообщения об ошибках:

2020-03-06 16:47:24.459 [error] <0.660.0>@extauth:handle_info:152 Failed to start external authentication program '../../../etc/ejabberd/pyAuthTest.py'
2020-03-06 16:47:24.459 [error] <0.656.0> Supervisor 'extauth_pool_xmpp.example.net' had child 'extauth_pool_xmpp.example.net_1' started with extauth:start_link('extauth_pool_xmpp.example.net_1', "../../../etc/ejabberd/pyAuthTest.py") at <0.660.0> exit with reason normal in context child_terminated

Я заметил, что большинство комментариев на форуме ejabberd очень старые, и я тоже получаю это

2020-03-06 16:47:21.909 [warning] <0.107.0>@ejabberd_config_transformer:warn_replaced_option:528 Option 'extauth_instances' is deprecated and was automatically replaced by 'extauth_pool_size'. Please adjust your configuration file accordingly. Hint: run `ejabberdctl dump-config` command to view current configuration as it is seen by ejabberd.

в ejabberd.log, а в документации говорится об использовании extauth_instances, поэтому мне интересно, может быть, часть документации устарела.

Для информации, я на самом деле не знаю python. Я пытаюсь запустить сценарий C#, частично основанный на сценарии mark.p.jones здесь https://www.ejabberd.im/node/1617/index.html, но я включаю это, так как получаю ту же ошибку сообщения от обоих, а сценарий python взят из официальных документов.

1 ответ

Теперь я установил ejabberd 19.09.1 ​​с вашим полным файлом конфигурации (за исключением нескольких строк, которые, конечно, мне пришлось адаптировать), и предоставленный вами скрипт Python позволяет мне войти в систему. В предоставленном вами файле журнала не отображается никакой новой информации, по крайней мере, из-за моего ограниченного опыта работы с extauth.

Гипотеза: проблема в вашей установке Python, возможно, скрипт не работает с вашей установкой Python по какой-либо причине. Для справки у меня Python 2.7.16.

Как это проверить: вместо использования этого сценария Python попробуйте пример сценария Perl extauth examples / extauth / check_pass_null.pl https://github.com/processone/ejabberd/tree/master/examples/extauth

Другие вопросы по тегам