- closes #606

Signed-off-by: Jakub Filak <[email protected]>
---
 src/dbus/abrt-dbus.c | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/dbus/abrt-dbus.c b/src/dbus/abrt-dbus.c
index 754ef97..9ec4cdc 100644
--- a/src/dbus/abrt-dbus.c
+++ b/src/dbus/abrt-dbus.c
@@ -390,6 +390,7 @@ static struct dump_dir 
*open_directory_for_modification_of_element(
     {
         if (strcmp(*protected, element) == 0)
         {
+            VERB1 log("'%s' element of '%s' can't be modified", element, 
problem_id);
             char *error = xasprintf(_("'%s' element can't be modified"), 
element);
             g_dbus_method_invocation_return_dbus_error(invocation,
                                         
"org.freedesktop.problems.ProtectedElement",
@@ -402,11 +403,17 @@ static struct dump_dir 
*open_directory_for_modification_of_element(
     if (!dump_dir_accessible_by_uid(problem_id, caller_uid))
     {
         if (errno == ENOTDIR)
+        {
+            VERB1 log("'%s' is not a valid problem directory", problem_id);
             return_InvalidProblemDir_error(invocation, problem_id);
+        }
         else
+        {
+            VERB1 log("UID(%d) is not Authorized to access '%s'", caller_uid, 
problem_id);
             g_dbus_method_invocation_return_dbus_error(invocation,
                                 "org.freedesktop.problems.AuthFailure",
                                 _("Not Authorized"));
+        }
 
         return NULL;
     }
@@ -414,6 +421,7 @@ static struct dump_dir 
*open_directory_for_modification_of_element(
     struct dump_dir *dd = dd_opendir(problem_id, /* flags : */ 0);
     if (!dd)
     {   /* This should not happen because of the access check above */
+        VERB1 log("Can't access the problem '%s' for modification", 
problem_id);
         g_dbus_method_invocation_return_dbus_error(invocation,
                                 "org.freedesktop.problems.Failure",
                                 _("Can't access the problem for 
modification"));
@@ -636,6 +644,7 @@ static void handle_method_call(GDBusConnection *connection,
 
         if (element == NULL || element[0] == '\0' || strlen(element) > 64)
         {
+            VERB1 log("'%s' is not a valid element name of '%s'", element, 
problem_id);
             char *error = xasprintf(_("'%s' is not a valid element name"), 
element);
             g_dbus_method_invocation_return_dbus_error(invocation,
                                               
"org.freedesktop.problems.InvalidElement",
@@ -648,16 +657,28 @@ static void handle_method_call(GDBusConnection 
*connection,
         struct dump_dir *dd = open_directory_for_modification_of_element(
                                     invocation, caller_uid, problem_id, 
element);
         if (!dd)
+            /* Already logged from 
open_directory_for_modification_of_element() */
             return;
 
         /* Is it good idea to make it static? Is it possible to change the max 
size while a single run? */
-        const double max_size = g_settings_nMaxCrashReportsSize * (1024 * 
1024);
+        const double max_dir_size = g_settings_nMaxCrashReportsSize * (1024 * 
1024);
+        const long item_size = dd_get_item_size(dd, element);
+        if (item_size < 0)
+        {
+            VERB1 log("Can't get size of '%s/%s'", problem_id, element);
+            char *error = xasprintf(_("Can't get size of '%s'"), element);
+            g_dbus_method_invocation_return_dbus_error(invocation,
+                                                      
"org.freedesktop.problems.Failure",
+                                                      error);
+            return;
+        }
 
-        const double requested_size = strlen(value) - dd_get_item_size(dd, 
element);
+        const double requested_size = strlen(value) - item_size;
         /* Don't want to check the size limit in case of reducing of size */
         if (requested_size > 0
-            && requested_size > (max_size - 
get_dirsize(g_settings_dump_location)))
+            && requested_size > (max_dir_size - 
get_dirsize(g_settings_dump_location)))
         {
+            VERB1 log("No problem space left in '%s' (requested Bytes %f)", 
problem_id, requested_size);
             g_dbus_method_invocation_return_dbus_error(invocation,
                                                       
"org.freedesktop.problems.Failure",
                                                       _("No problem space 
left"));
@@ -683,6 +704,7 @@ static void handle_method_call(GDBusConnection *connection,
         struct dump_dir *dd = open_directory_for_modification_of_element(
                                     invocation, caller_uid, problem_id, 
element);
         if (!dd)
+            /* Already logged from 
open_directory_for_modification_of_element() */
             return;
 
         const int res = dd_delete_item(dd, element);
@@ -690,6 +712,7 @@ static void handle_method_call(GDBusConnection *connection,
 
         if (res != 0)
         {
+            VERB1 log("Can't delete the element '%s' from the problem 
directory '%s'", element, problem_id);
             char *error = xasprintf(_("Can't delete the element '%s' from the 
problem directory '%s'"), element, problem_id);
             g_dbus_method_invocation_return_dbus_error(invocation,
                                           "org.freedesktop.problems.Failure",
-- 
1.8.1.2

Reply via email to