[Libguestfs] [PATCH 2/2] Use setfiles from the appliance for the SELinux relabel (RHBZ#1089100).
Richard W.M. Jones
rjones at redhat.com
Tue May 27 08:08:27 UTC 2014
On Mon, May 26, 2014 at 11:21:59AM +0200, Pino Toscano wrote:
> Rewrite the relabel API to read the policy configured in the guest,
> invoking setfiles (added as part of the appliance, as part of
> policycoreutils) to relabel the specified root. In case of failure at
> any point of the process, a touch of .autorelabel in the root is tried
> as last-attempt measure to do the relabel.
>
> Considering that running SELinux tools in the appliance might be
> affected by the SELinux state (leading to wrong results),
> selinux_relabel now bails out if SELinux is enabled in the appliance.
> As a result of this, virt-builder and virt-customize explicitly disable
> it if the relabel is enabled.
> - g#set_selinux ops.flags.selinux_relabel;
> + (* If a relabel is needed, make sure to turn SELinux off to avoid
> + * awkward interactions with the relabel process.
> + *)
> + if ops.flags.selinux_relabel then g#set_selinux false;
This defaults to false, so AFAICT you could just remove this hunk. Or
call g#set_selinux false unconditionally to make your intention
explicit?
(Same for the customize_main.ml hunk)
> + len = length_without_training_slash (root);
> +
> + if (asprintf (&selinux_config, "%s%.*s/etc/selinux/config",
> + sysroot, len, root) == -1) {
> + if (verbose)
> + fprintf (stderr, "asprintf/selinux_config failed\n");
> + goto do_autorelabel;
> + }
> +
> + r = read_selinux_policy (selinux_config, &policy);
> + if (r == -1) {
> + if (verbose)
> + fprintf (stderr, "cannot read policy from %s\n", selinux_config);
> + goto do_autorelabel;
> + }
> + if (verbose)
> + fprintf (stderr, "policy in %s: %s\n", root, policy);
> +
> + if (policy[0] == '\0')
> + goto do_autorelabel;
You'll probably find this is much easier to write and a lot more
robust using augeas calls.
But yes, generally looks good.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list