diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2010-06-30 13:55:41 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-07-09 11:44:07 -0400 |
commit | cab4c5011d0dc6d98e2115f46b1185a17804df49 (patch) | |
tree | 02532efe8caa98f12a6e1564a85f11bf60e27709 /src | |
parent | 09c170c5b5cf0d62e7302ef284a1e35072ef1d95 (diff) | |
download | sssd-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
Diffstat (limited to 'src')
-rw-r--r-- | src/confdb/confdb.h | 1 | ||||
-rw-r--r-- | src/man/sssd.conf.5.xml | 28 | ||||
-rw-r--r-- | src/monitor/monitor.c | 19 |
3 files changed, 47 insertions, 1 deletions
diff --git a/src/confdb/confdb.h b/src/confdb/confdb.h index e5a0d9ab9..24b565d29 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 3bc3efdc2..850dfdd33 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 41eadf52a..47832c95d 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) { |