Remove util/selinux_restorecon.c and tidy up. This is removed as
the functionality is now in policycoreutils/setfiles.

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_SPECFILE_CTX;
-                       break;
-               case 'C':
-                       restorecon_flags |=
-                                       SELINUX_RESTORECON_IGNORE_DIGEST;
-                       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;
-}
-- 
2.9.3

Reply via email to