Config.py
上传用户:lswyart
上传日期:2008-06-12
资源大小:3441k
文件大小:5k
源码类别:

杀毒

开发平台:

Visual C++

  1. #-----------------------------------------------------------------------------
  2. # Name:        Config.py
  3. # Product:     ClamWin Free Antivirus
  4. #
  5. # Author:      alch [alch at users dot sourceforge dot net]
  6. #
  7. # Created:     2004/19/03
  8. # Copyright:   Copyright alch (c) 2004
  9. # Licence:     
  10. #   This program is free software; you can redistribute it and/or modify
  11. #   it under the terms of the GNU General Public License as published by
  12. #   the Free Software Foundation; either version 2 of the License, or
  13. #   (at your option) any later version.
  14. #   This program is distributed in the hope that it will be useful,
  15. #   but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. #   GNU General Public License for more details.
  18. #   You should have received a copy of the GNU General Public License
  19. #   along with this program; if not, write to the Free Software
  20. #   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21. #-----------------------------------------------------------------------------
  22. import ConfigParser
  23. import Utils
  24. import version
  25. import binascii
  26. import sys
  27. if sys.platform.startswith("win"):
  28.     import win32api
  29.     
  30. REGEX_SEPARATOR="|CLAMWIN_SEP|"
  31. class Settings:    
  32.     def __init__(self, filename):        
  33.         self._filename = filename
  34.         self._settings = {
  35.         'ClamAV':
  36.         [0, {'ClamScan': '', 'FreshClam': '', 'Database': '',
  37.              'RemoveInfected': '0', 'ScanRecursive': '1', 'InfectedOnly': '0',
  38.              'Priority': 'Low', 'EnableMbox': '0', 'ScanOle2': '1',
  39.              'ScanArchives': '1', 'MaxSize': '10', 'MaxFiles': '500',
  40.              'MaxRecursion': '5', 'LogFile': '', 'MaxLogSize': '1',
  41.              'MoveInfected': '0', 'QuarantineDir': '',  'Debug': '0',
  42.              'DetectBroken': '0', 'ClamScanParams':'',
  43.              'IncludePatterns': '', 
  44.              'ExcludePatterns': REGEX_SEPARATOR.join(('*.dbx','*.tbb','*.pst', '*.dat', '*.log', '*.evt', '*.nsf', '*.ntf', '*.chm')),}],
  45.         'Proxy':
  46.         [0, {'Host': '', 'Port': '3128', 'User':'',
  47.              'Password': ''}],              
  48.         'Updates':
  49.         [0, {'Enable': '1', 'Frequency': 'Daily', 'Time': '10:00:00', 
  50.             'WeekDay': '2', 'DBMirror': 'database.clamav.net', 
  51.             'DBUpdateLogFile': '', 'UpdateOnLogon': '0',
  52.             'CheckVersion': '1', 'CheckVersionURL': 'http://clamwin.sourceforge.net/clamwin.ver'}],  
  53.         'EmailAlerts':
  54.         [0, {'Enable': '0',
  55.              'SMTPHost': '', 'SMTPPort': '25', 'SMTPUser':'',
  56.              'SMTPPassword': '', 
  57.              'From': 'clamwin@yourdomain', 'To': 'admin@yourdomain', 
  58.              'Subject': 'ClamWin Virus Alert'}], 
  59.         'UI':
  60.         [0, {'TrayNotify': '1', 'ReportInfected': '1', 'Standalone': '0', 'Version': ''}],                
  61.         'Schedule':
  62.         [0, {'Path': '', }],                            
  63.         }        
  64.     def Read(self):                
  65.         try:
  66.             conf = ConfigParser.ConfigParser()
  67.             conf.read(self._filename)
  68.         except ConfigParser.Error:
  69.             return False        
  70.         for sect in self._settings:
  71.             for name in self._settings[sect][1]:
  72.                 try:                    
  73.                     val = conf.get(section = sect, option = name)
  74.                     if self._settings[sect][0]: # is binary?
  75.                         val = binascii.a2b_hex(val)
  76.                     self._settings[sect][1][name] = val
  77.                 except ConfigParser.Error:
  78.                     pass
  79.         # for older version set display infected only to 1
  80.         if self._settings['UI'][1]['Version'] == '':
  81.             self._settings['ClamAV'][1]['InfectedOnly'] = '1'
  82.             self._settings['UI'][1]['Version'] = version.clamwin_version
  83.         return True
  84.     def Write(self):        
  85.         try:
  86.             conf = ConfigParser.ConfigParser()
  87.             for sect in self._settings:
  88.                 if not conf.has_section(sect):
  89.                     conf.add_section(sect)
  90.                     for name in self._settings[sect][1]:                         
  91.                         val = self._settings[sect][1][name]
  92.                         if self._settings[sect][0]: # is binary?
  93.                             val = binascii.b2a_hex(val)
  94.                         conf.set(sect, option = name, value = val)
  95.             conf.write(file(self._filename, 'w'))           
  96.         except (ConfigParser.Error, IOError):
  97.             return False
  98.         return True
  99.     
  100.     def Get(self, sect, name):
  101.         value = self._settings[sect][1][name]
  102.         if(value is None):
  103.             return ""
  104.         return Utils.SafeExpandEnvironmentStrings(value)   
  105.         
  106.     
  107.     def Set(self, sect, name, val):
  108.         if val is None:
  109.             val = ''
  110.         if not self._settings.has_key(sect) or 
  111.             not self._settings[sect][1].has_key(name):
  112.             raise AttributeError('Internal Error. No such attribute: '+ sect + ': ' + name)
  113.         else:
  114.             self._settings[sect][1][name] = val
  115.             
  116.     def GetFilename(self):
  117.         return self._filename