Re: [PATCH] python: Split "semanage import" into two transactions

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

 



On Mon, May 30, 2022 at 9:32 AM Vit Mojzis <vmojzis@xxxxxxxxxx> 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@xxxxxxxxxx>

Acked-by: James Carter <jwcart2@xxxxxxxxx>


> ---
>  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
>



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

  Powered by Linux