StehtimSchilf
Erfahrenes Mitglied
Hi Forum
mit nachfolgendem Code kann ich mir die gewünschten LDAP-Attribute auslesen:
Eigentlich funktioniert das soweit so gut bei einem Aufruf wie:
bla(new String[]{"sAMAccountName", "displayName", "cn"});
Da diese Attribute immer gesetzt sind. Wenn ich mir aber bspw. "sn", "employeeNumber", oder ähnliches zurückgeben will, so liefern mir die SearchResults nie diese Attribute. Warum nicht? Weil damit angezeigt wird, dass diese Attribute "leer" / (not set) sind? Damit kann ich leben, aber wie kann ich denn nun unterscheiden, ob das Attribut überhaupt im LDAP-Schema existiert? Wir liefern zu unserer Appli ebenfalls eine Schema-Erweiterung für Active Directory. Ich möchte jetzt überprüfen, ob die Attribute bereits existieren. Daher dachte ich, übergebe ich alle Attributnamen die ich testen will meiner Funktion bla() und schau welche zurückkommen und welche nicht. Aber nun kommen eben jene Attribute NICHT zurück, die zwar existieren aber leer sind.
a) Wie bewerkstellige ich es, dass auch die "leeren" Attribute zurückgegeben werden?
b) Wie kann ich eine "existiert ldap-Attribut"-Abfrage realisieren?
Danke & Gruess
SiS
mit nachfolgendem Code kann ich mir die gewünschten LDAP-Attribute auslesen:
Code:
public ArrayList<Attribute> bla(String[] returningFields) {
ArrayList<Attribute> list = new ArrayList<Attribute>();
SearchControls sc = new SearchControls();
// Dummy Filter
String searchFilter = "(&(sAMAccountName=administrator))";
// Einschränken der Attribute
sc.setReturningAttributes(returningFields);
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);
try {
NamingEnumeration<SearchResult> results = this.ctx.search("", searchFilter, sc);
while (results.hasMoreElements()) {
SearchResult searchResult = (SearchResult) results.nextElement();
NamingEnumeration<? extends Attribute> resAttrs = searchResult.getAttributes().getAll();
while (resAttrs.hasMoreElements()) {
Attribute attr = (Attribute) resAttrs.nextElement();
list.add(attr);
}
}
} catch (NamingException ne){
System.err.println("Error in LdapManager: " + ne.getMessage());
} catch (NoSuchElementException nee) {
System.err.println("Error in LdapManager: " + nee.getMessage());
}
return list;
}
Eigentlich funktioniert das soweit so gut bei einem Aufruf wie:
bla(new String[]{"sAMAccountName", "displayName", "cn"});
Da diese Attribute immer gesetzt sind. Wenn ich mir aber bspw. "sn", "employeeNumber", oder ähnliches zurückgeben will, so liefern mir die SearchResults nie diese Attribute. Warum nicht? Weil damit angezeigt wird, dass diese Attribute "leer" / (not set) sind? Damit kann ich leben, aber wie kann ich denn nun unterscheiden, ob das Attribut überhaupt im LDAP-Schema existiert? Wir liefern zu unserer Appli ebenfalls eine Schema-Erweiterung für Active Directory. Ich möchte jetzt überprüfen, ob die Attribute bereits existieren. Daher dachte ich, übergebe ich alle Attributnamen die ich testen will meiner Funktion bla() und schau welche zurückkommen und welche nicht. Aber nun kommen eben jene Attribute NICHT zurück, die zwar existieren aber leer sind.
a) Wie bewerkstellige ich es, dass auch die "leeren" Attribute zurückgegeben werden?
b) Wie kann ich eine "existiert ldap-Attribut"-Abfrage realisieren?
Danke & Gruess
SiS