diff mbox

policycoreutils/gui: fix system-config-selinux editing features

Message ID 1476880563-20144-1-git-send-email-vmojzis@redhat.com (mailing list archive)
State Not Applicable
Headers show

Commit Message

Vit Mojzis Oct. 19, 2016, 12:36 p.m. UTC
Return column definitions to portsPage (gui fails to load otherwise).

fcontextPage:
  "ftype" dropdown was filled from 2 sources (system-config-selinux.glade
  and fcontextPage - from seobject module) which resulted in duplicate
  and invalid options. When given to "semanage fcontext -f", ftype has to be
  converted to 1 letter argument mode.

TreeView.get_selection().get_selected() can return "None" if no item is selected
(the list can be empty). Test if correct iterator was acquired.

Fixes:
  https://bugzilla.redhat.com/show_bug.cgi?id=1344842

Signed-off-by: vmojzis <vmojzis@redhat.com>
---
 policycoreutils/gui/fcontextPage.py             | 17 +++++------------
 policycoreutils/gui/portsPage.py                |  6 ++++++
 policycoreutils/gui/semanagePage.py             |  4 ++--
 policycoreutils/gui/system-config-selinux.glade |  2 +-
 4 files changed, 14 insertions(+), 15 deletions(-)

Comments

Stephen Smalley Oct. 21, 2016, 5:05 p.m. UTC | #1
On 10/19/2016 08:36 AM, Vit Mojzis wrote:
> Return column definitions to portsPage (gui fails to load otherwise).
> 
> fcontextPage:
>   "ftype" dropdown was filled from 2 sources (system-config-selinux.glade
>   and fcontextPage - from seobject module) which resulted in duplicate
>   and invalid options. When given to "semanage fcontext -f", ftype has to be
>   converted to 1 letter argument mode.
> 
> TreeView.get_selection().get_selected() can return "None" if no item is selected
> (the list can be empty). Test if correct iterator was acquired.

Thanks.  However, I can't seem to get system-config-selinux built from
upstream to run before or after this patch:
$ system-config-selinux
Traceback (most recent call last):
  File "/usr/share/system-config-selinux/system-config-selinux.py", line
36, in <module>
    import gnome
ImportError: No module named gnome

Are there other changes in Fedora that are required?

> 
> Fixes:
>   https://bugzilla.redhat.com/show_bug.cgi?id=1344842
> 
> Signed-off-by: vmojzis <vmojzis@redhat.com>
> ---
>  policycoreutils/gui/fcontextPage.py             | 17 +++++------------
>  policycoreutils/gui/portsPage.py                |  6 ++++++
>  policycoreutils/gui/semanagePage.py             |  4 ++--
>  policycoreutils/gui/system-config-selinux.glade |  2 +-
>  4 files changed, 14 insertions(+), 15 deletions(-)
> 
> diff --git a/policycoreutils/gui/fcontextPage.py b/policycoreutils/gui/fcontextPage.py
> index c176de4..2e26666 100644
> --- a/policycoreutils/gui/fcontextPage.py
> +++ b/policycoreutils/gui/fcontextPage.py
> @@ -105,13 +105,6 @@ class fcontextPage(semanagePage):
>          self.load()
>          self.fcontextEntry = xml.get_widget("fcontextEntry")
>          self.fcontextFileTypeCombo = xml.get_widget("fcontextFileTypeCombo")
> -        liststore = self.fcontextFileTypeCombo.get_model()
> -        for k in seobject.file_types:
> -            if len(k) > 0 and k[0] != '-':
> -                iter = liststore.append()
> -                liststore.set_value(iter, 0, k)
> -        iter = liststore.get_iter_first()
> -        self.fcontextFileTypeCombo.set_active_iter(iter)
>          self.fcontextTypeEntry = xml.get_widget("fcontextTypeEntry")
>          self.fcontextMLSEntry = xml.get_widget("fcontextMLSEntry")
>  
> @@ -183,7 +176,7 @@ class fcontextPage(semanagePage):
>              fspec = store.get_value(iter, SPEC_COL)
>              ftype = store.get_value(iter, FTYPE_COL)
>              self.wait()
> -            (rc, out) = getstatusoutput("semanage fcontext -d -f '%s' '%s'" % (ftype, fspec))
> +            (rc, out) = getstatusoutput("semanage fcontext -d -f '%s' '%s'" % (seobject.file_type_str_to_option[ftype], fspec))
>              self.ready()
>  
>              if rc != 0:
> @@ -194,14 +187,14 @@ class fcontextPage(semanagePage):
>              self.error(e.args[0])
>  
>      def add(self):
> -        ftype = ["", "--", "-d", "-c", "-b", "-s", "-l", "-p"]
>          fspec = self.fcontextEntry.get_text().strip()
>          type = self.fcontextTypeEntry.get_text().strip()
>          mls = self.fcontextMLSEntry.get_text().strip()
>          list_model = self.fcontextFileTypeCombo.get_model()
> -        active = self.fcontextFileTypeCombo.get_active()
> +        it = self.fcontextFileTypeCombo.get_active_iter()
> +        ftype = list_model.get_value(it,0)
>          self.wait()
> -        (rc, out) = getstatusoutput("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, ftype[active], fspec))
> +        (rc, out) = getstatusoutput("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, seobject.file_type_str_to_option[ftype], fspec))
>          self.ready()
>          if rc != 0:
>              self.error(out)
> @@ -220,7 +213,7 @@ class fcontextPage(semanagePage):
>          iter = self.fcontextFileTypeCombo.get_active_iter()
>          ftype = list_model.get_value(iter, 0)
>          self.wait()
> -        (rc, out) = getstatusoutput("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, ftype, fspec))
> +        (rc, out) = getstatusoutput("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, seobject.file_type_str_to_option[ftype], fspec))
>          self.ready()
>          if rc != 0:
>              self.error(out)
> diff --git a/policycoreutils/gui/portsPage.py b/policycoreutils/gui/portsPage.py
> index b6445db..b8fdaad 100644
> --- a/policycoreutils/gui/portsPage.py
> +++ b/policycoreutils/gui/portsPage.py
> @@ -23,6 +23,12 @@ import os
>  import gobject
>  import sys
>  import seobject
> +
> +TYPE_COL = 0
> +PROTOCOL_COL = 1
> +MLS_COL = 2
> +PORT_COL = 3
> +
>  try:
>      from subprocess import getstatusoutput
>  except ImportError:
> diff --git a/policycoreutils/gui/semanagePage.py b/policycoreutils/gui/semanagePage.py
> index 1f14d56..27367f3 100644
> --- a/policycoreutils/gui/semanagePage.py
> +++ b/policycoreutils/gui/semanagePage.py
> @@ -130,8 +130,8 @@ class semanagePage:
>          dlg.destroy()
>  
>      def deleteDialog(self):
> -        store, iter = self.view.get_selection().get_selected()
> -        if self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(iter, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES:
> +        store, it = self.view.get_selection().get_selected()
> +        if (it is not None) and (self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(it, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES):
>              self.delete()
>  
>      def use_menus(self):
> diff --git a/policycoreutils/gui/system-config-selinux.glade b/policycoreutils/gui/system-config-selinux.glade
> index 05a697e..4547b3f 100644
> --- a/policycoreutils/gui/system-config-selinux.glade
> +++ b/policycoreutils/gui/system-config-selinux.glade
> @@ -729,7 +729,7 @@ regular file
>  directory
>  character device
>  block device
> -socket
> +socket file
>  symbolic link
>  named pipe
>  </property>
>
Stephen Smalley Oct. 21, 2016, 5:52 p.m. UTC | #2
On 10/21/2016 01:05 PM, Stephen Smalley wrote:
> On 10/19/2016 08:36 AM, Vit Mojzis wrote:
>> Return column definitions to portsPage (gui fails to load otherwise).
>>
>> fcontextPage:
>>   "ftype" dropdown was filled from 2 sources (system-config-selinux.glade
>>   and fcontextPage - from seobject module) which resulted in duplicate
>>   and invalid options. When given to "semanage fcontext -f", ftype has to be
>>   converted to 1 letter argument mode.
>>
>> TreeView.get_selection().get_selected() can return "None" if no item is selected
>> (the list can be empty). Test if correct iterator was acquired.
> 
> Thanks.  However, I can't seem to get system-config-selinux built from
> upstream to run before or after this patch:
> $ system-config-selinux
> Traceback (most recent call last):
>   File "/usr/share/system-config-selinux/system-config-selinux.py", line
> 36, in <module>
>     import gnome
> ImportError: No module named gnome
> 
> Are there other changes in Fedora that are required?

Never mind, found the dependency.  Thanks, applied.  I do still see this
unrelated warning:
/usr/share/system-config-selinux/system-config-selinux.py:80: Warning:
g_object_get_valist: object class 'GnomeProgram' has no property named
'default-icon'
  xml =
gtk.glade.XML("/usr/share/system-config-selinux/system-config-selinux.glade",
domain=PROGNAME)

> 
>>
>> Fixes:
>>   https://bugzilla.redhat.com/show_bug.cgi?id=1344842
>>
>> Signed-off-by: vmojzis <vmojzis@redhat.com>
>> ---
>>  policycoreutils/gui/fcontextPage.py             | 17 +++++------------
>>  policycoreutils/gui/portsPage.py                |  6 ++++++
>>  policycoreutils/gui/semanagePage.py             |  4 ++--
>>  policycoreutils/gui/system-config-selinux.glade |  2 +-
>>  4 files changed, 14 insertions(+), 15 deletions(-)
>>
>> diff --git a/policycoreutils/gui/fcontextPage.py b/policycoreutils/gui/fcontextPage.py
>> index c176de4..2e26666 100644
>> --- a/policycoreutils/gui/fcontextPage.py
>> +++ b/policycoreutils/gui/fcontextPage.py
>> @@ -105,13 +105,6 @@ class fcontextPage(semanagePage):
>>          self.load()
>>          self.fcontextEntry = xml.get_widget("fcontextEntry")
>>          self.fcontextFileTypeCombo = xml.get_widget("fcontextFileTypeCombo")
>> -        liststore = self.fcontextFileTypeCombo.get_model()
>> -        for k in seobject.file_types:
>> -            if len(k) > 0 and k[0] != '-':
>> -                iter = liststore.append()
>> -                liststore.set_value(iter, 0, k)
>> -        iter = liststore.get_iter_first()
>> -        self.fcontextFileTypeCombo.set_active_iter(iter)
>>          self.fcontextTypeEntry = xml.get_widget("fcontextTypeEntry")
>>          self.fcontextMLSEntry = xml.get_widget("fcontextMLSEntry")
>>  
>> @@ -183,7 +176,7 @@ class fcontextPage(semanagePage):
>>              fspec = store.get_value(iter, SPEC_COL)
>>              ftype = store.get_value(iter, FTYPE_COL)
>>              self.wait()
>> -            (rc, out) = getstatusoutput("semanage fcontext -d -f '%s' '%s'" % (ftype, fspec))
>> +            (rc, out) = getstatusoutput("semanage fcontext -d -f '%s' '%s'" % (seobject.file_type_str_to_option[ftype], fspec))
>>              self.ready()
>>  
>>              if rc != 0:
>> @@ -194,14 +187,14 @@ class fcontextPage(semanagePage):
>>              self.error(e.args[0])
>>  
>>      def add(self):
>> -        ftype = ["", "--", "-d", "-c", "-b", "-s", "-l", "-p"]
>>          fspec = self.fcontextEntry.get_text().strip()
>>          type = self.fcontextTypeEntry.get_text().strip()
>>          mls = self.fcontextMLSEntry.get_text().strip()
>>          list_model = self.fcontextFileTypeCombo.get_model()
>> -        active = self.fcontextFileTypeCombo.get_active()
>> +        it = self.fcontextFileTypeCombo.get_active_iter()
>> +        ftype = list_model.get_value(it,0)
>>          self.wait()
>> -        (rc, out) = getstatusoutput("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, ftype[active], fspec))
>> +        (rc, out) = getstatusoutput("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, seobject.file_type_str_to_option[ftype], fspec))
>>          self.ready()
>>          if rc != 0:
>>              self.error(out)
>> @@ -220,7 +213,7 @@ class fcontextPage(semanagePage):
>>          iter = self.fcontextFileTypeCombo.get_active_iter()
>>          ftype = list_model.get_value(iter, 0)
>>          self.wait()
>> -        (rc, out) = getstatusoutput("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, ftype, fspec))
>> +        (rc, out) = getstatusoutput("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, seobject.file_type_str_to_option[ftype], fspec))
>>          self.ready()
>>          if rc != 0:
>>              self.error(out)
>> diff --git a/policycoreutils/gui/portsPage.py b/policycoreutils/gui/portsPage.py
>> index b6445db..b8fdaad 100644
>> --- a/policycoreutils/gui/portsPage.py
>> +++ b/policycoreutils/gui/portsPage.py
>> @@ -23,6 +23,12 @@ import os
>>  import gobject
>>  import sys
>>  import seobject
>> +
>> +TYPE_COL = 0
>> +PROTOCOL_COL = 1
>> +MLS_COL = 2
>> +PORT_COL = 3
>> +
>>  try:
>>      from subprocess import getstatusoutput
>>  except ImportError:
>> diff --git a/policycoreutils/gui/semanagePage.py b/policycoreutils/gui/semanagePage.py
>> index 1f14d56..27367f3 100644
>> --- a/policycoreutils/gui/semanagePage.py
>> +++ b/policycoreutils/gui/semanagePage.py
>> @@ -130,8 +130,8 @@ class semanagePage:
>>          dlg.destroy()
>>  
>>      def deleteDialog(self):
>> -        store, iter = self.view.get_selection().get_selected()
>> -        if self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(iter, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES:
>> +        store, it = self.view.get_selection().get_selected()
>> +        if (it is not None) and (self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(it, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES):
>>              self.delete()
>>  
>>      def use_menus(self):
>> diff --git a/policycoreutils/gui/system-config-selinux.glade b/policycoreutils/gui/system-config-selinux.glade
>> index 05a697e..4547b3f 100644
>> --- a/policycoreutils/gui/system-config-selinux.glade
>> +++ b/policycoreutils/gui/system-config-selinux.glade
>> @@ -729,7 +729,7 @@ regular file
>>  directory
>>  character device
>>  block device
>> -socket
>> +socket file
>>  symbolic link
>>  named pipe
>>  </property>
>>
> 
> _______________________________________________
> Selinux mailing list
> Selinux@tycho.nsa.gov
> To unsubscribe, send email to Selinux-leave@tycho.nsa.gov.
> To get help, send an email containing "help" to Selinux-request@tycho.nsa.gov.
>
diff mbox

Patch

diff --git a/policycoreutils/gui/fcontextPage.py b/policycoreutils/gui/fcontextPage.py
index c176de4..2e26666 100644
--- a/policycoreutils/gui/fcontextPage.py
+++ b/policycoreutils/gui/fcontextPage.py
@@ -105,13 +105,6 @@  class fcontextPage(semanagePage):
         self.load()
         self.fcontextEntry = xml.get_widget("fcontextEntry")
         self.fcontextFileTypeCombo = xml.get_widget("fcontextFileTypeCombo")
-        liststore = self.fcontextFileTypeCombo.get_model()
-        for k in seobject.file_types:
-            if len(k) > 0 and k[0] != '-':
-                iter = liststore.append()
-                liststore.set_value(iter, 0, k)
-        iter = liststore.get_iter_first()
-        self.fcontextFileTypeCombo.set_active_iter(iter)
         self.fcontextTypeEntry = xml.get_widget("fcontextTypeEntry")
         self.fcontextMLSEntry = xml.get_widget("fcontextMLSEntry")
 
@@ -183,7 +176,7 @@  class fcontextPage(semanagePage):
             fspec = store.get_value(iter, SPEC_COL)
             ftype = store.get_value(iter, FTYPE_COL)
             self.wait()
-            (rc, out) = getstatusoutput("semanage fcontext -d -f '%s' '%s'" % (ftype, fspec))
+            (rc, out) = getstatusoutput("semanage fcontext -d -f '%s' '%s'" % (seobject.file_type_str_to_option[ftype], fspec))
             self.ready()
 
             if rc != 0:
@@ -194,14 +187,14 @@  class fcontextPage(semanagePage):
             self.error(e.args[0])
 
     def add(self):
-        ftype = ["", "--", "-d", "-c", "-b", "-s", "-l", "-p"]
         fspec = self.fcontextEntry.get_text().strip()
         type = self.fcontextTypeEntry.get_text().strip()
         mls = self.fcontextMLSEntry.get_text().strip()
         list_model = self.fcontextFileTypeCombo.get_model()
-        active = self.fcontextFileTypeCombo.get_active()
+        it = self.fcontextFileTypeCombo.get_active_iter()
+        ftype = list_model.get_value(it,0)
         self.wait()
-        (rc, out) = getstatusoutput("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, ftype[active], fspec))
+        (rc, out) = getstatusoutput("semanage fcontext -a -t %s -r %s -f '%s' '%s'" % (type, mls, seobject.file_type_str_to_option[ftype], fspec))
         self.ready()
         if rc != 0:
             self.error(out)
@@ -220,7 +213,7 @@  class fcontextPage(semanagePage):
         iter = self.fcontextFileTypeCombo.get_active_iter()
         ftype = list_model.get_value(iter, 0)
         self.wait()
-        (rc, out) = getstatusoutput("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, ftype, fspec))
+        (rc, out) = getstatusoutput("semanage fcontext -m -t %s -r %s -f '%s' '%s'" % (type, mls, seobject.file_type_str_to_option[ftype], fspec))
         self.ready()
         if rc != 0:
             self.error(out)
diff --git a/policycoreutils/gui/portsPage.py b/policycoreutils/gui/portsPage.py
index b6445db..b8fdaad 100644
--- a/policycoreutils/gui/portsPage.py
+++ b/policycoreutils/gui/portsPage.py
@@ -23,6 +23,12 @@  import os
 import gobject
 import sys
 import seobject
+
+TYPE_COL = 0
+PROTOCOL_COL = 1
+MLS_COL = 2
+PORT_COL = 3
+
 try:
     from subprocess import getstatusoutput
 except ImportError:
diff --git a/policycoreutils/gui/semanagePage.py b/policycoreutils/gui/semanagePage.py
index 1f14d56..27367f3 100644
--- a/policycoreutils/gui/semanagePage.py
+++ b/policycoreutils/gui/semanagePage.py
@@ -130,8 +130,8 @@  class semanagePage:
         dlg.destroy()
 
     def deleteDialog(self):
-        store, iter = self.view.get_selection().get_selected()
-        if self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(iter, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES:
+        store, it = self.view.get_selection().get_selected()
+        if (it is not None) and (self.verify(_("Are you sure you want to delete %s '%s'?" % (self.description, store.get_value(it, 0))), _("Delete %s" % self.description)) == gtk.RESPONSE_YES):
             self.delete()
 
     def use_menus(self):
diff --git a/policycoreutils/gui/system-config-selinux.glade b/policycoreutils/gui/system-config-selinux.glade
index 05a697e..4547b3f 100644
--- a/policycoreutils/gui/system-config-selinux.glade
+++ b/policycoreutils/gui/system-config-selinux.glade
@@ -729,7 +729,7 @@  regular file
 directory
 character device
 block device
-socket
+socket file
 symbolic link
 named pipe
 </property>