Мои пользователи — inetOrgPerson. Какой атрибут будет для включения/отключения пользователей? Я использую библиотеку JNDI и пробую этот код для Active Directory, но получаю 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);
}
решение1
userAccountControl
является атрибутом AD, поэтому в openldap вы его не найдете (определение inerOrgPersonнет userAccountControl
). Если вы хотите заблокировать своих пользователей, вам придется сделать это каким-то другим способом.
Одна из возможностей — использовать наложение Password Policy (ppolicy). Ppolicy определяет pwdAccountLockedTime
атрибут, который, если установлен на "00000101000000Z", указывает на административную блокировку. Чтобы это работало, вам нужно включить ppolicy в ваше дерево LDAP, что по сути означает с ldapadd
файлом ppolicy.ldif
.
Другая возможность — изменить пароль пользователя на что-то, что указывает на блокировку. Например, изменив префикс {SSHA}
пароля на {SSHA}!
, вы можете легко указать, заблокирован ли пользователь. В качестве бонуса вам не нужны никакие дополнительные наложения, и это также не позволяет пользователю войти в систему.