diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2016-11-16 17:00:57 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2017-02-15 14:51:16 +0100 |
commit | af28fa659f7ffcd12ecf8bda64e79cf5dd225651 (patch) | |
tree | fa279a3e52b1ea3173947c5865688774c4ba2f58 /src/providers | |
parent | b3ee4be9e1794fa823696d70d4958f3b0269939c (diff) | |
download | sssd-af28fa659f7ffcd12ecf8bda64e79cf5dd225651.tar.gz sssd-af28fa659f7ffcd12ecf8bda64e79cf5dd225651.tar.xz sssd-af28fa659f7ffcd12ecf8bda64e79cf5dd225651.zip |
DP: Add internal interface to reset negative cache from DP
Adds a an interface that allows the Data Provider to notify responders
to drop their negative cache.
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/providers')
-rw-r--r-- | src/providers/data_provider/dp.h | 5 | ||||
-rw-r--r-- | src/providers/data_provider/dp_resp_client.c | 65 |
2 files changed, 69 insertions, 1 deletions
diff --git a/src/providers/data_provider/dp.h b/src/providers/data_provider/dp.h index 68db75521..79d02d469 100644 --- a/src/providers/data_provider/dp.h +++ b/src/providers/data_provider/dp.h @@ -166,4 +166,9 @@ void dp_sbus_domain_active(struct data_provider *provider, void dp_sbus_domain_inconsistent(struct data_provider *provider, struct sss_domain_info *dom); +void dp_sbus_reset_users_ncache(struct data_provider *provider, + struct sss_domain_info *dom); +void dp_sbus_reset_groups_ncache(struct data_provider *provider, + struct sss_domain_info *dom); + #endif /* _DP_H_ */ diff --git a/src/providers/data_provider/dp_resp_client.c b/src/providers/data_provider/dp_resp_client.c index 3d386eac1..6828610ac 100644 --- a/src/providers/data_provider/dp_resp_client.c +++ b/src/providers/data_provider/dp_resp_client.c @@ -26,7 +26,23 @@ #include "providers/data_provider.h" #include "providers/data_provider/dp_private.h" #include "responder/common/iface/responder_iface.h" -#include "src/responder/nss/nss_iface.h" +#include "responder/nss/nss_iface.h" + +/* List of DP clients that deal with users or groups */ +/* FIXME - it would be much cleaner to implement sbus signals + * and let the responder subscribe to these messages rather than + * keep a list here.. + * https://fedorahosted.org/sssd/ticket/2233 + */ +static enum dp_clients user_clients[] = { + DPC_NSS, + DPC_PAM, + DPC_IFP, + DPC_PAC, + DPC_SUDO, + + DP_CLIENT_SENTINEL +}; static void send_msg_to_all_clients(struct data_provider *provider, struct DBusMessage *msg) @@ -42,6 +58,21 @@ static void send_msg_to_all_clients(struct data_provider *provider, } } +static void send_msg_to_selected_clients(struct data_provider *provider, + struct DBusMessage *msg, + enum dp_clients *clients) +{ + struct dp_client *cli; + int i; + + for (i = 0; clients[i] != DP_CLIENT_SENTINEL; i++) { + cli = provider->clients[clients[i]]; + if (cli != NULL) { + sbus_conn_send_reply(dp_client_conn(cli), msg); + } + } +} + static void dp_sbus_set_domain_state(struct data_provider *provider, struct sss_domain_info *dom, enum sss_domain_state state) @@ -91,3 +122,35 @@ void dp_sbus_domain_inconsistent(struct data_provider *provider, { return dp_sbus_set_domain_state(provider, dom, DOM_INCONSISTENT); } + +static void dp_sbus_reset_ncache(struct data_provider *provider, + struct sss_domain_info *dom, + const char *method) +{ + DBusMessage *msg; + + msg = sbus_create_message(NULL, NULL, RESPONDER_PATH, + IFACE_RESPONDER_NCACHE, 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_ncache(struct data_provider *provider, + struct sss_domain_info *dom) +{ + return dp_sbus_reset_ncache(provider, dom, + IFACE_RESPONDER_NCACHE_RESETUSERS); +} + +void dp_sbus_reset_groups_ncache(struct data_provider *provider, + struct sss_domain_info *dom) +{ + return dp_sbus_reset_ncache(provider, dom, + IFACE_RESPONDER_NCACHE_RESETGROUPS); +} |