Ошибка WILL_NOT_PERFORM при попытке включить пользователя через LDAP - PullRequest
4 голосов
/ 16 февраля 2012

Я пытаюсь создать нового пользователя Active Directory через ldap, но пользователь отключен при создании. Я пытаюсь установить для атрибута userAccountControl значение 512, но получаю ошибку WILL_NOT_PERFORM. Я прочитал это потому, что пароль не установлен, но я не могу сказать, почему. Создание пользователя с установленным атрибутом userPassword работает нормально.

Вот код:

    // Create a container set of attributes
    Attributes container = new BasicAttributes();

    // Assign the properties we need to set on the user
    container.put(new BasicAttribute("objectClass", "user"));
    container.put(new BasicAttribute("cn", userName));
    container.put(new BasicAttribute("sAMAccountName", userName));
    container.put(new BasicAttribute("name", userName));
    container.put(new BasicAttribute("givenName", userName));
    container.put(new BasicAttribute("userPassword", password));

    String fullDomainName = getFullUserName(userName);
    // Create the entry
    try{
        context.createSubcontext(fullDomainName, container);
    }catch(Exception e){
        System.err.println("Error creating user: " );
        e.printStackTrace();
        throw e;
    }

    ModificationItem[] userMods = new ModificationItem[1];
    userMods[0] = new ModificationItem(InitialLdapContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl", "512"));
    try{
        context.modifyAttributes(fullDomainName, userMods);
    }catch(Exception e){
        System.err.println("Could not update userAccountControl flag");
        e.printStackTrace();
        throw e;
    }

Первая часть, в которой я создаю пользователя, работает, вторая часть, где я пытаюсь установить флаг userAccountControl, завершается неудачей. Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Я обнаружил проблему ... Мне пришлось использовать атрибут unicodePwd и убедиться, что он правильно закодирован:

    final byte[] quotedPasswordBytes = ('"'+password+'"').getBytes("UTF-16LE");
    container.put(new BasicAttribute("unicodePwd", quotedPasswordBytes));

Я нашел ответы здесь:

Как мне разрешить ответ MS AD "WILL_NOT_PERFORM" при попытке сменить пароль в scala с несвязанным LDAP SDK?

http://www.dirmgr.com/blog/2010/8/26/ldap-password-changes-in-active-directory.html

0 голосов
/ 16 февраля 2012

Вы подключаетесь к LDAP как пользователь, у которого есть разрешения для этого? Или вы подключаетесь к LDAP как этот пользователь или другой пользователь с ограниченными разрешениями? Возможно, у вас есть права на создание нового пользователя, но не на выполнение такой операции модификации? Просто мысль, это то, с чем я столкнулся прежде и ударил головой о стену, прежде чем осознал свою ошибку Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...