[libvirt] [PATCH v2 3/4] util: extend virExecWithHook()
Daniel P. Berrange
berrange at redhat.com
Tue Jan 31 12:04:19 UTC 2012
On Tue, Jan 31, 2012 at 01:51:22PM +0900, Taku Izumi wrote:
>
> This patch extends virExecWithHook() to receive
> capability information.
>
>
> Signed-off-by: Taku Izumi <izumi.taku at jp.fujitsu.com>
> Signed-off-by: Shota Hirae <m11g1401 at hibikino.ne.jp>
> ---
> src/util/command.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> Index: libvirt/src/util/command.c
> ===================================================================
> --- libvirt.orig/src/util/command.c
> +++ libvirt/src/util/command.c
> @@ -393,6 +393,7 @@ prepareStdFd(int fd, int std)
> * @hook optional virExecHook function to call prior to exec
> * @data data to pass to the hook function
> * @pidfile path to use as pidfile for daemonized process (needs DAEMON flag)
> + * @capabilities capabilities to keep
> */
> static int
> virExecWithHook(const char *const*argv,
> @@ -404,7 +405,8 @@ virExecWithHook(const char *const*argv,
> unsigned int flags,
> virExecHook hook,
> void *data,
> - char *pidfile)
> + char *pidfile,
> + unsigned long long capabilities)
> {
> pid_t pid;
> int null = -1, i, openmax;
> @@ -633,9 +635,9 @@ virExecWithHook(const char *const*argv,
>
> /* The steps above may need todo something privileged, so
> * we delay clearing capabilities until the last minute */
> - if ((flags & VIR_EXEC_CLEAR_CAPS) &&
> - virClearCapabilities() < 0)
> - goto fork_error;
> + if (capabilities || (flags & VIR_EXEC_CLEAR_CAPS))
> + if (virSetCapabilities(capabilities) < 0)
> + goto fork_error;
>
> /* Close logging again to ensure no FDs leak to child */
> virLogReset();
> @@ -723,7 +725,8 @@ virExecWithHook(const char *const*argv A
> int flags_unused ATTRIBUTE_UNUSED,
> virExecHook hook ATTRIBUTE_UNUSED,
> void *data ATTRIBUTE_UNUSED,
> - char *pidfile ATTRIBUTE_UNUSED)
> + char *pidfile ATTRIBUTE_UNUSED,
> + unsigned long long capabilities ATTRIBUTE_UNUSED)
> {
> /* XXX: Some day we can implement pieces of virCommand/virExec on
> * top of _spawn() or CreateProcess(), but we can't implement
> @@ -2171,7 +2174,8 @@ virCommandRunAsync(virCommandPtr cmd, pi
> cmd->flags,
> virCommandHook,
> cmd,
> - cmd->pidfile);
> + cmd->pidfile,
> + cmd->capabilities);
>
> VIR_DEBUG("Command result %d, with PID %d",
> ret, (int)cmd->pid);
ACK
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list