summaryrefslogtreecommitdiffstats
path: root/src/responder/ifp/ifp_users.c
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2015-06-02 11:12:15 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-06-18 16:44:01 +0200
commitd3c82d0170d6d7407549afdadd08aa7e11aeb9a2 (patch)
treeb0a5d825b93c1cef16ecd37a3328e2b6f5cadccb /src/responder/ifp/ifp_users.c
parent9d69c05084176602c2c0969e51d6a81ed32974ca (diff)
downloadsssd-d3c82d0170d6d7407549afdadd08aa7e11aeb9a2.tar.gz
sssd-d3c82d0170d6d7407549afdadd08aa7e11aeb9a2.tar.xz
sssd-d3c82d0170d6d7407549afdadd08aa7e11aeb9a2.zip
IFP: Implement org.freedesktop.sssd.infopipe.Cache[.Object]
Resolves: https://fedorahosted.org/sssd/ticket/2338 Example use: $ dbus-send --print-reply --system \ --dest=org.freedesktop.sssd.infopipe \ /org/freedesktop/sssd/infopipe/Users \ org.freedesktop.sssd.infopipe.Users.FindByName \ string:admin object path "/org/freedesktop/sssd/infopipe/Users/ipaldap/397400000" $ dbus-send --print-reply --system \ --dest=org.freedesktop.sssd.infopipe \ /org/freedesktop/sssd/infopipe/Users \ org.freedesktop.sssd.infopipe.Cache.List array [ ] $ dbus-send --print-reply --system \ --dest=org.freedesktop.sssd.infopipe \ /org/freedesktop/sssd/infopipe/Users/ipaldap/397400000 \ org.freedesktop.sssd.infopipe.Cache.Object.Store boolean true $ dbus-send --print-reply --system \ --dest=org.freedesktop.sssd.infopipe \ /org/freedesktop/sssd/infopipe/Users \ org.freedesktop.sssd.infopipe.Cache.List array [ object path "/org/freedesktop/sssd/infopipe/Users/ipaldap/397400000" ] $ dbus-send --print-reply --system \ --dest=org.freedesktop.sssd.infopipe \ /org/freedesktop/sssd/infopipe/Users/ipaldap/397400000 \ org.freedesktop.sssd.infopipe.Cache.Object.Remove boolean true $ dbus-send --print-reply --system \ --dest=org.freedesktop.sssd.infopipe \ /org/freedesktop/sssd/infopipe/Users \ org.freedesktop.sssd.infopipe.Cache.List array [ ] Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/responder/ifp/ifp_users.c')
-rw-r--r--src/responder/ifp/ifp_users.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/responder/ifp/ifp_users.c b/src/responder/ifp/ifp_users.c
index 26c1aa696..fa6f47f0d 100644
--- a/src/responder/ifp/ifp_users.c
+++ b/src/responder/ifp/ifp_users.c
@@ -30,6 +30,7 @@
#include "responder/common/responder_cache_req.h"
#include "responder/ifp/ifp_users.h"
#include "responder/ifp/ifp_groups.h"
+#include "responder/ifp/ifp_cache.h"
char * ifp_users_build_path_from_msg(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
@@ -659,3 +660,54 @@ void ifp_users_user_get_extra_attributes(struct sbus_request *sbus_req,
*_out = table;
}
+
+int ifp_cache_list_user(struct sbus_request *sbus_req,
+ void *data)
+{
+ return ifp_cache_list(sbus_req, data, IFP_CACHE_USER);
+}
+
+int ifp_cache_list_by_domain_user(struct sbus_request *sbus_req,
+ void *data,
+ const char *domain)
+{
+ return ifp_cache_list_by_domain(sbus_req, data, domain, IFP_CACHE_USER);
+}
+
+int ifp_cache_object_store_user(struct sbus_request *sbus_req,
+ void *data)
+{
+ DBusError *error;
+ struct sss_domain_info *domain;
+ struct ldb_message *user;
+ errno_t ret;
+
+ ret = ifp_users_user_get(sbus_req, data, NULL, &domain, &user);
+ if (ret != EOK) {
+ error = sbus_error_new(sbus_req, DBUS_ERROR_FAILED, "Failed to fetch "
+ "user [%d]: %s\n", ret, sss_strerror(ret));
+ return sbus_request_fail_and_finish(sbus_req, error);
+ }
+
+ /* The request is finished inside. */
+ return ifp_cache_object_store(sbus_req, domain, user->dn);
+}
+
+int ifp_cache_object_remove_user(struct sbus_request *sbus_req,
+ void *data)
+{
+ DBusError *error;
+ struct sss_domain_info *domain;
+ struct ldb_message *user;
+ errno_t ret;
+
+ ret = ifp_users_user_get(sbus_req, data, NULL, &domain, &user);
+ if (ret != EOK) {
+ error = sbus_error_new(sbus_req, DBUS_ERROR_FAILED, "Failed to fetch "
+ "user [%d]: %s\n", ret, sss_strerror(ret));
+ return sbus_request_fail_and_finish(sbus_req, error);
+ }
+
+ /* The request is finished inside. */
+ return ifp_cache_object_remove(sbus_req, domain, user->dn);
+}