Добавление пользователя в качестве члена в группу AD через JNDI LDAP - запись существует - PullRequest
0 голосов
/ 03 июля 2019

Я добавил нового пользователя в AD, используя JNDI LDAP.И я включил учетную запись также программно.Однако, если я пытаюсь добавить пользователя в группу AD, я получаю сообщение об ошибке, которое указывает, что запись уже существует.См. Приведенные ниже результаты для исключения.

«Администраторы домена» - это имя группы, но, похоже, жалуется на то, что я пытаюсь повторно добавить группу.Вот мой код.

Любой пример, который я нашел на форумах, делает это аналогично.

public void addUserToGroup() throws NamingException {

   String groupDN = "CN=Domain Admins,CN=Users,DC=mydomain,DC=org";

// Create the objectclass
    Attribute objClasses = new BasicAttribute("objectClass");
    objClasses.add("top");
    objClasses.add("group");

// Create a entry set of attributes
    Attributes attrs = new BasicAttributes();
    Attribute member = new BasicAttribute("member", getUserDN("jdoe"));

// Add these to the container
    attrs.put(objClasses);
    attrs.put(member);
    try {
        context.modifyAttributes(groupDN, DirContext.ADD_ATTRIBUTE, attrs);
} catch (Exception e) {
   LOGGER.severe("Failed to Add User to Domain Admins -- ");
}
}

public String getUserDN(String aUsername) {
    return "CN=" + aUsername + ",CN=" + "Users,DC=mydomain,DC=org";
}

Это вызванное исключение ...

javax.naming.NameAlreadyBoundException: [LDAP: код ошибки 68 - 00000562: UpdErr: DSID-031A11E2, проблема 6005 (ENTRY_EXISTS), данные 0];оставшееся имя 'CN = Администраторы домена, CN = Пользователи, DC = mydomain, DC = org'

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Вы добавляете атрибут со значениями, которые уже существуют в объекте: objectClass.При использовании DirContext.ADD_ATTRIBUTE сервер LDAP принимает новые значения, а не заменяет существующие значения.

Почему вы добавляете это в модификацию?Достаточно просто добавить атрибут member.Попробуйте без атрибута objectClass, и оно должно работать.

0 голосов
/ 03 июля 2019

Прошло много времени с тех пор, как я работал с JNDI (это 20-летняя библиотека BTW), но у меня все еще есть что предложить здесь.

Ошибки LDAP обычно означают то, что они говорят, поэтомуЯ не сомневаюсь, что ошибка означает именно то, что она говорит (запись уже существует).Это, конечно, противоречит вашему коду, который, кажется, хочет только выполнить операцию ldapmodify.

Я бы хотел посмотреть, что происходит "на проводе", так как насчет захвата протокола LDAP с помощью tcpdump или wireshark, ипроверить, действительно ли он отправляет MOD или ADD?Теоретически эта ошибка 68 должна исходить только от ADD, поэтому давайте посмотрим эти пакеты и выясним, что на самом деле произошло.

...