update_config_0.4.x-0.5.py
changeset 571 a4aead244f75
parent 465 c0e1fb1b0145
parent 570 28230a8230bf
child 572 3238c58d01ae
equal deleted inserted replaced
465:c0e1fb1b0145 571:a4aead244f75
     1 #!/usr/bin/env python
       
     2 # -*- coding: UTF-8 -*-
       
     3 # Copyright (c) 2008 - 2010, Pascal Volk
       
     4 # See COPYING for distribution information.
       
     5 
       
     6 import os
       
     7 os.sys.path.remove(os.sys.path[0])
       
     8 from time import time
       
     9 from ConfigParser import ConfigParser
       
    10 from shutil import copy2
       
    11 from VirtualMailManager.constants.VERSION import VERSION
       
    12 
       
    13 
       
    14 def get_config_file():
       
    15     f = None
       
    16     for d in ('/root', '/usr/local/etc', '/etc'):
       
    17         tmp = os.path.join(d, 'vmm.cfg')
       
    18         if os.path.isfile(tmp):
       
    19             f = tmp
       
    20             break
       
    21     if f:
       
    22         return f
       
    23     else:
       
    24         os.sys.stderr.write('error: vmm.cfg not found\n')
       
    25         os.sys.exit(2)
       
    26 
       
    27 def update(cp):
       
    28     if VERSION == '0.4':
       
    29         upd_040(cp)
       
    30     elif VERSION == '0.5':
       
    31         upd_050(cp)
       
    32     elif VERSION == '0.5.1':
       
    33         upd_051(cp)
       
    34     elif VERSION == '0.5.2':
       
    35         os.sys.stdout.write('info: nothing to do for version %s\n' % VERSION)
       
    36         os.sys.exit(0)
       
    37     else:
       
    38         os.sys.stderr.write(
       
    39             'error: the version %s is not supported by this script\n' % VERSION)
       
    40         os.sys.exit(3)
       
    41 
       
    42 def get_cfg_parser(cf):
       
    43     fh = file(cf, 'r')
       
    44     cp = ConfigParser()
       
    45     cp.readfp(fh)
       
    46     fh.close()
       
    47     return cp
       
    48 
       
    49 def update_cfg_file(cp, cf):
       
    50     copy2(cf, cf+'.bak.'+str(time()))
       
    51     fh = file(cf, 'w')
       
    52     cp.write(fh)
       
    53     fh.close()
       
    54 
       
    55 def upd_040(cp):
       
    56     if not cp.has_option('maildir', 'name') or not cp.has_option('maildir',
       
    57         'folders') or cp.has_option('maildir', 'folder'):
       
    58         if not cp.has_option('maildir', 'name'):
       
    59             if cp.has_option('maildir', 'folder'):
       
    60                 cp.set('maildir', 'name', cp.get('maildir', 'folder'))
       
    61                 cp.remove_option('maildir', 'folder')
       
    62                 sect_opt.append(('maildir', 'name'))
       
    63             else:
       
    64                 cp.set('maildir', 'name', 'Maildir')
       
    65                 sect_opt.append(('maildir', 'name'))
       
    66         if not cp.has_option('maildir', 'folders'):
       
    67             cp.set('maildir', 'folders', 'Drafts:Sent:Templates:Trash')
       
    68             sect_opt.append(('maildir', 'folders'))
       
    69         if cp.has_option('maildir', 'folder'):
       
    70             cp.remove_option('maildir', 'folder')
       
    71     upd_050(cp)
       
    72 
       
    73 def upd_050(cp):
       
    74     if not cp.has_option('bin', 'postconf'):
       
    75         try:
       
    76             postconf = os.sys.argv[1].strip()
       
    77             if len(postconf):
       
    78                 cp.set('bin', 'postconf', postconf)
       
    79                 sect_opt.append(('bin', 'postconf'))
       
    80             else: # possible?
       
    81                 cp.set('bin', 'postconf', '/usr/sbin/postconf')
       
    82                 sect_opt.append(('bin', 'postconf'))
       
    83         except IndexError:
       
    84             cp.set('bin', 'postconf', '/usr/sbin/postconf')
       
    85             sect_opt.append(('bin', 'postconf'))
       
    86     upd_051(cp)
       
    87 
       
    88 def upd_051(cp):
       
    89     if not cp.has_option('misc', 'dovecotvers') or cp.has_option('services',
       
    90             'managesieve'):
       
    91         if not cp.has_option('misc', 'dovecotvers'):
       
    92             cp.set('misc', 'dovecotvers', os.sys.argv[2].strip())
       
    93             sect_opt.append(('misc', 'dovecotvers'))
       
    94         if cp.has_option('services', 'managesieve'):
       
    95             cp.set('services','sieve',cp.getboolean('services', 'managesieve'))
       
    96             cp.remove_option('services', 'managesieve')
       
    97             sect_opt.append(('services', 'sieve'))
       
    98 
       
    99 # def main():
       
   100 if __name__ == '__main__':
       
   101     sect_opt = []
       
   102     cf = get_config_file()
       
   103     cp = get_cfg_parser(cf)
       
   104     update(cp)
       
   105     if len(sect_opt): 
       
   106         update_cfg_file(cp, cf)
       
   107         print 'Please have a look at your configuration: %s' %cf
       
   108         print 'and verify the value from:'
       
   109         for s_o in sect_opt:
       
   110             print '  [%s] %s' % s_o
       
   111         print
       
   112 
       
   113