On Thu, Jan 31, 2013 at 11:32:21AM -0500, Simo Sorce wrote:
> On Thu, 2013-01-31 at 16:40 +0100, Sumit Bose wrote:
> > On Thu, Jan 31, 2013 at 09:43:09AM -0500, Simo Sorce wrote:
> > > On Thu, 2013-01-31 at 10:49 +0100, Sumit Bose wrote:
> > > > Hi,
> > > > 
> > > > I have created a design page for
> > > > https://fedorahosted.org/sssd/ticket/1032 "[RFE] sssd should support DNS
> > > > sites" at
> > > > https://fedorahosted.org/sssd/wiki/DesignDocs/ActiveDirectoryDNSSites .
> > > > It can be found below as well.
> > > > 
> > > > Corrections, comments and enhancements are welcome.
> > > 
> > > Good start, comments inline!
> > > 
> > 
> > 
> > > > struct tevent_req *resolv_getsrv_site_send(TALLOC_CTX *mem_ctx,
> > > >                                            struct tevent_context *ev,
> > > >                                            struct resolv_ctx *ctx,
> > > >                                            struct site_ctx *site_ctx,
> > > >                                            const char *service,
> > > >                                            const char *domain);
> > > 
> > > I do not think you should have a site_ctx and a resolv_ctx, one or the
> > > other.
> > > If you added site_ctx with the idea of calling this function recursively
> > > then I would object to that, you should have a higher level internal
> > > public function that does the whole processing and an internal private
> > > one that is called multiple times and conceal internal requirements.
> > 
> > no, I didn't plan to use it recursively. The idea was to have both of
> > the functions you suggested in one. If site_ctx is NULL,
> > resolv_getsrv_site_send() will do get_site and then srv_by_site. The
> > found site is returned with the corresponding _recv() call so that in
> > later lookups the get_site step can be skipped.
> > 
> > If the provider goes offline the saved site_ctx will be deleted so that
> > the get_site step is done again when the provider goes online again.
> > 
> > Instead of using a plain char * for the site I took a struct to safe
> > e.g. the nearest site, if available, to have a better fallback step then
> > just Default-First-Site-Name.
> 
> I see your point but my concern is with site_ctx being 'magic' in that
> you can pass NULL at any time to cause a new site discovery and you are
> supposed to keep it around, but then offline operation may delete it.
> I see a clear risk that at some point you will have a dangling pointer
> to a since deleted site_ctx.
> 
> I am thinking we should probably have a more permanent context that has
> setters to invalidate their internal state when offline happens.
> 
> This way the pointer is always valid and can be passed around safely and
> store on some long term upper context.
> 
> Btw while looking at this is seem that the resolv_ctx could be this long
> term context already (so no need for explicit site_ctx, just add a sub
> struct in resolv_ctx), and is initialized in data_provider_fo.c in
> be_init_failover() which is called from be_process_init().

I was more thinking of making this a member of the main IPA and AD
provider context. From my point of view resolv_ctx is for the low level
DNS lookups while the site concept is specific for the AD.
> 
> Unfortunately for some reason resolv_init() is also called by
> sdap_sudo_hostname_send() and ipa_dydndns_init(), I can't understand
> why, bug ?
> 
> > > 
> > > Also I do not know that we really need to specify the service.
> > 
> > I thought it is all about finding a specific service in a site?
> 
> This statement was meant in the context of splitting your function in 2,
> one to find the site (where service need not be specified) and then one
> function to find the actual service.
> 
> But if we conceal site discovery into resolv_ctx, we can simply avoid a
> new separate interface altogether.
> 
> We simply add site support to the resolver library through a module and
> let all current calls be 'magically' made site aware.
> We might need to change calls that specify SRV searches so that we
> separate Service and Domain, but I think that would be a better
> architecture as we can abstract away how we do resolve stuff into a
> module of the resolver.
> 
> This way when we later add an IPA location discovery mechanism we do not
> have to change anything in the common code, we just plug in a different
> resolver plugin for 'location' discovery for the ipa domain case.
> 
> and we can actually mix both as long as we make the 'site/location'
> plugin domain bound (hence why we need to split service and domain
> arguments in requests so each request can be bound to the correct site
> discovery code.

I have to think about it. It certainly would make code reuse much easier
but I wonder this really works in complex setup with multiple IPA and AD
domains.

> 
> 
> > > 
> > > > ==== Finding a DC for the CLDAP ping ====
> > > > To find any DC in the domain a Windows client, and samba as well, look
> > > > for a _ldap._tcp service record. The only difference is that samba
> > > > uses a plain _ldap._tcp.domain.name while a Windows client
> > > > _ldap._tcp.Default-First-Site-Name._sites.dc._msdcs.domain.name. I
> > > > guess it will fall back to _ldap._tcp.domain.name if the other name
> > > > cannot be resolved. I would suggest to use _ldap._tcp.domain.name for
> > > > the SSSD implementation.
> > > 
> > > Why ? Using the Default-First-Site-Name one is technically more correct
> > > when multiple sites are in use.
> > 
> > Will this return all DCs or only the ones that are not assigned to a
> > specific site?
> 
> Good question, but if the site exists it is the 'default' one we
> should  ..well ... default to.
> 
> > I just thought _ldap._tcp.domain.name will return a
> > larger number of DCs to choose from?
> 
> This is actually a problem, you may end up trying to access a DC in
> Antractica over a Geosynchronous satellite link. I do not think you want
> to ever do that unless you live in Antractica :) 
> 
> > But I'm not against using the Default-First-Site-Name one here.
> 
> I think it should be the default fallback if nothing can be obtained by
> a CLDAP ping. 

sure, but this is about how to find a DC to send the CLDAP ping to.

> > Besides that, you mentioned localized version of
> > Default-First-Site-Name. Would this be an argument against using it?
> 
> No, it is an argument about not assuming the name, but picking the right
> one from the CLDAP ping. If the CLDAP ping times out it is ok to 'try'

this is a step before, can
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs.domain.name be used
to find a DC to send the CLDAP ping. E.g. according to
http://social.technet.microsoft.com/Forums/da/winserverNIS/thread/2afc3cf5-7389-4368-bdeb-887e60c0081f
the name can be changed. So chances are that the above request will not
return anything. So I guess even if the first returned address from a
_ldap._tcp.domain.name request is the DC on the Mars rover, the first
CLDAP ping will timeout and we send a second one to the second address.
It's only a single UPD packet and the response will fit into a single
packet, too

> it, worst case we get back an error and further fallback to searching
> SRV records w/o any site component in the name at all.
> However I think it is also 'possibly' an argument for having an option
> to set what is the site sssd should be bound to. A way to force it.
> Just for those cases where sites can be resolved via DNS but CLDAP is
> filtered (think VPN access or something).
> If an option with a specific site is present, that specific site should
> be immediately tried before everything else. If it fails then the usual
> discovery mechanism should be used.

I agree that such an option make sense, but I would use it differently.
If you try immediately then chances are that you always talk to your
home site which might be bad for roaming users. I would suggest to use
it as the fallback if the CLDAP ping fails.

bye,
Sumit
> 
> 
> Simo.
> 
> -- 
> Simo Sorce * Red Hat, Inc * New York
> 
> _______________________________________________
> sssd-devel mailing list
> sssd-devel@lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to