# Ldaptemplate Add User to Group



## richi_ (14. Okt 2011)

Hallo alle miteinander.

Ich sammle gerade erste Erfahrungen mit Java und LDAP. Derzeit versuche ich vergeblich einen User in eine Securitygruppe einzutragen.

Zur Information ich verwende das LDAP-Template 1.3.1.

Leider bekomme ich immer folgende Fehlermeldung:


```
Exception in thread "AWT-EventQueue-0" org.springframework.ldap.OperationNotSupportedException: [LDAP: error code 53 - 0000209A: SvcErr: DSID-031A0DD5, problem 5003 (WILL_NOT_PERFORM), data 0
```

So schaut mein folgender Code aus:


```
DistinguishedName rdn = new DistinguishedName("OU=K,OU=Useraccounts");
 rdn.add("CN", "Username");
 DirContextOperations context = ldapTemplate.lookupContext(rdn);
 context.addAttributeValue("memberOf", "cn=group, OU=Securitygroups");
 ldapTemplate.modifyAttributes(context);
```

Kann mir jemand sagen was ich falsch mache.

Ich habe mich direkt im Active Directory angemeldet. Dort könnte ich einen User in eine Securitygroup eintragen. Also an den Rechten dürfte es nicht liegen.

Danke im Voraus

richi


----------



## Peter W. Marth (15. Okt 2011)

Hallo,

das Attribut "memberOf" ist readonly, kann nicht direkt modifiziert werden.
Versuche stattdessen den User der Gruppe hinzuzufügen (Attribut "member").


----------



## richi_ (4. Nov 2011)

Hallo Peter,

danke für deine Antwort. Ich wollte mich entschuldigen, dass ich mich nie gemeldet habe. Ich bin nie dazugekommen, an dem Programm weiterzuarbeiten und hab ganz vergessen, dass ich hier eine Frage gestellt habe. Das war nicht richtig und wird auch nicht mehr vorkommen.

Ich würde es verstehen, wenn ich keine Antwort auf meine nächste Frage bekomme, aber ich versuche mal mein Glück.

Ich hätte versucht meinen Code entsprechend deines Vorschlages um zubauen. 


```
DistinguishedName rdn = new DistinguishedName("OU=Securitygroups");
 rdn.add("cn", "group");
 DirContextOperations context = ldapTemplate.lookupContext(rdn);
 context.addAttributeValue("member", "cn=user ");  (83)
```

Ich bekomme immer folgende Fehlermeldung LDAP: error code 32 - 00000525: NameErr: DSID-031A0F80, problem 2001 (NO_OBJECT).

Als Position wird Zeile (83) markiert und er sagt, er findet die Gruppe nicht.

Ich habe mittels ADSI-Edit meinen Pfad kontrolliert. Die Gruppe ist vorhanden und die Ous und Co stimmen überein.

Danke im Voraus und falls ich keine Antwort bekomme, kann ich es verstehen.

richi


----------



## Peter W. Marth (7. Nov 2011)

Hallo richi,

höchstwahrscheinlich gibt es den gesuchten DN wirklich nicht.
In Deinem Beispiel wird der DN als "cn=group,OU=Securitygroups" interpretiert, und ich glaube nicht, dass "OU=Securitygroups" die Wurzel Deines Verzeichnisbaumes ist.
Vermutlich müsste der DN länger sein, so etwa in der Art "cn=group,OU=Securitygroups,OU=meinefirma,OU=eu"


----------



## richi_ (7. Nov 2011)

Hallo Peter,

danke für deine Antwort

Der Pfad ist natürlich länger und diesen hätte ich im xml-File unter 


```
<property name="base" value="".../>
```

eingetragen.

Ich hätte auch schon versucht den restlichen Pfad wie folgt anzugeben:


```
DistinguishedName rdn = new DistinguishedName();
rdn.add("ou", "Securitygroups");
rdn.add("cn", "group");
```
Dies klappt leider auch nicht.

Im Anschluss daran habe ich nun folgendes versucht:


```
ldapTemplate.lookup("dn"));
```

Wenn ich dann im XML die Zeile 

```
<property name="base" value="".../>
```
herauslösche, findet er die Gruppe.

Wenn ich nun den gleichen String wie folgt angebe:


```
DirContextOperations context = ldapTemplate.lookupContext("dn");
```


Bekomme ich wieder folgende Meldung:

```
Exception in thread "main" org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - 00000525: NameErr: DSID-031A0F80, problem 2001 (NO_OBJECT), data 0, best match of:
```


Ich hab keine Ahnung, was ich falsch mache. 

Danke im Voraus

richi


----------



## Peter W. Marth (7. Nov 2011)

Versuch doch mal, den kompletten DN beim Lookup anzugeben (wie der DN bei Dir genau aussieht, hängt natürlich von Deinem Verzeichnisbaum ab) :


```
DirContextOperations context = ldapTemplate.lookupContext("cn=group,OU=Securitygroups,OU=meinefirma,OU=eu");
```


----------



## richi_ (7. Nov 2011)

Hallo Peter,

danke für deine Antwort. 

In den letzten beiden Fällen 


```
ldapTemplate.lookup("dn"));
```

und


```
DirContextOperations context = ldapTemplate.lookupContext("dn");
```

hatte "dn" den kompletten Pfad. Diesen habe ich direkt aus ADSI-Edit heraus kopiert.

Danke

richi_


----------



## richi_ (8. Nov 2011)

Hallo nochmal ich.

Vielleicht hab ich mich ungeschickt ausgedrückt. Mit dem kompletten Pfad kopiert aus ADSI-Edit funktioniert


```
ldapTemplate.lookup("dn"));
```

aber dies funktioniert nicht:


```
DirContextOperations context = ldapTemplate.lookupContext("dn");
```

Gibt es vielleicht anderen Weg. Also ich würde einfach nur gerne einen User in eine Gruppe eintragen, also die Attribute der Gruppe verändern.


Danke im Voraus

richi


----------



## Peter W. Marth (8. Nov 2011)

Hallo,

und in beiden Fällen war die Property "base" im ContextSource nicht gesetzt? Ich vermute, dass es an diesem Property-Eintrag liegen könnte.

Sowas sollte aber auf jeden Fall funktionieren:

```
ModificationItem item = new ModificationItem( DirContext.ADD_ATTRIBUTE, new BasicAttribute( "member", "derDNdesUsers" ) );
        ldapTemplate.modifyAttributes( "derDNderRguppe", new ModificationItem[] { item } );
```


----------



## richi_ (8. Nov 2011)

Hallo Peter,

danke danke für deine Antwort. Ich hab jetzt den kompletten Pfad angegeben und der User hat die entsprechende Gruppe.

Ich werde das Thema schließen und mich jetzt etwas spielen, wie ich es komfortabler mache bzw. am besten einbaue. 

Ich möchte mich nochmal herzliche für deine Hilfe bedanken. Jetzt hab ich einen Ansatz und hoffe den Rest bekomme ich alleine hin.

Schönen Tag 
richi_


----------

