diff options
author | Jim Meyering <jim@meyering.net> | 2007-02-01 00:26:07 +0100 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2007-03-29 21:37:06 +0200 |
commit | 447b254923c1e27e0031ae3fc69ce3a1fbc9a4f6 (patch) | |
tree | c4e65c079f5b48c8258818c4cd0533b1bd4c8ea0 /src/mkfifo.c | |
parent | 301fbaf431677b9be8a7fc279ac1f73d133e7578 (diff) | |
download | coreutils-447b254923c1e27e0031ae3fc69ce3a1fbc9a4f6.tar.xz |
mkfifo, mknod: Accept new "-Z, --context=C" option.
* src/mkfifo.c, src/mknod.c: Include <selinux/selinux.h>.
(main): Honor it.
* src/Makefile.am (mkfifo_LDADD, mknod_LDADD): Use $(LIB_SELINUX).
Diffstat (limited to 'src/mkfifo.c')
-rw-r--r-- | src/mkfifo.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/mkfifo.c b/src/mkfifo.c index bd006c441..8651ba39e 100644 --- a/src/mkfifo.c +++ b/src/mkfifo.c @@ -1,5 +1,5 @@ /* mkfifo -- make fifo's (named pipes) - Copyright (C) 90, 91, 1995-2006 Free Software Foundation, Inc. + Copyright (C) 90, 91, 1995-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ #include <stdio.h> #include <getopt.h> #include <sys/types.h> +#include <selinux/selinux.h> #include "system.h" #include "error.h" @@ -37,6 +38,7 @@ char *program_name; static struct option const longopts[] = { + {GETOPT_SELINUX_CONTEXT_OPTION_DECL}, {"mode", required_argument, NULL, 'm'}, {GETOPT_HELP_OPTION_DECL}, {GETOPT_VERSION_OPTION_DECL}, @@ -57,6 +59,9 @@ Create named pipes (FIFOs) with the given NAMEs.\n\ \n\ "), stdout); fputs (_("\ + -Z, --context=CTX set the SELinux security context of each NAME to CTX\n\ +"), stdout); + fputs (_("\ Mandatory arguments to long options are mandatory for short options too.\n\ "), stdout); fputs (_("\ @@ -76,6 +81,7 @@ main (int argc, char **argv) char const *specified_mode = NULL; int exit_status = EXIT_SUCCESS; int optc; + security_context_t scontext = NULL; initialize_main (&argc, &argv); program_name = argv[0]; @@ -85,13 +91,16 @@ main (int argc, char **argv) atexit (close_stdout); - while ((optc = getopt_long (argc, argv, "m:", longopts, NULL)) != -1) + while ((optc = getopt_long (argc, argv, "m:Z:", longopts, NULL)) != -1) { switch (optc) { case 'm': specified_mode = optarg; break; + case 'Z': + scontext = optarg; + break; case_GETOPT_HELP_CHAR; case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); default: @@ -105,6 +114,11 @@ main (int argc, char **argv) usage (EXIT_FAILURE); } + if (scontext && setfscreatecon (scontext) < 0) + error (EXIT_FAILURE, errno, + _("failed to set default file creation context to %s"), + quote (optarg)); + newmode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (specified_mode) { |