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 |
|