On 07/11/2016 05:12 PM, Petr Cech wrote:
On 07/05/2016 08:44 AM, Jakub Hrozek wrote:
> On Mon, Jun 27, 2016 at 03:37:25PM +0200, Petr Cech wrote:
...
>> +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;
>> + char **domains = NULL;
>> + const char **list = 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;
>> + ret = EOK;
>> + goto done;
>> + }
>> +
>> + count = 0;
>> + ret = split_on_separator(tmp_ctx, str, ',', true, true,
>> &domains, &count);
>> + if (ret != EOK) {
>> + option_name =
>> ad_id_ctx->ad_options->basic[AD_ENABLED_DOMAINS].opt_name;
>> + DEBUG(SSSDBG_CRIT_FAILURE, "Failed to parse option [%s],
>> [%i] [%s]!\n",
>> + option_name, ret,
>> sss_strerror(ret));
>> + ret = EINVAL;
>> + goto done;
>> + }
>> +
>> + list = talloc_array_size(tmp_ctx, sizeof(char*), count);
>> + if (list == NULL) {
>> + ret = ENOMEM;
>> + goto done;
>> + }
>> +
>> + is_ad_in_domains = false;
>> + for (int i = 0; i < count; i++) {
>> + list[i] = talloc_strdup(list, domains[i]);
>
> Do we need to duplicate the string here, wouldn't it be enough to steal
> it?
This is my attempt to satisfy the needs. I am trying to make:
# const char** from char**
I would like to return const char** because it is option. But the
function split_on_separator() expects char**.
Does anybody know better solution?
You can use discard_const for this case.
Regards