diff options
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) { |