[PATCH v2]: seobject.py must skip comments while reading external configuration files

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

 



>Hello.
>
>Apparently semanage does not work properly when the external configuration file "file_contexts.subs_dist" (from the policy) contains #-comments.
>
>The patch attached below aims to fix this: seobject.py must skip comments while reading the external configuration file "file_contexts.subs_dist".

I have created an improved version of the patch mentioned in the subject.

Fix fcontextRecords() in policycoreutils/semanage/seobject.py so
that semanage does not produce an error in fcontext mode when
the file_contexts.subs_dist file contains comments (prefixed by #).

Properly skip blank lines.

Treat both white space and tab as valid separators for the above
mentioned policy configuration file (v2). Minimum number of
changes (v2bis).

Signed-off-by: Guido Trentalancia <guido@xxxxxxxxxxxxxxxx>
Reported-by: Sven Vermeulen <sven.vermeulen@xxxxxxxxx>
---
 policycoreutils/semanage/seobject.py |   10 ++++++++++
 1 file changed, 10 insertions(+)

--- selinux-20072012/policycoreutils/semanage/seobject.py	2012-07-20 17:09:41.361112761 +0200
+++ selinux-20072012-policycoreutils-semanage-seobject_skip_comments-v2bis/policycoreutils/semanage/seobject.py	2012-08-19 19:33:18.822279742 +0200
@@ -1628,6 +1628,11 @@ class fcontextRecords(semanageRecords):
                 try:
                        fd = open(selinux.selinux_file_context_subs_path(), "r")
                        for i in fd.readlines():
+                              i = i.strip()
+                              if len(i) == 0:
+                                     continue
+                              if i.startswith("#"):
+                                     continue
                               target, substitute = i.split()
                               self.equiv[target] = substitute
                        fd.close()
@@ -1636,6 +1641,11 @@ class fcontextRecords(semanageRecords):
                 try:
                        fd = open(selinux.selinux_file_context_subs_dist_path(), "r")
                        for i in fd.readlines():
+                              i = i.strip()
+                              if len(i) == 0:
+                                     continue
+                              if i.startswith("#"):
+                                     continue
                               target, substitute = i.split()
                               self.equiv_dist[target] = substitute
                        fd.close()


>>On Tue, Aug 14, 2012 at 08:03:58AM -0400, Christopher J. PeBenito wrote:
>>> On 08/10/12 09:13, Guido Trentalancia wrote:
>>> > Add a comment at the top of the configuration file file_contexts.subs_dist
>>> > to clarify that it performs aliasing and not substitutions in the
>>> > strict sense of the word.
>>> > 
>>> > A name change might be considered too, if it proves to lead to further
>>> > confusion.
>>> > 
>>> > There might be pieces of documentation that could benefit from similar
>>> > considerations.
>>> > 
>>> > Also note that a specific manual page is missing.
>>> > 
>>> > Signed-off-by: Guido Trentalancia <guido@xxxxxxxxxxxxxxxx>
>>> > ---
>>> >  config/file_contexts.subs_dist |   10 ++++++++++
>>> >  1 file changed, 10 insertions(+)
>>> > 
>>> > diff -pruN refpolicy-08092012/config/file_contexts.subs_dist refpolicy-08092012-file_contexts.subs_dist-comment/config/file_contexts.subs_dist
>>> > --- refpolicy-08092012/config/file_contexts.subs_dist    2012-06-21 20:10:29.011803405 +0200
>>> > +++ refpolicy-08092012-file_contexts.subs_dist-comment/config/file_contexts.subs_dist 2012-08-10 17:01:36.045451839 +0200
>>> > @@ -1,3 +1,13 @@
>>> > +# This file can is used to configure base path aliases as in:
>>> > +#
>>> > +# /aliased_path /original_path_as_configured_in_file_contexts
>>> > +#
>>> > +# where original_path_as_configured_in_file_contexts is a base
>>> > +# path being used in the main file_contexts configuration file.
>>> > +#
>>> > +# It does not perform substitutions as done by sed(1), for
>>> > +# example, but aliasing.
>>> > +#
>>> >  /lib32 /lib
>>> >  /lib64 /lib
>>> >  /run /var/run
>>> 
>>> Merged.
>>
>>This seems to break policycoreutils:
>>
>># semanage fcontext -l
>>/usr/sbin/semanage: too many values to unpack (expected 2)
>>
>>Undoing the comment change fixes things again.
>
>All is needed is something like this for selinux-userspace (policycoreutils):
>
>Fix fcontextRecords() in policycoreutils/semanage/seobject.py so
>that semanage does not produce an error in fcontext mode when
>the file_contexts.subs_dist file contains comments (prefixed by #).
>
>Signed-off-by: Guido Trentalancia <guido@xxxxxxxxxxxxxxxx>
>Reported-by: Sven Vermeulen <sven.vermeulen@xxxxxxxxx>
> 
>---
> policycoreutils/semanage/seobject.py |   18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
>--- selinux-20072012/policycoreutils/semanage/seobject.py	2012-07-20 17:09:41.361112761 +0200
>+++ selinux-20072012-policycoreutils-semanage-seobject_skip_comments/policycoreutils/semanage/seobject.py	2012-08-18 17:11:10.038514334 +0200
>@@ -1627,16 +1627,26 @@ class fcontextRecords(semanageRecords):
>                 self.equal_ind = False
>                 try:
>                        fd = open(selinux.selinux_file_context_subs_path(), "r")
>-                       for i in fd.readlines():
>-                              target, substitute = i.split()
>+                       for i in fd.read().split("n"):
>+                              i = i.strip()
>+                              if len(i) == 0:
>+                                     continue
>+                              if i.startswith("#"):
>+                                     continue
>+                              target, substitute = i.split(" ")
>                               self.equiv[target] = substitute
>                        fd.close()
>                 except IOError:
>                        pass
>                 try:
>                        fd = open(selinux.selinux_file_context_subs_dist_path(), "r")
>-                       for i in fd.readlines():
>-                              target, substitute = i.split()
>+                       for i in fd.read().split("n"):
>+                              i = i.strip()
>+                              if len(i) == 0:
>+                                     continue
>+                              if i.startswith("#"):
>+                                     continue
>+                              target, substitute = i.split(" ")
>                               self.equiv_dist[target] = substitute
>                        fd.close()
>                 except IOError:

Regards,

Guido 


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.


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

  Powered by Linux