www.pudn.com > clamwin-0.85.1-src.zip > Config.py



#-----------------------------------------------------------------------------
# Name:        Config.py
# Product:     ClamWin Antivirus
#
# Author:      alch [alch at users dot sourceforge dot net]
#
# Created:     2004/19/03
# Copyright:   Copyright alch (c) 2004
# Licence:     
#   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.

#-----------------------------------------------------------------------------
import ConfigParser
import Utils
import binascii
import sys
if sys.platform.startswith("win"):
    import win32api
    
REGEX_SEPARATOR="|CLAMWIN_SEP|"

class Settings:    
    def __init__(self, filename):        
        self._filename = filename	
        self._settings = {
        'ClamAV':
        [0, {'ClamScan': '', 'FreshClam': '', 'Database': '',
             'RemoveInfected': '0', 'ScanRecursive': '1', 'InfectedOnly': '0',
             'Priority': 'Normal', 'EnableMbox': '0', 'ScanOle2': '1',
             'ScanArchives': '1', 'MaxSize': '10', 'MaxFiles': '500',
             'MaxRecursion': '5', 'LogFile': '', 'MaxLogSize': '1',
             'MoveInfected': '0', 'QuarantineDir': '',  'Debug': '0',
             'IncludePatterns': '', 
             'ExcludePatterns': REGEX_SEPARATOR.join(('*.dbx','*.tbb','*.pst', '*.dat', '*.log')),}],
        'Proxy':
        [0, {'Host': '', 'Port': '3128', 'User':'',
             'Password': ''}],              
        'Updates':
        [0, {'Enable': '1', 'Frequency': 'Daily', 'Time': '10:00:00', 
            'WeekDay': '2', 'DBMirror': 'database.clamav.net', 
            'DBUpdateLogFile': '', 'UpdateOnLogon': '0',}],  
        'EmailAlerts':
        [0, {'Enable': '0',
             'SMTPHost': '', 'SMTPPort': '25', 'SMTPUser':'',
             'SMTPPassword': '', 
             'From': 'clamwin@yourdomain', 'To': 'admin@yourdomain', 
             'Subject': 'ClamWin Virus Alert'}], 
        'UI':
        [0, {'TrayNotify': '1', 'ReportInfected': '1', 'Standalone': '0',}],                
        'Schedule':
        [0, {'Path': '', }],                            
        }        

    def Read(self):                
        try:
            conf = ConfigParser.ConfigParser()
            conf.read(self._filename)
        except ConfigParser.Error:
            return False
        
        for sect in self._settings:
            for name in self._settings[sect][1]:
                try:                    
                    val = conf.get(section = sect, option = name)
                    if self._settings[sect][0]: # is binary?
                        val = binascii.a2b_hex(val)
                    self._settings[sect][1][name] = val
                except ConfigParser.Error:
                    pass                
        return True

    def Write(self):        
        try:
            conf = ConfigParser.ConfigParser()
            for sect in self._settings:
                if not conf.has_section(sect):
                    conf.add_section(sect)
                    for name in self._settings[sect][1]:	                        
                        val = self._settings[sect][1][name]
                        if self._settings[sect][0]: # is binary?
                            val = binascii.b2a_hex(val)
                        conf.set(sect, option = name, value = val)
            conf.write(file(self._filename, 'w'))
        except (ConfigParser.Error, IOError):
            return False
        return True

    
    def Get(self, sect, name):
        value = self._settings[sect][1][name]
        if(value is None):
            return ""
        return Utils.SafeExpandEnvironmentStrings(value)   
        
    
    def Set(self, sect, name, val):
        if val is None:
            val = ''
        if not self._settings.has_key(sect) or \
            not self._settings[sect][1].has_key(name):
            raise AttributeError('Internal Error. No such attribute: '+ sect + ': ' + name)
        else:
            self._settings[sect][1][name] = val
            
    def GetFilename(self):
        return self._filename