I'm surprised that your ldif does not fully look like what http://platform.xwiki.org/xwiki/bin/view/AdminGuide/LDAPAuthenticationUseCases;jsessionid=620528B27745C914E631257DCF4DDD3A#HAppleOpenDirectoryServer suggest.
On Mon, Feb 10, 2014 at 11:59 AM, Thomas Mortagne <[email protected]> wrote: > Something else: > > "LDAP UID Attribute name" is not related to the member field in a > group, it's the name of the field in a user that contains the uid. > > On Mon, Feb 10, 2014 at 11:56 AM, Thomas Mortagne > <[email protected]> wrote: >> Just added built in support for these group class and member field id >> (http://jira.xwiki.org/browse/XWIKI-10032). Will be part of 5.4.1 too. >> >> On Mon, Feb 10, 2014 at 11:49 AM, Thomas Mortagne >> <[email protected]> wrote: >>> On Mon, Feb 10, 2014 at 11:44 AM, Eric Kimn <[email protected]> wrote: >>>> Hi Thomas, >>>> >>>> Ah, thanks for the responses. >>>> >>>> However, I tried the full group dn as you suggested and unfortunately it >>>> still only finds the first memberUid in the list and so it doesn’t think I >>>> am a member of the group. >>> >>> What do you mean exactly by "first memberUid in the list" ? Because in >>> your first mail it was returning the group itself and not at all the >>> the member of the group. If you did not configured groups class and >>> member field then it's normal since it think your group is a user. >>> >>>> >>>> Best, >>>> >>>> >>>> Eric Kyungsuk Kimn >>>> 김경석 >>>> Senior Back End Developer >>>> [email protected] >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> On Feb 10, 2014, at 2:39 AM, Thomas Mortagne <[email protected]> >>>> wrote: >>>> >>>>> On Mon, Feb 10, 2014 at 11:38 AM, Thomas Mortagne >>>>> <[email protected]> wrote: >>>>>> On Mon, Feb 10, 2014 at 11:26 AM, Eric Kimn <[email protected]> wrote: >>>>>>> Hi Thomas, >>>>>>> >>>>>>> Thanks for the replies~! Really appreciate it. >>>>>>> >>>>>>> To answer your questions: >>>>>>> >>>>>>> For the group DN, I was watching the logs, and while yes, I could have >>>>>>> put the full dn in there, it does a check to see if it can find it with >>>>>>> the group dn alone and if it can’t find it, it then tries to find it >>>>>>> with the base dn and then the group dn as a filter. So that’s why I >>>>>>> just put the cn=mygroup in the group name. >>>>>> >>>>>> Yes it's supposed to work (and now it does) but using the full group >>>>>> DN is simply better for performance since it less LDAP requests. >>>>>> >>>>>>> >>>>>>> My group ldif looks like: >>>>>>> This is the query i run, it’s the same query xwiki is executing when >>>>>>> trying to if I’m a member of the group: >>>>>>> ldapsearch -x -h od.mycompany.com -s sub -b dc=mycompany,dc=com >>>>>>> cn=mygroup attributes objectClass uid memberUid >>>>>>> >>>>>>> # extended LDIF >>>>>>> # >>>>>>> # LDAPv3 >>>>>>> # base <dc=mycompany,dc=com> with scope subtree >>>>>>> # filter: cn=mygroup >>>>>>> # requesting: attributes objectClass uid memberUid >>>>>>> # >>>>>>> >>>>>>> # mygroup, groups, mycompany.com >>>>>>> dn: cn=mygroup,cn=groups,dc=mycompany,dc=com >>>>>>> objectClass: posixGroup >>>>>>> objectClass: mycompany-group >>>>>>> objectClass: extensibleObject >>>>>>> objectClass: top >>>>>>> memberUid: member1 >>>>>>> memberUid: member2 >>>>>>> memberUid: member3 >>>>>>> memberUid: member4 >>>>>>> etc…. >>>>>>> >>>>>>> >>>>>>> Finally, I read the jira bug and I’m not totally sure (from the >>>>>>> description) if that’s the issue I’m seeing. You said that an LDAP >>>>>>> subgroup is listed as UID it’s not expanded. But the issue I’m running >>>>>>> into isn’t related to subgroups, it’s that when there are multiple >>>>>>> memberUid’s in the group, that logic isn’t adding all of them into the >>>>>>> member map object, thus it incorrectly determines that a person isn’t >>>>>>> in a group, if they’re not the first in the list. Please correct me if >>>>>>> I’m seeing it wrong. >>>>>> >>>>>> Actually it is :) >>>>>> >>>>>> As I told you in my previous mail "cn=mygroup" does not means your >>>>>> group, your group is a subgroup of what we call a group in XWiki which >>>>>> mean either a group DN, a filter or an organization usint. In you case >>>>> >>>>> s/usint/unit/ >>>>> >>>>>> the group "cn=mygroup" has a member called >>>>>> "cn=mygroup,cn=groups,dc=mycompany,dc=com" which was not expanded. >>>>>> >>>>>>> >>>>>>> And doubly finally, if I’m wrong and the issue is fixed (which would >>>>>>> awesome), when can I get the fix? It’s really holding up using xwiki >>>>>>> on a broader scale because I can’t get it integrated with our LDAP. >>>>>> >>>>>> Again you should be fine with full group DN, did you tested with it ? >>>>>> 4.5.1 release is planned tomorrow. >>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Best, >>>>>>> >>>>>>> >>>>>>> Eric Kyungsuk Kimn >>>>>>> 김경석 >>>>>>> Senior Back End Developer >>>>>>> [email protected] >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Feb 10, 2014, at 2:04 AM, Thomas Mortagne >>>>>>> <[email protected]> wrote: >>>>>>> >>>>>>>> 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 >>>>>>> >>>>>>> _______________________________________________ >>>>>>> devs mailing list >>>>>>> [email protected] >>>>>>> http://lists.xwiki.org/mailman/listinfo/devs >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Thomas Mortagne >>>>> >>>>> >>>>> >>>>> -- >>>>> Thomas Mortagne >>>>> _______________________________________________ >>>>> devs mailing list >>>>> [email protected] >>>>> http://lists.xwiki.org/mailman/listinfo/devs >>>> >>>> _______________________________________________ >>>> devs mailing list >>>> [email protected] >>>> http://lists.xwiki.org/mailman/listinfo/devs >>> >>> >>> >>> -- >>> Thomas Mortagne >> >> >> >> -- >> Thomas Mortagne > > > > -- > Thomas Mortagne -- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

