windows server 2012 r2
ライブラリを使用して Active Directory ユーザー ( ) を有効にしようとすると、問題が発生しnet/ldap
ます。
設定
まず、次のメソッドでユーザーを作成します。
def create_user(attrs)
dn = "cn=#{attrs[:cn]},cn=Users,#{@base}"
cn = attrs[:cn]
pass = ascii_convert(attrs[:pwd])
updated_attrs = { cn: cn,
objectclass: ['user'],
samaccountname: cn,
userprincipalname: "#{attrs[:cn]}@#{@domain}",
unicodepwd: pass
}
@connection.add(dn: dn, attributes: updated_attrs)
result = @connection.get_operation_result
raise LdapError.new("Create AD user error: #{result}") if result.code != 0
end
これによりユーザーが作成され、デフォルトでそのuserAccountControl
属性が設定されます546
(これが必要です)。アクティブディレクトリで検査すると、次のように表示されます。
0x222 (ACCOUNTDISABLE|PASSWD_NOTREQD|NORMAL_ACCOUNT)
.
問題
後でそのユーザーを有効にしたいので、次のように呼び出します。
def enable_user!(dn, cn)
u = search_query(find_user(cn)).try(:first)
if u
@connection.replace_attribute(dn, :useraccountcontrol, '512')
else
false
end
end
ただし、印刷すると次の@connection.get_operation_result
ようになります。
<OpenStruct code=53, error_message="0000052D: SvcErr: DSID-031A12D2, problem 5003 (WILL_NOT_PERFORM), data 0\n\u0000", matched_dn="", message="Unwilling to perform">
このメソッドでは、userAccountControl
を と等しくしたいのです512
が、これは と同等です0x200 (NORMAL_ACCOUNT)
。
私が試したこと
注: 接続は SSL (LDAPS) 経由であり、管理者 AD アカウントにバインドされています。
- この答え
#modify
メソッドの代わりに#replace_attribute
使用しenable_user!
ます。- 整数表現の代わりに 16 進値を渡します。
- apache directory studio を使用して同じ変更を実行します。
私が気づいた興味深いことの1つは、次のように変更できることuseraccountcontrol
です514
。
0x202 (ACCOUNTDISABLE|NORMAL_ACCOUNT)
したがって、この属性が無効になっている限り、有効に変更しようとするとすぐにエラーが表示されるので、この属性を変更できるようです。