On Mon, 2017-05-01 at 14:21 +0100, Richard Haines wrote:
> Remove util/selinux_restorecon.c and tidy up. This is removed as
> the functionality is now in policycoreutils/setfiles.

Thanks, applied both.

> 
> Signed-off-by: Richard Haines <[email protected]>
> ---
>  libselinux/utils/.gitignore           |   1 -
>  libselinux/utils/Makefile             |   2 -
>  libselinux/utils/selinux_restorecon.c | 299 ------------------------
> ----------
>  3 files changed, 302 deletions(-)
>  delete mode 100644 libselinux/utils/selinux_restorecon.c
> 
> diff --git a/libselinux/utils/.gitignore
> b/libselinux/utils/.gitignore
> index ed3bf0b..b4f9f78 100644
> --- a/libselinux/utils/.gitignore
> +++ b/libselinux/utils/.gitignore
> @@ -19,7 +19,6 @@ selabel_lookup
>  selabel_lookup_best_match
>  selabel_partial_match
>  selinux_check_securetty_context
> -selinux_restorecon
>  selinuxenabled
>  selinuxexeccon
>  setenforce
> diff --git a/libselinux/utils/Makefile b/libselinux/utils/Makefile
> index 995f444..5d61031 100644
> --- a/libselinux/utils/Makefile
> +++ b/libselinux/utils/Makefile
> @@ -59,8 +59,6 @@ sefcontext_compile: LDLIBS += $(PCRE_LDLIBS)
> ../src/libselinux.a -lsepol
>  
>  sefcontext_compile: sefcontext_compile.o ../src/regex.o
>  
> -selinux_restorecon: LDLIBS += -lsepol
> -
>  all: $(TARGETS)
>  
>  install: all
> diff --git a/libselinux/utils/selinux_restorecon.c
> b/libselinux/utils/selinux_restorecon.c
> deleted file mode 100644
> index 4d2b08f..0000000
> --- a/libselinux/utils/selinux_restorecon.c
> +++ /dev/null
> @@ -1,299 +0,0 @@
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <getopt.h>
> -#include <errno.h>
> -#include <stdbool.h>
> -#include <sepol/sepol.h>
> -#include <selinux/label.h>
> -#include <selinux/restorecon.h>
> -
> -static char *policyfile;
> -
> -static char **exclude_list;
> -static int exclude_count;
> -
> -static int validate_context(char **contextp)
> -{
> -     char *context = *contextp, *tmpcon;
> -
> -     if (policyfile) {
> -             if (sepol_check_context(context) < 0) {
> -                     fprintf(stderr, "Invalid context %s\n",
> context);
> -                     exit(-1);
> -             }
> -     } else if (security_canonicalize_context_raw(context,
> &tmpcon) == 0) {
> -             free(context);
> -             *contextp = tmpcon;
> -     } else if (errno != ENOENT) {
> -             fprintf(stderr, "Validate context error: %s\n",
> -                                                 strerror(errno))
> ;
> -             exit(-1);
> -     }
> -
> -     return 0;
> -}
> -
> -static __attribute__ ((__noreturn__)) void usage(const char
> *progname)
> -{
> -     fprintf(stderr,
> -             "\nusage: %s [-FCnRrdmiIaAsl] [-e dir] [-v|-P]\n"
> -             "[-x alt_rootpath] [-p policy] [-f specfile]
> pathname ...\n"
> -             "\nWhere:\n\t"
> -             "-F  Set the label to that in specfile.\n\t"
> -             "    If not set then reset the \"type\" component of
> the "
> -             "label to that\n\t    in the specfile.\n\t"
> -             "-C  Check labels even if the stored SHA1 digest
> matches\n\t"
> -             "    the specfiles SHA1 digest.\n\t"
> -             "-n  Don't change any file labels (passive
> check).\n\t"
> -             "-R  Recursively change file and directory
> labels.\n\t"
> -             "-v  Show changes in file labels (-v and -P are
> mutually "
> -             " exclusive).\n\t"
> -             "-P  Show progress by printing \"*\" to stdout every
> 1000 files"
> -             ",\n\t    unless relabeling entire OS, then show
> percentage complete.\n\t"
> -             "-r  Use realpath(3) to convert pathnames to
> canonical form.\n\t"
> -             "-d  Prevent descending into directories that have a
> "
> -             "different\n\t    device number than the pathname
> from  which "
> -             "the descent began.\n\t"
> -             "-m  Do not automatically read /proc/mounts to
> determine what\n\t"
> -             "    non-seclabel mounts to exclude from
> relabeling.\n\t"
> -             "-e  Exclude this directory (add multiple -e
> entries).\n\t"
> -             "-i  Do not set SELABEL_OPT_DIGEST option when
> calling "
> -             " selabel_open(3).\n\t"
> -             "-I  Ignore files that do not exist.\n\t"
> -             "-a  Add an association between an inode and a
> context.\n\t"
> -             "    If there is a different context that matched
> the inode,\n\t"
> -             "    then use the first context that matched.\n\t"
> -             "-A  Abort on errors during the file tree walk.\n\t"
> -             "-s  Log any label changes to syslog(3).\n\t"
> -             "-l  Log what specfile context matched each
> file.\n\t"
> -             "-x  Set alternate rootpath.\n\t"
> -             "-p  Optional binary policy file (also sets validate
> context "
> -             "option).\n\t"
> -             "-f  Optional file contexts file.\n\t"
> -             "pathname  One or more paths to relabel.\n\n",
> -             progname);
> -     exit(-1);
> -}
> -
> -static void add_exclude(const char *directory)
> -{
> -     char **tmp_list;
> -
> -     if (directory == NULL || directory[0] != '/') {
> -             fprintf(stderr, "Full path required for exclude:
> %s.\n",
> -                     directory);
> -             exit(-1);
> -     }
> -
> -     /* Add another two entries, one for directory, and the other
> to
> -      * terminate the list */
> -     tmp_list = realloc(exclude_list, sizeof(char *) *
> (exclude_count + 2));
> -     if (!tmp_list) {
> -             fprintf(stderr, "ERROR: realloc failed.\n");
> -             exit(-1);
> -     }
> -     exclude_list = tmp_list;
> -
> -     exclude_list[exclude_count] = strdup(directory);
> -     if (!exclude_list[exclude_count]) {
> -             fprintf(stderr, "ERROR: strdup failed.\n");
> -             exit(-1);
> -     }
> -     exclude_count++;
> -     exclude_list[exclude_count] = NULL;
> -}
> -
> -int main(int argc, char **argv)
> -{
> -     int opt, i;
> -     unsigned int restorecon_flags = 0;
> -     char *path = NULL, *digest = NULL, *validate = NULL;
> -     char *alt_rootpath = NULL;
> -     FILE *policystream;
> -     bool ignore_digest = false, require_selinux = true;
> -     bool verbose = false, progress = false;
> -
> -     struct selabel_handle *hnd = NULL;
> -     struct selinux_opt selabel_option[] = {
> -             { SELABEL_OPT_PATH, path },
> -             { SELABEL_OPT_DIGEST, digest },
> -             { SELABEL_OPT_VALIDATE, validate }
> -     };
> -
> -     if (argc < 2)
> -             usage(argv[0]);
> -
> -     exclude_list = NULL;
> -     exclude_count = 0;
> -
> -     while ((opt = getopt(argc, argv, "iIFCnRvPrdaAslme:f:p:x:"))
> > 0) {
> -             switch (opt) {
> -             case 'F':
> -                     restorecon_flags |=
> -                                     SELINUX_RESTORECON_SET_SPECF
> ILE_CTX;
> -                     break;
> -             case 'C':
> -                     restorecon_flags |=
> -                                     SELINUX_RESTORECON_IGNORE_DI
> GEST;
> -                     break;
> -             case 'n':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_NOCHANGE;
> -                     break;
> -             case 'R':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_RECURSE;
> -                     break;
> -             case 'v':
> -                     if (progress) {
> -                             fprintf(stderr,
> -                                     "Progress and Verbose are
> mutually exclusive\n");
> -                             exit(-1);
> -                     }
> -                     verbose = true;
> -                     restorecon_flags
> |=  SELINUX_RESTORECON_VERBOSE;
> -                     break;
> -             case 'P':
> -                     if (verbose) {
> -                             fprintf(stderr,
> -                                     "Progress and Verbose are
> mutually exclusive\n");
> -                             exit(-1);
> -                     }
> -                     progress = true;
> -                     restorecon_flags
> |=  SELINUX_RESTORECON_PROGRESS;
> -                     break;
> -             case 'r':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_REALPATH;
> -                     break;
> -             case 'd':
> -                     restorecon_flags |= SELINUX_RESTORECON_XDEV;
> -                     break;
> -             case 'm':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_IGNORE_MOUNTS;
> -                     break;
> -             case 'e':
> -                     add_exclude(optarg);
> -                     break;
> -             case 'p':
> -                     policyfile = optarg;
> -
> -                     policystream = fopen(policyfile, "r");
> -                     if (!policystream) {
> -                             fprintf(stderr,
> -                                     "ERROR: opening %s: %s\n",
> -                                     policyfile,
> strerror(errno));
> -                             exit(-1);
> -                     }
> -
> -                     if
> (sepol_set_policydb_from_file(policystream) < 0) {
> -                             fprintf(stderr,
> -                                     "ERROR: reading policy %s:
> %s\n",
> -                                     policyfile,
> strerror(errno));
> -                             exit(-1);
> -                     }
> -                     fclose(policystream);
> -
> -                     selinux_set_callback(SELINUX_CB_VALIDATE,
> -                                 (union
> selinux_callback)&validate_context);
> -                     require_selinux = false;
> -                     break;
> -             case 'f':
> -                     path = optarg;
> -                     break;
> -             case 'i':
> -                     ignore_digest = true;
> -                     break;
> -             case 'I':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_IGNORE_NOENTRY;
> -                     break;
> -             case 'a':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_ADD_ASSOC;
> -                     break;
> -             case 'A':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_ABORT_ON_ERROR;
> -                     break;
> -             case 's':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_SYSLOG_CHANGES;
> -                     break;
> -             case 'l':
> -                     restorecon_flags |=
> SELINUX_RESTORECON_LOG_MATCHES;
> -                     break;
> -             case 'x':
> -                     alt_rootpath = optarg;
> -                     break;
> -             default:
> -                     usage(argv[0]);
> -             }
> -     }
> -
> -     if (require_selinux && (is_selinux_enabled() <= 0)) {
> -             fprintf(stderr,
> -                 "SELinux must be enabled to perform this
> operation.\n");
> -             exit(-1);
> -     }
> -
> -     if (optind >= argc) {
> -             fprintf(stderr, "No pathname specified\n");
> -             exit(-1);
> -     }
> -
> -     /* If any of these set then do our own selabel_open and pass
> -      * handle to selinux_restorecon */
> -     if (ignore_digest || path || policyfile) {
> -             if (path)
> -                     selabel_option[0].value = path;
> -             else
> -                     selabel_option[0].value = NULL;
> -
> -             if (ignore_digest)
> -                     selabel_option[1].value = NULL;
> -             else
> -                     selabel_option[1].value = (char *)1;
> -
> -             if (policyfile) /* Validate */
> -                     selabel_option[2].value = (char *)1;
> -             else
> -                     selabel_option[2].value = NULL;
> -
> -             hnd = selabel_open(SELABEL_CTX_FILE, selabel_option,
> 3);
> -             if (!hnd) {
> -                     switch (errno) {
> -                     case EOVERFLOW:
> -                             fprintf(stderr, "ERROR: Number of
> specfiles or"
> -                                 " specfile buffer caused an
> overflow.\n");
> -                             break;
> -                     default:
> -                             fprintf(stderr, "ERROR:
> selabel_open: %s\n",
> -                                                         strerror
> (errno));
> -                     }
> -                     exit(-1);
> -             }
> -             selinux_restorecon_set_sehandle(hnd);
> -     }
> -
> -     if (exclude_list)
> -             selinux_restorecon_set_exclude_list
> -                                              ((const char
> **)exclude_list);
> -
> -     if (alt_rootpath)
> -             selinux_restorecon_set_alt_rootpath(alt_rootpath);
> -
> -     /* Call restorecon for each path in list */
> -     for (i = optind; i < argc; i++) {
> -             if (selinux_restorecon(argv[i], restorecon_flags) <
> 0) {
> -                     fprintf(stderr, "ERROR: selinux_restorecon:
> %s\n",
> -                                         strerror(errno));
> -                     exit(-1);
> -             }
> -     }
> -
> -     if (exclude_list) {
> -             for (i = 0; exclude_list[i]; i++)
> -                     free(exclude_list[i]);
> -             free(exclude_list);
> -     }
> -
> -     if (hnd)
> -             selabel_close(hnd);
> -
> -     return 0;
> -}

Reply via email to