[SSSD] [PATCH] Catch cases where D-Bus connection is NULL
Jakub Hrozek
jhrozek at redhat.com
Fri Mar 30 19:46:34 UTC 2012
https://fedorahosted.org/sssd/ticket/1270
Is there a better way to proactively detect that there is no D-Bus
connection when a request comes in? The attached patch is more of a
band-aid for cases where the back end is not running at all but a
request comes in anyway.
-------------- next part --------------
>From b3f7501ddc9f9ddde1ee0537a60724e401368c53 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek at redhat.com>
Date: Fri, 30 Mar 2012 21:15:30 +0200
Subject: [PATCH] Catch cases where D-Bus connection is NULL
https://fedorahosted.org/sssd/ticket/1270
---
src/providers/data_provider_be.c | 20 ++++++++++++++++++++
src/sbus/sssd_dbus_connection.c | 4 ++++
2 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 2bc1930ca03cb7eeebabae5267468dd1db548133..473d83aca9d389a5f904d4a06f072e7fb0b3224f 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -349,6 +349,11 @@ static void acctinfo_callback(struct be_req *req,
}
dbus_conn = sbus_get_connection(req->becli->conn);
+ if (!dbus_conn) {
+ DEBUG(SSSDBG_CRIT_FAILURE, ("D-BUS not connected\n"));
+ return;
+ }
+
dbus_connection_send(dbus_conn, reply, NULL);
dbus_message_unref(reply);
@@ -592,6 +597,11 @@ static void be_pam_handler_callback(struct be_req *req,
}
dbus_conn = sbus_get_connection(req->becli->conn);
+ if (!dbus_conn) {
+ DEBUG(SSSDBG_CRIT_FAILURE, ("D-BUS not connected\n"));
+ return;
+ }
+
dbus_connection_send(dbus_conn, reply, NULL);
dbus_message_unref(reply);
@@ -751,6 +761,11 @@ static void be_sudo_handler_reply(struct sbus_connection *conn,
dp_err, dp_ret, errstr ? errstr : "<NULL>"));
dbus_conn = sbus_get_connection(conn);
+ if (!dbus_conn) {
+ DEBUG(SSSDBG_CRIT_FAILURE, ("D-BUS not connected\n"));
+ return;
+ }
+
dbus_connection_send(dbus_conn, reply, NULL);
dbus_message_unref(reply);
}
@@ -1139,6 +1154,11 @@ static void be_autofs_handler_callback(struct be_req *req,
}
dbus_conn = sbus_get_connection(req->becli->conn);
+ if (!dbus_conn) {
+ DEBUG(SSSDBG_CRIT_FAILURE, ("D-BUS not connected\n"));
+ return;
+ }
+
dbus_connection_send(dbus_conn, reply, NULL);
dbus_message_unref(reply);
diff --git a/src/sbus/sssd_dbus_connection.c b/src/sbus/sssd_dbus_connection.c
index 9faf3d9f7535999263a1ea1368808bbcaffb3c1a..9077b81c13b826326c616402e9ecfe0f924012de 100644
--- a/src/sbus/sssd_dbus_connection.c
+++ b/src/sbus/sssd_dbus_connection.c
@@ -707,6 +707,10 @@ int sbus_conn_send(struct sbus_connection *conn,
dbus_bool_t dbret;
dbus_conn = sbus_get_connection(conn);
+ if (!dbus_conn) {
+ DEBUG(SSSDBG_CRIT_FAILURE, ("D-BUS not connected\n"));
+ return ENOTCONN;
+ }
dbret = dbus_connection_send_with_reply(dbus_conn, msg,
&pending_reply,
--
1.7.7.6
More information about the sssd-devel
mailing list