On Mon, Jun 23, 2014 at 08:52:53PM -0400, Yassir Elley wrote:
> 
> 
> ----- Original Message -----
> > On Thu, Jun 19, 2014 at 03:06:04PM -0400, Yassir Elley wrote:
> > > 
> > > 
> > > ----- Original Message -----
> > > > On Wed, Jun 18, 2014 at 01:50:17PM -0400, Yassir Elley wrote:
> > > > > 
> > > > > 
> > > > > ----- Original Message -----
> > > > > > On Tue, Jun 17, 2014 at 04:44:20PM -0400, Yassir Elley wrote:
> > > > > > > 
> > > > > > > 
> > > > > > > ----- Original Message -----
> > > > > > > > 
> > > > > > > > 
> > > > > > > > ----- Original Message -----
> > > > > > > > > On Sun, Jun 15, 2014 at 07:08:55PM -0400, Yassir Elley wrote:
> > > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > * You suggested using the name of the DC that SSSD is
> > > > > > > > > > currently
> > > > > > > > > > connected
> > > > > > > > > > to in the smb uri (rather than the domain.name, which will
> > > > > > > > > > require
> > > > > > > > > > libsmbclient to perform a DNS resolution). Is there an easy
> > > > > > > > > > way
> > > > > > > > > > to
> > > > > > > > > > get
> > > > > > > > > > the
> > > > > > > > > > name of the DC that SSSD is currently connected to? I am
> > > > > > > > > > having
> > > > > > > > > > trouble
> > > > > > > > > > finding it.
> > > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > In struct ad_gpo_access_state you have a member struct
> > > > > > > > > sdap_id_conn_ctx
> > > > > > > > > *conn. conn->service->uri is the LDAP uri for the current
> > > > > > > > > connection.
> > > > > > > > > You can use calls from OpenLDAP or ldb to split it into
> > > > > > > > > components,
> > > > > > > > > picj
> > > > > > > > > the hostname and create the smb uri.
> > > > > > > > > 
> > > > > > > > > In general the uri should always be available since you read
> > > > > > > > > the
> > > > > > > > > GPO
> > > > > > > > > data from LDAP before doing the smb operations. Nevertheless
> > > > > > > > > you
> > > > > > > > > can
> > > > > > > > > call be_resolve_server_send() to make sure it is set, see e.g.
> > > > > > > > > auth_get_server() how to use it.
> > > > > > > > > 
> > > > > > > > > HTH
> > > > > > > > > 
> > > > > > > > > bye,
> > > > > > > > > Sumit
> > > > > > > > > _______________________________________________
> > > > > > > > > sssd-devel mailing list
> > > > > > > > > sssd-devel@lists.fedorahosted.org
> > > > > > > > > https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
> > > > > > > > > 
> > > > > > > > 
> > > > > > > > I have attached a revised patch that modifies the smb uri to use
> > > > > > > > the
> > > > > > > > server
> > > > > > > > name rather than the domain name.
> > > > > > > > 
> > > > > > > > Thanks,
> > > > > > > > Yassir.
> > > > > > > > _______________________________________________
> > > > > > > > sssd-devel mailing list
> > > > > > > > sssd-devel@lists.fedorahosted.org
> > > > > > > > https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
> > > > > > > > 
> > > > > > > 
> > > > > > > Oops. Forgot to attach the patch.
> > > > > > > 
> > > > > > > Yassir.
> > > > > > 
> > > > > > Thank you, the patch is working as expected and now uses the 
> > > > > > hostname
> > > > > > to
> > > > > > connect to the DC. But please use e.g. ldap_url_parse() from 
> > > > > > OpenLDAP
> > > > > > to
> > > > > > split the url and take the hostname from the lud_host member of
> > > > > > typedef
> > > > > > struct ldap_url_desc. The LDAP url can contain port numbers which
> > > > > > would
> > > > > > currently cause troubles with your scheme.
> > > > > >
> > > > > > As a general comment, please try to split your patches into smaller
> > > > > > units. This would help to review them especially to compare multiple
> > > > > > versions of a patch.
> > > > > 
> > > > > I thought you had previously indicated a preference for a single patch
> > > > > (with the understanding that this makes it more difficult for the
> > > > > reviewer). Perhaps I misunderstood. In any case, I have attached two
> > > > > patches to this email: the previous patch, and a new patch to address
> > > > > your
> > > > > comment about using ldap_url_parse().
> > > > > 
> > > > > > 
> > > > > > I have not looked at the child code in details yet, but I would like
> > > > > > to
> > > > > > suggest a change in the workflow. I think the child should only
> > > > > > download
> > > > > > the gpo file and save it at some place, e.g. /var/lib/sss/gpo_cache/
> > > > > > and
> > > > > > then the backend will read an process it. This way you already have
> > > > > > the
> > > > > > file available in the offline case. When calling the child the
> > > > > > backend
> > > > > > should provide the smb url and a location to store the result. The
> > > > > > child
> > > > > > can e.g. return a checksum for the file which the backend can save
> > > > > > together with the download time in the sysdb cache in a subtree 
> > > > > > below
> > > > > > cn=custom (grep sysdb.h for 'custom' to find the related sysdb
> > > > > > calls).
> > > > > > With the download time it would be even possible to specific cache
> > > > > > lifetime during which the gpo file will not be downloaded again to
> > > > > > save
> > > > > > bandwidth. But this should be optional.
> > > > > > 
> > > > > > What do you think?
> > > > > > 
> > > > > > bye,
> > > > > > Sumit
> > > > > > _______________________________________________
> > > > > > sssd-devel mailing list
> > > > > > sssd-devel@lists.fedorahosted.org
> > > > > > https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
> > > > > > 
> > > > > 
> > > > > With regard to your suggestion to store the policy data in a local
> > > > > file (and store the file's metadata in the cache), I think it would be
> > > > > preferrable to have the child parse the file, and store the relevant
> > > > > data/metadata directly to the cache. I believe this is how IPA HBAC
> > > > > currently works (i.e. storing to cache, rather than to file). This
> > > > 
> > > > yes, but the original IPA HBAC data comes from a LDAP tree so storing it
> > > > to the cache which has LDAP semantics as well is natural.
> > > > 
> > > > > would allow the file parsing to be done once (when it is written by
> > > > > the child), rather than the file parsing being done every time the
> > > > > policy is processed (when it is read by the backend). Additionally,
> > > > 
> > > > That's a good point. Maybe be can do both, the child just reads and
> > > > saves the file and the backend parses it once and save the access
> > > > control data to the cache so that it has to parse the file again only
> > > > when a new version is read by the child.
> > > > 
> > > > > keep in mind that we are interested in only a subset of the stanzas
> > > > > (i.e. "Privilege Rights" stanza) in the Security Settings policy file
> > > > > (GptTmpl.inf). In other words, only a small portion of the file
> > > > > contains data that is relevant for us.
> > > > 
> > > > yes, nevertheless I'd like to keep the file around. E.g. it would help
> > > > to make debugging easier because we do not have to tell users how to
> > > > download the file from the server to check to content. Additionally
> > > > other application might be interested in the content as well (they can
> > > > even ensure that the version of the file is recent by calling
> > > > pam_acct_mgmt() which would trigger the access provider in the SSSD
> > > > backend, I agree that this is not the nicest solution :-).
> > > > 
> > > > > 
> > > > > For this initial patch, I am having the child return the allowed_sids
> > > > > and denied_sids to the backend for further processing. However, in
> > > > > subsequent patches, I am planning on having the child store the
> > > > > relevant policy data to the cache, and then have the backend retrieve
> > > > > the relevant policy data from the cache. In other words, the proposed
> > > > > logic for future patches is:
> > > > > * if we are online, the backend calls the child (which stores the
> > > > > parsed
> > > > > data to cache)
> > > > > * regardless of whether we are online or offline, the backend 
> > > > > retrieves
> > > > > the
> > > > > parsed data from the cache and makes a policy decision.
> > > > 
> > > > Please do not read/write form/to the cache from the child. So far we
> > > > tried to limit the child processes to only do what is blocking and
> > > > cannot be one in an asynchronous ways. Currently this are mostly
> > > > Kerberos related operations like getting TGTs or updating DNS with
> > > > GSS-TSIG.
> > > 
> > > You cite two reasons to save the policy data as a local file:
> > > 1) to have the local file available as an artifact for debugging and/or
> > > consumption by other applications.
> > > 2) to keep processing in the child to the bare minimum (i.e. the child
> > > shouldn't cache the policy data)
> > > 
> > > The first reason doesn't seem very compelling IMO. It is unclear to me why
> > > being able to consult the policy file (which includes lots of extraneous
> > > policy data) would be better than simply relying on the debug logs (which
> > > contain only the relevant policy data). Also, I am not aware of any
> > > applications (other than the sssd-ad provider) that are planning on using
> > > this policy data. Do you have particular application(s) in mind? The
> > > second reason is more compelling. However, if we have the child retrieve
> > > the data, parse the data, and return the parsed data to the backend, then
> > > the child would not need to interact with the cache (i.e. only the backend
> > > would interact with the cache).
> > > 
> > > The reason I am pushing back on the suggestion to store the data to a file
> > > is that it adds complexity without clear benefits IMO (unless I am missing
> > > something). For example, if we agree that the backend should parse the
> > > data and store it to cache anyway (at least when there is a new version),
> > > why not save the step of writing to a local file, by having the child
> > > parse the data, and having the backend store the data to cache.
> > > Additionally, exposing the *entire* contents of the policy file for
> > > debugging purposes, when we are only using a few fields, seems like it
> > > would only confuse users.
> > 
> > What about the third one about other applications. Since SSSD is already
> > doing the work of figuring out which GPOs apply to the host and loading
> > the data why not making the data available to others?
> 
> OK. I agree that this is compelling enough to use a file-based approach.
> 
> > 
> > > 
> > > > 
> > > > > 
> > > > > With regard to reducing unnecessary downloads, I am planning on
> > > > > implementing the logic suggested by [MS-GPOL] of comparing the cached
> > > > > gpo version against the current gpo version (by downloading only the
> > > > > GPT.INI file). If the gpo versions are the same, there is no need to
> > > > > download the policy file. Again, this is intended for a subsequent
> > > > > patch.
> > > > 
> > > > I think the term 'bandwidth' was not chosen well in my comment. I'm not
> > > > much concerned by the actual download itself but the general costs
> > > > including creating the connection, doing Kerberos authentication etc.
> > > > Please note that Windows client might stay connected to the sysvol and
> > > > might have some clever mechanism to make it cheap to check GPT.INI every
> > > > time. I think from our point of view just reading GPT.INI or reading
> > > > GptTmpl.inf shouldn't make much difference in the general case. So I
> > > > still would suggest to introduce an SSSD specific timeout. But I won't
> > > > mind checking GPT.INI as well. So the version of the policy should be
> > > > written to the cache as well and send to the child so that it first can
> > > > download GPT.INI and check if the version changed. If the version has
> > > > not changed it should indicate this to the backend so that it know it
> > > > does not has to read and parse the policy file (if we agree that the
> > > > backend should do this :-).
> > > 
> > > In addition to the GPT.INI check, I agree that adding an SSSD specific
> > > timeout could be useful. Additionally, the backend should probably send
> > > *all* the guid-filtered GPOs to the child at once (so that the child can
> > > create a single smb connection, and re-use it for retrieving all the
> > > relevant GPT.INI and GptTmpl.inf files). What do you think?
> > > 
> 
> I think my concern about performance could just be based on my current design 
> of the gpo_child. Currently, for *each* smb_uri, I fork/exec a new gpo_child 
> process, send it the smb_uri, have it create an smb connection, perform the 
> smb retrieval, return some data, and then exit the gpo_child process. If 
> gpo-ldap determines that multiple gpos are applicable, the current design 
> could be problematic, as it requires multiple gpo_child processes to be 
> spawned and killed (i.e. one gpo_child process per smb_uri). I am only using 
> this design b/c that is how the ldap_child and krb5_child seem to operate.
> 
> Perhaps a better approach would be: to continue to call the gpo_child 
> separately for each smb_uri, but to only launch a single gpo_child process to 
> handle all the gpos related to a single policy application. This would do 
> away with spawning multiple processes; it would also allow the single 
> gpo_child to create and maintain a single SMB connection, at least for the 
> duration of a single policy application. Does this fit in with the design 
> philosophy of minimalist child processes? Or would it be preferrable to just 
> stay with launching a new child process for each smb_uri?
> 

yes, all needed policy files should be loaded in a single run by a
single process.

> >
> >
> 
> On a separate topic, I am wondering if we should complete the review of the 
> current patch and push it to master, before I potentially add a file-based 
> approached and/or an enhanced gpo_child design. This would keep the current 
> patch from growing even bigger. Also, the current patch produces correct 
> results, so others could play with it (even if we are planning on changing to 
> a file-based approach later on). What do you think?

I think it's ok. I'm not sure if I can finish the review today, if not
I'll be done tomorrow.

bye,
Sumit

> 
> Regards,
> Yassir.
> _______________________________________________
> 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