On Wed, Oct 30, 2013 at 10:39:23PM +0100, Jakub Hrozek wrote: > On Wed, Oct 30, 2013 at 10:05:42PM +0100, Sumit Bose wrote: > > On Wed, Oct 30, 2013 at 03:21:16PM +0100, Pavel Březina wrote: > > > On 10/29/2013 01:43 PM, Pavel Březina wrote: > > > >On 10/28/2013 10:00 PM, Sumit Bose wrote: > > > >>On Mon, Oct 28, 2013 at 04:51:27PM +0100, Jakub Hrozek wrote: > > > >>>On Fri, Oct 25, 2013 at 10:40:28PM +0200, Jakub Hrozek wrote: > > > >>>>On Fri, Oct 25, 2013 at 10:33:42PM +0200, Pavel Březina wrote: > > > >>>>>On 10/25/2013 10:24 PM, Pavel Březina wrote: > > > >>>>>>On 10/25/2013 08:10 PM, Jakub Hrozek wrote: > > > >>>>>>>On Fri, Oct 25, 2013 at 01:47:51PM -0400, Pavel Brezina wrote: > > > >>>>>>>> > > > >>>>>>>> > > > >>>>>>>>----- Original Message ----- > > > >>>>>>>>>From: "Jakub Hrozek" <jhro...@redhat.com> > > > >>>>>>>>>To: sssd-devel@lists.fedorahosted.org > > > >>>>>>>>>Sent: Friday, October 25, 2013 4:01:03 PM > > > >>>>>>>>>Subject: Re: [SSSD] [PATCH] ad: support cross domain membership > > > >>>>>>>>> > > > >>>>>>>>>On Fri, Oct 25, 2013 at 03:27:40PM +0200, Pavel Březina wrote: > > > >>>>>>>>>>On 10/25/2013 02:22 PM, Jakub Hrozek wrote: > > > >>>>>>>>>>>On Fri, Oct 25, 2013 at 12:58:23PM +0200, Pavel Březina wrote: > > > >>>>>>>>>>>>On 10/25/2013 10:55 AM, Pavel Březina wrote: > > > >>>>>>>>>>>>>On 10/24/2013 08:40 PM, Jakub Hrozek wrote: > > > >>>>>>>>>>>>>>On Wed, Oct 02, 2013 at 04:13:32PM +0200, Pavel Březina > > > >>>>>>>>>>>>>>wrote: > > > >>>>>>>>>>>>>>>On 10/01/2013 09:54 PM, Jakub Hrozek wrote: > > > >>>>>>>>>>>>>>>>On Tue, Sep 24, 2013 at 03:17:47PM +0200, Pavel Březina > > > >>>>>>>>>>>>>>>>wrote: > > > >>>>>>>>>>>>>>>>>On 09/24/2013 01:32 PM, Jakub Hrozek wrote: > > > >>>>>>>>>>>>>>>>>>On Wed, Sep 11, 2013 at 02:40:14PM +0200, Pavel > > > >>>>>>>>>>>>>>>>>>Březina wrote: > > > >>>>>>>>>>>>>>>>>>>https://fedorahosted.org/sssd/ticket/2064 > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>These patch set depends on: [PATCH] ad: store group in > > > >>>>>>>>>>>>>>>>>>>correct > > > >>>>>>>>>>>>>>>>>>>tree on initgroups via tokenGroups > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>You can also pull it with all dependencies from my > > > >>>>>>>>>>>>>>>>>>>repository: > > > >>>>>>>>>>>>>>>>>>>fedorapeople.org:public_git/sssd.git #ad-groups > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>The fundamental changes in this patch set are: - lookup > > > >>>>>>>>>>>>>>>>>>>groups > > > >>>>>>>>>>>>>>>>>>>in global catalog - pick up member domain from its > > > >>>>>>>>>>>>>>>>>>>originalDN > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>From 0273d17f24eac7b60dfc0515a9e3b97ad16d1199 Mon Sep > > > >>>>>>>>>>>>>>>>>>>17 > > > >>>>>>>>>>>>>>>>>>>00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= > > > >>>>>>>>>>>>>>>>>>><pbrez...@redhat.com> Date: Mon, 9 Sep 2013 15:52:03 > > > >>>>>>>>>>>>>>>>>>>+0200 > > > >>>>>>>>>>>>>>>>>>>Subject: [PATCH 1/9] ad: shortcut if possible during > > > >>>>>>>>>>>>>>>>>>>get > > > >>>>>>>>>>>>>>>>>>>object > > > >>>>>>>>>>>>>>>>>>>by ID or SID > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>When getByID or getBySID comes from responder, the > > > >>>>>>>>>>>>>>>>>>>request > > > >>>>>>>>>>>>>>>>>>>doesn't necessarily have to contain correct domain, > > > >>>>>>>>>>>>>>>>>>>since > > > >>>>>>>>>>>>>>>>>>>responder iterates over all domains until it finds a > > > >>>>>>>>>>>>>>>>>>>match. > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>Every domain has its own ID range, so we can simply > > > >>>>>>>>>>>>>>>>>>>shortcut > > > >>>>>>>>>>>>>>>>>>>if domain does not match and avoid LDAP round trip. > > > >>>>>>>>>>>>>>>>>>>Responder > > > >>>>>>>>>>>>>>>>>>>will continue with next domain until it finds the > > > >>>>>>>>>>>>>>>>>>>correct > > > >>>>>>>>>>>>>>>>>>>one. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>This patch seems OK to me, but I'd like a second look > > > >>>>>>>>>>>>>>>>>>from > > > >>>>>>>>>>>>>>>>>>someone who understands the ranges better (which is > > > >>>>>>>>>>>>>>>>>>probably > > > >>>>>>>>>>>>>>>>>>Sumit) > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>From f74d4637980438032649dfbf079fa6c839862586 Mon Sep > > > >>>>>>>>>>>>>>>>>>>17 > > > >>>>>>>>>>>>>>>>>>>00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= > > > >>>>>>>>>>>>>>>>>>><pbrez...@redhat.com> Date: Tue, 10 Sep 2013 10:40:06 > > > >>>>>>>>>>>>>>>>>>>+0200 > > > >>>>>>>>>>>>>>>>>>>Subject: [PATCH 2/9] ad: simplify get_conn_list() > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>It was originally design to return list of connection > > > >>>>>>>>>>>>>>>>>>>objects, > > > >>>>>>>>>>>>>>>>>>>it really always work with only one connection. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>I'd like to review this patch and the following along > > > >>>>>>>>>>>>>>>>>>with my > > > >>>>>>>>>>>>>>>>>>patches to look up POSIX IDs in GC, they touch the > > > >>>>>>>>>>>>>>>>>>same code. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>From ad5dc9e7557ef605fc5d7fc759e5cb6c2f9a148c Mon Sep > > > >>>>>>>>>>>>>>>>>>>17 > > > >>>>>>>>>>>>>>>>>>>00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= > > > >>>>>>>>>>>>>>>>>>><pbrez...@redhat.com> Date: Tue, 10 Sep 2013 14:45:50 > > > >>>>>>>>>>>>>>>>>>>+0200 > > > >>>>>>>>>>>>>>>>>>>Subject: [PATCH 4/9] sdap_domain_add(): fix possible > > > >>>>>>>>>>>>>>>>>>>memory > > > >>>>>>>>>>>>>>>>>>>leak > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>ACK. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>From 9f2c212e01700289d70002c8c39b732ca6c11cee Mon Sep > > > >>>>>>>>>>>>>>>>>>>17 > > > >>>>>>>>>>>>>>>>>>>00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= > > > >>>>>>>>>>>>>>>>>>><pbrez...@redhat.com> Date: Tue, 10 Sep 2013 14:45:52 > > > >>>>>>>>>>>>>>>>>>>+0200 > > > >>>>>>>>>>>>>>>>>>>Subject: [PATCH 5/9] sdap: store base dn in sdap_domain > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>Groups may contain members from different domains. > > > >>>>>>>>>>>>>>>>>>>Remembering > > > >>>>>>>>>>>>>>>>>>>base dn in domain object gives us the ability to simply > > > >>>>>>>>>>>>>>>>>>>lookup > > > >>>>>>>>>>>>>>>>>>>correct domain by comparing object dn with domain > > > >>>>>>>>>>>>>>>>>>>base dn. > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>Resolves: https://fedorahosted.org/sssd/ticket/2064 > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>I haven't tested these patches yet. > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>I'm sending rebased version of my patches. > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>[PATCH 4/9] sdap_domain_add(): fix possible memory leak > > > >>>>>>>>>>>>>>>>>was > > > >>>>>>>>>>>>>>>>>removed > > > >>>>>>>>>>>>>>>>>from the patch set since recent Sumit's patch removed the > > > >>>>>>>>>>>>>>>>code I > > > >>>>>>>>>>>>>>>>>fixed :-) > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>Hi, > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>can you check if patches #6 and #7 still apply after the > > > >>>>>>>>>>>>>>>>recent > > > >>>>>>>>>>>>>>>>changes in 1.11 ? We actually do use the LDAP fallback > > > >>>>>>>>>>>>>>>>now.. > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>They won't apply, but I think it is quite all right to just > > > >>>>>>>>>>>>>>>skip them. > > > >>>>>>>>>>>>>>>The purpose of these patches was to always contact GC for > > > >>>>>>>>>>>>>>>get_group > > > >>>>>>>>>>>>>>>and > > > >>>>>>>>>>>>>>>initgroups. > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>We always contact GC first at the moment and having LDAP as > > > >>>>>>>>>>>>>>>fallback > > > >>>>>>>>>>>>>>>is > > > >>>>>>>>>>>>>>>fine for groups. If there will be a member from different > > > >>>>>>>>>>>>>>>domain, we > > > >>>>>>>>>>>>>>>will just fail - but if there won't be foreign member it > > > >>>>>>>>>>>>>>>will > > > >>>>>>>>>>>>>>>work. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>Hi, > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>In general the patches look good to me but I think the first > > > >>>>>>>>>>>>>>two can be > > > >>>>>>>>>>>>>>simplified. > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>Instead of magically trying to find the base DN from the > > > >>>>>>>>>>>>>>entry's > > > >>>>>>>>>>>>>>original DN, I think we can simplify it to: > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>struct sdap_domain * > > > >>>>>>>>>>>>>>sdap_domain_get_by_dn(struct sdap_options *opts, > > > >>>>>>>>>>>>>> const char *dn) > > > >>>>>>>>>>>>>>{ > > > >>>>>>>>>>>>>> struct sdap_domain *sditer = NULL; > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> DLIST_FOR_EACH(sditer, opts->sdom) { > > > >>>>>>>>>>>>>> if (sss_ldap_dn_in_search_bases(tmp_ctx, dn, > > > >>>>>>>>>>>>>>sditer->search_bases, NULL) || > > > >>>>>>>>>>>>>> sss_ldap_dn_in_search_bases(tmp_ctx, dn, > > > >>>>>>>>>>>>>>sditer->user_search_bases, NULL) || > > > >>>>>>>>>>>>>> sss_ldap_dn_in_search_bases(tmp_ctx, dn, > > > >>>>>>>>>>>>>>sditer->group_search_bases, NULL)) { > > > >>>>>>>>>>>>>> return sditer; > > > >>>>>>>>>>>>>> } > > > >>>>>>>>>>>>>> } > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> return NULL; > > > >>>>>>>>>>>>>>} > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>Then you won't need to store the base DN, no need for the > > > >>>>>>>>>>>>>>magic > > > >>>>>>>>>>>>>>with > > > >>>>>>>>>>>>>>strstr > > > >>>>>>>>>>>>>>and the code will work even for custom search bases. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>>Hi, > > > >>>>>>>>>>>>>new patches are attached. I just added all of the search > > > >>>>>>>>>>>>>bases. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>And here's one more iteration. While working on token groups > > > >>>>>>>>>>>>patches > > > >>>>>>>>>>>>I found a bug in the first patch. I tried to shortcut using id > > > >>>>>>>>>>>>mapping even if id mapping is disabled. This made the posix > > > >>>>>>>>>>>>groups > > > >>>>>>>>>>>>unresolvable since id mapping returned an error when trying > > > >>>>>>>>>>>>to map > > > >>>>>>>>>>>>GID to SID. > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>>Thanks. See also one more attached patch I applied on top of > > > >>>>>>>>>>>yours to > > > >>>>>>>>>>>make cross-domain group resolution work. I'm still chasing > > > >>>>>>>>>>>one bug in > > > >>>>>>>>>>>fill_members that might cause some members to be not qualified, > > > >>>>>>>>>>>though. > > > >>>>>>>>>> > > > >>>>>>>>>>Hi, > > > >>>>>>>>>>ack to this patch. The problem was when you have: > > > >>>>>>>>>>group@subad : user@parentad > > > >>>>>>>>>>it did not find it. Jakub's patch fixes it. > > > >>>>>>>>>> > > > >>>>>>>>>>There is still one problem that was introduce by the change of > > > >>>>>>>>>>sdap_domain_get_by_dn to search bases instead of string > > > >>>>>>>>>>comparison. > > > >>>>>>>>>> > > > >>>>>>>>>>We have domains: > > > >>>>>>>>>>ad.pb -> sub.ad.pb > > > >>>>>>>>>> > > > >>>>>>>>>>Search bases: > > > >>>>>>>>>>ad.pb: dc=ad,dc=pb > > > >>>>>>>>>>sub.ad.pb: dc=sub,dc=ad,dc=pb > > > >>>>>>>>>> > > > >>>>>>>>>>User: > > > >>>>>>>>>>cn=user,dc=sub,dc=ad,dc=pb > > > >>>>>>>>>> > > > >>>>>>>>>>This user belongs to sub.ad.pb but its dn match with > > > >>>>>>>>>>dc=ad,dc=pb and > > > >>>>>>>>>>as a result we will assign him to domain ad.pb. > > > >>>>>>>>>> > > > >>>>>>>>>>We can either swap back to my original patches or tune > > > >>>>>>>>>>sss_ldap_dn_in_search_bases() so it returns expected result > > > >>>>>>>>>>for this > > > >>>>>>>>>>situation (it will require all dc parts to match). > > > >>>>>>>>> > > > >>>>>>>>>I would prefer the latter. Just remove the RDN and return true > > > >>>>>>>>>only if > > > >>>>>>>>>the rest matches. > > > >>>>>>>> > > > >>>>>>>>Comparing only the part after RDN is not sufficient. > > > >>>>>>>> > > > >>>>>>>>dn: cn=Joe,cn=Manager,cn=Users,dc=example,dc=com > > > >>>>>>>>rdn: cn=Joe > > > >>>>>>>>search base: dc=example,dc=com > > > >>>>>>>> > > > >>>>>>>>strcmp(cn=Manager,cn=Users,dc=example,dc=com, dc=example,dc=com) > > > >>>>>>>>!= 0 > > > >>>>>>>> > > > >>>>>>>>We would have to use similar "magic" to locate domain part of > > > >>>>>>>>both dn > > > >>>>>>>>that you did not like. > > > >>>>>>> > > > >>>>>>>Well, the main reason I didn't like the original patches was that > > > >>>>>>>they > > > >>>>>>>were hardcoding "DC=". Sure, that works for AD, but I don't like > > > >>>>>>>these > > > >>>>>>>hacks in the generic LDAP code. > > > >>>>>>> > > > >>>>>>>Could we modify sdap_domain_get_by_dn() so that it would try to > > > >>>>>>>match as > > > >>>>>>>much as possible? > > > >>>>>>> > > > >>>>>>>btw latest patches based on your patchset are attached. I added two > > > >>>>>>>fixes in the NSS responder that I needed to get getent reporting > > > >>>>>>>the > > > >>>>>>>right members. > > > >>>>>> > > > >>>>>>We agreed with Jakub to go with original approach for the moment. > > > >>>>>>Here > > > >>>>>>is the current working patchset. The latest Jakub's patch contains > > > >>>>>>a bug > > > >>>>>>when no members are printed. We didn't find the root of this bug > > > >>>>>>yet, > > > >>>>>>but we need to leave it for a fresh day. > > > >>>>> > > > >>>>>And one more time, now with Sumit's note addressed. > > > >>>> > > > >>>>I have filed a ticket for fixing the nss responder - > > > >>>>https://fedorahosted.org/sssd/ticket/2131 > > > >>>> > > > >>>>And one more to improve detecting the search bases - > > > >>>>https://fedorahosted.org/sssd/ticket/2132 > > > >>>> > > > >>>>I bypassed triage and put them directly to the 1.11.x bucket as they > > > >>>>improve on existing feature. > > > >>> > > > >>>The testing itself went fine, but patch #1 didn't even compile. > > > >>>Attached > > > >>>are patches after I amended them, only patch #1 changed. > > > > > > > >Thanks. I forgot to commit this change. > > > > > > > >> > > > >>After sdap_domain_get_by_dn() is called it is always checked if NULL is > > > >>returned and if yes the current domain is set. Maybe it would make the > > > >>code easier if a default return value is added to the parameter list of > > > >>sdap_domain_get_by_dn(). > > > > > > > >I don't think so. We are searching for an sdap_domain that is converted > > > >to sss_domain_info by caller. The default sdap domain is not available > > > >in the code that references this function so we would have to amend the > > > >code in order to obtain it and pass it to sdap_domain_get_by_dn() (more > > > >code) or hard code sdap_domain_get_by_dn() to return the head of sdap > > > >domain list (not nice). > > > > > > > >I think it is better this way, that it returns NULL if it cannot match > > > >dn with domain and let the caller decide how to continue. > > > > > > > >>I think we should mention somewhere that cross domain group memberships > > > >>are supported but will currently only work for AD GC lookups or other > > > >>environments which use dc=-style based DNs. > > > > > > > >Well, since we don't support other subdomains than AD I don't think it > > > >is needed. Such documentation may actually imply that we support other > > > >LDAP servers as subdomains as well. > > > > > > > >>If the DLIST_FOR_EACH loop in sdap_nested_member_is_ent() is never run > > > >>ret is uninitialized. > > > > > > > >Nice catch, I amended Jakub's patch. > > > > > > I reworked the first patch and put the huge branch into separate > > > function. See if you like it. > > > > > > If not, I need to send another version of the original since it > > > unfortunately contains two bugs that I found now - didn't free sid > > > obtained from idmap and didn't set errno to zero before calling > > > strtouint. > > > > > > > > > > I like the new one better and didn't found any regression during my > > testing, so ACK. > > > > bye, > > Sumit > > I haven't found any bug in the patches either (just the issue with the > ad_filter) so ack++ > > For the record, I tested: > getent passwd user@root.domain > getent passwd user@sub.domain > getent group gr@root.domain (mixed membership) > getent group gr@sub.domain (mixed membership) > id user@root.domain (mixed membership) > id user@sub.domain (mixed membership)
Pushed the whole patchset to master and sssd-1-11 _______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/sssd-devel