Re: [RFC PATCH userspace 5/5] semodule: add command-line option to detect module changes

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

 



On Sun, Jan 16, 2022 at 11:07 AM Christian Göttsche
<cgzones@xxxxxxxxxxxxxx> wrote:
>
> On Thu, 13 Jan 2022 at 15:39, Ondrej Mosnacek <omosnace@xxxxxxxxxx> wrote:
> >
> > Add a new command-line option "--smart" (for the lack of a better
> > name...) to control the newly introduced check_ext_changes libsemanage
> > flag.
> >
> > For example, running `semodule -B --smart` will ensure that any
> > externally added/removed modules (e.g. by an RPM transaction) are
> > reflected in the compiled policy, while skipping the most expensive part
> > of the rebuild if no module change was deteceted since the last
> > libsemanage transaction.
> >
> > Signed-off-by: Ondrej Mosnacek <omosnace@xxxxxxxxxx>
> > ---
> >  policycoreutils/semodule/semodule.c | 23 ++++++++++++++++++++---
> >  1 file changed, 20 insertions(+), 3 deletions(-)
> >
> > diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
> > index a5b71fc4..638edb39 100644
> > --- a/policycoreutils/semodule/semodule.c
> > +++ b/policycoreutils/semodule/semodule.c
> > @@ -47,6 +47,7 @@ static int verbose;
> >  static int reload;
> >  static int no_reload;
> >  static int build;
> > +static int check_ext_changes;
> >  static int disable_dontaudit;
> >  static int preserve_tunables;
> >  static int ignore_module_cache;
> > @@ -149,6 +150,8 @@ static void usage(char *progname)
> >         printf("  -c, --cil extract module as cil. This only affects module extraction.\n");
> >         printf("  -H, --hll extract module as hll. This only affects module extraction.\n");
> >         printf("  -m, --checksum   print module checksum (SHA256).\n");
> > +       printf("      --smart      force policy rebuild if module content changed since\n"
> > +              "                   last rebuild (based on checksum)\n");
>
> Some other naming suggestions:
>
> incremental
> on-update
> on-change
> changed-only
> updated-only
>
> Also maybe describe with `force policy rebuild only if ...`, cause
> otherwise one might think without --smart modules are never rebuild.
>

I was going to suggest "--if-required" or "--if-needed". I think that
"incremental" or "on-change" would be ok as well.

Jim

> >  }
> >
> >  /* Sets the global mode variable to new_mode, but only if no other
> > @@ -180,6 +183,7 @@ static void set_mode(enum client_modes new_mode, char *arg)
> >  static void parse_command_line(int argc, char **argv)
> >  {
> >         static struct option opts[] = {
> > +               {"smart", 0, NULL, '\0'},
> >                 {"store", required_argument, NULL, 's'},
> >                 {"base", required_argument, NULL, 'b'},
> >                 {"help", 0, NULL, 'h'},
> > @@ -207,15 +211,26 @@ static void parse_command_line(int argc, char **argv)
> >         };
> >         int extract_selected = 0;
> >         int cil_hll_set = 0;
> > -       int i;
> > +       int i, longind;
> >         verbose = 0;
> >         reload = 0;
> >         no_reload = 0;
> > +       check_ext_changes = 0;
> >         priority = 400;
> >         while ((i =
> > -               getopt_long(argc, argv, "s:b:hi:l::vr:u:RnNBDCPX:e:d:p:S:E:cHm", opts,
> > -                           NULL)) != -1) {
> > +               getopt_long(argc, argv, "s:b:hi:l::vr:u:RnNBDCPX:e:d:p:S:E:cHm",
> > +                           opts, &longind)) != -1) {
> >                 switch (i) {
> > +               case '\0':
> > +                       switch(longind) {
> > +                       case 0: /* --smart */
> > +                               check_ext_changes = 1;
> > +                               break;
> > +                       default:
> > +                               usage(argv[0]);
> > +                               exit(1);
> > +                       }
> > +                       break;
> >                 case 'b':
> >                         fprintf(stderr, "The --base option is deprecated. Use --install instead.\n");
> >                         set_mode(INSTALL_M, optarg);
> > @@ -813,6 +828,8 @@ cleanup_disable:
> >                         semanage_set_reload(sh, 0);
> >                 if (build)
> >                         semanage_set_rebuild(sh, 1);
> > +               if (check_ext_changes)
> > +                       semanage_set_check_ext_changes(sh, 1);
> >                 if (disable_dontaudit)
> >                         semanage_set_disable_dontaudit(sh, 1);
> >                 else if (build)
> > --
> > 2.34.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