summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2010-06-30 13:55:41 -0400
committerStephen Gallagher <sgallagh@redhat.com>2010-07-09 11:44:07 -0400
commitcab4c5011d0dc6d98e2115f46b1185a17804df49 (patch)
tree02532efe8caa98f12a6e1564a85f11bf60e27709
parent09c170c5b5cf0d62e7302ef284a1e35072ef1d95 (diff)
downloadsssd-cab4c5011d0dc6d98e2115f46b1185a17804df49.tar.gz
sssd-cab4c5011d0dc6d98e2115f46b1185a17804df49.tar.xz
sssd-cab4c5011d0dc6d98e2115f46b1185a17804df49.zip
Add try_inotify option
There are some special cases where inotify cannot be used, even if the host OS claims that it is supported. In these cases, it should be possible to explicitly disable the use of inotify. https://fedorahosted.org/sssd/ticket/484
-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 e5a0d9a..24b565d 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 3bc3efd..850dfdd 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 41eadf5..47832c9 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) {