From 709c42f0cabc96d0e0edf72753a0967593206ff4 Mon Sep 17 00:00:00 2001 From: Fabiano FidĂȘncio Date: Apr 25 2018 05:30:08 +0000 Subject: DP: Add dp_sbus_invalidate_group_memcache() This function will be called from the data provider to the NSS responder, which will invalidate a group in the memcache. Related: https://pagure.io/SSSD/sssd/issue/2653 Signed-off-by: Fabiano FidĂȘncio Reviewed-by: Jakub Hrozek --- diff --git a/src/providers/data_provider/dp.h b/src/providers/data_provider/dp.h index ceb49da..e8b2f9c 100644 --- a/src/providers/data_provider/dp.h +++ b/src/providers/data_provider/dp.h @@ -179,6 +179,8 @@ void dp_sbus_reset_groups_ncache(struct data_provider *provider, 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); +void dp_sbus_invalidate_group_memcache(struct data_provider *provider, + gid_t gid); /* * A dummy handler for DPM_ACCT_DOMAIN_HANDLER. diff --git a/src/providers/data_provider/dp_resp_client.c b/src/providers/data_provider/dp_resp_client.c index 5735188..a61f7c5 100644 --- a/src/providers/data_provider/dp_resp_client.c +++ b/src/providers/data_provider/dp_resp_client.c @@ -189,3 +189,48 @@ void dp_sbus_reset_initgr_memcache(struct data_provider *provider) return dp_sbus_reset_memcache(provider, IFACE_NSS_MEMORYCACHE_INVALIDATEALLINITGROUPS); } + +void dp_sbus_invalidate_group_memcache(struct data_provider *provider, + gid_t gid) +{ + struct dp_client *dp_cli; + DBusMessage *msg; + dbus_bool_t dbret; + + if (provider == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "No provider pointer\n"); + return; + } + + dp_cli = provider->clients[DPC_NSS]; + if (dp_cli == NULL) { + return; + } + + msg = dbus_message_new_method_call(NULL, + NSS_MEMORYCACHE_PATH, + IFACE_NSS_MEMORYCACHE, + IFACE_NSS_MEMORYCACHE_INVALIDATEGROUPBYID); + if (msg == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); + return; + } + + dbret = dbus_message_append_args(msg, + DBUS_TYPE_UINT32, &gid, + DBUS_TYPE_INVALID); + if (!dbret) { + DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); + dbus_message_unref(msg); + return; + } + + DEBUG(SSSDBG_TRACE_FUNC, + "Ordering NSS responder to invalidate the group %"PRIu32" \n", + gid); + + sbus_conn_send_reply(dp_client_conn(dp_cli), msg); + dbus_message_unref(msg); + + return; +}