1

当我尝试使用 ruby​​ 1.9.2 和 ruby​​-ldap gem ( http://ruby-ldap.sourceforge.net/ ) 创建一个新的 LDAP 用户时,我总是得到这个错误:“无效的 DN 语法”

我想不通,为什么会这样。与我的服务器的连接工作正常。可以毫无问题地读取现有用户的属性。

cn = "#{first_name}#{last_name}"

  entry = [
    LDAP.mod(LDAP::LDAP_MOD_ADD,'objectclass',['top','person', 'user']),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'name',  [cn]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'accountExpires',  ["0"]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'displayName',  [cn]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'name',  [cn]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'givenName',  [first_name]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'sn',  [last_name]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'userPrincipalName',  ["#{first_name}.#{last_name}@my.domain"]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'pwdLastSet', ["0"]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'sAMAccountName',  ["#{first_name}.#{last_name}"]),
    LDAP.mod(LDAP::LDAP_MOD_ADD | LDAP::LDAP_MOD_BVALUES, 'unicodePwd',  [password_hash]),
    LDAP.mod(LDAP::LDAP_MOD_ADD, 'userAccountControl',  ["66048"]),
  ]

  begin
    ldap_connection.add("cn=#{cn}, ou=MyUsers, dc=my, dc=domain", entry)
  rescue
    puts ldap_connection.err2string(ldap_connection.err)
  end

例如,名字“John”和姓氏“Doe”会发生这种情况

谢谢

4

1 回答 1

0

验证是否可以使用已知的良好方法添加条目:ldapmodify. 创建一个包含LDIF的文件并使用ldapmodify. LDIF 应如下所示:

dn: cn=<the cn>,ou=myusers,dc=my,dc=domain
objectClass: top
objectClass: person
objectClass: user
accountExpires: 0
cn: <the cn>
name: <the cn>
... (the rest of the attributes)

添加使用ldapmodify

ldapmodify -h hostname -p port -c -a -f <the-file-containing-ldif> \
   -D distinguished-name -w password

distinguished-name应该是 LDAP 客户端中使用的授权 ID 。如果此命令成功,则 LDAP 客户端可以确定服务器已正确设置,并且授权 ID 具有足以在目录信息树中的该位置添加该条目的访问权限。

也可以看看

于 2012-05-25T12:52:01.470 回答