On Tue, Mar 22, 2011 at 02:09:27PM -0400, Stephen Gallagher wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On 03/21/2011 04:24 PM, Sumit Bose wrote:
> > On Thu, Mar 17, 2011 at 05:25:55PM -0400, Stephen Gallagher wrote:
> > On 03/16/2011 02:07 PM, Simo Sorce wrote:
> >>>> On Wed, 16 Mar 2011 13:28:20 -0400
> >>>> Stephen Gallagher <sgall...@redhat.com> wrote:
> >>>>
> >>>>> -----BEGIN PGP SIGNED MESSAGE-----
> >>>>> Hash: SHA1
> >>>>>
> >>>>> Fixes https://fedorahosted.org/sssd/ticket/818
> >>>>>
> >>>>> Patch 0001: Create sysdb_get_rdn() function
> >>>>> This function takes a DN formatted string and returns the RDN
> >>>>> value from it.
> >>>>
> >>>> Nack, please return both the value and the attribute name
> >>>>
> >>>>> Patch 0002: Add sysdb_attrs_primary_name()
> >>>>> This function will check a sysdb_attrs struct for the primary name
> >>>>> of the entity it represents. If there are multiple entries, it
> >>>>> will pick the one that matches the RDN. If none match, it will
> >>>>> throw an error.
> >>>>
> >>>> Nack please the attribute used in the RDN matches before checking the
> >>>> values.
> >>>>
> >>>>> Patch 0003: Handle multi-valued usernames correctly
> >>>>> Users in ldap with multiple values for their username attribute
> >>>>> will now be compared against the RDN of the entry to determine the
> >>>>> "primary" username. We will save all of the alternate names to the
> >>>>> ldb cache as well, so a lookup for any of them will return the
> >>>>> values for the primary name.
> >>>>> e.g.
> >>>>> getent passwd altusername
> >>>>> primaryuser:*:800014:800014:primaryuser:/home/primaryuser:/bin/sh
> >>>>
> >>>> Nack, turning SYSDB_NAME form a single valued attribute (as used
> >>>> throughout the code) to a multivalued attribute is a very dangerous
> >>>> proposition IMO.
> >>>>
> >>>> Although the current version of LDB always ends up returning values in
> >>>> the same order, fill_pwent() and other functions seem to be working
> >>>> only by accident now.
> >>>>
> >>>> I would rather use a different attribute name for aliases.
> >>>> This assuming we really want to allow aliases, I am personally still
> >>>> unconvinced it is a good idea. I would rather throw aliases away and
> >>>> allow only the canonical name to be stored in our cache.
> >>>>
> >>>>> Patch 0004: RFC2307: Handle multi-valued group names correctly
> >>>>> Groups in ldap with multiple values for their groupname attribute
> >>>>> will now be compared against the RDN of the entry to determine the
> >>>>> "primary" group name. We will save all of the alternate names to the
> >>>>> ldb cache as well, so a lookup for any of them will return the
> >>>>> values for the primary name.
> >>>>> e.g.
> >>>>> getent group altgroup
> >>>>> primarygroup:*:800014:member1,member2
> >>>>>
> >>>>> Patch 0005: RFC2307bis: Handle multi-valued group names correctly
> >>>>> Groups in ldap with multiple values for their groupname attribute
> >>>>> will now be compared against the RDN of the entry to determine the
> >>>>> "primary" group name. We will save all of the alternate names to the
> >>>>> ldb cache as well, so a lookup for any of them will return the
> >>>>> values for the primary name.
> >>>>> e.g.
> >>>>> getent group altgroup
> >>>>> primarygroup:*:800014:member1,member2
> >>>>>
> >>>>>
> >>>>> I tested with RFC2307, RFC2307bis and FreeIPA v2 data.
> >>>>
> >>>> I think the fact you are getting back the "right" name is happening by
> >>>> accident.
> >>>> Change the code to explicitly save the aliases first and add the
> >>>> canonical name last, and I think you will see the code to fail
> >>>> consistently to give you back the canonical name.
> >>>>
> >>>> Simo.
> >>>>
> > 
> > 
> > I have made the following changes to the patches.
> > 
> >  * sysdb_get_rdn() will return both the attribute name and value of the RDN.
> > 
> >  * sysdb_attrs_primary_name() will now validate that the attribute name
> > matches the ldap_[user|group]_name value.
> > 
> >  * We will no longer attempt to save the aliases at all. Only the
> > primary name will be stored in our database.
> > 
> > 
> > There is a side-effect here that I think is probably okay, but I thought
> > I should mention it all the same. A direct request for a user or group
> > alias will always cause a cache refresh of the primary group. This is
> > because a check of our cache will return no values for this alias, so we
> > need to go to the backend to validate it.
> > 
> > This is not really an exploitable issue because we have the grouping
> > optimization that ensures that we'd only have a single lookup for this
> > alias going on at once (so the worst-case scenario is that a user could
> > force us to keep running lookups after the previous one completed).
> > 
> > A potential future solution to this would be to store the alternate
> > names in the cache with a different attribute name as a sort of
> > secondary negative cache.
> > 
> >> Patch works good, but please put the reoccurring sequence of
> >> sysdb_attrs_get_el()-sysdb_attrs_primary_name() calls into a call of its
> >> onw.
> 
> 
> 
> Thanks for the review. New patches attached makes the requested change.
> I also switched to having the sysdb_attrs_get_el() use SYSDB_NAME
> always, as that was the net effect anyway (since
> user_map[LDAP_USER_NAME].sys_name always maps to this anyway).

Still works as expected.

ACK

bye,
Sumit

> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.11 (GNU/Linux)
> Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/
> 
> iEYEARECAAYFAk2I5dYACgkQeiVVYja6o6N8SACghAtbU3ItnVT/ZqutVyBKeMcl
> v8UAn1N27FyURQvTtxMqWtCloiQ33LuT
> =d2TA
> -----END PGP SIGNATURE-----
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to