Merge pull request #2604 from QuLogic/coalesce-restorecon

Coalesce restorecon calls into one.
pull/2624/head
Jussi Pakkanen 7 years ago committed by GitHub
commit c6781744cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 30
      mesonbuild/scripts/meson_install.py

@ -20,7 +20,7 @@ from . import destdir_join
from ..mesonlib import is_windows, Popen_safe
install_log_file = None
use_selinux = True
selinux_updates = []
class DirMaker:
def __init__(self):
@ -84,27 +84,24 @@ def set_mode(path, mode):
msg = '{!r}: Unable to set permissions {!r}: {}, ignoring...'
print(msg.format(path, mode.perms_s, e.strerror))
def restore_selinux_context(to_file):
def restore_selinux_contexts():
'''
Restores the SELinux context for @to_file
Restores the SELinux context for files in @selinux_updates
'''
global use_selinux
if not use_selinux:
return
try:
subprocess.check_call(['selinuxenabled'])
try:
subprocess.check_call(['restorecon', '-F', to_file], stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError as e:
use_selinux = False
msg = "{!r}: Failed to restore SELinux context, ignoring SELinux context for all remaining files..."
print(msg.format(to_file, e.returncode))
except (FileNotFoundError, PermissionError, subprocess.CalledProcessError) as e:
# If we don't have selinux or selinuxenabled returned 1, failure
# is ignored quietly.
use_selinux = False
return
with subprocess.Popen(['restorecon', '-F', '-f-', '-0'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc:
out, err = proc.communicate(input=b'\0'.join(os.fsencode(f) for f in selinux_updates) + b'\0')
if proc.returncode != 0:
print('Failed to restore SELinux context of installed files...',
'Standard output:', out.decode(),
'Standard error:', err.decode(), sep='\n')
def append_to_log(line):
install_log_file.write(line)
@ -126,7 +123,7 @@ def do_copyfile(from_file, to_file):
os.unlink(to_file)
shutil.copyfile(from_file, to_file)
shutil.copystat(from_file, to_file)
restore_selinux_context(to_file)
selinux_updates.append(to_file)
append_to_log(to_file)
def do_copydir(data, src_prefix, src_dir, dst_dir, exclude):
@ -192,6 +189,7 @@ def do_install(datafilename):
install_headers(d)
install_man(d)
install_data(d)
restore_selinux_contexts()
run_install_script(d)
def install_subdirs(d):

Loading…
Cancel
Save