[Libguestfs] [PATCH 2/2] Use setfiles from the appliance for the SELinux relabel (RHBZ#1089100).
Pino Toscano
ptoscano at redhat.com
Tue May 27 08:52:43 UTC 2014
On Tuesday 27 May 2014 09:08:27 Richard W.M. Jones wrote:
> 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)
Yes, that together its comment above is done to make that setting
explicit, so it is not changed in the future creating issues.
> > + 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.
Good idea, I will use it.
Thanks,
--
Pino Toscano
More information about the Libguestfs
mailing list