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

Pavel Reichl preichl at redhat.com
Thu Jun 25 11:30:22 UTC 2015



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!
>       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;
>       }
>   
> -- 2.1.0

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.fedorahosted.org/pipermail/sssd-devel/attachments/20150625/d3c0519e/attachment.html>


More information about the sssd-devel mailing list