aboutsummaryrefslogtreecommitdiff
path: root/eperd/eperd.c
diff options
context:
space:
mode:
Diffstat (limited to 'eperd/eperd.c')
-rw-r--r--eperd/eperd.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/eperd/eperd.c b/eperd/eperd.c
index b240e6e..bfa3615 100644
--- a/eperd/eperd.c
+++ b/eperd/eperd.c
@@ -568,6 +568,50 @@ static void SynchronizeFile(const char *fileName)
DeleteFile();
}
+#define RESOLV_CONF "/etc/resolv.conf"
+static void check_resolv_conf(void)
+{
+ static time_t last_time= -1;
+
+ int r;
+ FILE *fn;
+ struct stat sb;
+
+ r= stat(RESOLV_CONF, &sb);
+ if (r == -1)
+ {
+ crondlog(LVL8 "error accessing resolv.conf: %s",
+ strerror(errno));
+ return;
+ }
+
+ if (sb.st_mtime == last_time)
+ return; /* resolv.conf did not change */
+ evdns_base_clear_nameservers_and_suspend(DnsBase);
+ r= evdns_base_resolv_conf_parse(DnsBase, DNS_OPTIONS_ALL,
+ RESOLV_CONF);
+ evdns_base_resume(DnsBase);
+
+ if ((r != 0 || last_time != -1) && out_filename)
+ {
+ fn= fopen(out_filename, "a");
+ if (!fn)
+ crondlog(DIE9 "unable to append to '%s'", out_filename);
+ fprintf(fn, "RESULT { ");
+ if (atlas_id)
+ fprintf(fn, DBQ(id) ":" DBQ(%s) ", ", atlas_id);
+ fprintf(fn, DBQ(fw) ":" DBQ(%d) ", " DBQ(time) ":%ld, ",
+ get_atlas_fw_version(), (long)time(NULL));
+ fprintf(fn, DBQ(event) ": " DBQ(load resolv.conf)
+ ", " DBQ(result) ": %d", r);
+
+ fprintf(fn, " }\n");
+ fclose(fn);
+ }
+
+ last_time= sb.st_mtime;
+}
+
static void CheckUpdates(evutil_socket_t __attribute__ ((unused)) fd,
short __attribute__ ((unused)) what,
void __attribute__ ((unused)) *arg)
@@ -584,6 +628,8 @@ static void CheckUpdates(evutil_socket_t __attribute__ ((unused)) fd,
}
fclose(fi);
}
+
+ check_resolv_conf();
}
static void CheckUpdatesHour(evutil_socket_t __attribute__ ((unused)) fd,