LDAP-ldap.add не добавляет записи на сервер LDAP

Я новичок в работе с LDAP, и любая помощь приветствуется.

Я пишу программу Ruby, которая добавляет записи на сервер LDAP. Я могу добавлять записи просто отлично, используя терминал. Но проблема заключается в том, чтобы заставить его работать с помощью Ruby.

Вот сервер LDAP, на который я пытаюсь писать.

# example.org
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Inc.
dc: example

# admin, example.org
dn: cn=admin,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: mypassword

# people, example.org
dn: ou=people,dc=example,dc=org
objectClass: organizationalUnit
ou: people

А вот и содержимое ldap-program.rb. Для

    require 'rubygems'
    require 'net/ldap'

    ldap = Net::LDAP.new  :host => '127.0.0.1',
                            :port => 1300,
                            :auth => {
                                :method => :simple,
                                :username => 'cn=admin,dc=example,dc=org',
                                :password => 'mypassword'
    }

  dn = "uid=christine,ou=people,dc=example,dc=com"
attr = {
  :cn => "Christine",
  :sn => "Smith",
  :objectClass => "inetOrgPerson",
  :mail => "[email protected]",
  :uid => "christine"
}

ldap.add(:dn => dn, :attr => attr)

Я очень внимательно следил за документацией по ldap.add, но в этом случае запись не добавляется в LDAP. Может ли кто-нибудь дать какие-либо указания или предложения?


person Leia_Organa    schedule 19.08.2019    source источник
comment
Не могли бы вы описать ошибку, которую вы получаете обратно?   -  person Ludovic Poitou    schedule 19.08.2019
comment
Возможно, требуется отдельный ldap.auth. См. здесь: stackoverflow .com/questions/21271834/ruby-net-ldap-add-user.   -  person Christian    schedule 19.08.2019
comment
Возможный дубликат добавления пользователя Ruby net-ldap   -  person Christian    schedule 19.08.2019
comment
Просто обратите внимание .... поскольку атрибут именования - «uid», вам также не нужно добавлять его в качестве атрибута.   -  person Bernhard Thalmayr    schedule 19.08.2019
comment
Вы отметили active-directory. Вы действительно используете AD? Если это так, у вас есть несколько проблем, которые я вижу.   -  person Gabriel Luci    schedule 20.08.2019
comment
@GabrielLuci Да, я так думаю. Я очень новичок в LDAP, поэтому я также пытаюсь понять, как именно он работает.   -  person Leia_Organa    schedule 20.08.2019


Ответы (1)


Я не разработчик Ruby, поэтому мои примеры кода могут нуждаться в доработках. Но если вы используете Active Directory, то я вижу две проблемы:

  1. objectClass должно быть user
  2. В AD атрибут uid не имеет особого значения. . Имя пользователя, используемое для входа, представляет собой атрибут sAMAccountName.
attr = {
  :cn => "Christine",
  :sn => "Smith",
  :objectClass => "user",
  :mail => "[email protected]",
  :sAMAccountName => "christine"
}

Вы также можете установить givenName, что для имени пользователя.

Если это не сработает, сообщите нам, какую ошибку вы получаете.

Это создаст учетную запись в отключенном состоянии. Чтобы включить его, вам нужно указать пароль на втором этапе, установив unicodePwd (который имеет странный формат) и обновление ссылки userAccountControl, чтобы включить его.

Измените его снова, используя эти атрибуты (где новый пароль — "new_password"):

def self.str2unicodePwd(str)
    ('"' + str + '"').encode("utf-16le").force_encoding("utf-8")
end

attr = {
  :unicodePwd, str2unicodePwd("new_password"),
  :userAccountControl, 0x200
}

Для бит пароля.

person Gabriel Luci    schedule 20.08.2019