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(a)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