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 add user   -  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