Мои пользователи - inetOrgPerson. Какой атрибут будет включать / отключать пользователей? Я использую библиотеку JNDI, и я пробую этот код для активного каталога, но получаю LDAP: код ошибки 17 - userAccountControl: тип атрибута не определен. Если я попытаюсь поставить attributes.put ("userAccountControl", "0x0001"); при создании пользователя я получаю ту же ошибку.
Есть идеи?
public void disableEnableUser(String user) throws Exception {
ModificationItem[] mods = new ModificationItem[1];
//To enable user
//int UF_ACCOUNT_ENABLE = 0x0001;
//mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl",Integer.toString(UF_ACCOUNT_ENABLE)));
// To disable user
int UF_ACCOUNT_DISABLE = 0x0002;
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl",Integer.toString(UF_ACCOUNT_DISABLE)));
connection.modifyAttributes("path to user", mods);
}
userAccountControl
является атрибутом AD, поэтому в openldap вы его не найдете (определение inerOrgPerson не имеет userAccountControl
). Если вы хотите заблокировать своих пользователей, вы должны сделать это другим способом.
Одна из возможностей — использовать оверлей Password Policy (ppolicy). Политика определяет атрибут pwdAccountLockedTime
, который, если установлено значение «00000101000000Z», указывает на административную блокировку.Чтобы это работало, вы должны включить ppolicy в дерево LDAP, что в основном означает ldapdd
с файлом ppolicy.ldif
.
Еще одна возможность — изменить пароль пользователя на что-то, что указывает на блокировку. Например, изменив префикс {SSHA}
пароля на {SSHA}!
, вы можете легко указать, заблокирован ли пользователь. В качестве бонуса вам не нужны никакие дополнительные оверлеи, и это также не позволяет пользователю войти в систему.