diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index eb8f519a9abb5f21afe0acb3802797594c32b459..1d3c5f03160a61708191e6b45ed61566fd1d3e0d 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -8183,12 +8183,14 @@ cmdLxcEnterNamespace(vshControl *ctl, const vshCmd *cmd) if ((pid = virFork()) < 0) goto cleanup; if (pid == 0) { + int status; + if (setlabel && virDomainLxcEnterSecurityLabel(secmodel, seclabel, NULL, 0) < 0) - _exit(255); + _exit(EXIT_CANCELED); if (virDomainLxcEnterNamespace(dom, nfdlist, @@ -8196,27 +8198,28 @@ cmdLxcEnterNamespace(vshControl *ctl, const vshCmd *cmd) NULL, NULL, 0) < 0) - _exit(255); + _exit(EXIT_CANCELED); /* Fork a second time because entering the * pid namespace only takes effect after fork */ if ((pid = virFork()) < 0) - _exit(255); + _exit(EXIT_CANCELED); if (pid == 0) { execv(cmdargv[0], cmdargv); - _exit(255); - } else { - if (virProcessWait(pid, NULL, false) < 0) - _exit(255); + _exit(errno == ENOENT ? EXIT_ENOENT : EXIT_CANNOT_INVOKE); } - _exit(0); + if (virProcessWait(pid, &status, true) < 0) + _exit(EXIT_CANNOT_INVOKE); + virProcessExitWithStatus(status); } else { for (i = 0; i < nfdlist; i++) VIR_FORCE_CLOSE(fdlist[i]); VIR_FREE(fdlist); - if (virProcessWait(pid, NULL, false) < 0) + if (virProcessWait(pid, NULL, false) < 0) { + vshReportError(ctl); goto cleanup; + } } ret = true; diff --git a/tools/virsh.pod b/tools/virsh.pod index ab9bdd9b29af33a962069b2d7ef71c13fe47b663..cafbb9a1c925838d3f4f2faa60a6d36472ffbad9 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -3371,7 +3371,8 @@ Enter the namespace of I and execute the command C passing the requested args. The binary path is relative to the container root filesystem, not the host root filesystem. The binary will inherit the environment variables / console visible to virsh. This command only works -when connected to the LXC hypervisor driver. +when connected to the LXC hypervisor driver. This command succeeds only +if C has 0 exit status. =back @@ -3486,7 +3487,7 @@ Alternatively report bugs to your software distributor / vendor. =head1 COPYRIGHT -Copyright (C) 2005, 2007-2010 Red Hat, Inc., and the authors listed in the +Copyright (C) 2005, 2007-2014 Red Hat, Inc., and the authors listed in the libvirt AUTHORS file. =head1 LICENSE