Fixes: # semanage fcontext -f f -m -t passwd_file_t /etc/security/opasswd libsemanage.dbase_llist_query: could not query record value (No such file or directory). Signed-off-by: Vit Mojzis <vmojzis@xxxxxxxxxx> --- python/semanage/seobject.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py index 0782c082..2d52f53c 100644 --- a/python/semanage/seobject.py +++ b/python/semanage/seobject.py @@ -177,6 +177,22 @@ except (OSError, ImportError): for l in self.log_list: syslog.syslog(syslog.LOG_INFO, message + l) +# Define a context manager to suppress stderr. +class suppress_stderr(object): + def __init__(self): + # Open a /dev/null file to be used as stderr + self.null = os.open(os.devnull,os.O_RDWR) + self.save_fd = os.dup(2) + + def __enter__(self): + # Set stderr to the null file + os.dup2(self.null,2) + + def __exit__(self, *_): + # Restore stderr + os.dup2(self.save_fd,2) + os.close(self.null) + class nulllogger: @@ -2510,7 +2526,8 @@ class fcontextRecords(semanageRecords): raise ValueError(_("File context for %s is not defined") % target) try: - (rc, fcontext) = semanage_fcontext_query_local(self.sh, k) + with suppress_stderr(): + (rc, fcontext) = semanage_fcontext_query_local(self.sh, k) except OSError: try: (rc, fcontext) = semanage_fcontext_query(self.sh, k) -- 2.35.3