Message ID | 20220914220337.165813-1-vmojzis@redhat.com (mailing list archive) |
---|---|
State | Rejected |
Headers | show |
Series | python: Hide error message when modifying non-local fcontext | expand |
On Wed, Sep 14, 2022 at 6:08 PM Vit Mojzis <vmojzis@redhat.com> wrote: > > 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@redhat.com> > --- > 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 > I think it is better to rework semanage/seobject.py so that there is no error. I sent a patch to the list that should fix this. Thanks for the report. Sorry that it took so long to get to. Jim
On 10/19/22 21:06, James Carter wrote: > On Wed, Sep 14, 2022 at 6:08 PM Vit Mojzis <vmojzis@redhat.com> wrote: >> >> 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@redhat.com> >> --- >> 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 >> > > I think it is better to rework semanage/seobject.py so that there is > no error. I sent a patch to the list that should fix this. > Thanks for the report. Sorry that it took so long to get to. > Jim Hi Jim, thank you for looking into this. I agree that your solution is much more elegant and should be used instead. Vit
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)
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@redhat.com> --- python/semanage/seobject.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)