11 class struct (object):
12 def __init__(me, **kw):
13 me.__dict__.update(kw)
15 return (type(me).__name__ +
17 ', '.join(['%s = %r' % (k, me.__dict__[k])
21 class userentry (struct):
24 os.chdir('/var/qmail')
27 udb = cdb.init('users/cdb')
29 if len(k) == 0 or k[0] != '!':
31 v = udb[k].split('\0')
32 u = userentry(user = v[0], uid = int(v[1]), gid = int(v[2]), home = v[3],
33 dash = v[4], pre = v[5])
44 def addlocal(u, p, l, forcep = False):
46 if not os.path.exists(p):
53 if len(top) > 1 and top[0:2] == '#!':
55 elif len(top) > 1 and top[0:2] == '#?':
62 for k in sort(umap.keys()):
64 qm = '.qmail' + u.dash + u.pre
67 for p in os.listdir(u.home):
68 if not p.startswith(qm):
71 addlocal(u, os.path.join(u.home, p), u.name + ext)
73 addlocal(u, os.path.join(u.home, qm), u.name, u.dash == '')
75 me = open('control/me').readline()
78 for dom in open('control/locals'):
79 if len(dom) and dom[-1] == '\n':
83 if exc.errno != ENOENT:
88 for v in open('control/virtualdomains'):
89 if len(v) and v[-1] == '\n':
91 (addr, pre) = v.split(':', 2)
94 if exc.errno != ENOENT:
97 for l in sort(map.keys()):
98 print '%s:%s' % (l, map[l])