Message ID | 20220530122021.3952270-1-vmojzis@redhat.com (mailing list archive) |
---|---|
State | Accepted |
Commit | abaf812c3877 |
Headers | show |
Series | python: Split "semanage import" into two transactions | expand |
On Mon, May 30, 2022 at 9:32 AM Vit Mojzis <vmojzis@redhat.com> wrote: > > First transaction applies all deletion operations, so that there are no > collisions when applying the rest of the changes. > > Fixes: > # semanage port -a -t http_cache_port_t -r s0 -p tcp 3024 > # semanage export | semanage import > ValueError: Port tcp/3024 already defined > > Signed-off-by: Vit Mojzis <vmojzis@redhat.com> Acked-by: James Carter <jwcart2@gmail.com> > --- > python/semanage/semanage | 21 +++++++++++++++++++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > diff --git a/python/semanage/semanage b/python/semanage/semanage > index 8f4e44a7..1d828128 100644 > --- a/python/semanage/semanage > +++ b/python/semanage/semanage > @@ -852,10 +852,29 @@ def handleImport(args): > trans = seobject.semanageRecords(args) > trans.start() > > + deleteCommands = [] > + commands = [] > + # separate commands for deletion from the rest so they can be > + # applied in a separate transaction > for l in sys.stdin.readlines(): > if len(l.strip()) == 0: > continue > + if "-d" in l or "-D" in l: > + deleteCommands.append(l) > + else: > + commands.append(l) > + > + if deleteCommands: > + importHelper(deleteCommands) > + trans.finish() > + trans.start() > + > + importHelper(commands) > + trans.finish() > > + > +def importHelper(commands): > + for l in commands: > try: > commandParser = createCommandParser() > args = commandParser.parse_args(mkargv(l)) > @@ -869,8 +888,6 @@ def handleImport(args): > except KeyboardInterrupt: > sys.exit(0) > > - trans.finish() > - > > def setupImportParser(subparsers): > importParser = subparsers.add_parser('import', help=_('Import local customizations')) > -- > 2.35.1 >
On Fri, Jun 3, 2022 at 10:40 AM James Carter <jwcart2@gmail.com> wrote: > > On Mon, May 30, 2022 at 9:32 AM Vit Mojzis <vmojzis@redhat.com> wrote: > > > > First transaction applies all deletion operations, so that there are no > > collisions when applying the rest of the changes. > > > > Fixes: > > # semanage port -a -t http_cache_port_t -r s0 -p tcp 3024 > > # semanage export | semanage import > > ValueError: Port tcp/3024 already defined > > > > Signed-off-by: Vit Mojzis <vmojzis@redhat.com> > > Acked-by: James Carter <jwcart2@gmail.com> > Merged. Thanks, Jim > > > --- > > python/semanage/semanage | 21 +++++++++++++++++++-- > > 1 file changed, 19 insertions(+), 2 deletions(-) > > > > diff --git a/python/semanage/semanage b/python/semanage/semanage > > index 8f4e44a7..1d828128 100644 > > --- a/python/semanage/semanage > > +++ b/python/semanage/semanage > > @@ -852,10 +852,29 @@ def handleImport(args): > > trans = seobject.semanageRecords(args) > > trans.start() > > > > + deleteCommands = [] > > + commands = [] > > + # separate commands for deletion from the rest so they can be > > + # applied in a separate transaction > > for l in sys.stdin.readlines(): > > if len(l.strip()) == 0: > > continue > > + if "-d" in l or "-D" in l: > > + deleteCommands.append(l) > > + else: > > + commands.append(l) > > + > > + if deleteCommands: > > + importHelper(deleteCommands) > > + trans.finish() > > + trans.start() > > + > > + importHelper(commands) > > + trans.finish() > > > > + > > +def importHelper(commands): > > + for l in commands: > > try: > > commandParser = createCommandParser() > > args = commandParser.parse_args(mkargv(l)) > > @@ -869,8 +888,6 @@ def handleImport(args): > > except KeyboardInterrupt: > > sys.exit(0) > > > > - trans.finish() > > - > > > > def setupImportParser(subparsers): > > importParser = subparsers.add_parser('import', help=_('Import local customizations')) > > -- > > 2.35.1 > >
diff --git a/python/semanage/semanage b/python/semanage/semanage index 8f4e44a7..1d828128 100644 --- a/python/semanage/semanage +++ b/python/semanage/semanage @@ -852,10 +852,29 @@ def handleImport(args): trans = seobject.semanageRecords(args) trans.start() + deleteCommands = [] + commands = [] + # separate commands for deletion from the rest so they can be + # applied in a separate transaction for l in sys.stdin.readlines(): if len(l.strip()) == 0: continue + if "-d" in l or "-D" in l: + deleteCommands.append(l) + else: + commands.append(l) + + if deleteCommands: + importHelper(deleteCommands) + trans.finish() + trans.start() + + importHelper(commands) + trans.finish() + +def importHelper(commands): + for l in commands: try: commandParser = createCommandParser() args = commandParser.parse_args(mkargv(l)) @@ -869,8 +888,6 @@ def handleImport(args): except KeyboardInterrupt: sys.exit(0) - trans.finish() - def setupImportParser(subparsers): importParser = subparsers.add_parser('import', help=_('Import local customizations'))
First transaction applies all deletion operations, so that there are no collisions when applying the rest of the changes. Fixes: # semanage port -a -t http_cache_port_t -r s0 -p tcp 3024 # semanage export | semanage import ValueError: Port tcp/3024 already defined Signed-off-by: Vit Mojzis <vmojzis@redhat.com> --- python/semanage/semanage | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-)