On Mon, Jul 25, 2016 at 06:18:28PM +0200, Petr Cech wrote:
> Hello,
> 
> there is fixed patch set attached.
> 
> Segmentation fault was caused by wrong pointer :-(, sorry.
> 
> This new patch set has new debug message. I am open to dissccus the
> debug_level and content of message. Any improving idea?
> 
> I hit one issue during testing -- sometimes if I am connected to subdomain
> and I enable only sibling subdomain (the master is added automaticaly) and
> forest root is not enabled -- I see only master and sibling not. But if I
> added sleep for cycle (for using dbg) to function ad_subdomains_init()
> everythink is OK.
> Any idea?

Can you test that case with valgrind? This sounds like some uninitilized
variable condition.

> 
> Anyway, I would like to ask you for testing.
> 
> Regards
> 
> -- 
> Petr^4 Čech

> From 7fd9ad8f42f274463c1d107b195d21290fd0b0f2 Mon Sep 17 00:00:00 2001
> From: Petr Cech <pc...@redhat.com>
> Date: Fri, 13 May 2016 05:21:07 -0400
> Subject: [PATCH 1/5] AD_PROVIDER: Add ad_enabled_domains option

ACK

> From dfa6e063d3ef4850a7809e2f5a6d3826ea061b27 Mon Sep 17 00:00:00 2001
> From: Petr Cech <pc...@redhat.com>
> Date: Tue, 21 Jun 2016 08:34:15 +0200
> Subject: [PATCH 2/5] AD_PROVIDER: Initializing of ad_enabled_domains
> 
> We add ad_enabled_domains into ad_subdomains_ctx.
> 
> Resolves:
> https://fedorahosted.org/sssd/ticket/2828
> ---
>  src/providers/ad/ad_subdomains.c | 82 
> ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 82 insertions(+)
> 
> diff --git a/src/providers/ad/ad_subdomains.c 
> b/src/providers/ad/ad_subdomains.c
> index 
> e9da04e384e598927f9c8c203a751bcccd29e895..9c0afb19418e44a3e3daa661baf1c7a82439d60d
>  100644
> --- a/src/providers/ad/ad_subdomains.c
> +++ b/src/providers/ad/ad_subdomains.c
> @@ -57,6 +57,79 @@
>  /* do not refresh more often than every 5 seconds for now */
>  #define AD_SUBDOMAIN_REFRESH_LIMIT 5
>  
> +static errno_t ad_get_enabled_domains(TALLOC_CTX *mem_ctx,
> +                                      struct ad_id_ctx *ad_id_ctx,
> +                                      const char *ad_domain,
> +                                      const char ***_ad_enabled_domains)
> +{
> +    int ret;
> +    const char *str;
> +    const char *option_name;
> +    const char **domains = NULL;
> +    int count;
> +    bool is_ad_in_domains;
> +    TALLOC_CTX *tmp_ctx = NULL;
> +
> +    tmp_ctx = talloc_new(NULL);
> +    if (tmp_ctx == NULL) {
> +        return ENOMEM;
> +    }
> +
> +    str = dp_opt_get_cstring(ad_id_ctx->ad_options->basic, 
> AD_ENABLED_DOMAINS);
> +    if (str == NULL) {
> +        _ad_enabled_domains = NULL;

I think you wanted to dereference the pointer here? (it might also be a
good idea to return EINVAL if the caller passed NULL as the output pointer)

> +        ret = EOK;
> +        goto done;
> +    }
> +

> From 4cd5c77f09750f9eb20c91eadc4759c3e4166093 Mon Sep 17 00:00:00 2001
> From: Petr Cech <pc...@redhat.com>
> Date: Tue, 21 Jun 2016 09:48:52 +0200
> Subject: [PATCH 3/5] AD_PROVIDER: ad_enabled_domains - only master
> 
> We can skip looking up other domains if option ad_enabled_domains
> contains only master domain.
> 
> Resolves:
> https://fedorahosted.org/sssd/ticket/2828
> ---
>  src/providers/ad/ad_subdomains.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/src/providers/ad/ad_subdomains.c 
> b/src/providers/ad/ad_subdomains.c
> index 
> 9c0afb19418e44a3e3daa661baf1c7a82439d60d..eaa85f802dbb4022dc632cc4c05d89685eccd901
>  100644
> --- a/src/providers/ad/ad_subdomains.c
> +++ b/src/providers/ad/ad_subdomains.c
> @@ -1163,6 +1163,7 @@ static void ad_subdomains_refresh_connect_done(struct 
> tevent_req *subreq)
>          return;
>      }
>  
> +    /* connect to the DC we are a member of */
>      subreq = ad_master_domain_send(state, state->ev, state->id_ctx->conn,
>                                     state->sdap_op, 
> state->sd_ctx->domain_name);
>      if (subreq == NULL) {
> @@ -1211,6 +1212,21 @@ static void ad_subdomains_refresh_master_done(struct 
> tevent_req *subreq)
>          goto done;
>      }
>  
> +    /*
> +     * If ad_enabled_domains contains only master domain
> +     * we shouldn't lookup other domains.
> +     */
> +    if (state->sd_ctx->ad_enabled_domains != NULL) {
> +        if (talloc_array_length(state->sd_ctx->ad_enabled_domains) == 2) {
> +            if (strcmp(state->sd_ctx->ad_enabled_domains[0],
> +                       state->be_ctx->domain->name) == 0) {

I only notices this now, but IIRC the domains are case insensitive,
shouldn't we use strcasecmp here?

> +                DEBUG(SSSDBG_TRACE_FUNC,
> +                      "No other enabled domain than master.\n");
> +                goto done;
> +            }
> +        }
> +    }
> +
>      subreq = ad_get_root_domain_send(state, state->ev, forest,
>                                       sdap_id_op_handle(state->sdap_op),
>                                       state->sd_ctx);
> -- 
> 2.7.4
> 

> From 0d2b0c67875663d0e614b8361152ec7edc14c37e Mon Sep 17 00:00:00 2001
> From: Petr Cech <pc...@redhat.com>
> Date: Mon, 27 Jun 2016 11:51:30 +0200
> Subject: [PATCH 4/5] AD_PROVIDER: ad_enabled_domains - other then master
> 
> We can skip looking up other domains if
> option ad_enabled_domains doesn't contain them.
> 
> Resolves:
> https://fedorahosted.org/sssd/ticket/2828
> ---
>  src/providers/ad/ad_subdomains.c | 49 
> ++++++++++++++++++++++++++++++++++++----
>  1 file changed, 45 insertions(+), 4 deletions(-)
> 
> diff --git a/src/providers/ad/ad_subdomains.c 
> b/src/providers/ad/ad_subdomains.c
> index 
> eaa85f802dbb4022dc632cc4c05d89685eccd901..32f7d7b3b2c4917d15d516c5e8beac159ffe164f
>  100644
> --- a/src/providers/ad/ad_subdomains.c
> +++ b/src/providers/ad/ad_subdomains.c
> @@ -130,6 +130,23 @@ done:
>      return ret;
>  }
>  
> +static bool is_domain_enabled (const char *domain,
> +                               const char **enabled_doms)
                                ^
We don't put a space between function name and the argument list.

> +{
> +    bool ret;
> +
> +    if (enabled_doms == NULL) {
> +        ret = true;
> +        goto done;

Do we really need to use jump labels instead of just returning true?

> +    }
> +
> +    ret = string_in_list(domain, discard_const_p(char *, enabled_doms), 
> true) ?
> +          true : false;

Can you also fix the indentation here? We could also just return the
function return value and get rid of the 'ret' variable completely.

> +
> +done:
> +    return ret;
> +}
> +
>  static errno_t
>  ad_subdom_ad_ctx_new(struct be_ctx *be_ctx,
>                       struct ad_id_ctx *id_ctx,
> @@ -485,6 +502,7 @@ done:
>  

> From 92af52a3b4d8fa138282030a72122d6cbe9c5413 Mon Sep 17 00:00:00 2001
> From: Petr Cech <pc...@redhat.com>
> Date: Mon, 27 Jun 2016 11:53:19 +0200
> Subject: [PATCH 5/5] TESTS: Adding tests for ad_enabled_domains option

ACK
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to