diff options
author | Michal Zidek <mzidek@redhat.com> | 2012-10-25 18:07:01 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2012-11-06 12:15:52 +0100 |
commit | 69f6f2ed116d1c987851bfcc410cf2bdd1b0cc97 (patch) | |
tree | b550f2e0fcff13207b1b330e3b67b88eaaa2f465 /src | |
parent | d19c4785215305e6eb5f2fa2fc503a2ba50d3f10 (diff) | |
download | sssd-69f6f2ed116d1c987851bfcc410cf2bdd1b0cc97.tar.gz sssd-69f6f2ed116d1c987851bfcc410cf2bdd1b0cc97.tar.bz2 sssd-69f6f2ed116d1c987851bfcc410cf2bdd1b0cc97.zip |
sss_cache: Multiple domains not handled properly
When working with multiple domains and no
matching objects for deletion were found in the first
domain, the other domains were not searched at all.
Also the ERROR message informing about object not found
(the one printed for each domain) was changed to
DEBUG message.
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/sss_cache.c | 72 |
1 files changed, 37 insertions, 35 deletions
diff --git a/src/tools/sss_cache.c b/src/tools/sss_cache.c index 9b91f982..84a53ddf 100644 --- a/src/tools/sss_cache.c +++ b/src/tools/sss_cache.c @@ -99,7 +99,7 @@ int main(int argc, const char *argv[]) struct cache_tool_ctx *tctx = NULL; struct sysdb_ctx *sysdb; int i; - bool skipped; + bool skipped = true; FILE *clear_mc_flag; ret = init_context(argc, argv, &tctx); @@ -117,7 +117,6 @@ int main(int argc, const char *argv[]) goto done; } - skipped = true; skipped &= !invalidate_entries(tctx, sysdb, TYPE_USER, tctx->user_filter, tctx->user_name); skipped &= !invalidate_entries(tctx, sysdb, TYPE_GROUP, @@ -137,36 +136,36 @@ int main(int argc, const char *argv[]) DEBUG(SSSDBG_CRIT_FAILURE, ("Failed to cancel transaction\n")); } } + } - if (skipped == true) { - ERROR("No cache object matched the specified search\n"); - ret = ENOENT; + if (skipped == true) { + ERROR("No cache object matched the specified search\n"); + ret = ENOENT; + goto done; + } else { + /*Local cache changed -> signal monitor to invalidate fastcache */ + clear_mc_flag = fopen(SSS_NSS_MCACHE_DIR"/"CLEAR_MC_FLAG, "w"); + if (clear_mc_flag == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Failed to create clear_mc_flag file. " + "Memory cache will not be cleared.\n")); goto done; - } else { - /*Local cache changed -> signal monitor to invalidate fastcache */ - clear_mc_flag = fopen(SSS_NSS_MCACHE_DIR"/"CLEAR_MC_FLAG, "w"); - if (clear_mc_flag == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, - ("Failed to create clear_mc_flag file. " - "Memory cache will not be cleared.\n")); - goto done; - } - ret = fclose(clear_mc_flag); - if (ret != 0) { - ret = errno; - DEBUG(SSSDBG_CRIT_FAILURE, - ("Unable to close file descriptor: %s\n", - strerror(ret))); - goto done; - } + } + ret = fclose(clear_mc_flag); + if (ret != 0) { + ret = errno; + DEBUG(SSSDBG_CRIT_FAILURE, + ("Unable to close file descriptor: %s\n", + strerror(ret))); + goto done; + } - DEBUG(SSSDBG_TRACE_FUNC, ("Sending SIGHUP to monitor.\n")); - ret = signal_sssd(SIGHUP); - if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, - ("Failed to send SIGHUP to monitor.\n")); - goto done; - } + DEBUG(SSSDBG_TRACE_FUNC, ("Sending SIGHUP to monitor.\n")); + ret = signal_sssd(SIGHUP); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Failed to send SIGHUP to monitor.\n")); + goto done; } } @@ -187,22 +186,25 @@ bool invalidate_entries(TALLOC_CTX *ctx, struct sysdb_ctx *sysdb, int i; const char *c_name; bool iret; + struct sss_domain_info *dinfo; if (!filter) return false; + dinfo = sysdb_ctx_get_domain(sysdb); + type_rec = entry_types[entry_type]; ret = type_rec.search_fn(ctx, sysdb, filter, attrs, &msg_count, &msgs); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, - ("Searching for %s with filter %s failed\n", - type_rec.type_string, filter)); + ("Searching for %s in domain %s with filter %s failed\n", + type_rec.type_string, dinfo->name, filter)); if (name) { - ERROR("No such %1$s named %2$s, skipping\n", - type_rec.type_string, name); + ERROR("No such %1$s named %2$s in domain %3$s, skipping\n", + type_rec.type_string, name, dinfo->name); } else { - ERROR("No objects of type %1$s in the cache, skipping\n", - type_rec.type_string); + ERROR("No objects of type %1$s from domain %2$s in the cache, " + "skipping\n", type_rec.type_string, dinfo->name); } return false; } |