Bonjour,

J'ai une application Java qui permet de consulter et modifier un Active Directory à travers une interface Swing et des requêtes LDAP, notamment un écran permettant de consulter un groupe AD et d'y ajouter des membres.

Tant qu'il y a moins de 1500 membres dans le groupe, ceux-ci sont consultables dans le champ "members" de l'AD.
Au-delà de 1500 membres, le champ "members" est vide et les membres sont consultables dans le champ "member;range=0-1499".

Or lorsque je consulte ce champ, je ne récupère que 1500 membres, et pas un de plus.
D'ailleurs si j'ajoute un 1501è membre au groupe, ceci se fait sans anomalie, si je consulte le compte en question je retrouve bien le groupe dans le champ "memberOf", mais lorsque je consulte le groupe je ne récupère pas ce 1501è compte dans le champ "member;range=0-1499", car il est limité à 1500.

Même en consultation ADExplorer, je n'ai que 1500 membres.
D'après les recherches que j'ai effectuées, j'ai trouvé qu'il s'agissait d'un problème de "pageSize", une page étant limité à 1500 résultats.

Je souhaiterais donc pouvoir récupérer TOUS les membres du groupe, même au delà des 1500 premiers.

Actuellement mon code dans les grandes lignes est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "(&(objectCategory=group)(cn=" + id + "))";
String searchBase = "...";
dirContext.setRequestControls(new Control[] {new PagedResultsControl(1000, Control.CRITICAL)});
 
NamingEnumeration<SearchResult> res  = dirContext.search(searchBase , searchFilter , searchCtls);
 
SearchResult sr = res.get(0);
 
if(sr.getAttributes().get("member") != null){
                	Attribute memberOf = sr.getAttributes().get("member");
                	if(memberOf.size() == 0) memberOf = sr.getAttributes().get("member;range=0-1499");
}
En faisant ainsi, si j'ai moins de 1500 membres, je récupère dans "memberOf" la liste des membres du groupe issus du champ "member" de l'AD
Si j'ai plus de 1500 membres, je récupère dans "memberOf" la liste des membres du groupe issus du champ "member;range=0-1499" de l'AD

Mais dans ce deuxième cas, je ne récupère que les 1500 premiers membres, et pas les suivants.
Je voudrais donc pouvoir récupérer dans "memberOf" l'intégralité des membres de ce groupe.

Quelqu'un aurait-il une idée pour m'aider à corriger cette anomalie ?

Merci d'avance pour votre aide.

Cordialement