summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabiano Fidêncio <fidencio@redhat.com>2016-12-14 09:23:14 +0100
committerLukas Slebodnik <lslebodn@redhat.com>2017-01-23 18:46:37 +0100
commitb46c4c0d3e364636af1b42683cd3229ffa0b77cb (patch)
tree596aa518cd7da12b48d803cb62333d8ddfb6fe72
parent26f11a75dc0d973d575e5d2d56dc13a698a68ea5 (diff)
downloadsssd-b46c4c0d3e364636af1b42683cd3229ffa0b77cb.tar.gz
sssd-b46c4c0d3e364636af1b42683cd3229ffa0b77cb.tar.xz
sssd-b46c4c0d3e364636af1b42683cd3229ffa0b77cb.zip
SBUS: Add a time_t pointer to the sbus_connection
The idea of this commit is to provide a way to update the time of the last request coming from/going to the responders through sbus. For now it's not used anywhere as all the functions that will pass their time_t to the sbus_connection are currently passing NULL. It will be used by follow-up patches. Related: https://fedorahosted.org/sssd/ticket/3245 Signed-off-by: Fabiano Fidêncio <fidencio@redhat.com> Reviewed-by: Pavel Březina <pbrezina@redhat.com> Reviewed-by: Jakub Hrozek <jhrozek@redhat.com> Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
-rw-r--r--src/monitor/monitor_interfaces.h1
-rw-r--r--src/monitor/monitor_sbus.c3
-rw-r--r--src/providers/data_provider_be.c3
-rw-r--r--src/providers/proxy/proxy_child.c2
-rw-r--r--src/responder/common/responder_common.c3
-rw-r--r--src/responder/ifp/ifpsrv.c2
-rw-r--r--src/sbus/sbus_client.c4
-rw-r--r--src/sbus/sbus_client.h1
-rw-r--r--src/sbus/sssd_dbus.h2
-rw-r--r--src/sbus/sssd_dbus_connection.c8
-rw-r--r--src/sbus/sssd_dbus_interface.c4
-rw-r--r--src/sbus/sssd_dbus_private.h3
-rw-r--r--src/sbus/sssd_dbus_server.c2
13 files changed, 29 insertions, 9 deletions
diff --git a/src/monitor/monitor_interfaces.h b/src/monitor/monitor_interfaces.h
index c5f3f7cc6..136beb4f5 100644
--- a/src/monitor/monitor_interfaces.h
+++ b/src/monitor/monitor_interfaces.h
@@ -50,4 +50,5 @@ errno_t sss_monitor_init(TALLOC_CTX *mem_ctx,
uint16_t svc_version,
uint16_t svc_type,
void *pvt,
+ time_t *last_request_time,
struct sbus_connection **mon_conn);
diff --git a/src/monitor/monitor_sbus.c b/src/monitor/monitor_sbus.c
index af6e1cffe..faf28f728 100644
--- a/src/monitor/monitor_sbus.c
+++ b/src/monitor/monitor_sbus.c
@@ -167,6 +167,7 @@ errno_t sss_monitor_init(TALLOC_CTX *mem_ctx,
uint16_t svc_version,
uint16_t svc_type,
void *pvt,
+ time_t *last_request_time,
struct sbus_connection **mon_conn)
{
errno_t ret;
@@ -180,7 +181,7 @@ errno_t sss_monitor_init(TALLOC_CTX *mem_ctx,
return ret;
}
- ret = sbus_client_init(mem_ctx, ev, sbus_address, &conn);
+ ret = sbus_client_init(mem_ctx, ev, sbus_address, last_request_time, &conn);
if (ret != EOK) {
DEBUG(SSSDBG_FATAL_FAILURE, "Failed to connect to monitor services.\n");
talloc_free(sbus_address);
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 36f96df6e..12b5f43d0 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -408,7 +408,8 @@ errno_t be_process_init(TALLOC_CTX *mem_ctx,
ret = sss_monitor_init(be_ctx, be_ctx->ev, &monitor_be_methods,
be_ctx->identity, DATA_PROVIDER_VERSION,
- MT_SVC_PROVIDER, be_ctx, &be_ctx->mon_conn);
+ MT_SVC_PROVIDER, be_ctx, NULL,
+ &be_ctx->mon_conn);
if (ret != EOK) {
DEBUG(SSSDBG_FATAL_FAILURE, "Unable to initialize monitor connection\n");
goto done;
diff --git a/src/providers/proxy/proxy_child.c b/src/providers/proxy/proxy_child.c
index b492adcb3..be58622eb 100644
--- a/src/providers/proxy/proxy_child.c
+++ b/src/providers/proxy/proxy_child.c
@@ -440,7 +440,7 @@ static int proxy_cli_init(struct pc_ctx *ctx)
return ENOMEM;
}
- ret = sbus_client_init(ctx, ctx->ev, sbus_address, &ctx->conn);
+ ret = sbus_client_init(ctx, ctx->ev, sbus_address, NULL, &ctx->conn);
if (ret != EOK) {
DEBUG(SSSDBG_CRIT_FAILURE, "sbus_client_init failed.\n");
return ret;
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c
index 2a585d2a4..dc6d8d316 100644
--- a/src/responder/common/responder_common.c
+++ b/src/responder/common/responder_common.c
@@ -574,6 +574,7 @@ static int sss_dp_init(struct resp_ctx *rctx,
}
ret = sbus_client_init(rctx, rctx->ev,
be_conn->sbus_address,
+ NULL,
&be_conn->conn);
if (ret != EOK) {
DEBUG(SSSDBG_FATAL_FAILURE, "Failed to connect to monitor services.\n");
@@ -1023,7 +1024,7 @@ int sss_process_init(TALLOC_CTX *mem_ctx,
ret = sss_monitor_init(rctx, rctx->ev, monitor_intf,
svc_name, svc_version, MT_SVC_SERVICE,
- rctx, &rctx->mon_conn);
+ rctx, NULL, &rctx->mon_conn);
if (ret != EOK) {
DEBUG(SSSDBG_FATAL_FAILURE, "fatal error setting up message bus\n");
goto fail;
diff --git a/src/responder/ifp/ifpsrv.c b/src/responder/ifp/ifpsrv.c
index dda10c7bb..37b62a7f4 100644
--- a/src/responder/ifp/ifpsrv.c
+++ b/src/responder/ifp/ifpsrv.c
@@ -138,7 +138,7 @@ sysbus_init(TALLOC_CTX *mem_ctx,
/* Integrate with tevent loop */
ret = sbus_init_connection(system_bus, ev, conn,
SBUS_CONN_TYPE_SYSBUS,
- &system_bus->conn);
+ NULL, &system_bus->conn);
if (ret != EOK) {
DEBUG(SSSDBG_CRIT_FAILURE,
"Could not integrate D-BUS into mainloop.\n");
diff --git a/src/sbus/sbus_client.c b/src/sbus/sbus_client.c
index 8ad4c0f36..1f084e832 100644
--- a/src/sbus/sbus_client.c
+++ b/src/sbus/sbus_client.c
@@ -27,6 +27,7 @@
int sbus_client_init(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
const char *server_address,
+ time_t *last_request_time,
struct sbus_connection **_conn)
{
struct sbus_connection *conn = NULL;
@@ -63,7 +64,8 @@ int sbus_client_init(TALLOC_CTX *mem_ctx,
return EIO;
}
- ret = sbus_new_connection(mem_ctx, ev, server_address, &conn);
+ ret = sbus_new_connection(mem_ctx, ev, server_address,
+ last_request_time, &conn);
if (ret != EOK) {
goto fail;
}
diff --git a/src/sbus/sbus_client.h b/src/sbus/sbus_client.h
index f76b40ec4..0366e568a 100644
--- a/src/sbus/sbus_client.h
+++ b/src/sbus/sbus_client.h
@@ -28,6 +28,7 @@
int sbus_client_init(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
const char *server_address,
+ time_t *last_request_time,
struct sbus_connection **_conn);
#endif /* SBUS_CLIENT_H_ */
diff --git a/src/sbus/sssd_dbus.h b/src/sbus/sssd_dbus.h
index 15e3b117e..0cce8b963 100644
--- a/src/sbus/sssd_dbus.h
+++ b/src/sbus/sssd_dbus.h
@@ -155,6 +155,7 @@ int sbus_new_server(TALLOC_CTX *mem_ctx,
int sbus_new_connection(TALLOC_CTX *ctx,
struct tevent_context *ev,
const char *address,
+ time_t *last_request_time,
struct sbus_connection **conn);
/* sbus_add_connection
@@ -173,6 +174,7 @@ int sbus_init_connection(TALLOC_CTX *ctx,
struct tevent_context *ev,
DBusConnection *dbus_conn,
int connection_type,
+ time_t *last_request_time,
struct sbus_connection **_conn);
DBusConnection *sbus_get_connection(struct sbus_connection *conn);
diff --git a/src/sbus/sssd_dbus_connection.c b/src/sbus/sssd_dbus_connection.c
index 6f48e2706..2536ef630 100644
--- a/src/sbus/sssd_dbus_connection.c
+++ b/src/sbus/sssd_dbus_connection.c
@@ -148,6 +148,7 @@ int sbus_init_connection(TALLOC_CTX *ctx,
struct tevent_context *ev,
DBusConnection *dbus_conn,
int connection_type,
+ time_t *last_request_time,
struct sbus_connection **_conn)
{
struct sbus_connection *conn;
@@ -161,6 +162,7 @@ int sbus_init_connection(TALLOC_CTX *ctx,
conn->type = SBUS_CONNECTION;
conn->dbus.conn = dbus_conn;
conn->connection_type = connection_type;
+ conn->last_request_time = last_request_time;
ret = sbus_opath_hash_init(conn, conn, &conn->managed_paths);
if (ret != EOK) {
@@ -259,7 +261,8 @@ static int sbus_conn_set_fns(struct sbus_connection *conn)
}
int sbus_new_connection(TALLOC_CTX *ctx, struct tevent_context *ev,
- const char *address, struct sbus_connection **_conn)
+ const char *address, time_t *last_request_time,
+ struct sbus_connection **_conn)
{
struct sbus_connection *conn;
DBusConnection *dbus_conn;
@@ -278,7 +281,8 @@ int sbus_new_connection(TALLOC_CTX *ctx, struct tevent_context *ev,
return EIO;
}
- ret = sbus_init_connection(ctx, ev, dbus_conn, SBUS_CONN_TYPE_SHARED, &conn);
+ ret = sbus_init_connection(ctx, ev, dbus_conn, SBUS_CONN_TYPE_SHARED,
+ last_request_time, &conn);
if (ret != EOK) {
/* FIXME: release resources */
}
diff --git a/src/sbus/sssd_dbus_interface.c b/src/sbus/sssd_dbus_interface.c
index e96e29b79..32e5b27e1 100644
--- a/src/sbus/sssd_dbus_interface.c
+++ b/src/sbus/sssd_dbus_interface.c
@@ -1089,6 +1089,10 @@ sbus_message_handler(DBusConnection *dbus_conn,
}
tevent_req_set_callback(req, sbus_message_handler_got_caller_id, sbus_req);
+ if (conn->last_request_time != NULL) {
+ *conn->last_request_time = time(NULL);
+ }
+
return DBUS_HANDLER_RESULT_HANDLED;
fail: ;
diff --git a/src/sbus/sssd_dbus_private.h b/src/sbus/sssd_dbus_private.h
index 44a116e6c..cdbf1d584 100644
--- a/src/sbus/sssd_dbus_private.h
+++ b/src/sbus/sssd_dbus_private.h
@@ -66,6 +66,9 @@ struct sbus_connection {
/* watches list */
struct sbus_watch_ctx *watch_list;
+
+ /* responder related stuff */
+ time_t *last_request_time;
};
/* =Standard=interfaces=================================================== */
diff --git a/src/sbus/sssd_dbus_server.c b/src/sbus/sssd_dbus_server.c
index 6cc4172a0..900086924 100644
--- a/src/sbus/sssd_dbus_server.c
+++ b/src/sbus/sssd_dbus_server.c
@@ -53,7 +53,7 @@ static void sbus_server_init_new_connection(DBusServer *dbus_server,
DEBUG(SSSDBG_FUNC_DATA,"Adding connection %p.\n", dbus_conn);
ret = sbus_init_connection(server, server->ev, dbus_conn,
- SBUS_CONN_TYPE_PRIVATE, &conn);
+ SBUS_CONN_TYPE_PRIVATE, NULL, &conn);
if (ret != 0) {
dbus_connection_close(dbus_conn);
DEBUG(SSSDBG_FUNC_DATA, "Closing connection (failed setup)\n");