Subject: bug#25052: [PATCH] install, mkdir: fix handling of -DZ and -pZ, respectively

From: Kamil Dudka <[email-masked]>
Date: Mon, 28 Nov 2016 17:39:38 +0100

On Monday, November 28, 2016 16:11:34 Pádraig Brady wrote:
> On 28/11/16 15:21, Kamil Dudka wrote:
> > ... in case two or more directories nested in each other are created and
> > each of them defaults to a different SELinux context.
> > 
> > * src/install.c (make_ancestor): When calling defaultcon(), give it the
> > same path that is given to mkdir().  The other path is not always valid
> > wrt. current working directory.
> > * src/mkdir.c (make_ancestor): Likewise.
> > * NEWS: Mention the bug fix.
> > 
> > Reported at https://bugzilla.redhat.com/1398913
> > ---
> > 
> >  NEWS          | 4 ++++
> >  src/install.c | 2 +-
> >  src/mkdir.c   | 2 +-
> >  3 files changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/NEWS b/NEWS
> > index 6f7505f..e88e932 100644
> > --- a/NEWS
> > +++ b/NEWS
> > @@ -25,6 +25,10 @@ GNU coreutils NEWS                                   
> > -*- outline -*-> 
> >    factor again outputs immediately when numbers are input interactively.
> >    [bug introduced in coreutils-8.24]
> > 
> > +  install -DZ and mkdir -pZ now set default SELinux context correctly
> > even if +  two or more directories nested in each other are created and
> > each of them +  defaults to a different SELinux context.
> > +
> > 
> >    ls --time-style no longer mishandles '%%b' in formats.
> >    [bug introduced in coreutils-7.2]
> > 
> > diff --git a/src/install.c b/src/install.c
> > index 414d645..d79d597 100644
> > --- a/src/install.c
> > +++ b/src/install.c
> > @@ -427,7 +427,7 @@ static int
> > 
> >  make_ancestor (char const *dir, char const *component, void *options)
> >  {
> >  
> >    struct cp_options const *x = options;
> > 
> > -  if (x->set_security_context && defaultcon (dir, S_IFDIR) < 0
> > +  if (x->set_security_context && defaultcon (component, S_IFDIR) < 0
> > 
> >        && ! ignorable_ctx_err (errno))
> >      
> >      error (0, errno, _("failed to set default creation context for %s"),
> >      
> >             quoteaf (dir));
> > 
> > diff --git a/src/mkdir.c b/src/mkdir.c
> > index ccd923b..6b51292 100644
> > --- a/src/mkdir.c
> > +++ b/src/mkdir.c
> > @@ -123,7 +123,7 @@ make_ancestor (char const *dir, char const *component,
> > void *options)> 
> >  {
> >  
> >    struct mkdir_options const *o = options;
> > 
> > -  if (o->set_security_context && defaultcon (dir, S_IFDIR) < 0
> > +  if (o->set_security_context && defaultcon (component, S_IFDIR) < 0
> > 
> >        && ! ignorable_ctx_err (errno))
> >      
> >      error (0, errno, _("failed to set default creation context for %s"),
> >      
> >             quoteaf (dir));
> 
> Looks good.
> Good timing re release 8.26 which we're about to cut.

Thanks for merging it upstream!  Looking forward for the new release...

Kamil

> thanks!
> Pádraig