summaryrefslogtreecommitdiffstats
path: root/src/responder/common/iface
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2016-11-02 17:13:32 +0100
committerJakub Hrozek <jhrozek@redhat.com>2017-02-15 14:51:07 +0100
commit205a0b9e9234327730fa808be95b2e1db7ffee95 (patch)
treef1f3ac5cfbb1a597080d8e188f4b5b920f8a59ab /src/responder/common/iface
parentc109f063b4469818fd335b8b509f0458e7b33b0a (diff)
downloadsssd-205a0b9e9234327730fa808be95b2e1db7ffee95.tar.gz
sssd-205a0b9e9234327730fa808be95b2e1db7ffee95.tar.xz
sssd-205a0b9e9234327730fa808be95b2e1db7ffee95.zip
RESPONDER: A sbus interface to reset negatively cached users and groups
Adds two new responder sbus interface functions: ResetNegcacheUsers and ResetNegcacheGroups. These functions can be called by a Data Provider to signal to a responder that it should drop its negative cache. Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/responder/common/iface')
-rw-r--r--src/responder/common/iface/responder_iface.c7
-rw-r--r--src/responder/common/iface/responder_iface.h5
-rw-r--r--src/responder/common/iface/responder_iface.xml6
-rw-r--r--src/responder/common/iface/responder_iface_generated.c40
-rw-r--r--src/responder/common/iface/responder_iface_generated.h21
-rw-r--r--src/responder/common/iface/responder_ncache.c41
6 files changed, 120 insertions, 0 deletions
diff --git a/src/responder/common/iface/responder_iface.c b/src/responder/common/iface/responder_iface.c
index f1e618b65..07fd1ff62 100644
--- a/src/responder/common/iface/responder_iface.c
+++ b/src/responder/common/iface/responder_iface.c
@@ -25,8 +25,15 @@ struct iface_responder_domain iface_responder_domain = {
.SetInconsistent = sss_resp_domain_inconsistent,
};
+struct iface_responder_ncache iface_responder_ncache = {
+ { &iface_responder_ncache_meta, 0 },
+ .ResetUsers = sss_resp_reset_ncache_users,
+ .ResetGroups = sss_resp_reset_ncache_groups,
+};
+
static struct sbus_iface_map iface_map[] = {
{ RESPONDER_PATH, &iface_responder_domain.vtable },
+ { RESPONDER_PATH, &iface_responder_ncache.vtable },
{ NULL, NULL }
};
diff --git a/src/responder/common/iface/responder_iface.h b/src/responder/common/iface/responder_iface.h
index abd7c83ce..5166b624c 100644
--- a/src/responder/common/iface/responder_iface.h
+++ b/src/responder/common/iface/responder_iface.h
@@ -34,4 +34,9 @@ int sss_resp_domain_inconsistent(struct sbus_request *req,
void *data,
const char *domain_name);
+/* org.freedesktop.sssd.Responder.NegativeCache */
+
+int sss_resp_reset_ncache_users(struct sbus_request *req, void *data);
+int sss_resp_reset_ncache_groups(struct sbus_request *req, void *data);
+
#endif /* _RESPONDER_IFACE_H_ */
diff --git a/src/responder/common/iface/responder_iface.xml b/src/responder/common/iface/responder_iface.xml
index d3d0ff40e..9f092e00f 100644
--- a/src/responder/common/iface/responder_iface.xml
+++ b/src/responder/common/iface/responder_iface.xml
@@ -10,4 +10,10 @@
<arg name="name" type="s" direction="in" />
</method>
</interface>
+
+ <interface name="org.freedesktop.sssd.Responder.NegativeCache">
+ <annotation value="iface_responder_ncache" name="org.freedesktop.DBus.GLib.CSymbol"/>
+ <method name="ResetUsers" />
+ <method name="ResetGroups" />
+ </interface>
</node>
diff --git a/src/responder/common/iface/responder_iface_generated.c b/src/responder/common/iface/responder_iface_generated.c
index 1d59eafed..837e67cfd 100644
--- a/src/responder/common/iface/responder_iface_generated.c
+++ b/src/responder/common/iface/responder_iface_generated.c
@@ -61,6 +61,46 @@ const struct sbus_interface_meta iface_responder_domain_meta = {
sbus_invoke_get_all, /* GetAll invoker */
};
+int iface_responder_ncache_ResetUsers_finish(struct sbus_request *req)
+{
+ return sbus_request_return_and_finish(req,
+ DBUS_TYPE_INVALID);
+}
+
+int iface_responder_ncache_ResetGroups_finish(struct sbus_request *req)
+{
+ return sbus_request_return_and_finish(req,
+ DBUS_TYPE_INVALID);
+}
+
+/* methods for org.freedesktop.sssd.Responder.NegativeCache */
+const struct sbus_method_meta iface_responder_ncache__methods[] = {
+ {
+ "ResetUsers", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct iface_responder_ncache, ResetUsers),
+ NULL, /* no invoker */
+ },
+ {
+ "ResetGroups", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct iface_responder_ncache, ResetGroups),
+ NULL, /* no invoker */
+ },
+ { NULL, }
+};
+
+/* interface info for org.freedesktop.sssd.Responder.NegativeCache */
+const struct sbus_interface_meta iface_responder_ncache_meta = {
+ "org.freedesktop.sssd.Responder.NegativeCache", /* name */
+ iface_responder_ncache__methods,
+ NULL, /* no signals */
+ NULL, /* no properties */
+ sbus_invoke_get_all, /* GetAll invoker */
+};
+
/* invokes a handler with a 's' DBus signature */
static int invoke_s_method(struct sbus_request *dbus_req, void *function_ptr)
{
diff --git a/src/responder/common/iface/responder_iface_generated.h b/src/responder/common/iface/responder_iface_generated.h
index e7f5c64fe..964f19b73 100644
--- a/src/responder/common/iface/responder_iface_generated.h
+++ b/src/responder/common/iface/responder_iface_generated.h
@@ -16,6 +16,11 @@
#define IFACE_RESPONDER_DOMAIN_SETACTIVE "SetActive"
#define IFACE_RESPONDER_DOMAIN_SETINCONSISTENT "SetInconsistent"
+/* constants for org.freedesktop.sssd.Responder.NegativeCache */
+#define IFACE_RESPONDER_NCACHE "org.freedesktop.sssd.Responder.NegativeCache"
+#define IFACE_RESPONDER_NCACHE_RESETUSERS "ResetUsers"
+#define IFACE_RESPONDER_NCACHE_RESETGROUPS "ResetGroups"
+
/* ------------------------------------------------------------------------
* DBus handlers
*
@@ -47,6 +52,19 @@ int iface_responder_domain_SetActive_finish(struct sbus_request *req);
/* finish function for SetInconsistent */
int iface_responder_domain_SetInconsistent_finish(struct sbus_request *req);
+/* vtable for org.freedesktop.sssd.Responder.NegativeCache */
+struct iface_responder_ncache {
+ struct sbus_vtable vtable; /* derive from sbus_vtable */
+ int (*ResetUsers)(struct sbus_request *req, void *data);
+ int (*ResetGroups)(struct sbus_request *req, void *data);
+};
+
+/* finish function for ResetUsers */
+int iface_responder_ncache_ResetUsers_finish(struct sbus_request *req);
+
+/* finish function for ResetGroups */
+int iface_responder_ncache_ResetGroups_finish(struct sbus_request *req);
+
/* ------------------------------------------------------------------------
* DBus Interface Metadata
*
@@ -60,4 +78,7 @@ int iface_responder_domain_SetInconsistent_finish(struct sbus_request *req);
/* interface info for org.freedesktop.sssd.Responder.Domain */
extern const struct sbus_interface_meta iface_responder_domain_meta;
+/* interface info for org.freedesktop.sssd.Responder.NegativeCache */
+extern const struct sbus_interface_meta iface_responder_ncache_meta;
+
#endif /* __RESPONDER_IFACE_XML__ */
diff --git a/src/responder/common/iface/responder_ncache.c b/src/responder/common/iface/responder_ncache.c
new file mode 100644
index 000000000..c7aa0a3a4
--- /dev/null
+++ b/src/responder/common/iface/responder_ncache.c
@@ -0,0 +1,41 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ Copyright (C) 2017 Red Hat
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "util/util.h"
+#include "sbus/sssd_dbus.h"
+#include "responder/common/responder.h"
+#include "responder/common/negcache.h"
+#include "responder/common/iface/responder_iface.h"
+
+int sss_resp_reset_ncache_users(struct sbus_request *req, void *data)
+{
+ struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx);
+
+ sss_ncache_reset_users(rctx->ncache);
+ return iface_responder_ncache_ResetUsers_finish(req);
+}
+
+int sss_resp_reset_ncache_groups(struct sbus_request *req, void *data)
+{
+ struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx);
+
+ sss_ncache_reset_groups(rctx->ncache);
+ return iface_responder_ncache_ResetGroups_finish(req);
+}