diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-06-04 02:04:44 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-06-04 02:04:44 +0200 |
commit | 86296db16ac7fe09572f104672e32618b07b4414 (patch) | |
tree | 73b48b05034bad88e241ccde322f33a840725949 | |
parent | b1d591ccb44b9440a94b9e4238b817d93e38920d (diff) |
properly pass error codes to the client
-rw-r--r-- | rtkit-daemon.c | 22 |
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; } |