[SSSD] [PATCH] MONITOR: Poll for resolv.conf if not available during boot

Michal Židek mzidek at redhat.com
Thu Jun 25 14:31:22 UTC 2015


On 06/25/2015 01:30 PM, Pavel Reichl wrote:
>
>
> On 06/24/2015 03:35 PM, Michal Židek wrote:
>>
>>  From 145f6b193f5ff9e382af441299864aac55c31dd4 Mon Sep 17 00:00:00 2001
>> From: =?UTF-8?q?Michal=20=C5=BDidek?=<mzidek at redhat.com>
>> Date: Wed, 17 Jun 2015 18:54:14 +0200
>> Subject: [PATCH 1/2] MONITOR: Poll for resolv.conf if not available during
>>   boot
>>
>> If resolv.conf is not available when SSSD is starting,
>> check for its existence later.
>>
>> Ticket:
>> https://fedorahosted.org/sssd/ticket/2590
>> ---
>>   src/monitor/monitor.c | 38 ++++++++++++++++++++++++++++++++++++--
>>   1 file changed, 36 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
>> index 01c882a..1804ad1 100644
>> --- a/src/monitor/monitor.c
>> +++ b/src/monitor/monitor.c
>> @@ -2259,11 +2259,39 @@ static errno_t monitor_config_file_fallback(TALLOC_CTX *mem_ctx,
>>       return EOK;
>>   }
>>
>> +#define MISSING_RESOLV_CONF_POLL_TIME 10
>> +
>> +static void missing_resolv_conf(struct tevent_context *ev,
>> +                                struct tevent_timer *te,
>> +                                struct timeval tv, void *data)
>> +{
>> +    int ret;
>> +    struct mt_ctx *ctx = talloc_get_type(data, struct mt_ctx);
>> +
>> +    ret = monitor_config_file(ctx, ctx, RESOLV_CONF_PATH,
>> +                              monitor_update_resolv, false);
>> +    if (ret == EOK) {
>> +        signal_res_init(ctx);
>> +    } else if (ret == ENOENT) {
>> +        tv = tevent_timeval_current_ofs(MISSING_RESOLV_CONF_POLL_TIME, 0);
>> +        te = tevent_add_timer(ctx->ev, ctx, tv, missing_resolv_conf, ctx);
>> +        if (te == NULL) {
>> +            DEBUG(SSSDBG_FATAL_FAILURE,
>> +                  "tevent_add_timer failed. resolv.conf will be ignored.\n");
>> +        }
>> +    } else {
>> +        DEBUG(SSSDBG_FATAL_FAILURE,
>> +              "Monitor_config_file failed. resolv.conf will be ignored.\n");
>> +    }
>> +}
>> +
>>   static int monitor_process_init(struct mt_ctx *ctx,
>>                                   const char *config_file)
>>   {
>>       TALLOC_CTX *tmp_ctx;
>>       struct tevent_signal *tes;
>> +    struct timeval tv;
>> +    struct tevent_timer *te;
>>       struct sss_domain_info *dom;
>>       char *rcachedir;
>>       int num_providers;
>> @@ -2351,8 +2379,14 @@ static int monitor_process_init(struct mt_ctx *ctx,
>>   #endif
>>       /* Watch for changes to the DNS resolv.conf */
> Michal would you consider renaming 'missing_resolv_conf' to
> 'check_resolv_conf' or something like that and  then replace following
> code segment by simple call of it? I think we could save a few lines of
> code and reuse the function.  Do you see any problems about that? Thanks!

You are right that it would save us few lines, but It would also require
directly calling a function that was made as tevent callback. I tried it
and it looks IMO uglier (just filling the arguments to the function
looks weird). So I would not go that way if you do not insist on it.

>>       ret = monitor_config_file(ctx, ctx, RESOLV_CONF_PATH,
>> -                             monitor_update_resolv,true);
>> -    if (ret != EOK) {
>> +                              monitor_update_resolv, false);
>> +    if (ret == ENOENT) {
>> +        tv = tevent_timeval_current_ofs(MISSING_RESOLV_CONF_POLL_TIME, 0);
>> +        te = tevent_add_timer(ctx->ev, ctx, tv, missing_resolv_conf, ctx);
>> +        if (te == NULL) {
>> +            DEBUG(SSSDBG_FATAL_FAILURE, "resolv.conf will be ignored\n");
>> +        }
>> +    } else if (ret != EOK) {
>>           return ret;
>>       }
>>


-- 
Senior Principal Intern



More information about the sssd-devel mailing list