Created and fixed http://jira.xwiki.org/browse/XWIKI-10031. Thanks for the report !
On Mon, Feb 10, 2014 at 10:18 AM, Thomas Mortagne <[email protected]> wrote: > Hmm actually could be something else. > > How does your group ldiff looks like ? Looks like there is a bug with > subgroups containing uids instead of complete DNs. > > On Mon, Feb 10, 2014 at 9:47 AM, Thomas Mortagne > <[email protected]> wrote: >> From what I understand from you use case you should not put >> "cn=mygroup" but your complete group DN >> ("cn=mygroup,cn=groups,dc=mycompany,dc=com=member1"). "cn=mygroup" >> does not really mean that group but "everything that matches >> "cn=mygroup"" (which is why it list you the group as found member by >> the way). There is still a bug in the fact that it seems to not expand >> the found groups to find submembers when using partial DN but if you >> use complete DN in the configuration you should be fine. >> >> I will try to reproduce and debug the partial DN use case. Thanks for >> the report. >> >> On Sun, Feb 9, 2014 at 3:16 AM, Eric Kimn <[email protected]> wrote: >>> Hey all, >>> >>> I managed to view the code for this class by a google search. But i’m >>> noticing a problem with the getGroupMembers logic and I’m experiencing it >>> myself in my 5.4 install of xwiki. >>> Some background: I am using Apple’s open directory as my ldap server. >>> My ldap config is as such (using the LDAP application): >>> >>> Restrict to group: >>> cn=mygroup >>> >>> LDAP base dn: >>> dc=mycompany,dc=com >>> >>> LDAP UID Attribute name >>> memberUid >>> >>> >>> The symptom: When XWiki tries to locate the members of a group, it finds >>> only one, typically the alphabetically first one, and not all. >>> >>> The source of the problem: >>> The entry point is here: >>> public Map<String, String> getGroupMembers(String groupDN, XWikiContext >>> context) >>> >>> which calls with a new map of <String, String> for members, this line -> >>> boolean isGroup = getGroupMembers(groupDN, members, new >>> ArrayList<String>(), context); >>> >>> That method has this signature -> >>> public boolean getGroupMembers(String groupDN, Map<String, String> >>> memberMap, List<String> subgroups, XWikiContext context) >>> >>> which falls to >>> if (searchAttributeList != null) { >>> isGroup = getGroupMembers(fixedDN, memberMap, subgroups, >>> searchAttributeList, context); >>> } >>> >>> But of course there are search attributes, so it calls this-> >>> public boolean getGroupMembers(String groupDN, Map<String, String> >>> memberMap, List<String> subgroups, List<XWikiLDAPSearchAttribute> >>> searchAttributeList, XWikiContext context) >>> >>> And this is where the problem is: >>> It for loops through the search attributes and executes a query, if it gets >>> a response that isn’t a group and the member map doesn’t already contain >>> that key, it will add it: >>> if (!memberMap.containsKey(groupDN)) { >>> memberMap.put(groupDN.toLowerCase(), id == null ? "" : >>> id.toLowerCase()); >>> } >>> >>> But then it RETURNS isGroup, which is now true, >>> And that flows back up the chain, except it never iterates through the rest >>> of the entries. >>> >>> My logs show: >>> 2014-02-08 17:45:22,858 >>> [http://myserver/xwiki/bin/loginsubmit/XWiki/XWikiLogin] DEBUG >>> c.x.x.p.l.XWikiLDAPUtils - Looks like [cn=mygroup] is not a DN, lets >>> try filter or id >>> 2014-02-08 17:45:22,858 >>> [http://myserver/xwiki/bin/loginsubmit/XWiki/XWikiLogin] DEBUG >>> c.x.x.p.l.XWikiLDAPConnection - LDAP search: baseDN=[dc=mycompany,dc=com] >>> query=[cn=mygroup] attr=[[objectClass, uid, memberuid, memberUid]] >>> ldapScope=[2] >>> 2014-02-08 17:45:22,864 >>> [http://myserver/xwiki/bin/loginsubmit/XWiki/XWikiLogin] DEBUG >>> c.x.x.p.l.XWikiLDAPUtils - Found group [cn=mygroup] members >>> [{cn=mygroup,cn=groups,dc=mycompany,dc=com=member1}] >>> 2014-02-08 17:45:22,864 >>> [http://myserver/xwiki/bin/loginsubmit/XWiki/XWikiLogin] DEBUG >>> c.x.x.p.l.XWikiLDAPUtils - Found user dn in user group [null] >>> 2014-02-08 17:45:22,865 >>> [http://myserver/xwiki/bin/loginsubmit/XWiki/XWikiLogin] DEBUG >>> u.i.L.XWikiLDAPAuthServiceImpl - Local LDAP authentication failed. >>> com.xpn.xwiki.XWikiException: Error number 8001 in 8: LDAP user member2 >>> does not belong to LDAP group cn=mygroup. >>> >>> >>> Am I reading the logs or code wrong? If I am, then what am I doing wrong >>> with my ldap configuration? I’m clearly part of mygroup but it >>> consistently fails to find me. >>> >>> Best, >>> >>> >>> Eric Kyungsuk Kimn >>> 김경석 >>> Senior Back End Developer >>> [email protected] >>> _______________________________________________ >>> devs mailing list >>> [email protected] >>> http://lists.xwiki.org/mailman/listinfo/devs >> >> >> >> -- >> Thomas Mortagne > > > > -- > Thomas Mortagne -- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

