From fc2c3bce9aabb18f2eb28bb7d140c64f18eb3975 Mon Sep 17 00:00:00 2001 From: Eugeni Dodonov Date: Tue, 13 Jan 2009 21:33:44 +0000 Subject: More work on option presetting for level. --- src/msec/config.py | 14 ++++++- src/msec/libmsec.py | 4 ++ src/msec/msecgui.py | 104 ++++++++++++++++++++++++---------------------------- 3 files changed, 64 insertions(+), 58 deletions(-) (limited to 'src') diff --git a/src/msec/config.py b/src/msec/config.py index 8588feb..ed4fc08 100644 --- a/src/msec/config.py +++ b/src/msec/config.py @@ -198,6 +198,13 @@ class MsecConfig: else: self.get(opt, newconfig.get(opt)) + def reset(self): + """Resets all configuration""" + del self.options + self.options = {} + del self.comments + self.comments = [] + def load(self): """Loads and parses configuration file""" if not self.config: @@ -262,7 +269,7 @@ class MsecConfig: value = self.options[option] # prevent saving empty options # TODO: integrate with remove() - if not value: + if value == None: self.log.debug("Skipping %s" % option) else: print >>fd, "%s=%s" % (option, self.options[option]) @@ -280,6 +287,11 @@ class PermConfig(MsecConfig): self.log = log self.regexp = re.compile("^([^\s]*)\s*([a-z]*)\.([a-z]*)\s*([\d]?\d\d\d|current)\s*(force)?$") + def reset(self): + MsecConfig.reset(self) + del self.options_order + self.options_order = [] + def load(self): """Loads and parses configuration file""" try: diff --git a/src/msec/libmsec.py b/src/msec/libmsec.py index 82992c8..b5da5f9 100755 --- a/src/msec/libmsec.py +++ b/src/msec/libmsec.py @@ -758,6 +758,10 @@ class MSEC: self.log.debug("Processing action %s: %s(%s)" % (opt, callback, curconfig.get(opt))) # validating parameters param = curconfig.get(opt) + # if param is None, this option is to be skipped + if param == None: + self.log.debug("Skipping %s" % opt) + continue if param not in valid_params and '*' not in valid_params: self.log.error(_("Invalid parameter for %s: '%s'. Valid parameters: '%s'.") % (opt, param, valid_params)) diff --git a/src/msec/msecgui.py b/src/msec/msecgui.py index c6d7154..0013d4e 100755 --- a/src/msec/msecgui.py +++ b/src/msec/msecgui.py @@ -226,6 +226,9 @@ class MsecGui: self.notebook.append_page(self.notifications_page(), gtk.Label(_("Security notifications"))) self.notebook.append_page(self.permissions_security_page(), gtk.Label(_("Permissions"))) + # are we enabled? + self.toggle_level(self.base_level) + self.window.show_all() def cancel(self, widget): @@ -240,14 +243,10 @@ class MsecGui: """Ok button""" # TODO: split in smaller functions print self.base_level - print self.enforced_level - if self.enforcing_level: - self.log.debug(">> Enforcing level %s" % self.enforced_level) - if self.enforced_level in self.defaults: - curconfig, curperms = self.defaults[self.enforced_level] - print curconfig.list_options() - else: - curconfig = self.msecconfig + self.log.debug(">> Enforcing level %s" % self.base_level) + if self.base_level in self.defaults: + curconfig, curperms = self.defaults[self.base_level] + print curconfig.list_options() curperms = self.permconfig # apply config and preview changes self.log.start_buffer() @@ -351,13 +350,11 @@ class MsecGui: return dialog.destroy() - # well, let's commit it! - if self.enforcing_level: - # rewriting configuration - for opt in curconfig.list_options(): - self.msecconfig.set(opt, curconfig.get(opt)) - for perm in curperms.list_options(): - self.permconfig.set(perm, curperms.get(perm)) + # rewriting configuration + self.msecconfig.reset() + self.msecconfig.merge(curconfig) + self.permconfig.reset() + self.permconfig.merge(curconfig) # saving the configuration self.msecconfig.save() @@ -441,6 +438,7 @@ class MsecGui: # building the option iter = lstore.append() + print iter lstore.set(iter, self.COLUMN_OPTION, option, self.COLUMN_DESCR, doc, @@ -525,33 +523,31 @@ class MsecGui: entry.set_use_markup(True) vbox.pack_start(entry, False, False) - # Are we enforcing a new security level - entry = gtk.CheckButton(_("Enable msec tool")) - # security levels - frame = gtk.Frame() - frame.set_sensitive(False) + self.levels_frame = gtk.Frame(_("Base security level")) levels_vbox = gtk.VBox() - frame.add(levels_vbox) + self.levels_frame.add(levels_vbox) # none - button = gtk.RadioButton(group=None, label=_("Pre-defined security level: NONE")) - button.connect('clicked', self.force_level, 'none') + button = gtk.RadioButton(group=None, label=_("Disable MSEC")) + button.connect('clicked', self.force_level, config.NONE_LEVEL) + if self.base_level == config.NONE_LEVEL: + button.set_active(True) levels_vbox.pack_start(button) # default - button = gtk.RadioButton(group=button, label=_("Pre-defined security level: DEFAULT")) - button.connect('clicked', self.force_level, 'default') - button.set_active(True) + button = gtk.RadioButton(group=button, label=_("Enable MSEC with DEFAULT security level")) + button.connect('clicked', self.force_level, config.DEFAULT_LEVEL) + if self.base_level == config.DEFAULT_LEVEL: + button.set_active(True) levels_vbox.pack_start(button) # secure - button = gtk.RadioButton(group=button, label=_("Pre-defined security level: SECURE")) - button.connect('clicked', self.force_level, 'secure') + button = gtk.RadioButton(group=button, label=_("Enable MSEC with SECURE security level")) + button.connect('clicked', self.force_level, config.SECURE_LEVEL) + if self.base_level == config.SECURE_LEVEL: + button.set_active(True) levels_vbox.pack_start(button) - # adding callback for enable button - entry.connect('clicked', self.enforce_level, frame) - vbox.pack_start(entry, False, False) # putting levels to vbox - vbox.pack_start(frame) + vbox.pack_start(self.levels_frame) return vbox @@ -578,36 +574,30 @@ class MsecGui: return vbox - def enforce_level(self, widget, options): - """Enforces a new security level""" - frame = options - if widget.get_active(): - # we are enforcing a level - self.enforcing_level = True - frame.set_sensitive(True) - # disable notebook pages - npages = self.notebook.get_n_pages() - for page in range(1, npages): - curpage = self.notebook.get_nth_page(page) - curpage.set_sensitive(False) - label = self.notebook.get_tab_label(curpage) - label.set_sensitive(False) + def toggle_level(self, level): + """Enables/disables graphical items for msec""" + if level != config.NONE_LEVEL: + enabled = True else: - frame.set_sensitive(False) - # enable notebook pages - npages = self.notebook.get_n_pages() - for page in range(1, npages): - curpage = self.notebook.get_nth_page(page) - curpage.set_sensitive(True) - label = self.notebook.get_tab_label(curpage) - label.set_sensitive(True) - # disable level enforcing - self.enforcing_level = False + enabled = False + + # update notebook pages + npages = self.notebook.get_n_pages() + for page in range(1, npages): + curpage = self.notebook.get_nth_page(page) + curpage.set_sensitive(enabled) + label = self.notebook.get_tab_label(curpage) + label.set_sensitive(enabled) + + # TODO: update all widgets def force_level(self, widget, level): """Defines a given security level""" if widget.get_active(): - self.enforced_level = level + self.base_level = level + # update everything + print level + self.toggle_level(level) def notifications_page(self): """Builds the notifications page""" -- cgit v1.2.1