Назад | Перейти на главную страницу

Проблема с внешней аутентификацией Ejabberd с PHP

Сейчас я в тупике. Я пытаюсь заставить ejabberd аутентифицировать пользователей на основе уже существующей таблицы пользователей MySQL моего веб-приложения.

Информация об окружающей среде

  1. Сервер Ubuntu 8.04
  2. Ejabberd 2.0.1-2 (с использованием hardy-backports)
  3. PHP 5.2.4
  4. MySQL 5.0.51a-3

В ejabberd.cfg:

Я закомментировал следующее значение по умолчанию auth_method линия:

%%{auth_method, internal}.

И раскомментировал и отредактировал следующие строки:

{auth_method, external}.
{extauth_program, "/var/myapplication/xmpp_auth.php"}.

Скрипт PHP

Скрипт PHP основан на этот пример сценария со страниц документации ejabberd.

Мой checkuser() и checkpass() функции работают безупречно сами по себе. Я тестировал их отдельно. php -l не показывает синтаксических ошибок в xmpp_auth.php.

Однако когда auth_method установлен на internal, Я могу войти в систему как пользователь, которого я создал с помощью ejabberdctl, но когда я переключаюсь на внешний метод, ничего не работает.

Журналы

Вот соответствующие записи журнала, когда я пытаюсь войти с удаленной идентификационной информацией. CLIENT_IP_REMOVED это мой клиентский IP, SERVER_IP_REMOVED это IP моего сервера, и myapplication.com это доменное имя моего сервера.

/var/ejabberd/ejabberd.log:

=INFO REPORT==== 2009-10-28 16:01:46 ===
I(<0.244.0>:ejabberd_listener:112) : (#Port<0.446>) Accepted connection {{CLIENT_IP_REMOVED},65263} -> {{SERVER_IP_REMOVED},5222}

=ERROR REPORT==== 2009-10-28 16:01:48 ===
** State machine <0.447.0> terminating
** Last event in was {xmlstreamelement,
                         {xmlelement,
                             "auth",
                             [{"xmlns","urn:ietf:params:xml:ns:xmpp-sasl"},
                              {"mechanism","PLAIN"},
                              {"xmlns:ga",
                               "http://www.google.com/talk/protocol/auth"},
                              {"ga:client-uses-full-bind-result","true"}],
                             [{xmlcdata,<<"AHNlbnNsZXkAam9iNDI0">>}]}}
** When State == wait_for_feature_request
**      Data  == {state,{socket_state,tls,
                                      {tlssock,#Port<0.446>,#Port<0.448>},
                                      <0.446.0>},
                        ejabberd_socket,
                        #Ref<0.0.0.9159>,
                        "53195611",
                        {sasl_state,"jabber",
                                    "myapplication.com",
                                    [],
                                    #Fun<ejabberd_c2s.1.74696376>,
                                    #Fun<ejabberd_c2s.2.131707924>,
                                    undefined,
                                    undefined},
                        c2s,
                        c2s_shaper,
                        false,
                        true,
                        false,
                        true,
                        [{certfile,"/etc/ejabberd/ejabberd.pem"}],
                        false,
                        undefined,
                        [],
                        "myapplication.com",
                        [],
                        undefined,
                        {0,nil},
                        {0,nil},
                        {0,nil},
                        {0,nil},
                        {dict,0,
                              16,
                              16,
                              8,
                              80,
                              48,
                              {[],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               [],
                               []},
                              {{[],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                [],
                                []}}},
                        undefined,
                        undefined,
                        undefined,
                        false,
                        {userlist,none,[]},
                        unknown,
                        unknown,
                        {{CLIENT_IP_REMOVED},65263},
                        []}
** Reason for termination =
** {badarg,[{extauth,call_port,2},
            {ejabberd_auth,'-check_password_with_authmodule/3-fun-0-',4},
            {lists,dropwhile,2},
            {ejabberd_auth,check_password_with_authmodule,3},
            {cyrsasl_plain,mech_step,2},
            {cyrsasl,server_step,2},
            {ejabberd_c2s,wait_for_feature_request,2},
            {gen_fsm,handle_msg,7}]}

/var/log/ejabberd/sasl.log:

=CRASH REPORT==== 28-Oct-2009::16:14:50 ===
  crasher:
    pid: <0.457.0>
    registered_name: []
    error_info: {badarg,
                     [{extauth,call_port,2},
                      {ejabberd_auth,
                          '-check_password_with_authmodule/3-fun-0-',
                          4},
                      {lists,dropwhile,2},
                      {ejabberd_auth,check_password_with_authmodule,3},
                      {cyrsasl_plain,mech_step,2},
                      {cyrsasl,server_step,2},
                      {ejabberd_c2s,wait_for_feature_request,2},
                      {gen_fsm,handle_msg,7}]}
    initial_call: {gen,
                     init_it,
                     [gen_fsm,
                      <0.235.0>,
                      <0.235.0>,
                      ejabberd_c2s,
                      [{ejabberd_socket,
                           {socket_state,gen_tcp,#Port<0.458>,<0.456.0>}},
                       [{access,c2s},
                        {shaper,c2s_shaper},
                        {max_stanza_size,65536},
                        starttls,
                        {certfile,"/etc/ejabberd/ejabberd.pem"}]],
                      []]}
    ancestors: [ejabberd_c2s_sup,ejabberd_sup,<0.36.0>]
    messages: []
    links: [<0.235.0>,#Port<0.460>]
    dictionary: []
    trap_exit: false
    status: running
    heap_size: 2584
    stack_size: 21
    reductions: 3425
  neighbours:

=SUPERVISOR REPORT==== 28-Oct-2009::16:14:50 ===
     Supervisor: {local,ejabberd_c2s_sup}
     Context:    child_terminated
     Reason:     {badarg,
                     [{extauth,call_port,2},
                      {ejabberd_auth,
                          '-check_password_with_authmodule/3-fun-0-',
                          4},
                      {lists,dropwhile,2},
                      {ejabberd_auth,check_password_with_authmodule,3},
                      {cyrsasl_plain,mech_step,2},
                      {cyrsasl,server_step,2},
                      {ejabberd_c2s,wait_for_feature_request,2},
                      {gen_fsm,handle_msg,7}]}
     Offender:   [{pid,<0.457.0>},
                  {name,undefined},
                  {mfa,
                      {ejabberd_c2s,
                          start_link,
                          [{ejabberd_socket,
                               {socket_state,gen_tcp,#Port<0.458>,<0.456.0>}},
                           [{access,c2s},
                            {shaper,c2s_shaper},
                            {max_stanza_size,65536},
                            starttls,
                            {certfile,"/etc/ejabberd/ejabberd.pem"}]]}},
                  {restart_type,temporary},
                  {shutdown,brutal_kill},
                  {child_type,worker}]

Я не знаю, что происходит. Пожалуйста помоги. знак равно

Что-то не так со сценарием, если вы используете Ubuntu, я бы предложил использовать учетную запись ejabberd и попытаться запустить сценарий. У меня была аналогичная проблема, когда он отказывался от аутентификации из-за проблем с разрешениями, когда сценарий пытался открыть файл журнала.