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(p
, l
, forcep
= False):
46 if not os
.path
.exists(p
):
53 if len(top
) > 0 and top
[0] == '!':
57 for k
in sort(umap
.keys()):
59 qm
= '.qmail' + u
.dash
+ u
.pre
62 for p
in os
.listdir(u
.home
):
63 if not p
.startswith(qm
):
66 addlocal(os
.path
.join(u
.home
, p
), u
.name
+ ext
)
68 addlocal(os
.path
.join(u
.home
, qm
), u
.name
, u
.dash
== '')
70 me
= open('control/me').readline()
73 for dom
in open('control/locals'):
74 if len(dom
) and dom
[-1] == '\n':
78 if exc
.errno
!= ENOENT
:
83 for v
in open('control/virtualdomains'):
84 if len(v
) and v
[-1] == '\n':
86 (addr
, pre
) = v
.split(':', 2)
89 if exc
.errno
!= ENOENT
:
92 for l
in sort(map.keys()):
93 print '%s:%s' %
(l
, map[l
])