[libvirt] [PATCH RFC] virhook: adding virHookCheck() inside virHookCall().

Julio Faracco jcfaracco at gmail.com
Mon Jul 11 18:22:44 UTC 2016


This commit introduces the virHookCheck() before running the command (hook).
The virHookCheck() before virCommandRun() will avoid errors with changes
(removal and other permissions changes) in the hook file, while the libvirt
daemon is running.

Now, when you remove the hook file while libvirtd is running you get the
following error:

virsh # start WINDOWS_7
error: Failed to start domain WINDOWS_7
error: Hook script execution failed: internal error: Child process (LC_ALL=C
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/home/julio USER=root LOGNAME=root /etc/libvirt/hooks/qemu WINDOWS_7
prepare begin -) unexpected exit status 127: libvirt:  error : cannot execute
binary /etc/libvirt/hooks/qemu: No such file or directory

Cc: Carlos Castilho <ccast at br.ibm.com>
Signed-off-by: Julio Faracco <jcfaracco at gmail.com>
---
 src/util/virhook.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/util/virhook.c b/src/util/virhook.c
index d37d6da..f741b30 100644
--- a/src/util/virhook.c
+++ b/src/util/virhook.c
@@ -294,7 +294,12 @@ virHookCall(int driver,
     if (output)
         virCommandSetOutputBuffer(cmd, output);
 
-    ret = virCommandRun(cmd, NULL);
+    ret = virHookCheck(driver, virHookDriverTypeToString(driver));
+
+    if (ret > 0) {
+        ret = virCommandRun(cmd, NULL);
+    }
+
     if (ret < 0) {
         /* Convert INTERNAL_ERROR into known error.  */
         virReportError(VIR_ERR_HOOK_SCRIPT_FAILED, "%s",
-- 
1.9.1




More information about the libvir-list mailing list