On Thu, Aug 4, 2016 at 8:08 AM, Petr Cech <pc...@redhat.com> wrote:
> On 08/03/2016 09:54 AM, Fabiano Fidêncio wrote:
>>
>> Hey!
>>
>> I'd do it a bit differently.
>
>
> Hello Fabiano,
>
> I am glad for another point of view.
>
>
>> diff --git a/src/providers/ldap/sdap_async_users.c
>> b/src/providers/ldap/sdap_async_users.c
>> index
>> e44c045b3f8ff6aed33a42cf2919bc01aa41a243..3a8efa4caacbad74f493de334a387104d0e7cec4
>> 100644
>> --- a/src/providers/ldap/sdap_async_users.c
>> +++ b/src/providers/ldap/sdap_async_users.c
>> @@ -519,6 +519,7 @@ int sdap_save_users(TALLOC_CTX *memctx,
>>                      char **_usn_value)
>>  {
>>      TALLOC_CTX *tmpctx;
>> +    const char* user_name = NULL;
>
>                  ^-----
> I know this should be 'const char *'. I will fix it.
>
>>      char *higher_usn = NULL;
>>      char *usn_value;
>>      int ret;
>> @@ -548,14 +549,22 @@ int sdap_save_users(TALLOC_CTX *memctx,
>>      for (i = 0; i < num_users; i++) {
>>          usn_value = NULL;
>>
>> +        ret = sdap_get_user_primary_name(memctx, opts, users[i],
>> +                                         dom, &user_name);
>> +        if (ret != EOK) {
>> +            DEBUG(SSSDBG_OP_FAILURE, "Failed to get user name\n");
>> +            goto done;
>> +        }
>> +
>>
>> IMO, if it fails, that's okay, then let's just go for using the loop
>> index.
>> IOW, please, remove the "goto done;" line.
>
>
> Right, I will fix it.
>
>>          ret = sdap_save_user(tmpctx, opts, dom, users[i], &usn_value,
>> now);
>>
>>          /* Do not fail completely on errors.
>>           * Just report the failure to save and go on */
>>          if (ret) {
>> -            DEBUG(SSSDBG_OP_FAILURE, "Failed to store user %d.
>> Ignoring.\n", i);
>> +            DEBUG(SSSDBG_OP_FAILURE, "Failed to store user %s.
>> Ignoring.\n",
>> +                                     user_name);
>>          } else {
>> -            DEBUG(SSSDBG_TRACE_ALL, "User %d processed!\n", i);
>> +            DEBUG(SSSDBG_TRACE_ALL, "User %s processed!\n", user_name);
>>          }
>>
>>
>> I didn't detailed check what sdap_get_user_primary_name() is doing,
>> but I have the feeling that when it fails, user_name is NULL.
>> So, when printing the debug message, you can check whether the
>> username is not NULL and print it, otherwise you could print the
>> array's index as it was done before your patch.
>
>
> I did some investigation.
>
> If error occurs in function sdap_get_user_primary_name(), the function
> doesn't touch return argument (here it is &user_name), so there needn't be a
> NULL value in user_name.
>
> I discussed this topic with Lukas offline. Our practise is:
>   int function(input_arg, ..., _output_arg)
> if (ret != 0) than there is no guarantee that _output_arg makes sense.
>
> In our case, _output_arg isn't NULL. It's a pitty.

Why not? :-)
You set user_name to NULL in the beginning of the function and it is
just set again when sdap_get_primary_fqdn() is successful.
Checking whether _output_arg is NULL or not seems sane in this case.

>
> There are some comments about using functions such
> sdap_get_user_primary_name() in thread 'LDAP: Do not print "null" in the
> DEBUG message' (I need read this, thanks Lukas for info).

I'll check it out as well :-)

>
>
>>          if (usn_value) {
>> --
>>
>> Reviewed-by: Fabiano Fidêncio <fiden...@redhat.com>
>>
>> Best Regards,
>>
>
> This mail is just note and comments. I will work on it later.
>
> Regards
>
>
> --
> Petr^4 Čech
> _______________________________________________
> sssd-devel mailing list
> sssd-devel@lists.fedorahosted.org
> https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org


Best Regards,
-- 
Fabiano Fidêncio
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to