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?
Regards
--
Petr^4 Čech