On Mon, 2016-03-07 at 18:40 +0100, Lukas Slebodnik wrote:
> On (07/03/16 11:29), Simo Sorce wrote:
> >On Mon, 2016-03-07 at 16:58 +0100, Lukas Slebodnik wrote:
> >> On (04/03/16 16:42), Simo Sorce wrote:
> >> >On Fri, 2016-03-04 at 21:27 +0100, Lukas Slebodnik wrote:
> >> >> On (02/03/16 10:02), Simo Sorce wrote:
> >> >> >On Wed, 2016-03-02 at 15:34 +0100, Lukas Slebodnik wrote:
> >> >> >> On (01/03/16 18:28), Simo Sorce wrote:
> >> >> >> >On Tue, 2016-03-01 at 18:22 -0500, Simo Sorce wrote:
> >> >> >> >> On Tue, 2016-03-01 at 22:34 +0100, Lukas Slebodnik wrote:
> >> >> >> >> > On (01/03/16 12:05), Simo Sorce wrote:
> >> >> >> >> > >On Tue, 2016-03-01 at 17:51 +0100, Lukas Slebodnik wrote:
> >> >> >> >> > >> On (01/03/16 17:45), Lukas Slebodnik wrote:
> >> >> >> >> > >> >On (31/01/16 11:53), Simo Sorce wrote:
> >> >> >> >> > >> >>Expired != Disabled
> >> >> >> >> > >> >>this change is intentional.
> >> >> >> >> > >> >>
> >> >> >> >> > >> >Yes, but explain it to Active directory :-)
> >> >> >> >> > >> >
> >> >> >> >> > >> >Attached is patch with workaround/hack
> >> >> >> >> > >> >regression with expired AD users.
> >> >> >> >> > >> >
> >> >> >> >> > >> ENOPATCH
> >> >> >> >> > >>
> >> >> >> >> > >> LS
> >> >> >> >> > >
> >> >> >> >> > >I think a better approach is to return the KRBKDC error from 
> >> >> >> >> > >the child
> >> >> >> >> > >without mapping (or with an intermediate mapping) and have the 
> >> >> >> >> > >IPA and
> >> >> >> >> > >AD providers map it on their own.
> >> >> >> >> > >
> >> >> >> >> > It's not related to mapping KRBKDC error codes to internal 
> >> >> >> >> > error code.
> >> >> >> >> > The main problem is that AD return the same error code for 
> >> >> >> >> > expired
> >> >> >> >> > and disabled user. And ad provider used generic krb5 functions.
> >> >> >> >> >
> >> >> >> >> > BTW the same issue would be with id_provider ldap +
> >> >> >> >> > auth_provider = krb5 with AD :-(
> >> >> >> >> > I'm not sure how your proposal would help.
> >> >> >> >>
> >> >> >> >> I think AD returns additional information in edata, maybe we can 
> >> >> >> >> use
> >> >> >> >> that to do the proper mapping in the generic krb5 code.
> >> >> >> >>
> >> >> >> >> Absence of AD specific edata would indicate MIT mapping, presence 
> >> >> >> >> would
> >> >> >> >> allow us to use that additional data to figure out the correct 
> >> >> >> >> mapping.
> >> >> >> >>
> >> >> >> >> Simo.
> >> >> >> >>
> >> >> >> >
> >> >> >> >See MS-KILE[1] 2.2.1, I bet the two conditions returns two different
> >> >> >> >windows Style errors in etext (not edata, sorry).
> >> >> >> >
> >> >> >> >[1] https://msdn.microsoft.com/en-us/library/cc233855.aspx
> >> >> >> >
> >> >> >> Interesting idea and it seems to work.
> >> >> >> The main difference was in time and last octet string.
> >> >> >> * response for expired user [2]
> >> >> >>    the last octet string in ASN:
> >> >> >>       930100C00000000001000000
> >> >> >
> >> >> >This is error C0000193 aka NT_STATUS_ACCOUNT_EXPIRED NT_STATUS
> >> >> >https://git.samba.org/?p=samba.git;a=blob;f=libcli/util/ntstatus.h;h=572093b431d80c9e12461255d01063412bbfa5b5;hb=HEAD#l494
> >> >> >
> >> >> >> * response for disabled user [3]
> >> >> >>    the last octet string in ASN:
> >> >> >>       720000C00000000001000000T
> >> >> >
> >> >> >This is error C0000072, aka NT_STATUS_ACCOUNT_DISABLED NT_STATUS
> >> >> >https://git.samba.org/?p=samba.git;a=blob;f=libcli/util/ntstatus.h;h=572093b431d80c9e12461255d01063412bbfa5b5;hb=HEAD#l211
> >> >> >>
> >> >> >> The only question is how to get etext from krb5 response.
> >> >> >> I do not want to implement ASN.1 parser.
> >> >> >
> >> >> >We use asn1c in FreeIPA if we need to generate a parser, but I do not
> >> >> >think we need to get that far.
> >> >> >The main issue is whether the krb5 fucntions let us get access to the
> >> >> >etext data at all, it seem buried pretty low in the internal of krb5.
> >> >> >
> >> >> It took me a while to find out why my patch broke password change
> >> >> then I realized I have unused argument in_tkt_service
> >> >> in my version of krb5_get_init_creds_password.
> >> >> We might enable gcc warning Wunused-argument :-)
> >> >>
> >> >> Please review attached patch.
> >> >
> >> >There is a difference between using krb5_get_init_creds_password() and
> >> >the function you created in that the krb5 native API actually retries by
> >> >locating a KDC master server if the initial attempt fails and the KDC
> >> >that was contacted is not a master KDC.
> >> >
> >> >Is that functionality we want to preserve ?
> >> >
> >> There were variuos responses on IRC.
> >> 06:43 < ab> lslebodn: I think it is better to have the same logic
> >> 06:43 < ab> lslebodn: the difference is going to hurt us in hard to debug 
> >> cases
> >> 06:45 < sbose> lslebodn, I think it is ok to drop this addtional lookup for
> >>                the master KDC. AD does not support this notion at all and 
> >> if
> >>                I understand it correctly IPA adds the related DNS SRV 
> >> records
> >>                but does treats them the same as the default ones. There 
> >> might
> >>                be only one item to consider. SSSD's krb5 locator plugin 
> >> will
> >>                return the address of krb5_kpasswd if there is a
> >>                seperate one defined in sssd.conf if the address of
> >> 06:45 < sbose> the master KDC is requested. A setup which relies on this as
> >>                a cheap fallback method might break by this change.
> >>                Unfortunately it looks like there is no public API in 
> >> libkrb5
> >>                which allows to specify if the master KDC should be used or 
> >> not,
> >>                so there is no chance to add this feature back.
> >> 06:47 < lslebodn> sbose: I could call original function fot this case
> >> 06:53 < sbose> lslebodn, yes, but this would break the expired/disabled
> >>                detection if krb5_kpasswd is used with the AD provider. If 
> >> we
> >>                want to keep the old behavior I think it would be better to
> >>                add an option to switch between 
> >> krb5_get_init_creds_password()
> >>                and sss_krb5_get_init_creds_password() and use
> >>                sss_krb5_get_init_creds_password() as new default.
> >> 07:57  * RootWyrm_ awakens.
> >> 08:05 < RootWyrm_> lslebodn: oh, I see what he's asking. Not to be contrary
> >>                    for being contrary, but personally I would prefer to see
> >>                    retry retained. In slow replication scenarios (e.g.
> >>                    remote offices) a retry may be necessary for valid 
> >> reasons.
> >> 
> >> I might to agree that it would be good to preserve old behaviour.
> >
> >I might agree for pure MIT environments it may be helpful, but in the
> >AD/IPA cases I think the retry is a no-op because every server is
> >considered a master (or no masters exist at all in DNS SRV records).
> >
> Yes but change is done in krb5_child which is common
> for all cases (AD, IPA, pure MIT)
> 
> >Also th check for the master may cause synchronous DNS lookups that can
> >cause delays even when there is no reason to get that data (bacause the
> >call was successful).
> >
> >So the more I think of it the more I am in favor of using your code.
> >
> :-)
> 
> >At most we can try to call the original code again with some specific
> >error conditions that causes a retry in the original code, but I am not
> >convinced we should.
> >In that case it does not matter that we can't interpret the AD specific
> >error codes, because if those errors are returned by our own call we
> >will never fallback to the original call and we expect different errors
> >in that case.
> >
> >> I thought it would be a simpler solution which could be backported to
> >> stable branch sssd-1-13. But it's going to be more complicated :-)
> >
> >We may want to put this in master only for now, indeed.
> >
> >> Because your patch introduced error code which is used to fix ticket #2839.
> >> 
> >> I think it would be better to rever yourt patch in downstream and
> >> backport just an error code e.g.
> >> https://git.fedorahosted.org/cgit/sssd.git/commit/?id=af717c5b022d5c28141333fc02d5d9e1f322505c
> >
> >Why revert the patch ?If you do so the other half of setups will get an
> >error, either way some setup is broken.
> >
> I need to elaborate here.
> Your patch is correct and was pushed only to master
> but we backported your patch to downstream (1.13).
> I meant revert/remove your patch in downstream (1.13).
> and push just error code af717c5b022d5c28141333fc02d5d9e1f322505c
> to downstream.

I'll let you and Jakub decide what goes into the stable and downstream
releases.

> >> I will file a tracter ticket for AD expired, disabled users
> >> in master branch(future sssd-1.14)
> 
> LS


-- 
Simo Sorce * Red Hat, Inc * New York
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to