From 22584cd5928950d82106f43965add51da366cb49 Mon Sep 17 00:00:00 2001 From: Stephen Soltesz Date: Wed, 23 Jul 2008 16:05:32 +0000 Subject: [PATCH] Added a verify() routine to the PLCConfiguration object in order to enforce that PLC_ROOT_USER and PLC_API_MAINTENANCE_USER are different. By adding the verify() function, I think other checks can be added easily. As well, the try/except around saving the configuration can catch the different cases. --- plc-config-tty | 7 +++++++ plc_config.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/plc-config-tty b/plc-config-tty index 67ebe61..1e45cdc 100755 --- a/plc-config-tty +++ b/plc-config-tty @@ -18,6 +18,7 @@ import readline import getopt from plc_config import PLCConfiguration +from plc_config import ConfigurationException #################### release_id = "$Id$" @@ -360,8 +361,14 @@ def mainloop (cdef, cread, cwrite, default_config, site_config, consolidated_con return elif (command in "wW"): try: + # Confirm that various constraints are met before saving file. + cwrite.verify(cdef, cread) cwrite.save(site_config) + except ConfigurationException, e: + print "Save failed due to a configuration exception: %s" % e + break; except: + import traceback; print traceback.print_exc() print ("Could not save -- fix write access on %s" % site_config) break print ("Wrote %s" % site_config) diff --git a/plc_config.py b/plc_config.py index c9382d2..bbc2f51 100644 --- a/plc_config.py +++ b/plc_config.py @@ -20,6 +20,8 @@ import os import types +class ConfigurationException(Exception): pass + class PLCConfiguration: """ Configuration file store. Optionally instantiate with a file path @@ -235,6 +237,42 @@ class PLCConfiguration: fileobj.close() + def verify(self, default, read): + """ Confirm that the existing configuration is consistent according to + the checks below. + + It looks for filled-in values in the order of, local object (self), + followed by cread (read values), and finally default values. + + Arguments: + + None + + Returns: + + None. If an exception is found, ConfigurationException is raised. + + """ + + maint_user = self.get('plc_api', 'maintenance_user') + if maint_user == (None, None): + maint_user = read.get('plc_api', 'maintenance_user') + if maint_user == (None, None): + maint_user = default.get('plc_api', 'maintenance_user') + + root_user = self.get('plc', 'root_user') + if root_user == (None, None): + root_user = read.get('plc', 'root_user') + if root_user == (None, None): + root_user = default.get('plc', 'root_user') + + muser= maint_user[1]['value'] + ruser= root_user[1]['value'] + + if muser == ruser: + raise ConfigurationException("The Maintenance Account email address cannot be the same as the Root User email address") + return + def get(self, category_id, variable_id): """ -- 2.43.0