diff mbox

[2/2] sepolicy: support non-MLS policy in gui

Message ID 20170924170456.5531-2-nicolas.iooss@m4x.org (mailing list archive)
State Superseded
Headers show

Commit Message

Nicolas Iooss Sept. 24, 2017, 5:04 p.m. UTC
Several "sepolic gui" tabs raise exceptions when using a policy without
MLS because some dictionaries describing users and logins lack level and
range properties. Use conditions and get() where appropriate in order
to make "sepolicy gui" usable again with a non-MLS policy.

Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
---
 python/sepolicy/sepolicy/__init__.py |  5 +++--
 python/sepolicy/sepolicy/gui.py      | 31 +++++++++++++++++++------------
 2 files changed, 22 insertions(+), 14 deletions(-)

Comments

Stephen Smalley Sept. 25, 2017, 5:10 p.m. UTC | #1
On Sun, 2017-09-24 at 19:04 +0200, Nicolas Iooss wrote:
> Several "sepolic gui" tabs raise exceptions when using a policy
> without
> MLS because some dictionaries describing users and logins lack level
> and
> range properties. Use conditions and get() where appropriate in order
> to make "sepolicy gui" usable again with a non-MLS policy.
> 
> Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>

Thanks, applied both.

> ---
>  python/sepolicy/sepolicy/__init__.py |  5 +++--
>  python/sepolicy/sepolicy/gui.py      | 31 +++++++++++++++++++-------
> -----
>  2 files changed, 22 insertions(+), 14 deletions(-)
> 
> diff --git a/python/sepolicy/sepolicy/__init__.py
> b/python/sepolicy/sepolicy/__init__.py
> index bf2494a813c8..89346aba0b15 100644
> --- a/python/sepolicy/sepolicy/__init__.py
> +++ b/python/sepolicy/sepolicy/__init__.py
> @@ -879,8 +879,9 @@ def get_selinux_users():
>      global selinux_user_list
>      if not selinux_user_list:
>          selinux_user_list = list(info(USER))
> -        for x in selinux_user_list:
> -            x['range'] = "".join(x['range'].split(" "))
> +        if _pol.mls:
> +            for x in selinux_user_list:
> +                x['range'] = "".join(x['range'].split(" "))
>      return selinux_user_list
>  
>  
> diff --git a/python/sepolicy/sepolicy/gui.py
> b/python/sepolicy/sepolicy/gui.py
> index 007c94a71c08..6562aa850c98 100644
> --- a/python/sepolicy/sepolicy/gui.py
> +++ b/python/sepolicy/sepolicy/gui.py
> @@ -907,8 +907,8 @@ class SELinuxGui():
>              if "object_r" in roles:
>                  roles.remove("object_r")
>              self.user_liststore.set_value(iter, 1, ", ".join(roles))
> -            self.user_liststore.set_value(iter, 2, u["level"])
> -            self.user_liststore.set_value(iter, 3, u["range"])
> +            self.user_liststore.set_value(iter, 2, u.get("level",
> ""))
> +            self.user_liststore.set_value(iter, 3, u.get("range",
> ""))
>              self.user_liststore.set_value(iter, 4, True)
>          self.ready_mouse()
>  
> @@ -1755,14 +1755,14 @@ class SELinuxGui():
>          if self.login_mls_entry.get_text() == "":
>              for u in sepolicy.get_selinux_users():
>                  if seuser == u['name']:
> -                    self.login_mls_entry.set_text(u['range'])
> +                    self.login_mls_entry.set_text(u.get('range',
> ''))
>  
>      def user_roles_combobox_change(self, combo, *args):
>          serole = self.combo_get_active_text(combo)
>          if self.user_mls_entry.get_text() == "":
>              for u in sepolicy.get_all_roles():
>                  if serole == u['name']:
> -                    self.user_mls_entry.set_text(u['range'])
> +                    self.user_mls_entry.set_text(u.get('range', ''))
>  
>      def get_selected_iter(self):
>          iter = None
> @@ -1973,7 +1973,10 @@ class SELinuxGui():
>              self.cur_dict["user"][name] = {"action": "-m", "range":
> mls_range, "level": level, "role": roles, "oldrange": oldrange,
> "oldlevel": oldlevel, "oldroles": oldroles, "oldname": oldname}
>          else:
>              iter = self.liststore.append(None)
> -            self.cur_dict["user"][name] = {"action": "-a", "range":
> mls_range, "level": level, "role": roles}
> +            if mls_range or level:
> +                self.cur_dict["user"][name] = {"action": "-a",
> "range": mls_range, "level": level, "role": roles}
> +            else:
> +                self.cur_dict["user"][name] = {"action": "-a",
> "role": roles}
>  
>          self.liststore.set_value(iter, 0, name)
>          self.liststore.set_value(iter, 1, roles)
> @@ -2089,8 +2092,8 @@ class SELinuxGui():
>              user_dict = self.cust_dict["user"]
>              for user in user_dict:
>                  roles = user_dict[user]["role"]
> -                mls = user_dict[user]["range"]
> -                level = user_dict[user]["level"]
> +                mls = user_dict[user].get("range", "")
> +                level = user_dict[user].get("level", "")
>                  iter = self.user_delete_liststore.append()
>                  self.user_delete_liststore.set_value(iter, 1, user)
>                  self.user_delete_liststore.set_value(iter, 2, roles)
> @@ -2104,7 +2107,7 @@ class SELinuxGui():
>              login_dict = self.cust_dict["login"]
>              for login in login_dict:
>                  seuser = login_dict[login]["seuser"]
> -                mls = login_dict[login]["range"]
> +                mls = login_dict[login].get("range", "")
>                  iter = self.login_delete_liststore.append()
>                  self.login_delete_liststore.set_value(iter, 1,
> seuser)
>                  self.login_delete_liststore.set_value(iter, 2,
> login)
> @@ -2268,7 +2271,7 @@ class SELinuxGui():
>              self.update_treestore.set_value(niter, 3, False)
>              roles = self.cur_dict["user"][user]["role"]
>              self.update_treestore.set_value(niter, 1, (_("Roles:
> %s")) % roles)
> -            mls = self.cur_dict["user"][user]["range"]
> +            mls = self.cur_dict["user"][user].get("range", "")
>              niter = self.update_treestore.append(iter)
>              self.update_treestore.set_value(niter, 3, False)
>              self.update_treestore.set_value(niter, 1, _("MLS/MCS
> Range: %s") % mls)
> @@ -2293,7 +2296,7 @@ class SELinuxGui():
>              self.update_treestore.set_value(niter, 3, False)
>              seuser = self.cur_dict["login"][login]["seuser"]
>              self.update_treestore.set_value(niter, 1, (_("SELinux
> User: %s")) % seuser)
> -            mls = self.cur_dict["login"][login]["range"]
> +            mls = self.cur_dict["login"][login].get("range", "")
>              niter = self.update_treestore.append(iter)
>              self.update_treestore.set_value(niter, 3, False)
>              self.update_treestore.set_value(niter, 1, _("MLS/MCS
> Range: %s") % mls)
> @@ -2487,14 +2490,18 @@ class SELinuxGui():
>                  for l in self.cur_dict[k]:
>                      if self.cur_dict[k][l]["action"] == "-d":
>                          update_buffer += "login -d %s\n" % l
> -                    else:
> +                    elif "range" in self.cur_dict[k][l]:
>                          update_buffer += "login %s -s %s -r %s %s\n"
> % (self.cur_dict[k][l]["action"], self.cur_dict[k][l]["seuser"],
> self.cur_dict[k][l]["range"], l)
> +                    else:
> +                        update_buffer += "login %s -s %s %s\n" %
> (self.cur_dict[k][l]["action"], self.cur_dict[k][l]["seuser"], l)
>              if k in "user":
>                  for u in self.cur_dict[k]:
>                      if self.cur_dict[k][u]["action"] == "-d":
>                          update_buffer += "user -d %s\n" % u
> -                    else:
> +                    elif "level" in self.cur_dict[k][u] and "range"
> in self.cur_dict[k][u]:
>                          update_buffer += "user %s -L %s -r %s -R %s
> %s\n" % (self.cur_dict[k][u]["action"], self.cur_dict[k][u]["level"],
> self.cur_dict[k][u]["range"], self.cur_dict[k][u]["role"], u)
> +                    else:
> +                        update_buffer += "user %s -R %s %s\n" %
> (self.cur_dict[k][u]["action"], self.cur_dict[k][u]["role"], u)
>  
>              if k in "fcontext-equiv":
>                  for f in self.cur_dict[k]:
diff mbox

Patch

diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
index bf2494a813c8..89346aba0b15 100644
--- a/python/sepolicy/sepolicy/__init__.py
+++ b/python/sepolicy/sepolicy/__init__.py
@@ -879,8 +879,9 @@  def get_selinux_users():
     global selinux_user_list
     if not selinux_user_list:
         selinux_user_list = list(info(USER))
-        for x in selinux_user_list:
-            x['range'] = "".join(x['range'].split(" "))
+        if _pol.mls:
+            for x in selinux_user_list:
+                x['range'] = "".join(x['range'].split(" "))
     return selinux_user_list
 
 
diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
index 007c94a71c08..6562aa850c98 100644
--- a/python/sepolicy/sepolicy/gui.py
+++ b/python/sepolicy/sepolicy/gui.py
@@ -907,8 +907,8 @@  class SELinuxGui():
             if "object_r" in roles:
                 roles.remove("object_r")
             self.user_liststore.set_value(iter, 1, ", ".join(roles))
-            self.user_liststore.set_value(iter, 2, u["level"])
-            self.user_liststore.set_value(iter, 3, u["range"])
+            self.user_liststore.set_value(iter, 2, u.get("level", ""))
+            self.user_liststore.set_value(iter, 3, u.get("range", ""))
             self.user_liststore.set_value(iter, 4, True)
         self.ready_mouse()
 
@@ -1755,14 +1755,14 @@  class SELinuxGui():
         if self.login_mls_entry.get_text() == "":
             for u in sepolicy.get_selinux_users():
                 if seuser == u['name']:
-                    self.login_mls_entry.set_text(u['range'])
+                    self.login_mls_entry.set_text(u.get('range', ''))
 
     def user_roles_combobox_change(self, combo, *args):
         serole = self.combo_get_active_text(combo)
         if self.user_mls_entry.get_text() == "":
             for u in sepolicy.get_all_roles():
                 if serole == u['name']:
-                    self.user_mls_entry.set_text(u['range'])
+                    self.user_mls_entry.set_text(u.get('range', ''))
 
     def get_selected_iter(self):
         iter = None
@@ -1973,7 +1973,10 @@  class SELinuxGui():
             self.cur_dict["user"][name] = {"action": "-m", "range": mls_range, "level": level, "role": roles, "oldrange": oldrange, "oldlevel": oldlevel, "oldroles": oldroles, "oldname": oldname}
         else:
             iter = self.liststore.append(None)
-            self.cur_dict["user"][name] = {"action": "-a", "range": mls_range, "level": level, "role": roles}
+            if mls_range or level:
+                self.cur_dict["user"][name] = {"action": "-a", "range": mls_range, "level": level, "role": roles}
+            else:
+                self.cur_dict["user"][name] = {"action": "-a", "role": roles}
 
         self.liststore.set_value(iter, 0, name)
         self.liststore.set_value(iter, 1, roles)
@@ -2089,8 +2092,8 @@  class SELinuxGui():
             user_dict = self.cust_dict["user"]
             for user in user_dict:
                 roles = user_dict[user]["role"]
-                mls = user_dict[user]["range"]
-                level = user_dict[user]["level"]
+                mls = user_dict[user].get("range", "")
+                level = user_dict[user].get("level", "")
                 iter = self.user_delete_liststore.append()
                 self.user_delete_liststore.set_value(iter, 1, user)
                 self.user_delete_liststore.set_value(iter, 2, roles)
@@ -2104,7 +2107,7 @@  class SELinuxGui():
             login_dict = self.cust_dict["login"]
             for login in login_dict:
                 seuser = login_dict[login]["seuser"]
-                mls = login_dict[login]["range"]
+                mls = login_dict[login].get("range", "")
                 iter = self.login_delete_liststore.append()
                 self.login_delete_liststore.set_value(iter, 1, seuser)
                 self.login_delete_liststore.set_value(iter, 2, login)
@@ -2268,7 +2271,7 @@  class SELinuxGui():
             self.update_treestore.set_value(niter, 3, False)
             roles = self.cur_dict["user"][user]["role"]
             self.update_treestore.set_value(niter, 1, (_("Roles: %s")) % roles)
-            mls = self.cur_dict["user"][user]["range"]
+            mls = self.cur_dict["user"][user].get("range", "")
             niter = self.update_treestore.append(iter)
             self.update_treestore.set_value(niter, 3, False)
             self.update_treestore.set_value(niter, 1, _("MLS/MCS Range: %s") % mls)
@@ -2293,7 +2296,7 @@  class SELinuxGui():
             self.update_treestore.set_value(niter, 3, False)
             seuser = self.cur_dict["login"][login]["seuser"]
             self.update_treestore.set_value(niter, 1, (_("SELinux User: %s")) % seuser)
-            mls = self.cur_dict["login"][login]["range"]
+            mls = self.cur_dict["login"][login].get("range", "")
             niter = self.update_treestore.append(iter)
             self.update_treestore.set_value(niter, 3, False)
             self.update_treestore.set_value(niter, 1, _("MLS/MCS Range: %s") % mls)
@@ -2487,14 +2490,18 @@  class SELinuxGui():
                 for l in self.cur_dict[k]:
                     if self.cur_dict[k][l]["action"] == "-d":
                         update_buffer += "login -d %s\n" % l
-                    else:
+                    elif "range" in self.cur_dict[k][l]:
                         update_buffer += "login %s -s %s -r %s %s\n" % (self.cur_dict[k][l]["action"], self.cur_dict[k][l]["seuser"], self.cur_dict[k][l]["range"], l)
+                    else:
+                        update_buffer += "login %s -s %s %s\n" % (self.cur_dict[k][l]["action"], self.cur_dict[k][l]["seuser"], l)
             if k in "user":
                 for u in self.cur_dict[k]:
                     if self.cur_dict[k][u]["action"] == "-d":
                         update_buffer += "user -d %s\n" % u
-                    else:
+                    elif "level" in self.cur_dict[k][u] and "range" in self.cur_dict[k][u]:
                         update_buffer += "user %s -L %s -r %s -R %s %s\n" % (self.cur_dict[k][u]["action"], self.cur_dict[k][u]["level"], self.cur_dict[k][u]["range"], self.cur_dict[k][u]["role"], u)
+                    else:
+                        update_buffer += "user %s -R %s %s\n" % (self.cur_dict[k][u]["action"], self.cur_dict[k][u]["role"], u)
 
             if k in "fcontext-equiv":
                 for f in self.cur_dict[k]: