使用ruby ldap创建新的LDAP用户时出现“无效的DN语法”错误

时间:2012-05-24 08:57:41

标签: ruby ldap

当我尝试使用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”

由于

1 个答案:

答案 0 :(得分: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客户端中使用的授权标识。如果此命令成功,则LDAP客户端可以确保服务器已正确设置,并且授权标识具有足以在目录信息树中的该位置添加该条目的访问权限。

另见