mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
util: add access check for hooks to fix running as non-root
Since feb83c1e71 libvirtd will abort on
startup if run as non-root
2020-07-01 16:30:30.738+0000: 1647444: error : virDirOpenInternal:2869 : cannot open directory '/etc/libvirt/hooks/daemon.d': Permission denied
The root cause flaw is that non-root libvirtd is using /etc/libvirt for
its hooks. Traditionally that has been harmless though since we checked
whether we could access the hook file and degraded gracefully. We need
the same access check for iterating over the hook directory.
Long term we should make it possible to have an unprivileged hook dir
under $HOME.
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
@@ -171,6 +171,12 @@ virHookCheck(int no, const char *driver)
|
||||
}
|
||||
|
||||
dir_path = g_strdup_printf("%s.d", path);
|
||||
|
||||
if (!virFileIsExecutable(dir_path)) {
|
||||
VIR_DEBUG("Hook dir %s is not accessible", dir_path);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((ret = virDirOpenIfExists(&dir, dir_path)) < 0)
|
||||
return -1;
|
||||
|
||||
@@ -415,6 +421,10 @@ virHookCall(int driver,
|
||||
}
|
||||
|
||||
dir_path = g_strdup_printf("%s.d", path);
|
||||
|
||||
if (!virFileIsExecutable(dir_path))
|
||||
return script_ret;
|
||||
|
||||
if ((ret = virDirOpenIfExists(&dir, dir_path)) < 0)
|
||||
return -1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user