summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/confdb/confdb.h1
-rw-r--r--src/man/sssd.conf.5.xml28
-rw-r--r--src/monitor/monitor.c19
3 files changed, 47 insertions, 1 deletions
diff --git a/src/confdb/confdb.h b/src/confdb/confdb.h
index e5a0d9ab..24b565d2 100644
--- a/src/confdb/confdb.h
+++ b/src/confdb/confdb.h
@@ -60,6 +60,7 @@
#define CONFDB_MONITOR_ACTIVE_DOMAINS "domains"
#define CONFDB_MONITOR_NAME_REGEX "re_expression"
#define CONFDB_MONITOR_FULL_NAME_FORMAT "full_name_format"
+#define CONFDB_MONITOR_TRY_INOTIFY "try_inotify"
/* NSS */
#define CONFDB_NSS_CONF_ENTRY "config/nss"
diff --git a/src/man/sssd.conf.5.xml b/src/man/sssd.conf.5.xml
index 3bc3efdc..850dfdd3 100644
--- a/src/man/sssd.conf.5.xml
+++ b/src/man/sssd.conf.5.xml
@@ -157,6 +157,34 @@
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>try_inotify (boolean)</term>
+ <listitem>
+ <para>
+ SSSD monitors the state of resolv.conf to
+ identify when it needs to update its internal
+ DNS resolver. By default, we will attempt to
+ use inotify for this, and will fall back to
+ polling resolv.conf every five seconds if
+ inotify cannot be used.
+ </para>
+ <para>
+ There are some limited situations where it is
+ preferred that we should skip even trying to
+ use inotify. In these rare cases, this option
+ should be set to 'false'
+ </para>
+ <para>
+ Default: true on platforms where inotify is
+ supported. False on other platforms.
+ </para>
+ <para>
+ Note: this option will have no effect on
+ platforms where inotify is unavailable. On
+ these platforms, polling will always be used.
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</para>
</refsect2>
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index 41eadf52..47832c95 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -1632,6 +1632,7 @@ static int monitor_config_file(TALLOC_CTX *mem_ctx,
monitor_reconf_fn fn)
{
int ret, err;
+ bool use_inotify;
struct timeval tv;
struct stat file_stat;
struct config_file_callback *cb = NULL;
@@ -1650,8 +1651,24 @@ static int monitor_config_file(TALLOC_CTX *mem_ctx,
ctx->file_ctx->parent_ctx = mem_ctx;
ctx->file_ctx->mt_ctx = ctx;
}
- ret = try_inotify(ctx->file_ctx, file, fn);
+
+ ret = confdb_get_bool(ctx->cdb, ctx,
+ CONFDB_MONITOR_CONF_ENTRY,
+ CONFDB_MONITOR_TRY_INOTIFY,
+ true, &use_inotify);
if (ret != EOK) {
+ talloc_free(ctx->file_ctx);
+ return ret;
+ }
+
+ if (use_inotify) {
+ ret = try_inotify(ctx->file_ctx, file, fn);
+ if (ret != EOK) {
+ use_inotify = false;
+ }
+ }
+
+ if (!use_inotify) {
/* Could not monitor file with inotify, fall back to polling */
cb = talloc_zero(ctx->file_ctx, struct config_file_callback);
if (!cb) {