## Copyright (C) 2001-2005 Red Hat, Inc. ## Copyright (C) 2001-2005 Harald Hoyer ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #from netconfpkg import IPsecList_base # pylint: disable-msg=E0611 import os from netconfpkg.NCDeviceList import ConfDevices from netconfpkg.NCIPsec import IPsec from netconfpkg.NC_functions import (log, SYSCONFDEVICEDIR, getRoot, testFilename, IPSEC, unlink, OLDSYSCONFDEVICEDIR) from netconfpkg.gdt import Gdtlist, gdtlist_properties class IPsecList_base(Gdtlist): gdtlist_properties(IPsec) class IPsecList(IPsecList_base): def __init__(self): super(IPsecList, self).__init__() self.oldname = None def load(self): from netconfpkg.NCIPsec import ConfIPsec self.__delslice__(0, len(self)) devices = ConfDevices() for ipsec_name in devices: conf = ConfIPsec(ipsec_name) mtype = None # take a peek in the config file if conf.has_key("TYPE"): mtype = conf["TYPE"] if mtype != "IPSEC": continue log.log(5, "Loading ipsec config %s" % ipsec_name) ipsec = IPsec() ipsec.load(ipsec_name) self.append(ipsec) self.commit() self.setunmodified() def save(self): from netconfpkg.NCIPsec import ConfIPsec for ipsec in self: ipsec.save() self.commit() dirname = getRoot() + SYSCONFDEVICEDIR # # Remove old config files # try: mdir = os.listdir(dirname) except OSError, msg: raise IOError, 'Cannot save in ' \ + dirname + ': ' + str(msg) for entry in mdir: if not testFilename(dirname + entry): continue if (len(entry) <= 6) or \ entry[:6] != 'ifcfg-': continue ipsecid = entry[6:] for ipsec in self: if ipsec.IPsecId == ipsecid: break else: # check for IPSEC conf = ConfIPsec(ipsecid) mtype = None if conf.has_key("TYPE"): mtype = conf["TYPE"] if mtype != IPSEC: continue unlink(dirname + entry) unlink(getRoot() + OLDSYSCONFDEVICEDIR + \ '/ifcfg-' + ipsecid) # # Remove old key files # try: mdir = os.listdir(dirname) except OSError, msg: raise IOError, 'Cannot save in ' \ + dirname + ': ' + str(msg) for entry in mdir: if not testFilename(dirname + entry): continue if (len(entry) <= 5) or \ entry[:5] != 'keys-': continue ipsecid = entry[5:] for ipsec in self: if ipsec.IPsecId == ipsecid: break else: # check for IPSEC from netconfpkg.NCDevice import ConfDevice conf = ConfDevice(ipsecid) mtype = None if conf.has_key("TYPE"): mtype = conf["TYPE"] if mtype: continue unlink(dirname + entry) unlink(getRoot() + OLDSYSCONFDEVICEDIR+'/keys-'+ipsecid) self.commit() self.setunmodified() def __repr__(self): return repr(self.__dict__) def _objToStr(self, parentStr = None): # pylint: disable-msg=W0613 retstr = "" for ipsec in self: # pylint: disable-msg=W0212 retstr += ipsec._objToStr("IPsecList.%s" % (ipsec.IPsecId)) return retstr def fromstr(self, vals, value): # pylint: disable-msg=W0212 if len(vals) <= 1: return if vals[0] == "IPsecList": del vals[0] else: return for ipsec in self: if ipsec.IPsecId == vals[0]: ipsec.fromstr(vals[1:], value) return ipsec = IPsec(vals[0]) self.append(ipsec) ipsec.fromstr(vals[1:], value) __IPSList = None def getIPsecList(refresh = None): # pylint: disable-msg=W0603 global __IPSList if __IPSList == None or refresh: __IPSList = IPsecList() __IPSList.load() return __IPSList