xref: /aosp_15_r20/external/selinux/gui/polgengui.py (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker#!/usr/bin/python3 -EsI
2*2d543d20SAndroid Build Coastguard Worker#
3*2d543d20SAndroid Build Coastguard Worker# polgengui.py - GUI for SELinux Config tool in system-config-selinux
4*2d543d20SAndroid Build Coastguard Worker#
5*2d543d20SAndroid Build Coastguard Worker# Dan Walsh <[email protected]>
6*2d543d20SAndroid Build Coastguard Worker#
7*2d543d20SAndroid Build Coastguard Worker# Copyright (C) 2007-2013 Red Hat
8*2d543d20SAndroid Build Coastguard Worker#
9*2d543d20SAndroid Build Coastguard Worker# This program is free software; you can redistribute it and/or modify
10*2d543d20SAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by
11*2d543d20SAndroid Build Coastguard Worker# the Free Software Foundation; either version 2 of the License, or
12*2d543d20SAndroid Build Coastguard Worker# (at your option) any later version.
13*2d543d20SAndroid Build Coastguard Worker#
14*2d543d20SAndroid Build Coastguard Worker# This program is distributed in the hope that it will be useful,
15*2d543d20SAndroid Build Coastguard Worker# but WITHOUT ANY WARRANTY; without even the implied warranty of
16*2d543d20SAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17*2d543d20SAndroid Build Coastguard Worker# GNU General Public License for more details.
18*2d543d20SAndroid Build Coastguard Worker#
19*2d543d20SAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License
20*2d543d20SAndroid Build Coastguard Worker# along with this program; if not, write to the Free Software
21*2d543d20SAndroid Build Coastguard Worker# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22*2d543d20SAndroid Build Coastguard Worker#
23*2d543d20SAndroid Build Coastguard Workerimport signal
24*2d543d20SAndroid Build Coastguard Workerimport string
25*2d543d20SAndroid Build Coastguard Workerimport gi
26*2d543d20SAndroid Build Coastguard Workergi.require_version('Gtk', '3.0')
27*2d543d20SAndroid Build Coastguard Workerfrom gi.repository import Gtk
28*2d543d20SAndroid Build Coastguard Workerimport os
29*2d543d20SAndroid Build Coastguard Workerfrom gi.repository import GObject
30*2d543d20SAndroid Build Coastguard Workerimport sys
31*2d543d20SAndroid Build Coastguard Workertry:
32*2d543d20SAndroid Build Coastguard Worker    import sepolicy
33*2d543d20SAndroid Build Coastguard Workerexcept ValueError as e:
34*2d543d20SAndroid Build Coastguard Worker    sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
35*2d543d20SAndroid Build Coastguard Worker    sys.exit(1)
36*2d543d20SAndroid Build Coastguard Worker
37*2d543d20SAndroid Build Coastguard Workerimport sepolicy.generate
38*2d543d20SAndroid Build Coastguard Workerimport sepolicy.interface
39*2d543d20SAndroid Build Coastguard Worker
40*2d543d20SAndroid Build Coastguard Workertry:
41*2d543d20SAndroid Build Coastguard Worker    from subprocess import getstatusoutput
42*2d543d20SAndroid Build Coastguard Workerexcept ImportError:
43*2d543d20SAndroid Build Coastguard Worker    from commands import getstatusoutput
44*2d543d20SAndroid Build Coastguard Worker
45*2d543d20SAndroid Build Coastguard Worker
46*2d543d20SAndroid Build Coastguard Workerimport re
47*2d543d20SAndroid Build Coastguard Worker
48*2d543d20SAndroid Build Coastguard Worker
49*2d543d20SAndroid Build Coastguard Workerdef get_all_modules():
50*2d543d20SAndroid Build Coastguard Worker    try:
51*2d543d20SAndroid Build Coastguard Worker        all_modules = []
52*2d543d20SAndroid Build Coastguard Worker        rc, output = getstatusoutput("semodule -l 2>/dev/null")
53*2d543d20SAndroid Build Coastguard Worker        if rc == 0:
54*2d543d20SAndroid Build Coastguard Worker            l = output.split("\n")
55*2d543d20SAndroid Build Coastguard Worker            for i in l:
56*2d543d20SAndroid Build Coastguard Worker                all_modules.append(i.split()[0])
57*2d543d20SAndroid Build Coastguard Worker    except:
58*2d543d20SAndroid Build Coastguard Worker        pass
59*2d543d20SAndroid Build Coastguard Worker
60*2d543d20SAndroid Build Coastguard Worker    return all_modules
61*2d543d20SAndroid Build Coastguard Worker
62*2d543d20SAndroid Build Coastguard Worker
63*2d543d20SAndroid Build Coastguard Worker##
64*2d543d20SAndroid Build Coastguard Worker## I18N
65*2d543d20SAndroid Build Coastguard Worker##
66*2d543d20SAndroid Build Coastguard WorkerPROGNAME = "selinux-gui"
67*2d543d20SAndroid Build Coastguard Workertry:
68*2d543d20SAndroid Build Coastguard Worker    import gettext
69*2d543d20SAndroid Build Coastguard Worker    kwargs = {}
70*2d543d20SAndroid Build Coastguard Worker    if sys.version_info < (3,):
71*2d543d20SAndroid Build Coastguard Worker        kwargs['unicode'] = True
72*2d543d20SAndroid Build Coastguard Worker    t = gettext.translation(PROGNAME,
73*2d543d20SAndroid Build Coastguard Worker                    localedir="/usr/share/locale",
74*2d543d20SAndroid Build Coastguard Worker                    **kwargs,
75*2d543d20SAndroid Build Coastguard Worker                    fallback=True)
76*2d543d20SAndroid Build Coastguard Worker    _ = t.gettext
77*2d543d20SAndroid Build Coastguard Workerexcept:
78*2d543d20SAndroid Build Coastguard Worker    try:
79*2d543d20SAndroid Build Coastguard Worker        import builtins
80*2d543d20SAndroid Build Coastguard Worker        builtins.__dict__['_'] = str
81*2d543d20SAndroid Build Coastguard Worker    except ImportError:
82*2d543d20SAndroid Build Coastguard Worker        import __builtin__
83*2d543d20SAndroid Build Coastguard Worker        __builtin__.__dict__['_'] = unicode
84*2d543d20SAndroid Build Coastguard Worker
85*2d543d20SAndroid Build Coastguard Workerversion = "1.0"
86*2d543d20SAndroid Build Coastguard Worker
87*2d543d20SAndroid Build Coastguard Workersys.path.append('/usr/share/system-config-selinux')
88*2d543d20SAndroid Build Coastguard Workersys.path.append('.')
89*2d543d20SAndroid Build Coastguard Worker
90*2d543d20SAndroid Build Coastguard Worker# From John Hunter http://www.daa.com.au/pipermail/pygtk/2003-February/004454.html
91*2d543d20SAndroid Build Coastguard Worker
92*2d543d20SAndroid Build Coastguard Worker
93*2d543d20SAndroid Build Coastguard Workerdef foreach(model, path, iter, selected):
94*2d543d20SAndroid Build Coastguard Worker    selected.append(model.get_value(iter, 0))
95*2d543d20SAndroid Build Coastguard Worker
96*2d543d20SAndroid Build Coastguard Worker##
97*2d543d20SAndroid Build Coastguard Worker## Pull in the Glade file
98*2d543d20SAndroid Build Coastguard Worker##
99*2d543d20SAndroid Build Coastguard Workerxml = Gtk.Builder()
100*2d543d20SAndroid Build Coastguard Workerxml.set_translation_domain(PROGNAME)
101*2d543d20SAndroid Build Coastguard Workerif os.access("polgen.ui", os.F_OK):
102*2d543d20SAndroid Build Coastguard Worker    xml.add_from_file("polgen.ui")
103*2d543d20SAndroid Build Coastguard Workerelse:
104*2d543d20SAndroid Build Coastguard Worker    xml.add_from_file("/usr/share/system-config-selinux/polgen.ui")
105*2d543d20SAndroid Build Coastguard Worker
106*2d543d20SAndroid Build Coastguard WorkerFILE = 1
107*2d543d20SAndroid Build Coastguard WorkerDIR = 2
108*2d543d20SAndroid Build Coastguard Worker
109*2d543d20SAndroid Build Coastguard Worker
110*2d543d20SAndroid Build Coastguard Workerclass childWindow:
111*2d543d20SAndroid Build Coastguard Worker    START_PAGE = 0
112*2d543d20SAndroid Build Coastguard Worker    SELECT_TYPE_PAGE = 0
113*2d543d20SAndroid Build Coastguard Worker    APP_PAGE = 1
114*2d543d20SAndroid Build Coastguard Worker    EXISTING_USER_PAGE = 2
115*2d543d20SAndroid Build Coastguard Worker    TRANSITION_PAGE = 3
116*2d543d20SAndroid Build Coastguard Worker    USER_TRANSITION_PAGE = 4
117*2d543d20SAndroid Build Coastguard Worker    ADMIN_PAGE = 5
118*2d543d20SAndroid Build Coastguard Worker    ROLE_PAGE = 6
119*2d543d20SAndroid Build Coastguard Worker    IN_NET_PAGE = 7
120*2d543d20SAndroid Build Coastguard Worker    OUT_NET_PAGE = 8
121*2d543d20SAndroid Build Coastguard Worker    COMMON_APPS_PAGE = 9
122*2d543d20SAndroid Build Coastguard Worker    FILES_PAGE = 10
123*2d543d20SAndroid Build Coastguard Worker    BOOLEAN_PAGE = 11
124*2d543d20SAndroid Build Coastguard Worker    SELECT_DIR_PAGE = 12
125*2d543d20SAndroid Build Coastguard Worker    FINISH_PAGE = 12
126*2d543d20SAndroid Build Coastguard Worker
127*2d543d20SAndroid Build Coastguard Worker    def __init__(self):
128*2d543d20SAndroid Build Coastguard Worker        self.xml = xml
129*2d543d20SAndroid Build Coastguard Worker        self.notebook = xml.get_object("notebook")
130*2d543d20SAndroid Build Coastguard Worker        self.label_dict = {}
131*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict = {}
132*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_label")
133*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
134*2d543d20SAndroid Build Coastguard Worker
135*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_user_roles_label")
136*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
137*2d543d20SAndroid Build Coastguard Worker
138*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_dir_label")
139*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
140*2d543d20SAndroid Build Coastguard Worker
141*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_domain_admin_label")
142*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
143*2d543d20SAndroid Build Coastguard Worker
144*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_in_label")
145*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
146*2d543d20SAndroid Build Coastguard Worker
147*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_out_label")
148*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
149*2d543d20SAndroid Build Coastguard Worker
150*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_common_label")
151*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
152*2d543d20SAndroid Build Coastguard Worker
153*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_manages_label")
154*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
155*2d543d20SAndroid Build Coastguard Worker
156*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("select_booleans_label")
157*2d543d20SAndroid Build Coastguard Worker        self.label_dict[label] = label.get_text()
158*2d543d20SAndroid Build Coastguard Worker
159*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("existing_user_treeview")
160*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
161*2d543d20SAndroid Build Coastguard Worker
162*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("transition_treeview")
163*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
164*2d543d20SAndroid Build Coastguard Worker
165*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_tcp_all_checkbutton")
166*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
167*2d543d20SAndroid Build Coastguard Worker
168*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_tcp_reserved_checkbutton")
169*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
170*2d543d20SAndroid Build Coastguard Worker
171*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_tcp_unreserved_checkbutton")
172*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
173*2d543d20SAndroid Build Coastguard Worker
174*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_tcp_entry")
175*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
176*2d543d20SAndroid Build Coastguard Worker
177*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_udp_all_checkbutton")
178*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
179*2d543d20SAndroid Build Coastguard Worker
180*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_udp_reserved_checkbutton")
181*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
182*2d543d20SAndroid Build Coastguard Worker
183*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_udp_unreserved_checkbutton")
184*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
185*2d543d20SAndroid Build Coastguard Worker
186*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("in_udp_entry")
187*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
188*2d543d20SAndroid Build Coastguard Worker
189*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("out_tcp_entry")
190*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
191*2d543d20SAndroid Build Coastguard Worker
192*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("out_udp_entry")
193*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
194*2d543d20SAndroid Build Coastguard Worker
195*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("out_tcp_all_checkbutton")
196*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
197*2d543d20SAndroid Build Coastguard Worker
198*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("out_udp_all_checkbutton")
199*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
200*2d543d20SAndroid Build Coastguard Worker
201*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("boolean_treeview")
202*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
203*2d543d20SAndroid Build Coastguard Worker
204*2d543d20SAndroid Build Coastguard Worker        label = xml.get_object("write_treeview")
205*2d543d20SAndroid Build Coastguard Worker        self.tooltip_dict[label] = label.get_tooltip_text()
206*2d543d20SAndroid Build Coastguard Worker
207*2d543d20SAndroid Build Coastguard Worker        try:
208*2d543d20SAndroid Build Coastguard Worker            self.all_types = sepolicy.generate.get_all_types()
209*2d543d20SAndroid Build Coastguard Worker            self.all_modules = get_all_modules()
210*2d543d20SAndroid Build Coastguard Worker            self.all_roles = sepolicy.generate.get_all_roles()
211*2d543d20SAndroid Build Coastguard Worker            self.all_users = sepolicy.generate.get_all_users()
212*2d543d20SAndroid Build Coastguard Worker        except RuntimeError as e:
213*2d543d20SAndroid Build Coastguard Worker            self.all_types = []
214*2d543d20SAndroid Build Coastguard Worker            self.all_modules = []
215*2d543d20SAndroid Build Coastguard Worker            self.all_roles = []
216*2d543d20SAndroid Build Coastguard Worker            self.all_users = []
217*2d543d20SAndroid Build Coastguard Worker            self.error(str(e))
218*2d543d20SAndroid Build Coastguard Worker
219*2d543d20SAndroid Build Coastguard Worker        self.name = ""
220*2d543d20SAndroid Build Coastguard Worker        handlers = {
221*2d543d20SAndroid Build Coastguard Worker            "on_delete_clicked": self.delete,
222*2d543d20SAndroid Build Coastguard Worker            "on_delete_boolean_clicked": self.delete_boolean,
223*2d543d20SAndroid Build Coastguard Worker            "on_exec_select_clicked": self.exec_select,
224*2d543d20SAndroid Build Coastguard Worker            "on_init_script_select_clicked": self.init_script_select,
225*2d543d20SAndroid Build Coastguard Worker            "on_add_clicked": self.add,
226*2d543d20SAndroid Build Coastguard Worker            "on_add_boolean_clicked": self.add_boolean,
227*2d543d20SAndroid Build Coastguard Worker            "on_add_dir_clicked": self.add_dir,
228*2d543d20SAndroid Build Coastguard Worker            "on_about_clicked": self.on_about_clicked
229*2d543d20SAndroid Build Coastguard Worker        }
230*2d543d20SAndroid Build Coastguard Worker        xml.connect_signals(handlers)
231*2d543d20SAndroid Build Coastguard Worker        xml.get_object("cancel_button").connect("clicked", self.quit)
232*2d543d20SAndroid Build Coastguard Worker        self.forward_button = xml.get_object("forward_button")
233*2d543d20SAndroid Build Coastguard Worker        self.forward_button.connect("clicked", self.forward)
234*2d543d20SAndroid Build Coastguard Worker        self.back_button = xml.get_object("back_button")
235*2d543d20SAndroid Build Coastguard Worker        self.back_button.connect("clicked", self.back)
236*2d543d20SAndroid Build Coastguard Worker
237*2d543d20SAndroid Build Coastguard Worker        self.boolean_dialog = xml.get_object("boolean_dialog")
238*2d543d20SAndroid Build Coastguard Worker        self.boolean_name_entry = xml.get_object("boolean_name_entry")
239*2d543d20SAndroid Build Coastguard Worker        self.boolean_description_entry = xml.get_object("boolean_description_entry")
240*2d543d20SAndroid Build Coastguard Worker
241*2d543d20SAndroid Build Coastguard Worker        self.pages = {}
242*2d543d20SAndroid Build Coastguard Worker        for i in sepolicy.generate.USERS:
243*2d543d20SAndroid Build Coastguard Worker            self.pages[i] = [self.SELECT_TYPE_PAGE, self.APP_PAGE, self.TRANSITION_PAGE, self.ROLE_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE]
244*2d543d20SAndroid Build Coastguard Worker        self.pages[sepolicy.generate.RUSER] = [self.SELECT_TYPE_PAGE, self.APP_PAGE, self.ADMIN_PAGE, self.USER_TRANSITION_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE]
245*2d543d20SAndroid Build Coastguard Worker        self.pages[sepolicy.generate.LUSER] = [self.SELECT_TYPE_PAGE, self.APP_PAGE, self.TRANSITION_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE]
246*2d543d20SAndroid Build Coastguard Worker        self.pages[sepolicy.generate.SANDBOX] = [self.SELECT_TYPE_PAGE, self.APP_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE]
247*2d543d20SAndroid Build Coastguard Worker        self.pages[sepolicy.generate.EUSER] = [self.SELECT_TYPE_PAGE, self.EXISTING_USER_PAGE, self.TRANSITION_PAGE, self.ROLE_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE]
248*2d543d20SAndroid Build Coastguard Worker
249*2d543d20SAndroid Build Coastguard Worker        for i in sepolicy.generate.APPLICATIONS:
250*2d543d20SAndroid Build Coastguard Worker            self.pages[i] = [self.SELECT_TYPE_PAGE, self.APP_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.COMMON_APPS_PAGE, self.FILES_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE]
251*2d543d20SAndroid Build Coastguard Worker        self.pages[sepolicy.generate.USER] = [self.SELECT_TYPE_PAGE, self.APP_PAGE, self.USER_TRANSITION_PAGE, self.IN_NET_PAGE, self.OUT_NET_PAGE, self.COMMON_APPS_PAGE, self.FILES_PAGE, self.BOOLEAN_PAGE, self.SELECT_DIR_PAGE]
252*2d543d20SAndroid Build Coastguard Worker
253*2d543d20SAndroid Build Coastguard Worker        self.current_page = 0
254*2d543d20SAndroid Build Coastguard Worker        self.back_button.set_sensitive(0)
255*2d543d20SAndroid Build Coastguard Worker
256*2d543d20SAndroid Build Coastguard Worker        self.network_buttons = {}
257*2d543d20SAndroid Build Coastguard Worker
258*2d543d20SAndroid Build Coastguard Worker        self.in_tcp_all_checkbutton = xml.get_object("in_tcp_all_checkbutton")
259*2d543d20SAndroid Build Coastguard Worker        self.in_tcp_reserved_checkbutton = xml.get_object("in_tcp_reserved_checkbutton")
260*2d543d20SAndroid Build Coastguard Worker        self.in_tcp_unreserved_checkbutton = xml.get_object("in_tcp_unreserved_checkbutton")
261*2d543d20SAndroid Build Coastguard Worker        self.in_tcp_entry = self.xml.get_object("in_tcp_entry")
262*2d543d20SAndroid Build Coastguard Worker        self.network_buttons[self.in_tcp_all_checkbutton] = [self.in_tcp_reserved_checkbutton, self.in_tcp_unreserved_checkbutton, self.in_tcp_entry]
263*2d543d20SAndroid Build Coastguard Worker
264*2d543d20SAndroid Build Coastguard Worker        self.out_tcp_all_checkbutton = xml.get_object("out_tcp_all_checkbutton")
265*2d543d20SAndroid Build Coastguard Worker        self.out_tcp_reserved_checkbutton = xml.get_object("out_tcp_reserved_checkbutton")
266*2d543d20SAndroid Build Coastguard Worker        self.out_tcp_unreserved_checkbutton = xml.get_object("out_tcp_unreserved_checkbutton")
267*2d543d20SAndroid Build Coastguard Worker        self.out_tcp_entry = self.xml.get_object("out_tcp_entry")
268*2d543d20SAndroid Build Coastguard Worker
269*2d543d20SAndroid Build Coastguard Worker        self.network_buttons[self.out_tcp_all_checkbutton] = [self.out_tcp_entry]
270*2d543d20SAndroid Build Coastguard Worker
271*2d543d20SAndroid Build Coastguard Worker        self.in_udp_all_checkbutton = xml.get_object("in_udp_all_checkbutton")
272*2d543d20SAndroid Build Coastguard Worker        self.in_udp_reserved_checkbutton = xml.get_object("in_udp_reserved_checkbutton")
273*2d543d20SAndroid Build Coastguard Worker        self.in_udp_unreserved_checkbutton = xml.get_object("in_udp_unreserved_checkbutton")
274*2d543d20SAndroid Build Coastguard Worker        self.in_udp_entry = self.xml.get_object("in_udp_entry")
275*2d543d20SAndroid Build Coastguard Worker
276*2d543d20SAndroid Build Coastguard Worker        self.network_buttons[self.in_udp_all_checkbutton] = [self.in_udp_reserved_checkbutton, self.in_udp_unreserved_checkbutton, self.in_udp_entry]
277*2d543d20SAndroid Build Coastguard Worker
278*2d543d20SAndroid Build Coastguard Worker        self.out_udp_all_checkbutton = xml.get_object("out_udp_all_checkbutton")
279*2d543d20SAndroid Build Coastguard Worker        self.out_udp_entry = self.xml.get_object("out_udp_entry")
280*2d543d20SAndroid Build Coastguard Worker        self.network_buttons[self.out_udp_all_checkbutton] = [self.out_udp_entry]
281*2d543d20SAndroid Build Coastguard Worker
282*2d543d20SAndroid Build Coastguard Worker        for b in self.network_buttons.keys():
283*2d543d20SAndroid Build Coastguard Worker            b.connect("clicked", self.network_all_clicked)
284*2d543d20SAndroid Build Coastguard Worker
285*2d543d20SAndroid Build Coastguard Worker        self.boolean_treeview = self.xml.get_object("boolean_treeview")
286*2d543d20SAndroid Build Coastguard Worker        self.boolean_store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING)
287*2d543d20SAndroid Build Coastguard Worker        self.boolean_treeview.set_model(self.boolean_store)
288*2d543d20SAndroid Build Coastguard Worker        self.boolean_store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
289*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn(_("Name"), Gtk.CellRendererText(), text=0)
290*2d543d20SAndroid Build Coastguard Worker        self.boolean_treeview.append_column(col)
291*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn(_("Description"), Gtk.CellRendererText(), text=1)
292*2d543d20SAndroid Build Coastguard Worker        self.boolean_treeview.append_column(col)
293*2d543d20SAndroid Build Coastguard Worker
294*2d543d20SAndroid Build Coastguard Worker        self.role_treeview = self.xml.get_object("role_treeview")
295*2d543d20SAndroid Build Coastguard Worker        self.role_store = Gtk.ListStore(GObject.TYPE_STRING)
296*2d543d20SAndroid Build Coastguard Worker        self.role_treeview.set_model(self.role_store)
297*2d543d20SAndroid Build Coastguard Worker        self.role_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
298*2d543d20SAndroid Build Coastguard Worker        self.role_store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
299*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn(_("Role"), Gtk.CellRendererText(), text=0)
300*2d543d20SAndroid Build Coastguard Worker        self.role_treeview.append_column(col)
301*2d543d20SAndroid Build Coastguard Worker
302*2d543d20SAndroid Build Coastguard Worker        self.existing_user_treeview = self.xml.get_object("existing_user_treeview")
303*2d543d20SAndroid Build Coastguard Worker        self.existing_user_store = Gtk.ListStore(GObject.TYPE_STRING)
304*2d543d20SAndroid Build Coastguard Worker        self.existing_user_treeview.set_model(self.existing_user_store)
305*2d543d20SAndroid Build Coastguard Worker        self.existing_user_store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
306*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn(_("Existing_User"), Gtk.CellRendererText(), text=0)
307*2d543d20SAndroid Build Coastguard Worker        self.existing_user_treeview.append_column(col)
308*2d543d20SAndroid Build Coastguard Worker
309*2d543d20SAndroid Build Coastguard Worker        for i in self.all_roles:
310*2d543d20SAndroid Build Coastguard Worker            iter = self.role_store.append()
311*2d543d20SAndroid Build Coastguard Worker            self.role_store.set_value(iter, 0, i[:-2])
312*2d543d20SAndroid Build Coastguard Worker
313*2d543d20SAndroid Build Coastguard Worker        self.in_tcp_reserved_checkbutton = xml.get_object("in_tcp_reserved_checkbutton")
314*2d543d20SAndroid Build Coastguard Worker
315*2d543d20SAndroid Build Coastguard Worker        self.transition_treeview = self.xml.get_object("transition_treeview")
316*2d543d20SAndroid Build Coastguard Worker        self.transition_store = Gtk.ListStore(GObject.TYPE_STRING)
317*2d543d20SAndroid Build Coastguard Worker        self.transition_treeview.set_model(self.transition_store)
318*2d543d20SAndroid Build Coastguard Worker        self.transition_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
319*2d543d20SAndroid Build Coastguard Worker        self.transition_store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
320*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn(_("Application"), Gtk.CellRendererText(), text=0)
321*2d543d20SAndroid Build Coastguard Worker        self.transition_treeview.append_column(col)
322*2d543d20SAndroid Build Coastguard Worker
323*2d543d20SAndroid Build Coastguard Worker        self.user_transition_treeview = self.xml.get_object("user_transition_treeview")
324*2d543d20SAndroid Build Coastguard Worker        self.user_transition_store = Gtk.ListStore(GObject.TYPE_STRING)
325*2d543d20SAndroid Build Coastguard Worker        self.user_transition_treeview.set_model(self.user_transition_store)
326*2d543d20SAndroid Build Coastguard Worker        self.user_transition_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
327*2d543d20SAndroid Build Coastguard Worker        self.user_transition_store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
328*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn(_("Application"), Gtk.CellRendererText(), text=0)
329*2d543d20SAndroid Build Coastguard Worker        self.user_transition_treeview.append_column(col)
330*2d543d20SAndroid Build Coastguard Worker
331*2d543d20SAndroid Build Coastguard Worker        for i in self.all_users:
332*2d543d20SAndroid Build Coastguard Worker            iter = self.user_transition_store.append()
333*2d543d20SAndroid Build Coastguard Worker            self.user_transition_store.set_value(iter, 0, i[:-2])
334*2d543d20SAndroid Build Coastguard Worker            iter = self.existing_user_store.append()
335*2d543d20SAndroid Build Coastguard Worker            self.existing_user_store.set_value(iter, 0, i[:-2])
336*2d543d20SAndroid Build Coastguard Worker
337*2d543d20SAndroid Build Coastguard Worker        self.admin_treeview = self.xml.get_object("admin_treeview")
338*2d543d20SAndroid Build Coastguard Worker        self.admin_store = Gtk.ListStore(GObject.TYPE_STRING)
339*2d543d20SAndroid Build Coastguard Worker        self.admin_treeview.set_model(self.admin_store)
340*2d543d20SAndroid Build Coastguard Worker        self.admin_treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
341*2d543d20SAndroid Build Coastguard Worker        self.admin_store.set_sort_column_id(0, Gtk.SortType.ASCENDING)
342*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn(_("Application"), Gtk.CellRendererText(), text=0)
343*2d543d20SAndroid Build Coastguard Worker        self.admin_treeview.append_column(col)
344*2d543d20SAndroid Build Coastguard Worker
345*2d543d20SAndroid Build Coastguard Worker        try:
346*2d543d20SAndroid Build Coastguard Worker            for u in sepolicy.interface.get_user():
347*2d543d20SAndroid Build Coastguard Worker                iter = self.transition_store.append()
348*2d543d20SAndroid Build Coastguard Worker                self.transition_store.set_value(iter, 0, u)
349*2d543d20SAndroid Build Coastguard Worker
350*2d543d20SAndroid Build Coastguard Worker            for a in sepolicy.interface.get_admin():
351*2d543d20SAndroid Build Coastguard Worker                iter = self.admin_store.append()
352*2d543d20SAndroid Build Coastguard Worker                self.admin_store.set_value(iter, 0, a)
353*2d543d20SAndroid Build Coastguard Worker        except ValueError as e:
354*2d543d20SAndroid Build Coastguard Worker            self.error(e.message)
355*2d543d20SAndroid Build Coastguard Worker
356*2d543d20SAndroid Build Coastguard Worker    def confine_application(self):
357*2d543d20SAndroid Build Coastguard Worker        return self.get_type() in sepolicy.generate.APPLICATIONS
358*2d543d20SAndroid Build Coastguard Worker
359*2d543d20SAndroid Build Coastguard Worker    def forward(self, arg):
360*2d543d20SAndroid Build Coastguard Worker        type = self.get_type()
361*2d543d20SAndroid Build Coastguard Worker        if self.current_page == self.START_PAGE:
362*2d543d20SAndroid Build Coastguard Worker            self.back_button.set_sensitive(1)
363*2d543d20SAndroid Build Coastguard Worker
364*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.SELECT_TYPE_PAGE:
365*2d543d20SAndroid Build Coastguard Worker            if self.on_select_type_page_next():
366*2d543d20SAndroid Build Coastguard Worker                return
367*2d543d20SAndroid Build Coastguard Worker
368*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.IN_NET_PAGE:
369*2d543d20SAndroid Build Coastguard Worker            if self.on_in_net_page_next():
370*2d543d20SAndroid Build Coastguard Worker                return
371*2d543d20SAndroid Build Coastguard Worker
372*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.OUT_NET_PAGE:
373*2d543d20SAndroid Build Coastguard Worker            if self.on_out_net_page_next():
374*2d543d20SAndroid Build Coastguard Worker                return
375*2d543d20SAndroid Build Coastguard Worker
376*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.APP_PAGE:
377*2d543d20SAndroid Build Coastguard Worker            if self.on_name_page_next():
378*2d543d20SAndroid Build Coastguard Worker                return
379*2d543d20SAndroid Build Coastguard Worker
380*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.EXISTING_USER_PAGE:
381*2d543d20SAndroid Build Coastguard Worker            if self.on_existing_user_page_next():
382*2d543d20SAndroid Build Coastguard Worker                return
383*2d543d20SAndroid Build Coastguard Worker
384*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.SELECT_DIR_PAGE:
385*2d543d20SAndroid Build Coastguard Worker            outputdir = self.output_entry.get_text()
386*2d543d20SAndroid Build Coastguard Worker            if not os.path.isdir(outputdir):
387*2d543d20SAndroid Build Coastguard Worker                self.error(_("%s must be a directory") % outputdir)
388*2d543d20SAndroid Build Coastguard Worker                return False
389*2d543d20SAndroid Build Coastguard Worker
390*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.FINISH_PAGE:
391*2d543d20SAndroid Build Coastguard Worker            self.generate_policy()
392*2d543d20SAndroid Build Coastguard Worker            self.xml.get_object("cancel_button").set_label(Gtk.STOCK_CLOSE)
393*2d543d20SAndroid Build Coastguard Worker        else:
394*2d543d20SAndroid Build Coastguard Worker            self.current_page = self.current_page + 1
395*2d543d20SAndroid Build Coastguard Worker            self.notebook.set_current_page(self.pages[type][self.current_page])
396*2d543d20SAndroid Build Coastguard Worker            if self.pages[type][self.current_page] == self.FINISH_PAGE:
397*2d543d20SAndroid Build Coastguard Worker                self.forward_button.set_label(Gtk.STOCK_APPLY)
398*2d543d20SAndroid Build Coastguard Worker
399*2d543d20SAndroid Build Coastguard Worker    def back(self, arg):
400*2d543d20SAndroid Build Coastguard Worker        type = self.get_type()
401*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.FINISH_PAGE:
402*2d543d20SAndroid Build Coastguard Worker            self.forward_button.set_label(Gtk.STOCK_GO_FORWARD)
403*2d543d20SAndroid Build Coastguard Worker
404*2d543d20SAndroid Build Coastguard Worker        self.current_page = self.current_page - 1
405*2d543d20SAndroid Build Coastguard Worker        self.notebook.set_current_page(self.pages[type][self.current_page])
406*2d543d20SAndroid Build Coastguard Worker        if self.pages[type][self.current_page] == self.START_PAGE:
407*2d543d20SAndroid Build Coastguard Worker            self.back_button.set_sensitive(0)
408*2d543d20SAndroid Build Coastguard Worker
409*2d543d20SAndroid Build Coastguard Worker    def network_all_clicked(self, button):
410*2d543d20SAndroid Build Coastguard Worker        active = button.get_active()
411*2d543d20SAndroid Build Coastguard Worker        for b in self.network_buttons[button]:
412*2d543d20SAndroid Build Coastguard Worker            b.set_sensitive(not active)
413*2d543d20SAndroid Build Coastguard Worker
414*2d543d20SAndroid Build Coastguard Worker    def verify(self, message, title=""):
415*2d543d20SAndroid Build Coastguard Worker        dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO,
416*2d543d20SAndroid Build Coastguard Worker                                Gtk.ButtonsType.YES_NO,
417*2d543d20SAndroid Build Coastguard Worker                                message)
418*2d543d20SAndroid Build Coastguard Worker        dlg.set_title(title)
419*2d543d20SAndroid Build Coastguard Worker        dlg.set_position(Gtk.WindowPosition.MOUSE)
420*2d543d20SAndroid Build Coastguard Worker        dlg.show_all()
421*2d543d20SAndroid Build Coastguard Worker        rc = dlg.run()
422*2d543d20SAndroid Build Coastguard Worker        dlg.destroy()
423*2d543d20SAndroid Build Coastguard Worker        return rc
424*2d543d20SAndroid Build Coastguard Worker
425*2d543d20SAndroid Build Coastguard Worker    def info(self, message):
426*2d543d20SAndroid Build Coastguard Worker        dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.INFO,
427*2d543d20SAndroid Build Coastguard Worker                                Gtk.ButtonsType.OK,
428*2d543d20SAndroid Build Coastguard Worker                                message)
429*2d543d20SAndroid Build Coastguard Worker        dlg.set_position(Gtk.WindowPosition.MOUSE)
430*2d543d20SAndroid Build Coastguard Worker        dlg.show_all()
431*2d543d20SAndroid Build Coastguard Worker        dlg.run()
432*2d543d20SAndroid Build Coastguard Worker        dlg.destroy()
433*2d543d20SAndroid Build Coastguard Worker
434*2d543d20SAndroid Build Coastguard Worker    def error(self, message):
435*2d543d20SAndroid Build Coastguard Worker        dlg = Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR,
436*2d543d20SAndroid Build Coastguard Worker                                Gtk.ButtonsType.CLOSE,
437*2d543d20SAndroid Build Coastguard Worker                                message)
438*2d543d20SAndroid Build Coastguard Worker        dlg.set_position(Gtk.WindowPosition.MOUSE)
439*2d543d20SAndroid Build Coastguard Worker        dlg.show_all()
440*2d543d20SAndroid Build Coastguard Worker        dlg.run()
441*2d543d20SAndroid Build Coastguard Worker        dlg.destroy()
442*2d543d20SAndroid Build Coastguard Worker
443*2d543d20SAndroid Build Coastguard Worker    def get_name(self):
444*2d543d20SAndroid Build Coastguard Worker        if self.existing_user_radiobutton.get_active():
445*2d543d20SAndroid Build Coastguard Worker            store, iter = self.existing_user_treeview.get_selection().get_selected()
446*2d543d20SAndroid Build Coastguard Worker            if iter == None:
447*2d543d20SAndroid Build Coastguard Worker                raise ValueError(_("You must select a user"))
448*2d543d20SAndroid Build Coastguard Worker            return store.get_value(iter, 0)
449*2d543d20SAndroid Build Coastguard Worker        else:
450*2d543d20SAndroid Build Coastguard Worker            return self.name_entry.get_text()
451*2d543d20SAndroid Build Coastguard Worker
452*2d543d20SAndroid Build Coastguard Worker    def get_type(self):
453*2d543d20SAndroid Build Coastguard Worker        if self.sandbox_radiobutton.get_active():
454*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.SANDBOX
455*2d543d20SAndroid Build Coastguard Worker        if self.cgi_radiobutton.get_active():
456*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.CGI
457*2d543d20SAndroid Build Coastguard Worker        if self.user_radiobutton.get_active():
458*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.USER
459*2d543d20SAndroid Build Coastguard Worker        if self.init_radiobutton.get_active():
460*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.DAEMON
461*2d543d20SAndroid Build Coastguard Worker        if self.dbus_radiobutton.get_active():
462*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.DBUS
463*2d543d20SAndroid Build Coastguard Worker        if self.inetd_radiobutton.get_active():
464*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.INETD
465*2d543d20SAndroid Build Coastguard Worker        if self.login_user_radiobutton.get_active():
466*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.LUSER
467*2d543d20SAndroid Build Coastguard Worker        if self.admin_user_radiobutton.get_active():
468*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.AUSER
469*2d543d20SAndroid Build Coastguard Worker        if self.xwindows_user_radiobutton.get_active():
470*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.XUSER
471*2d543d20SAndroid Build Coastguard Worker        if self.terminal_user_radiobutton.get_active():
472*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.TUSER
473*2d543d20SAndroid Build Coastguard Worker        if self.root_user_radiobutton.get_active():
474*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.RUSER
475*2d543d20SAndroid Build Coastguard Worker        if self.existing_user_radiobutton.get_active():
476*2d543d20SAndroid Build Coastguard Worker            return sepolicy.generate.EUSER
477*2d543d20SAndroid Build Coastguard Worker
478*2d543d20SAndroid Build Coastguard Worker    def generate_policy(self, *args):
479*2d543d20SAndroid Build Coastguard Worker        outputdir = self.output_entry.get_text()
480*2d543d20SAndroid Build Coastguard Worker        try:
481*2d543d20SAndroid Build Coastguard Worker            my_policy = sepolicy.generate.policy(self.get_name(), self.get_type())
482*2d543d20SAndroid Build Coastguard Worker
483*2d543d20SAndroid Build Coastguard Worker            iter = self.boolean_store.get_iter_first()
484*2d543d20SAndroid Build Coastguard Worker            while iter:
485*2d543d20SAndroid Build Coastguard Worker                my_policy.add_boolean(self.boolean_store.get_value(iter, 0), self.boolean_store.get_value(iter, 1))
486*2d543d20SAndroid Build Coastguard Worker                iter = self.boolean_store.iter_next(iter)
487*2d543d20SAndroid Build Coastguard Worker
488*2d543d20SAndroid Build Coastguard Worker            if self.get_type() in sepolicy.generate.APPLICATIONS:
489*2d543d20SAndroid Build Coastguard Worker                my_policy.set_program(self.exec_entry.get_text())
490*2d543d20SAndroid Build Coastguard Worker                my_policy.gen_symbols()
491*2d543d20SAndroid Build Coastguard Worker
492*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_syslog(self.syslog_checkbutton.get_active() == 1)
493*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_tmp(self.tmp_checkbutton.get_active() == 1)
494*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_uid(self.uid_checkbutton.get_active() == 1)
495*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_pam(self.pam_checkbutton.get_active() == 1)
496*2d543d20SAndroid Build Coastguard Worker
497*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_dbus(self.dbus_checkbutton.get_active() == 1)
498*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_audit(self.audit_checkbutton.get_active() == 1)
499*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_terminal(self.terminal_checkbutton.get_active() == 1)
500*2d543d20SAndroid Build Coastguard Worker                my_policy.set_use_mail(self.mail_checkbutton.get_active() == 1)
501*2d543d20SAndroid Build Coastguard Worker                if self.get_type() is sepolicy.generate.DAEMON:
502*2d543d20SAndroid Build Coastguard Worker                    my_policy.set_init_script(self.init_script_entry.get_text())
503*2d543d20SAndroid Build Coastguard Worker                if self.get_type() == sepolicy.generate.USER:
504*2d543d20SAndroid Build Coastguard Worker                    selected = []
505*2d543d20SAndroid Build Coastguard Worker                    self.user_transition_treeview.get_selection().selected_foreach(foreach, selected)
506*2d543d20SAndroid Build Coastguard Worker                    my_policy.set_transition_users(selected)
507*2d543d20SAndroid Build Coastguard Worker            else:
508*2d543d20SAndroid Build Coastguard Worker                if self.get_type() == sepolicy.generate.RUSER:
509*2d543d20SAndroid Build Coastguard Worker                    selected = []
510*2d543d20SAndroid Build Coastguard Worker                    self.admin_treeview.get_selection().selected_foreach(foreach, selected)
511*2d543d20SAndroid Build Coastguard Worker                    my_policy.set_admin_domains(selected)
512*2d543d20SAndroid Build Coastguard Worker                    selected = []
513*2d543d20SAndroid Build Coastguard Worker                    self.user_transition_treeview.get_selection().selected_foreach(foreach, selected)
514*2d543d20SAndroid Build Coastguard Worker                    my_policy.set_transition_users(selected)
515*2d543d20SAndroid Build Coastguard Worker                else:
516*2d543d20SAndroid Build Coastguard Worker                    selected = []
517*2d543d20SAndroid Build Coastguard Worker                    self.transition_treeview.get_selection().selected_foreach(foreach, selected)
518*2d543d20SAndroid Build Coastguard Worker                    my_policy.set_transition_domains(selected)
519*2d543d20SAndroid Build Coastguard Worker
520*2d543d20SAndroid Build Coastguard Worker                    selected = []
521*2d543d20SAndroid Build Coastguard Worker                    self.role_treeview.get_selection().selected_foreach(foreach, selected)
522*2d543d20SAndroid Build Coastguard Worker                    my_policy.set_admin_roles(selected)
523*2d543d20SAndroid Build Coastguard Worker
524*2d543d20SAndroid Build Coastguard Worker            my_policy.set_in_tcp(self.in_tcp_all_checkbutton.get_active(), self.in_tcp_reserved_checkbutton.get_active(), self.in_tcp_unreserved_checkbutton.get_active(), self.in_tcp_entry.get_text())
525*2d543d20SAndroid Build Coastguard Worker            my_policy.set_in_udp(self.in_udp_all_checkbutton.get_active(), self.in_udp_reserved_checkbutton.get_active(), self.in_udp_unreserved_checkbutton.get_active(), self.in_udp_entry.get_text())
526*2d543d20SAndroid Build Coastguard Worker            my_policy.set_out_tcp(self.out_tcp_all_checkbutton.get_active(), self.out_tcp_entry.get_text())
527*2d543d20SAndroid Build Coastguard Worker            my_policy.set_out_udp(self.out_udp_all_checkbutton.get_active(), self.out_udp_entry.get_text())
528*2d543d20SAndroid Build Coastguard Worker
529*2d543d20SAndroid Build Coastguard Worker            iter = self.store.get_iter_first()
530*2d543d20SAndroid Build Coastguard Worker            while iter:
531*2d543d20SAndroid Build Coastguard Worker                if self.store.get_value(iter, 1) == FILE:
532*2d543d20SAndroid Build Coastguard Worker                    my_policy.add_file(self.store.get_value(iter, 0))
533*2d543d20SAndroid Build Coastguard Worker                else:
534*2d543d20SAndroid Build Coastguard Worker                    my_policy.add_dir(self.store.get_value(iter, 0))
535*2d543d20SAndroid Build Coastguard Worker                iter = self.store.iter_next(iter)
536*2d543d20SAndroid Build Coastguard Worker
537*2d543d20SAndroid Build Coastguard Worker            self.info(my_policy.generate(outputdir))
538*2d543d20SAndroid Build Coastguard Worker            return False
539*2d543d20SAndroid Build Coastguard Worker        except ValueError as e:
540*2d543d20SAndroid Build Coastguard Worker            self.error(e.message)
541*2d543d20SAndroid Build Coastguard Worker
542*2d543d20SAndroid Build Coastguard Worker    def delete(self, args):
543*2d543d20SAndroid Build Coastguard Worker        store, iter = self.view.get_selection().get_selected()
544*2d543d20SAndroid Build Coastguard Worker        if iter != None:
545*2d543d20SAndroid Build Coastguard Worker            store.remove(iter)
546*2d543d20SAndroid Build Coastguard Worker            self.view.get_selection().select_path((0,))
547*2d543d20SAndroid Build Coastguard Worker
548*2d543d20SAndroid Build Coastguard Worker    def delete_boolean(self, args):
549*2d543d20SAndroid Build Coastguard Worker        store, iter = self.boolean_treeview.get_selection().get_selected()
550*2d543d20SAndroid Build Coastguard Worker        if iter != None:
551*2d543d20SAndroid Build Coastguard Worker            store.remove(iter)
552*2d543d20SAndroid Build Coastguard Worker            self.boolean_treeview.get_selection().select_path((0,))
553*2d543d20SAndroid Build Coastguard Worker
554*2d543d20SAndroid Build Coastguard Worker    def add_boolean(self, type):
555*2d543d20SAndroid Build Coastguard Worker        self.boolean_name_entry.set_text("")
556*2d543d20SAndroid Build Coastguard Worker        self.boolean_description_entry.set_text("")
557*2d543d20SAndroid Build Coastguard Worker        rc = self.boolean_dialog.run()
558*2d543d20SAndroid Build Coastguard Worker        self.boolean_dialog.hide()
559*2d543d20SAndroid Build Coastguard Worker        if rc == Gtk.ResponseType.CANCEL:
560*2d543d20SAndroid Build Coastguard Worker            return
561*2d543d20SAndroid Build Coastguard Worker        iter = self.boolean_store.append()
562*2d543d20SAndroid Build Coastguard Worker        self.boolean_store.set_value(iter, 0, self.boolean_name_entry.get_text())
563*2d543d20SAndroid Build Coastguard Worker        self.boolean_store.set_value(iter, 1, self.boolean_description_entry.get_text())
564*2d543d20SAndroid Build Coastguard Worker
565*2d543d20SAndroid Build Coastguard Worker    def __add(self, type):
566*2d543d20SAndroid Build Coastguard Worker        rc = self.file_dialog.run()
567*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.hide()
568*2d543d20SAndroid Build Coastguard Worker        if rc == Gtk.ResponseType.CANCEL:
569*2d543d20SAndroid Build Coastguard Worker            return
570*2d543d20SAndroid Build Coastguard Worker        for i in self.file_dialog.get_filenames():
571*2d543d20SAndroid Build Coastguard Worker            iter = self.store.append()
572*2d543d20SAndroid Build Coastguard Worker            self.store.set_value(iter, 0, i)
573*2d543d20SAndroid Build Coastguard Worker            self.store.set_value(iter, 1, type)
574*2d543d20SAndroid Build Coastguard Worker
575*2d543d20SAndroid Build Coastguard Worker    def exec_select(self, args):
576*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_select_multiple(0)
577*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_title(_("Select executable file to be confined."))
578*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_action(Gtk.FileChooserAction.OPEN)
579*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_current_folder("/usr/sbin")
580*2d543d20SAndroid Build Coastguard Worker        rc = self.file_dialog.run()
581*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.hide()
582*2d543d20SAndroid Build Coastguard Worker        if rc == Gtk.ResponseType.CANCEL:
583*2d543d20SAndroid Build Coastguard Worker            return
584*2d543d20SAndroid Build Coastguard Worker        self.exec_entry.set_text(self.file_dialog.get_filename())
585*2d543d20SAndroid Build Coastguard Worker
586*2d543d20SAndroid Build Coastguard Worker    def init_script_select(self, args):
587*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_select_multiple(0)
588*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_title(_("Select init script file to be confined."))
589*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_action(Gtk.FileChooserAction.OPEN)
590*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_current_folder("/etc/rc.d/init.d")
591*2d543d20SAndroid Build Coastguard Worker        rc = self.file_dialog.run()
592*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.hide()
593*2d543d20SAndroid Build Coastguard Worker        if rc == Gtk.ResponseType.CANCEL:
594*2d543d20SAndroid Build Coastguard Worker            return
595*2d543d20SAndroid Build Coastguard Worker        self.init_script_entry.set_text(self.file_dialog.get_filename())
596*2d543d20SAndroid Build Coastguard Worker
597*2d543d20SAndroid Build Coastguard Worker    def add(self, args):
598*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_title(_("Select file(s) that confined application creates or writes"))
599*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_current_folder("/")
600*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_action(Gtk.FileChooserAction.OPEN)
601*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_select_multiple(1)
602*2d543d20SAndroid Build Coastguard Worker        self.__add(FILE)
603*2d543d20SAndroid Build Coastguard Worker
604*2d543d20SAndroid Build Coastguard Worker    def add_dir(self, args):
605*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_title(_("Select directory(s) that the confined application owns and writes into"))
606*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_current_folder("/")
607*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_select_multiple(1)
608*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_action(Gtk.FileChooserAction.SELECT_FOLDER)
609*2d543d20SAndroid Build Coastguard Worker        self.__add(DIR)
610*2d543d20SAndroid Build Coastguard Worker
611*2d543d20SAndroid Build Coastguard Worker    def on_about_clicked(self, args):
612*2d543d20SAndroid Build Coastguard Worker        dlg = xml.get_object("about_dialog")
613*2d543d20SAndroid Build Coastguard Worker        dlg.run()
614*2d543d20SAndroid Build Coastguard Worker        dlg.hide()
615*2d543d20SAndroid Build Coastguard Worker
616*2d543d20SAndroid Build Coastguard Worker    def quit(self, args):
617*2d543d20SAndroid Build Coastguard Worker        Gtk.main_quit()
618*2d543d20SAndroid Build Coastguard Worker
619*2d543d20SAndroid Build Coastguard Worker    def setupScreen(self):
620*2d543d20SAndroid Build Coastguard Worker        # Bring in widgets from glade file.
621*2d543d20SAndroid Build Coastguard Worker        self.mainWindow = self.xml.get_object("main_window")
622*2d543d20SAndroid Build Coastguard Worker        self.druid = self.xml.get_object("druid")
623*2d543d20SAndroid Build Coastguard Worker        self.type = 0
624*2d543d20SAndroid Build Coastguard Worker        self.name_entry = self.xml.get_object("name_entry")
625*2d543d20SAndroid Build Coastguard Worker        self.name_entry.connect("insert_text", self.on_name_entry_changed)
626*2d543d20SAndroid Build Coastguard Worker        self.name_entry.connect("focus_out_event", self.on_focus_out_event)
627*2d543d20SAndroid Build Coastguard Worker        self.exec_entry = self.xml.get_object("exec_entry")
628*2d543d20SAndroid Build Coastguard Worker        self.exec_button = self.xml.get_object("exec_button")
629*2d543d20SAndroid Build Coastguard Worker        self.init_script_entry = self.xml.get_object("init_script_entry")
630*2d543d20SAndroid Build Coastguard Worker        self.init_script_button = self.xml.get_object("init_script_button")
631*2d543d20SAndroid Build Coastguard Worker        self.output_entry = self.xml.get_object("output_entry")
632*2d543d20SAndroid Build Coastguard Worker        self.output_entry.set_text(os.getcwd())
633*2d543d20SAndroid Build Coastguard Worker        self.xml.get_object("output_button").connect("clicked", self.output_button_clicked)
634*2d543d20SAndroid Build Coastguard Worker
635*2d543d20SAndroid Build Coastguard Worker        self.xwindows_user_radiobutton = self.xml.get_object("xwindows_user_radiobutton")
636*2d543d20SAndroid Build Coastguard Worker        self.terminal_user_radiobutton = self.xml.get_object("terminal_user_radiobutton")
637*2d543d20SAndroid Build Coastguard Worker        self.root_user_radiobutton = self.xml.get_object("root_user_radiobutton")
638*2d543d20SAndroid Build Coastguard Worker        self.login_user_radiobutton = self.xml.get_object("login_user_radiobutton")
639*2d543d20SAndroid Build Coastguard Worker        self.admin_user_radiobutton = self.xml.get_object("admin_user_radiobutton")
640*2d543d20SAndroid Build Coastguard Worker        self.existing_user_radiobutton = self.xml.get_object("existing_user_radiobutton")
641*2d543d20SAndroid Build Coastguard Worker
642*2d543d20SAndroid Build Coastguard Worker        self.user_radiobutton = self.xml.get_object("user_radiobutton")
643*2d543d20SAndroid Build Coastguard Worker        self.init_radiobutton = self.xml.get_object("init_radiobutton")
644*2d543d20SAndroid Build Coastguard Worker        self.inetd_radiobutton = self.xml.get_object("inetd_radiobutton")
645*2d543d20SAndroid Build Coastguard Worker        self.dbus_radiobutton = self.xml.get_object("dbus_radiobutton")
646*2d543d20SAndroid Build Coastguard Worker        self.cgi_radiobutton = self.xml.get_object("cgi_radiobutton")
647*2d543d20SAndroid Build Coastguard Worker        self.sandbox_radiobutton = self.xml.get_object("sandbox_radiobutton")
648*2d543d20SAndroid Build Coastguard Worker        self.tmp_checkbutton = self.xml.get_object("tmp_checkbutton")
649*2d543d20SAndroid Build Coastguard Worker        self.uid_checkbutton = self.xml.get_object("uid_checkbutton")
650*2d543d20SAndroid Build Coastguard Worker        self.pam_checkbutton = self.xml.get_object("pam_checkbutton")
651*2d543d20SAndroid Build Coastguard Worker        self.dbus_checkbutton = self.xml.get_object("dbus_checkbutton")
652*2d543d20SAndroid Build Coastguard Worker        self.audit_checkbutton = self.xml.get_object("audit_checkbutton")
653*2d543d20SAndroid Build Coastguard Worker        self.terminal_checkbutton = self.xml.get_object("terminal_checkbutton")
654*2d543d20SAndroid Build Coastguard Worker        self.mail_checkbutton = self.xml.get_object("mail_checkbutton")
655*2d543d20SAndroid Build Coastguard Worker        self.syslog_checkbutton = self.xml.get_object("syslog_checkbutton")
656*2d543d20SAndroid Build Coastguard Worker        self.view = self.xml.get_object("write_treeview")
657*2d543d20SAndroid Build Coastguard Worker        self.file_dialog = self.xml.get_object("filechooserdialog")
658*2d543d20SAndroid Build Coastguard Worker
659*2d543d20SAndroid Build Coastguard Worker        self.store = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_INT)
660*2d543d20SAndroid Build Coastguard Worker        self.view.set_model(self.store)
661*2d543d20SAndroid Build Coastguard Worker        col = Gtk.TreeViewColumn("", Gtk.CellRendererText(), text=0)
662*2d543d20SAndroid Build Coastguard Worker        col.set_resizable(True)
663*2d543d20SAndroid Build Coastguard Worker        self.view.append_column(col)
664*2d543d20SAndroid Build Coastguard Worker        self.view.get_selection().select_path((0,))
665*2d543d20SAndroid Build Coastguard Worker
666*2d543d20SAndroid Build Coastguard Worker    def output_button_clicked(self, *args):
667*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_title(_("Select directory to generate policy files in"))
668*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_action(Gtk.FileChooserAction.SELECT_FOLDER)
669*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.set_select_multiple(0)
670*2d543d20SAndroid Build Coastguard Worker        rc = self.file_dialog.run()
671*2d543d20SAndroid Build Coastguard Worker        self.file_dialog.hide()
672*2d543d20SAndroid Build Coastguard Worker        if rc == Gtk.ResponseType.CANCEL:
673*2d543d20SAndroid Build Coastguard Worker            return
674*2d543d20SAndroid Build Coastguard Worker        self.output_entry.set_text(self.file_dialog.get_filename())
675*2d543d20SAndroid Build Coastguard Worker
676*2d543d20SAndroid Build Coastguard Worker    def on_name_entry_changed(self, entry, text, size, position):
677*2d543d20SAndroid Build Coastguard Worker        if text.find(" ") >= 0:
678*2d543d20SAndroid Build Coastguard Worker            entry.stop_emission_by_name("insert-text")
679*2d543d20SAndroid Build Coastguard Worker
680*2d543d20SAndroid Build Coastguard Worker    def on_focus_out_event(self, entry, third):
681*2d543d20SAndroid Build Coastguard Worker        name = entry.get_text()
682*2d543d20SAndroid Build Coastguard Worker        if self.name != name:
683*2d543d20SAndroid Build Coastguard Worker            if name in self.all_types:
684*2d543d20SAndroid Build Coastguard Worker                if self.verify(_("Type %s_t already defined in current policy.\nDo you want to continue?") % name, _("Verify Name")) == Gtk.ResponseType.NO:
685*2d543d20SAndroid Build Coastguard Worker                    entry.set_text("")
686*2d543d20SAndroid Build Coastguard Worker                    return False
687*2d543d20SAndroid Build Coastguard Worker            if name in self.all_modules:
688*2d543d20SAndroid Build Coastguard Worker                if self.verify(_("Module %s already loaded in current policy.\nDo you want to continue?") % name, _("Verify Name")) == Gtk.ResponseType.NO:
689*2d543d20SAndroid Build Coastguard Worker                    entry.set_text("")
690*2d543d20SAndroid Build Coastguard Worker                    return False
691*2d543d20SAndroid Build Coastguard Worker
692*2d543d20SAndroid Build Coastguard Worker            file = "/etc/rc.d/init.d/" + name
693*2d543d20SAndroid Build Coastguard Worker            if os.path.isfile(file) and self.init_script_entry.get_text() == "":
694*2d543d20SAndroid Build Coastguard Worker                self.init_script_entry.set_text(file)
695*2d543d20SAndroid Build Coastguard Worker
696*2d543d20SAndroid Build Coastguard Worker            file = "/usr/sbin/" + name
697*2d543d20SAndroid Build Coastguard Worker            if os.path.isfile(file) and self.exec_entry.get_text() == "":
698*2d543d20SAndroid Build Coastguard Worker                self.exec_entry.set_text(file)
699*2d543d20SAndroid Build Coastguard Worker
700*2d543d20SAndroid Build Coastguard Worker        self.name = name
701*2d543d20SAndroid Build Coastguard Worker        return False
702*2d543d20SAndroid Build Coastguard Worker
703*2d543d20SAndroid Build Coastguard Worker    def on_in_net_page_next(self, *args):
704*2d543d20SAndroid Build Coastguard Worker        try:
705*2d543d20SAndroid Build Coastguard Worker            sepolicy.generate.verify_ports(self.in_tcp_entry.get_text())
706*2d543d20SAndroid Build Coastguard Worker            sepolicy.generate.verify_ports(self.in_udp_entry.get_text())
707*2d543d20SAndroid Build Coastguard Worker        except ValueError as e:
708*2d543d20SAndroid Build Coastguard Worker            self.error(e.message)
709*2d543d20SAndroid Build Coastguard Worker            return True
710*2d543d20SAndroid Build Coastguard Worker
711*2d543d20SAndroid Build Coastguard Worker    def on_out_net_page_next(self, *args):
712*2d543d20SAndroid Build Coastguard Worker        try:
713*2d543d20SAndroid Build Coastguard Worker            sepolicy.generate.verify_ports(self.out_tcp_entry.get_text())
714*2d543d20SAndroid Build Coastguard Worker            sepolicy.generate.verify_ports(self.out_udp_entry.get_text())
715*2d543d20SAndroid Build Coastguard Worker        except ValueError as e:
716*2d543d20SAndroid Build Coastguard Worker            self.error(e.message)
717*2d543d20SAndroid Build Coastguard Worker            return True
718*2d543d20SAndroid Build Coastguard Worker
719*2d543d20SAndroid Build Coastguard Worker    def on_select_type_page_next(self, *args):
720*2d543d20SAndroid Build Coastguard Worker        self.exec_entry.set_sensitive(self.confine_application())
721*2d543d20SAndroid Build Coastguard Worker        self.exec_button.set_sensitive(self.confine_application())
722*2d543d20SAndroid Build Coastguard Worker        self.init_script_entry.set_sensitive(self.init_radiobutton.get_active())
723*2d543d20SAndroid Build Coastguard Worker        self.init_script_button.set_sensitive(self.init_radiobutton.get_active())
724*2d543d20SAndroid Build Coastguard Worker
725*2d543d20SAndroid Build Coastguard Worker    def on_existing_user_page_next(self, *args):
726*2d543d20SAndroid Build Coastguard Worker        store, iter = self.view.get_selection().get_selected()
727*2d543d20SAndroid Build Coastguard Worker        if iter != None:
728*2d543d20SAndroid Build Coastguard Worker            self.error(_("You must select a user"))
729*2d543d20SAndroid Build Coastguard Worker            return True
730*2d543d20SAndroid Build Coastguard Worker
731*2d543d20SAndroid Build Coastguard Worker    def on_name_page_next(self, *args):
732*2d543d20SAndroid Build Coastguard Worker        name = self.name_entry.get_text()
733*2d543d20SAndroid Build Coastguard Worker        if not name.isalnum():
734*2d543d20SAndroid Build Coastguard Worker            self.error(_("You must add a name made up of letters and numbers and containing no spaces."))
735*2d543d20SAndroid Build Coastguard Worker            return True
736*2d543d20SAndroid Build Coastguard Worker
737*2d543d20SAndroid Build Coastguard Worker        for i in self.label_dict:
738*2d543d20SAndroid Build Coastguard Worker            text = '<b>%s</b>' % (self.label_dict[i] % ("'" + name + "'"))
739*2d543d20SAndroid Build Coastguard Worker            i.set_markup(text)
740*2d543d20SAndroid Build Coastguard Worker
741*2d543d20SAndroid Build Coastguard Worker        for i in self.tooltip_dict:
742*2d543d20SAndroid Build Coastguard Worker            text = self.tooltip_dict[i] % ("'" + name + "'")
743*2d543d20SAndroid Build Coastguard Worker            i.set_tooltip_text(text)
744*2d543d20SAndroid Build Coastguard Worker
745*2d543d20SAndroid Build Coastguard Worker        if self.confine_application():
746*2d543d20SAndroid Build Coastguard Worker            exe = self.exec_entry.get_text()
747*2d543d20SAndroid Build Coastguard Worker            if exe == "":
748*2d543d20SAndroid Build Coastguard Worker                self.error(_("You must enter a executable"))
749*2d543d20SAndroid Build Coastguard Worker                return True
750*2d543d20SAndroid Build Coastguard Worker            policy = sepolicy.generate.policy(name, self.get_type())
751*2d543d20SAndroid Build Coastguard Worker            policy.set_program(exe)
752*2d543d20SAndroid Build Coastguard Worker            policy.gen_writeable()
753*2d543d20SAndroid Build Coastguard Worker            policy.gen_symbols()
754*2d543d20SAndroid Build Coastguard Worker            for f in policy.files.keys():
755*2d543d20SAndroid Build Coastguard Worker                iter = self.store.append()
756*2d543d20SAndroid Build Coastguard Worker                self.store.set_value(iter, 0, f)
757*2d543d20SAndroid Build Coastguard Worker                self.store.set_value(iter, 1, FILE)
758*2d543d20SAndroid Build Coastguard Worker
759*2d543d20SAndroid Build Coastguard Worker            for f in policy.dirs.keys():
760*2d543d20SAndroid Build Coastguard Worker                iter = self.store.append()
761*2d543d20SAndroid Build Coastguard Worker                self.store.set_value(iter, 0, f)
762*2d543d20SAndroid Build Coastguard Worker                self.store.set_value(iter, 1, DIR)
763*2d543d20SAndroid Build Coastguard Worker            self.tmp_checkbutton.set_active(policy.use_tmp)
764*2d543d20SAndroid Build Coastguard Worker            self.uid_checkbutton.set_active(policy.use_uid)
765*2d543d20SAndroid Build Coastguard Worker            self.pam_checkbutton.set_active(policy.use_pam)
766*2d543d20SAndroid Build Coastguard Worker            self.dbus_checkbutton.set_active(policy.use_dbus)
767*2d543d20SAndroid Build Coastguard Worker            self.audit_checkbutton.set_active(policy.use_audit)
768*2d543d20SAndroid Build Coastguard Worker            self.terminal_checkbutton.set_active(policy.use_terminal)
769*2d543d20SAndroid Build Coastguard Worker            self.mail_checkbutton.set_active(policy.use_mail)
770*2d543d20SAndroid Build Coastguard Worker            self.syslog_checkbutton.set_active(policy.use_syslog)
771*2d543d20SAndroid Build Coastguard Worker
772*2d543d20SAndroid Build Coastguard Worker    def stand_alone(self):
773*2d543d20SAndroid Build Coastguard Worker        desktopName = _("Configure SELinux")
774*2d543d20SAndroid Build Coastguard Worker
775*2d543d20SAndroid Build Coastguard Worker        self.setupScreen()
776*2d543d20SAndroid Build Coastguard Worker        self.mainWindow.connect("destroy", self.quit)
777*2d543d20SAndroid Build Coastguard Worker
778*2d543d20SAndroid Build Coastguard Worker        self.mainWindow.show_all()
779*2d543d20SAndroid Build Coastguard Worker        Gtk.main()
780*2d543d20SAndroid Build Coastguard Worker
781*2d543d20SAndroid Build Coastguard Workerif __name__ == "__main__":
782*2d543d20SAndroid Build Coastguard Worker    signal.signal(signal.SIGINT, signal.SIG_DFL)
783*2d543d20SAndroid Build Coastguard Worker
784*2d543d20SAndroid Build Coastguard Worker    app = childWindow()
785*2d543d20SAndroid Build Coastguard Worker    app.stand_alone()
786