[SSSD] [PATCH] IFP: Return group names with the right case

Pavel Březina pbrezina at redhat.com
Wed Dec 3 15:33:33 UTC 2014


On 12/01/2014 11:07 PM, Jakub Hrozek wrote:
> Hi,
>
> the attached patch fixes an issue found by Jan P. in the IFP code.
>
>
> 0001-IFP-Return-group-names-with-the-right-case.patch
>
>
>  From fa7fdf4df1c29bd066fa32b98b079a2ae24ab3fc Mon Sep 17 00:00:00 2001
> From: Jakub Hrozek<jhrozek at redhat.com>
> Date: Mon, 1 Dec 2014 23:00:06 +0100
> Subject: [PATCH] IFP: Return group names with the right case
>
> The IFP code wasn't honoring the case settings of the domain.
> ---
>   src/responder/ifp/ifpsrv_cmd.c | 17 +++++++++++++----
>   1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/src/responder/ifp/ifpsrv_cmd.c b/src/responder/ifp/ifpsrv_cmd.c
> index 3b7442233a5b4d01f430c9ffdbcdc949637d6db9..5e2be20e8ad81e2b651f1e02ce58974bfaa56984 100644
> --- a/src/responder/ifp/ifpsrv_cmd.c
> +++ b/src/responder/ifp/ifpsrv_cmd.c
> @@ -370,6 +370,7 @@ ifp_user_get_groups_reply(struct sss_domain_info *domain,
>       int i, num;
>       const char *name;
>       const char **groupnames;
> +    const char *tmpstr;
>
>       /* one less, the first one is the user entry */
>       num = res->count - 1;
> @@ -388,15 +389,23 @@ ifp_user_get_groups_reply(struct sss_domain_info *domain,
>           }
>
>           if (ireq->ifp_ctx->rctx->override_space != '\0') {
> -            groupnames[i] = sss_replace_space(groupnames, name,
> -                                          ireq->ifp_ctx->rctx->override_space);
> -            if (groupnames[i] == NULL) {
> +            tmpstr = sss_replace_space(groupnames, name,
> +                                       ireq->ifp_ctx->rctx->override_space);

Sure, you can allocate tmpstr on groupnames, I think ireq or tmp_ctx 
would be better choice.

> +            if (tmpstr == NULL) {
>                   DEBUG(SSSDBG_MINOR_FAILURE, "Cannot normalize %s\n", name);
>                   continue;
>               }
>           } else {
> -            groupnames[i] = name;
> +            tmpstr = name;
>           }
> +
> +        groupnames[i] = sss_get_cased_name(ireq, tmpstr, domain->case_preserve);

Here, groupnames should be used as talloc context instead of ireq.
sss_get_cased_names duplicates the string so tmpstr should be freed.

> +        if (groupnames[i] == NULL) {
> +            DEBUG(SSSDBG_CRIT_FAILURE,
> +                  "sss_get_cased_name failed, skipping\n");
> +            continue;
> +        }
> +
>           DEBUG(SSSDBG_TRACE_FUNC, "Adding group %s\n", groupnames[i]);
>       }





More information about the sssd-devel mailing list