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