mirror of
https://github.com/topjohnwu/selinux.git
synced 2024-11-27 05:20:50 +00:00
python: Split "semanage import" into two transactions
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>
This commit is contained in:
parent
c8ba7968b3
commit
abaf812c38
@ -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'))
|
||||
|
Loading…
Reference in New Issue
Block a user