From: Kamil Dudka Date: Mon, 28 Nov 2016 15:21:42 +0000 (+0100) Subject: install,mkdir: fix handling of -DZ and -pZ, respectively X-Git-Tag: v8.26~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8104265f229ababd5a68a46eeccbccc07e72cdc;p=thirdparty%2Fcoreutils.git install,mkdir: fix handling of -DZ and -pZ, respectively ... in the case where 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 --- diff --git a/NEWS b/NEWS index 6f7505f82d..e88e932145 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 414d645cc9..d79d597892 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 ccd923b1c2..6b51292fa8 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));