Этот код erlang вызывает исключение, и я не знаю почему - PullRequest
0 голосов
/ 30 декабря 2011

Я использую центр сертификации Windows (AD CS) для выдачи сертификатов участникам безопасного соединения между службой Windows RabbitMQ и клиентом.

Предметом моего сертификата клиента является мое отличительное имя (DN) в LDAP: «CN = Джон Руис, CN = Пользователи, DC = devexample, DC = com»

Когда я пытаюсь установить это соединение, сервер выдает исключение и закрывает соединение, и я вижу эту трассировку стека erlang в журнале кролика:

=ERROR REPORT==== 30-Dec-2011::10:33:24 ===
exception on TCP connection <0.331.0> from 10.1.30.70:52269
{channel0_error,starting,
    {error,{case_clause,[{printableString,"Users"},
                         {printableString,"John Ruiz"}]},
                         'connection.start_ok',
                         [{rabbit_ssl,find_by_type,2,[]},
                         {rabbit_auth_mechanism_ssl,init,1,[]},
                         {rabbit_reader,handle_method0,2,[]},
                         {rabbit_reader,handle_method0,3,[]},
                         {rabbit_reader,handle_input,3,[]},
                         {rabbit_reader,recvloop,2,[]},
                         {rabbit_reader,start_connection,7,[]},
                         {proc_lib,init_p_do_apply,3,
                             [{file,"proc_lib.erl"},{line,227}]}]}}

Просматривая последние две строки в трассировке стека, я обнаружил два файла:

  1. rabbit_ssl.erl
  2. rabbit_auth_mechanism_ssl.erl

Проблема в том, что раньше я не читал и не писал erlang, поэтому я не знаю, почему find_by_type вызывает исключение. Мое лучшее предположение состоит в том, что, поскольку в списке относительных DN (RDN) есть два элемента CN = *, результатом вызова списков: flatten является массив, тогда как ожидаемый результат - скаляр.

Может ли кто-нибудь, знакомый с erlang, подтвердить или исправить мое предположение? Если вы видите способ, которым этот код может быть улучшен для обработки только что описанного случая (вместо исключения), я был бы очень признателен, чтобы предложить его в списке рассылки RabbitMQ.

1 Ответ

1 голос
/ 30 декабря 2011

Ваше предположение верно.Сбой, потому что есть два элемента CN = *.Глядя на код, кажется, что многое зависит только от одного CN.Сам CN используется как имя пользователя для сессии ssl. Думаю, наличие множественного смысла мало.

...