Re: [RFC PATCH v2 17/27] libselinux: remove SELABEL_OPT_SUBSET support from selabel_file(5)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 14, 2023 at 9:41 AM Christian Göttsche
<cgzones@xxxxxxxxxxxxxx> wrote:
>
> The selabel_file(5) option SELABEL_OPT_SUBSET has been deprecated in
> commit 26e05da0fc2d ("libselinux: matchpathcon/selabel_file: Fix man
> pages.") for version 2.5.
>
> Drop the support to easy refactoring the selabel_file related code.
>
> Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx>
> ---
>  libselinux/include/selinux/label.h    |  2 +-
>  libselinux/include/selinux/selinux.h  |  6 +++++-
>  libselinux/src/Makefile               |  4 ++++
>  libselinux/src/label_file.c           | 19 ++++++++-----------
>  libselinux/src/label_file.h           | 13 ++-----------
>  libselinux/src/matchpathcon.c         |  4 +---
>  libselinux/utils/matchpathcon.c       | 11 ++---------
>  libselinux/utils/sefcontext_compile.c |  3 +--
>  8 files changed, 24 insertions(+), 38 deletions(-)
>
> diff --git a/libselinux/include/selinux/label.h b/libselinux/include/selinux/label.h
> index ce189a3a..6cb2d782 100644
> --- a/libselinux/include/selinux/label.h
> +++ b/libselinux/include/selinux/label.h
> @@ -50,7 +50,7 @@ struct selabel_handle;
>  #define SELABEL_OPT_BASEONLY   2
>  /* specify an alternate path to use when loading backend data */
>  #define SELABEL_OPT_PATH       3
> -/* select a subset of the search space as an optimization (file backend) */
> +/* Unsupported since v3.6: select a subset of the search space as an optimization (file backend) */
>  #define SELABEL_OPT_SUBSET     4
>  /* require a hash calculation on spec files */
>  #define SELABEL_OPT_DIGEST     5
> diff --git a/libselinux/include/selinux/selinux.h b/libselinux/include/selinux/selinux.h
> index a0948853..3b23cb50 100644
> --- a/libselinux/include/selinux/selinux.h
> +++ b/libselinux/include/selinux/selinux.h
> @@ -484,7 +484,11 @@ extern int matchpathcon_init(const char *path)
>
>  /* Same as matchpathcon_init, but only load entries with
>     regexes that have stems that are prefixes of 'prefix'. */
> -extern int matchpathcon_init_prefix(const char *path, const char *prefix);
> +extern int matchpathcon_init_prefix(const char *path, const char *prefix)
> +#ifdef __GNUC__
> +   __attribute__ ((deprecated("Use selabel_open with backend SELABEL_CTX_FILE")))
> +#endif
> +;
>
>  /* Free the memory allocated by matchpathcon_init. */
>  extern void matchpathcon_fini(void)
> diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile
> index ac656257..15d224e1 100644
> --- a/libselinux/src/Makefile
> +++ b/libselinux/src/Makefile
> @@ -144,6 +144,10 @@ ifeq ($(DISABLE_X11),y)
>  SRCS:= $(filter-out label_x.c, $(SRCS))
>  endif
>
> +# ignore usage of matchpathcon_init_prefix(3)
> +matchpathcon.o:  CFLAGS += -Wno-deprecated -Wno-deprecated-declarations
> +matchpathcon.lo: CFLAGS += -Wno-deprecated -Wno-deprecated-declarations
> +

"-Wno-deprecated" means do not warn about deprecated features and
seems to be about deprecated c++ features. I don't think we need it
here.

Everything else looks ok to me as long as no distro is depending on
this deprecated option.

Thanks,
Jim

>  SWIGRUBY = swig -Wall -ruby -o $(SWIGRUBYCOUT) -outdir ./ $(DISABLE_FLAGS)
>
>  all: $(LIBA) $(LIBSO) $(LIBPC)
> diff --git a/libselinux/src/label_file.c b/libselinux/src/label_file.c
> index b9be1c9d..f9f4648a 100644
> --- a/libselinux/src/label_file.c
> +++ b/libselinux/src/label_file.c
> @@ -166,7 +166,7 @@ static int nodups_specs(struct saved_data *data, const char *path)
>         return rc;
>  }
>
> -static int process_text_file(FILE *fp, const char *prefix,
> +static int process_text_file(FILE *fp,
>                              struct selabel_handle *rec, const char *path)
>  {
>         int rc;
> @@ -175,7 +175,7 @@ static int process_text_file(FILE *fp, const char *prefix,
>         char *line_buf = NULL;
>
>         while (getline(&line_buf, &line_len, fp) > 0) {
> -               rc = process_line(rec, path, prefix, line_buf, ++lineno);
> +               rc = process_line(rec, path, line_buf, ++lineno);
>                 if (rc)
>                         goto out;
>         }
> @@ -603,7 +603,7 @@ static FILE *open_file(const char *path, const char *suffix,
>
>  static int process_file(const char *path, const char *suffix,
>                           struct selabel_handle *rec,
> -                         const char *prefix, struct selabel_digest *digest)
> +                         struct selabel_digest *digest)
>  {
>         int rc;
>         unsigned int i;
> @@ -624,7 +624,7 @@ static int process_file(const char *path, const char *suffix,
>
>                 rc = fcontext_is_binary(fp) ?
>                                 load_mmap(fp, sb.st_size, rec, found_path) :
> -                               process_text_file(fp, prefix, rec, found_path);
> +                               process_text_file(fp, rec, found_path);
>                 if (!rc)
>                         rc = digest_add_specfile(digest, fp, NULL, sb.st_size,
>                                 found_path);
> @@ -785,7 +785,6 @@ static int init(struct selabel_handle *rec, const struct selinux_opt *opts,
>  {
>         struct saved_data *data = (struct saved_data *)rec->data;
>         const char *path = NULL;
> -       const char *prefix = NULL;
>         int status = -1, baseonly = 0;
>
>         /* Process arguments */
> @@ -795,7 +794,7 @@ static int init(struct selabel_handle *rec, const struct selinux_opt *opts,
>                         path = opts[n].value;
>                         break;
>                 case SELABEL_OPT_SUBSET:
> -                       prefix = opts[n].value;
> +                       selinux_log(SELINUX_WARNING, "selabel_open(3): SELABEL_OPT_SUBSET support has been removed, ignoring option\n");
>                         break;
>                 case SELABEL_OPT_BASEONLY:
>                         baseonly = !!opts[n].value;
> @@ -839,7 +838,7 @@ static int init(struct selabel_handle *rec, const struct selinux_opt *opts,
>         /*
>          * The do detailed validation of the input and fill the spec array
>          */
> -       status = process_file(path, NULL, rec, prefix, rec->digest);
> +       status = process_file(path, NULL, rec, rec->digest);
>         if (status)
>                 goto finish;
>
> @@ -850,13 +849,11 @@ static int init(struct selabel_handle *rec, const struct selinux_opt *opts,
>         }
>
>         if (!baseonly) {
> -               status = process_file(path, "homedirs", rec, prefix,
> -                                                           rec->digest);
> +               status = process_file(path, "homedirs", rec, rec->digest);
>                 if (status && errno != ENOENT)
>                         goto finish;
>
> -               status = process_file(path, "local", rec, prefix,
> -                                                           rec->digest);
> +               status = process_file(path, "local", rec, rec->digest);
>                 if (status && errno != ENOENT)
>                         goto finish;
>         }
> diff --git a/libselinux/src/label_file.h b/libselinux/src/label_file.h
> index 1363c83c..56439e2d 100644
> --- a/libselinux/src/label_file.h
> +++ b/libselinux/src/label_file.h
> @@ -425,10 +425,10 @@ static inline int compile_regex(struct spec *spec, const char **errbuf)
>  /* This service is used by label_file.c process_file() and
>   * utils/sefcontext_compile.c */
>  static inline int process_line(struct selabel_handle *rec,
> -                       const char *path, const char *prefix,
> +                       const char *path,
>                         char *line_buf, unsigned lineno)
>  {
> -       int items, len, rc;
> +       int items, rc;
>         char *regex = NULL, *type = NULL, *context = NULL;
>         struct saved_data *data = (struct saved_data *)rec->data;
>         struct spec *spec_arr;
> @@ -466,15 +466,6 @@ static inline int process_line(struct selabel_handle *rec,
>                 type = 0;
>         }
>
> -       len = get_stem_from_spec(regex);
> -       if (len && prefix && strncmp(prefix, regex, len)) {
> -               /* Stem of regex does not match requested prefix, discard. */
> -               free(regex);
> -               free(type);
> -               free(context);
> -               return 0;
> -       }
> -
>         rc = grow_specs(data);
>         if (rc)
>                 return rc;
> diff --git a/libselinux/src/matchpathcon.c b/libselinux/src/matchpathcon.c
> index a1c5b0cc..971ace62 100644
> --- a/libselinux/src/matchpathcon.c
> +++ b/libselinux/src/matchpathcon.c
> @@ -347,7 +347,7 @@ static void matchpathcon_init_once(void)
>                 destructor_key_initialized = 1;
>  }
>
> -int matchpathcon_init_prefix(const char *path, const char *subset)
> +int matchpathcon_init_prefix(const char *path, const char *prefix __attribute__((unused)))
>  {
>         if (!mycanoncon)
>                 mycanoncon = default_canoncon;
> @@ -355,8 +355,6 @@ int matchpathcon_init_prefix(const char *path, const char *subset)
>         __selinux_once(once, matchpathcon_init_once);
>         __selinux_setspecific(destructor_key, /* some valid address to please GCC */ &selinux_page_size);
>
> -       options[SELABEL_OPT_SUBSET].type = SELABEL_OPT_SUBSET;
> -       options[SELABEL_OPT_SUBSET].value = subset;
>         options[SELABEL_OPT_PATH].type = SELABEL_OPT_PATH;
>         options[SELABEL_OPT_PATH].value = path;
>
> diff --git a/libselinux/utils/matchpathcon.c b/libselinux/utils/matchpathcon.c
> index 1d713c01..8e1c45c1 100644
> --- a/libselinux/utils/matchpathcon.c
> +++ b/libselinux/utils/matchpathcon.c
> @@ -13,7 +13,7 @@
>  static __attribute__ ((__noreturn__)) void usage(const char *progname)
>  {
>         fprintf(stderr,
> -               "usage:  %s [-V] [-N] [-n] [-m type] [-f file_contexts_file] [-p prefix] [-P policy_root_path] filepath...\n",
> +               "usage:  %s [-V] [-N] [-n] [-m type] [-f file_contexts_file] [-P policy_root_path] filepath...\n",
>                 progname);
>         exit(1);
>  }
> @@ -83,7 +83,7 @@ int main(int argc, char **argv)
>         if (argc < 2)
>                 usage(argv[0]);
>
> -       while ((opt = getopt(argc, argv, "m:Nnf:P:p:Vq")) > 0) {
> +       while ((opt = getopt(argc, argv, "m:Nnf:P:Vq")) > 0) {
>                 switch (opt) {
>                 case 'n':
>                         header = 0;
> @@ -114,13 +114,6 @@ int main(int argc, char **argv)
>                                 exit(1);
>                         }
>                         break;
> -               case 'p':
> -                       // This option has been deprecated since libselinux 2.5 (2016):
> -                       // https://github.com/SELinuxProject/selinux/commit/26e05da0fc2d0a4bd274320968a88f8acbb3b6a6
> -                       fprintf(stderr, "Warning: using %s -p is deprecated\n", argv[0]);
> -                       options[SELABEL_OPT_SUBSET].type = SELABEL_OPT_SUBSET;
> -                       options[SELABEL_OPT_SUBSET].value = optarg;
> -                       break;
>                 case 'q':
>                         quiet = 1;
>                         break;
> diff --git a/libselinux/utils/sefcontext_compile.c b/libselinux/utils/sefcontext_compile.c
> index 6c32172d..eed6e4fd 100644
> --- a/libselinux/utils/sefcontext_compile.c
> +++ b/libselinux/utils/sefcontext_compile.c
> @@ -36,7 +36,6 @@ static int process_file(struct selabel_handle *rec, const char *filename)
>         char *line_buf = NULL;
>         size_t line_len = 0;
>         FILE *context_file;
> -       const char *prefix = NULL;
>
>         context_file = fopen(filename, "r");
>         if (!context_file) {
> @@ -48,7 +47,7 @@ static int process_file(struct selabel_handle *rec, const char *filename)
>         line_num = 0;
>         rc = 0;
>         while (getline(&line_buf, &line_len, context_file) > 0) {
> -               rc = process_line(rec, filename, prefix, line_buf, ++line_num);
> +               rc = process_line(rec, filename, line_buf, ++line_num);
>                 if (rc || ctx_err) {
>                         /* With -p option need to check and fail if ctx err as
>                          * process_line() context validation on Linux does not
> --
> 2.40.1
>




[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux