Ldap-Abfrage liefert keine Attribute ohne Inhalt / ex. Attribut?

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

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
 
LDAP und Java habe ich eigentlich null Plan, aber ich habe mal mit LDAP in VBA gearbeitet. Dort habe ich es so verstanden, dass die Attribute immer nur gelesen werden können, welche du auch abfragst. Sprich, wenn du sagst bla(new String[]{"sAMAccountName", "displayName", "cn"}); kannst du auch nur diese 3 Attribute später verwenden. Wenn eins der Attribute leer ist, so vermute ich ist es in Java einfach null.
 
Zurück