[Libguestfs] [PATCH 2/5] daemon: fix/enhance error reporting of Augeas exceptions

Pino Toscano ptoscano at redhat.com
Thu May 30 07:56:46 UTC 2019


The current code was broken, as the field 1 of the exception value is
the error code (int), not an error string, and thus it would have
crashed.  This did not happen in practice, as all the usage of
ocaml-augeas were only in the inspection code with ad-hoc exception
catching blocks.

Other than fixing the aforementioned issue, enhance the error reporting
to be as close as possible to what the current AUGEAS_ERROR() macro
does: error message, error minor message (if available), error details
(if available).
---
 daemon/daemon-c.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/daemon/daemon-c.c b/daemon/daemon-c.c
index 533bf7ce7..62e7daf2c 100644
--- a/daemon/daemon-c.c
+++ b/daemon/daemon-c.c
@@ -65,8 +65,15 @@ guestfs_int_daemon_exn_to_reply_with_error (const char *func, value exn)
     reply_with_error ("%s", String_val (Field (exn, 1)));
   else if (STREQ (exn_name, "Invalid_argument"))
     reply_with_error ("invalid argument: %s", String_val (Field (exn, 1)));
-  else if (STREQ (exn_name, "Augeas.Error"))
-    reply_with_error ("augeas error: %s", String_val (Field (exn, 1)));
+  else if (STREQ (exn_name, "Augeas.Error")) {
+    const char *message = String_val (Field (exn, 3));
+    const char *minor = String_val (Field (exn, 4));
+    const char *details = String_val (Field (exn, 5));
+    reply_with_error ("augeas error: %s%s%s%s%s",
+                      message,
+                      minor ? ": " : "", minor ? minor : "",
+                      details ? ": " : "", details ? details : "");
+}
   else if (STREQ (exn_name, "PCRE.Error")) {
     value pair = Field (exn, 1);
     reply_with_error ("PCRE error: %s (PCRE error code: %d)",
-- 
2.21.0




More information about the Libguestfs mailing list