summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2015-02-02 18:15:27 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2015-02-03 16:19:24 +0000
commit652a324fb6a1030b3525f8395bf5bc05ab50d3d7 (patch)
tree083e4ad5dc9411cab9d5fa69501f1f8f129ebf05
parentc6e024834b8589bc09bcf341bbe97d648e417d16 (diff)
downloaddbus-652a324fb6a1030b3525f8395bf5bc05ab50d3d7.tar.gz
dbus-652a324fb6a1030b3525f8395bf5bc05ab50d3d7.tar.bz2
dbus-652a324fb6a1030b3525f8395bf5bc05ab50d3d7.zip
bus_context_log_and_set_error: add and use
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=88810 Reviewed-by: Philip Withnall
-rw-r--r--bus/activation.c7
-rw-r--r--bus/bus.c23
-rw-r--r--bus/bus.h6
-rw-r--r--bus/driver.c28
4 files changed, 39 insertions, 25 deletions
diff --git a/bus/activation.c b/bus/activation.c
index 9610c04b..138d69e1 100644
--- a/bus/activation.c
+++ b/bus/activation.c
@@ -1478,11 +1478,8 @@ pending_activation_timed_out (void *data)
dbus_error_init (&error);
- dbus_set_error (&error, DBUS_ERROR_TIMED_OUT,
- "Activation of %s timed out",
- pending_activation->service_name);
- bus_context_log (pending_activation->activation->context,
- DBUS_SYSTEM_LOG_INFO,
+ bus_context_log_and_set_error (pending_activation->activation->context,
+ DBUS_SYSTEM_LOG_INFO, &error, DBUS_ERROR_TIMED_OUT,
"Failed to activate service '%s': timed out",
pending_activation->service_name);
diff --git a/bus/bus.c b/bus/bus.c
index d7a068d7..091fbe28 100644
--- a/bus/bus.c
+++ b/bus/bus.c
@@ -1394,6 +1394,29 @@ bus_context_log_literal (BusContext *context,
}
}
+void
+bus_context_log_and_set_error (BusContext *context,
+ DBusSystemLogSeverity severity,
+ DBusError *error,
+ const char *name,
+ const char *msg,
+ ...)
+{
+ DBusError stack_error = DBUS_ERROR_INIT;
+ va_list args;
+
+ va_start (args, msg);
+ _dbus_set_error_valist (&stack_error, name, msg, args);
+ va_end (args);
+
+ /* If we hit OOM while setting the error, this will syslog "out of memory"
+ * which is itself an indication that something is seriously wrong */
+ bus_context_log_literal (context, DBUS_SYSTEM_LOG_SECURITY,
+ stack_error.message);
+
+ dbus_move_error (&stack_error, error);
+}
+
/*
* Log something about a message, usually that it was rejected.
*/
diff --git a/bus/bus.h b/bus/bus.h
index 746e5bad..57ad5c78 100644
--- a/bus/bus.h
+++ b/bus/bus.h
@@ -124,6 +124,12 @@ void bus_context_log (BusContext
void bus_context_log_literal (BusContext *context,
DBusSystemLogSeverity severity,
const char *msg);
+void bus_context_log_and_set_error (BusContext *context,
+ DBusSystemLogSeverity severity,
+ DBusError *error,
+ const char *name,
+ const char *msg,
+ ...) _DBUS_GNUC_PRINTF (5, 6);
dbus_bool_t bus_context_check_security_policy (BusContext *context,
BusTransaction *transaction,
DBusConnection *sender,
diff --git a/bus/driver.c b/bus/driver.c
index 21d4a0a9..6e8a6dac 100644
--- a/bus/driver.c
+++ b/bus/driver.c
@@ -106,14 +106,8 @@ bus_driver_check_caller_is_privileged (DBusConnection *connection,
{
const char *method = dbus_message_get_member (message);
- /* Yes this repetition is pretty horrible, but there's no
- * bus_context_log_valist() or dbus_set_error_valist() or
- * bus_context_log_literal() or dbus_set_error_literal().
- */
- bus_context_log (bus_transaction_get_context (transaction),
- DBUS_SYSTEM_LOG_SECURITY,
- "rejected attempt to call %s by unknown uid", method);
- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
+ bus_context_log_and_set_error (bus_transaction_get_context (transaction),
+ DBUS_SYSTEM_LOG_SECURITY, error, DBUS_ERROR_ACCESS_DENIED,
"rejected attempt to call %s by unknown uid", method);
return FALSE;
}
@@ -133,10 +127,8 @@ bus_driver_check_caller_is_privileged (DBusConnection *connection,
{
const char *method = dbus_message_get_member (message);
- bus_context_log (bus_transaction_get_context (transaction),
- DBUS_SYSTEM_LOG_SECURITY,
- "rejected attempt to call %s by uid %lu", method, uid);
- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
+ bus_context_log_and_set_error (bus_transaction_get_context (transaction),
+ DBUS_SYSTEM_LOG_SECURITY, error, DBUS_ERROR_ACCESS_DENIED,
"rejected attempt to call %s by uid %lu", method, uid);
return FALSE;
}
@@ -150,10 +142,8 @@ bus_driver_check_caller_is_privileged (DBusConnection *connection,
{
const char *method = dbus_message_get_member (message);
- bus_context_log (bus_transaction_get_context (transaction),
- DBUS_SYSTEM_LOG_SECURITY,
- "rejected attempt to call %s by unknown uid", method);
- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
+ bus_context_log_and_set_error (bus_transaction_get_context (transaction),
+ DBUS_SYSTEM_LOG_SECURITY, error, DBUS_ERROR_ACCESS_DENIED,
"rejected attempt to call %s by unknown uid", method);
goto out;
}
@@ -162,10 +152,8 @@ bus_driver_check_caller_is_privileged (DBusConnection *connection,
{
const char *method = dbus_message_get_member (message);
- bus_context_log (bus_transaction_get_context (transaction),
- DBUS_SYSTEM_LOG_SECURITY,
- "rejected attempt to call %s by uid %s", method, windows_sid);
- dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
+ bus_context_log_and_set_error (bus_transaction_get_context (transaction),
+ DBUS_SYSTEM_LOG_SECURITY, error, DBUS_ERROR_ACCESS_DENIED,
"rejected attempt to call %s by uid %s", method, windows_sid);
goto out;
}