2012-06-20 2 views
3

люди! Я получаю следующее сообщение об ошибке, и я понятия не имею, что делать. Это уже известная ошибка net-ldap? Я пытался обновить свои драгоценные камни, и я уже искал дополнительную информацию в Интернете. Первая часть в порядке, я получаю свои данные из моей базы данных ldap, но эта ошибка возникает в конце.net ldap - Encoding :: UndefinedConversionError

/usr/local/lib/ruby/gems/1.9.1/gems/net-ldap-0.3.1/lib/net/ber/core_ext/string.rb:23:in encode': "\x8E" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) from /usr/local/lib/ruby/gems/1.9.1/gems/net-ldap-0.3.1/lib/net/ber/core_ext/string.rb:23:in raw_utf8_encoded 'от /usr/local/lib/ruby/gems/1.9.1/gems/net-ldap-0.3.1/lib/net/ber/core_ext/string.rb:15:in to_ber' from /usr/local/lib/ruby/gems/1.9.1/gems/net-ldap-0.3.1/lib/net/ldap.rb:1396:in блок в поиске' от /usr/local/lib/ruby/gems/1.9.1/gems/net-ldap-0.3.1/lib/net/ldap.rb:1367:in loop' from /usr/local/lib/ruby/gems/1.9.1/gems/net-ldap-0.3.1/lib/net/ldap.rb:1367:in поиск 'от /usr/local/lib /ruby/gems/1.9.1/gems/net-ldap-0.3.1/lib/net/ldap.rb:637:in `поиск '

и вот мой код:

require 'rubygems' 
require 'net/ldap' 

ldap = Net::LDAP.new 
ldap.host = 'xxxxxx' 
ldap.authenticate "cn=admin, dc=xxxx, dc=xxxxx, dc=de", "xxxxx!" 
#puts ldap.bind 
if ldap.bind 
    # authentication succeeded 
else 
    # authentication failed 
# p ldap.get_operation_result 
end 


filter = Net::LDAP::Filter.eq("uid", "*") 
treebase = "xxxxx, dc=xxxxxx, dc=de" 

ldap.search(:base => treebase, :filter => filter) do |entry| 
    puts "DN: #{entry.dn}" 
    entry.each do |attribute, values| 
    puts " #{attribute}:" 
    values.each do |value| 
     puts "  --->#{value}" 
    end 
    end 
end 

ответ

1

Я получаю такую ​​же проблему (Ruby 1.9.3-Р194/нетто-0.3.1 на LDAP Mac OS X 10.7.4), и также царапали мою голенькую голову об этом. Вдоль моих путешествий я также попробовал ruby-net-ldap (предшественник net-ldap) и ruby-ldap (который кажется более новым, чем net-ldap), но ruby-ldap, похоже, не подключается к нашему (Novell) LDAP, не говоря уже о том, чтобы позволить мне искать. Мой следующий путь исследования - попытаться выяснить, почему ruby-ldap не подключается, и, если можно, используйте это.

Видимо проблема связана с кодировкой строк и от Ruby < -> net-ldap. Ruby 1.9.x хочет их в UTF-8, а net-ldap хочет их в ASCII-8BIT.

Некоторые говорят, что принудительное преобразование данных как данные перемещается в каждом направлении (то есть при форсировании ASCII-8BIT при передаче значений в объекты net-ldap и при принуждении к UTF-8 при получении значений) является временным решением до тех пор, пока net-ldap не получит исправлено. Однако, это не делает это для меня.

Некоторый код делает выше здесь:

https://groups.google.com/forum/?fromgroups#!topic/ruby-ldap/pyie3Fx42Jc

... я не говорю, что делает вещи, не лучше для меня, хотя другие, кажется, сообщают об успехах. В моем конкретном случае я не отправляю никаких специальных символов в качестве параметров поиска, но ожидаю получить специальные символы (в значениях фамилии и т. Д.). Также обратите внимание, что я не пытаюсь редактировать что-либо в дереве LDAP, я просто ищу его. Как и вы, вход в систему - это не проблема, просто поиск.

Я надеюсь, что вышеупомянутый совет исправит его для вас, но, как я уже сказал, это ничего не сделало для меня. Я также обнаружил, что иногда сценарий (я просто использую скрипт Ruby, это не приложение Rails) будет прекрасно работать без ошибок, а в других случаях (без каких-либо изменений!) Это даст ошибку, которую вы получаете, когда запустить только через несколько секунд. Так что, даже если вы думаете, что вы его взломали, мой совет будет проверять много раз, если вам просто повезло.

Самые последние предложения, которые я нашел, что кто-то обновлял нетто-был LDAP августа 2011, так что я склонен думать, что это может быть какое-то время, прежде чем исправить Выпущено: -/

Если вы можете «Заработайте, возможно, стоит попробовать ruby-ldap (0.9.12 на момент написания). Если он подключается к вашей настройке, он может быть более надежным при поиске?

Если вы нашли решение, пожалуйста, сообщите об этом! Cheers, Ken

+0

Hi Ken! Большое спасибо! Код из групп google не помог мне, но вы убедили меня использовать ruby-ldap. В первый раз мне не понравился этот модуль, но теперь он работает лучше, чем ожидалось. ... нет ошибки преобразования. Я нашел, что функция исправлена, но я не знаю, как это сделать. Возможно, можно заменить недопустимые части. В чем проблема с вашим соединением? – gadreel

+0

@ user1458773 Рад, что это работает для вас! Моя проблема в том, что я не вижу способа заставить ruby-ldap использовать Simple TLS во время аутентификации. В net-ldap вы можете сделать это: 'Net :: LDAP.new (: host => server,: port => 636,: auth => {: method =>: simple,: username => имя пользователя,: пароль = > password},: encryption =>: simple_tls,) ', но я не вижу, как получить ruby-ldap для использования простой TLS. Параметр LDAP :: Conn.bind «method» по умолчанию имеет значение LDAP :: LDAP_AUTH_SIMPLE, но я не могу найти, что другие параметры. Если вы решили это, дайте мне знать! –

3

Существует множество проблем с кодированием в v0.3.1 net-ldap [1], [2], [3], [4]. Несколько патчей уже слиты, но, к сожалению, этот отличный проект кажется полузаброшенным, и изменения не вытесняются в рубигемы. С его помощью непосредственно из GitHub работает хорошо для меня, и если вы используете Bundler, это так просто торчащий что-то подобное в вашем Gemfile:

gem "net-ldap", :git => "git://github.com/ruby-ldap/ruby-net-ldap.git", :ref => '8a182675f4' 

1 - https://github.com/ruby-ldap/ruby-net-ldap/pull/41
2 - https://github.com/ruby-ldap/ruby-net-ldap/pull/44
3 - https://github.com/ruby-ldap/ruby-net-ldap/pull/64
4 - https://github.com/ruby-ldap/ruby-net-ldap/pull/55

+0

это полностью сработало для меня. БОЛЬШОЕ СПАСИБО! – cmyers