summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-06-04 02:04:44 +0200
committerLennart Poettering <lennart@poettering.net>2009-06-04 02:04:44 +0200
commit86296db16ac7fe09572f104672e32618b07b4414 (patch)
tree73b48b05034bad88e241ccde322f33a840725949
parentb1d591ccb44b9440a94b9e4238b817d93e38920d (diff)
properly pass error codes to the client
-rw-r--r--rtkit-daemon.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/rtkit-daemon.c b/rtkit-daemon.c
index 6a9f4ff..bdfb598 100644
--- a/rtkit-daemon.c
+++ b/rtkit-daemon.c
@@ -500,6 +500,20 @@ fail:
return r;
}
+static const char *translate_error(int error) {
+ switch (error) {
+ case -EPERM:
+ case -EACCES:
+ return DBUS_ERROR_ACCESS_DENIED;
+
+ case -ENOMEM:
+ return DBUS_ERROR_NO_MEMORY;
+
+ default:
+ return DBUS_ERROR_FAILED;
+ }
+}
+
static DBusHandlerResult dbus_handler(DBusConnection *c, DBusMessage *m, void *userdata) {
DBusError error;
DBusMessage *r = NULL;
@@ -525,12 +539,12 @@ static DBusHandlerResult dbus_handler(DBusConnection *c, DBusMessage *m, void *u
}
if ((ret = process_fill(&p, c, m)) < 0) {
- assert_se(r = dbus_message_new_error_printf(m, DBUS_ERROR_FAILED, strerror(-ret)));
+ assert_se(r = dbus_message_new_error_printf(m, translate_error(ret), strerror(-ret)));
goto finish;
}
if ((ret = process_set_realtime(&p, (pid_t) thread, priority))) {
- assert_se(r = dbus_message_new_error_printf(m, DBUS_ERROR_FAILED, strerror(-ret)));
+ assert_se(r = dbus_message_new_error_printf(m, translate_error(ret), strerror(-ret)));
goto finish;
}
@@ -555,12 +569,12 @@ static DBusHandlerResult dbus_handler(DBusConnection *c, DBusMessage *m, void *u
}
if ((ret = process_fill(&p, c, m)) < 0) {
- assert_se(r = dbus_message_new_error_printf(m, DBUS_ERROR_FAILED, strerror(-ret)));
+ assert_se(r = dbus_message_new_error_printf(m, translate_error(ret), strerror(-ret)));
goto finish;
}
if ((ret = process_set_high_priority(&p, (pid_t) thread, priority))) {
- assert_se(r = dbus_message_new_error_printf(m, DBUS_ERROR_FAILED, strerror(-ret)));
+ assert_se(r = dbus_message_new_error_printf(m, translate_error(ret), strerror(-ret)));
goto finish;
}