[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