main: catch exceptions when loading blob handlers

If an error occurs while attempting to load the blob handlers (such as a
filesystem error), the uncaught exception will crash the entire IPMI
daemon. Instead, catch the exception and print an error message.

Tested: ipmid doesn't crash when /usr/lib/blobs-ipmid is missing
Signed-off-by: Benjamin Fair <benjaminfair@google.com>
Change-Id: Ic316f6e5aa3c4bc6eba4fa2e561b338f4b20f606
diff --git a/main.cpp b/main.cpp
index c6b5b04..e680d7c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -26,6 +26,7 @@
 #include <host-ipmid/iana.hpp>
 #include <host-ipmid/oemrouter.hpp>
 #include <memory>
+#include <phosphor-logging/log.hpp>
 
 /* TODO: Swap out once https://gerrit.openbmc-project.xyz/12743 is merged */
 namespace oem
@@ -36,6 +37,8 @@
 namespace blobs
 {
 
+using namespace phosphor::logging;
+
 static ipmi_ret_t handleBlobCommand(ipmi_cmd_t cmd, const uint8_t* reqBuf,
                                     uint8_t* replyCmdBuf, size_t* dataLen)
 {
@@ -75,6 +78,14 @@
                                handleBlobCommand);
 
     /* Install handlers. */
-    loadLibraries(expectedHandlerPath);
+    try
+    {
+        loadLibraries(expectedHandlerPath);
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>("ERROR loading blob handlers",
+                        entry("ERROR=%s", e.what()));
+    }
 }
 } // namespace blobs