[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