summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2017-02-14 20:37:58 +0100
committerJakub Hrozek <jhrozek@redhat.com>2017-02-15 14:51:20 +0100
commit5007103e82f34e64a0ff3b278797b9fa42ba1dda (patch)
treec2dfed0dea5017ae6ba0c1ca3c01ae3ece09cdf9
parentaf28fa659f7ffcd12ecf8bda64e79cf5dd225651 (diff)
downloadsssd-5007103e82f34e64a0ff3b278797b9fa42ba1dda.tar.gz
sssd-5007103e82f34e64a0ff3b278797b9fa42ba1dda.tar.xz
sssd-5007103e82f34e64a0ff3b278797b9fa42ba1dda.zip
DP: Add internal interface to invalidate memory cache from DP
Adds an interfae to the Data Provider that allows the DP to notify the NSS responder to invalidate its memory cache records. Reviewed-by: Pavel Březina <pbrezina@redhat.com>
-rw-r--r--src/providers/data_provider/dp.h4
-rw-r--r--src/providers/data_provider/dp_resp_client.c35
2 files changed, 39 insertions, 0 deletions
diff --git a/src/providers/data_provider/dp.h b/src/providers/data_provider/dp.h
index 79d02d469..e80a6c339 100644
--- a/src/providers/data_provider/dp.h
+++ b/src/providers/data_provider/dp.h
@@ -171,4 +171,8 @@ void dp_sbus_reset_users_ncache(struct data_provider *provider,
void dp_sbus_reset_groups_ncache(struct data_provider *provider,
struct sss_domain_info *dom);
+void dp_sbus_reset_users_memcache(struct data_provider *provider);
+void dp_sbus_reset_groups_memcache(struct data_provider *provider);
+void dp_sbus_reset_initgr_memcache(struct data_provider *provider);
+
#endif /* _DP_H_ */
diff --git a/src/providers/data_provider/dp_resp_client.c b/src/providers/data_provider/dp_resp_client.c
index 6828610ac..5735188a6 100644
--- a/src/providers/data_provider/dp_resp_client.c
+++ b/src/providers/data_provider/dp_resp_client.c
@@ -154,3 +154,38 @@ void dp_sbus_reset_groups_ncache(struct data_provider *provider,
return dp_sbus_reset_ncache(provider, dom,
IFACE_RESPONDER_NCACHE_RESETGROUPS);
}
+
+static void dp_sbus_reset_memcache(struct data_provider *provider,
+ const char *method)
+{
+ DBusMessage *msg;
+
+ msg = sbus_create_message(NULL, NULL, NSS_MEMORYCACHE_PATH,
+ IFACE_NSS_MEMORYCACHE, method);
+ if (msg == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n");
+ return;
+ }
+
+ send_msg_to_selected_clients(provider, msg, user_clients);
+ dbus_message_unref(msg);
+ return;
+}
+
+void dp_sbus_reset_users_memcache(struct data_provider *provider)
+{
+ return dp_sbus_reset_memcache(provider,
+ IFACE_NSS_MEMORYCACHE_INVALIDATEALLUSERS);
+}
+
+void dp_sbus_reset_groups_memcache(struct data_provider *provider)
+{
+ return dp_sbus_reset_memcache(provider,
+ IFACE_NSS_MEMORYCACHE_INVALIDATEALLGROUPS);
+}
+
+void dp_sbus_reset_initgr_memcache(struct data_provider *provider)
+{
+ return dp_sbus_reset_memcache(provider,
+ IFACE_NSS_MEMORYCACHE_INVALIDATEALLINITGROUPS);
+}