X-Git-Url: https://git.distorted.org.uk/~mdw/qmail/blobdiff_plain/7a9e083dd1ed3023ea1f6487760fa62676e987b8..ca51b51d75ecbf78f6c5786b6d3379d296e89d85:/qmail-valid-addresses diff --git a/qmail-valid-addresses b/qmail-valid-addresses new file mode 100644 index 0000000..b77be52 --- /dev/null +++ b/qmail-valid-addresses @@ -0,0 +1,81 @@ +#! /usr/bin/python + +import os +import cdb + +def sort(l): + l = [] + l + l.sort() + return l +class struct (object): + def __init__(me, **kw): + me.__dict__.update(kw) + def __repr__(me): + return (type(me).__name__ + + '(' + + ', '.join(['%s = %r' % (k, me.__dict__[k]) + for k in me.__dict__ + if k[0] != '_']) + + ')') +class userentry (struct): + pass + +os.chdir('/var/qmail') + +umap = {} +udb = cdb.init('users/cdb') +for k in udb.keys(): + if len(k) == 0 or k[0] != '!': + continue + v = udb[k].split('\0') + u = userentry(user = v[0], uid = int(v[1]), gid = int(v[2]), home = v[3], + dash = v[4], pre = v[5]) + if k[-1] == '\0': + u.name = k[1:-1] + u.wild = 0 + else: + u.name = k[1:] + u.wild = 1 + umap[u.name] = u +del udb + +map = {} +def addlocal(p, l, forcep = False): + l = 'L' + l + if not os.path.exists(p): + if forcep: + map[l] = '+' + return + f = open(p) + top = f.readline() + f.close() + if len(top) > 0 and top[0] == '!': + map[l] = '-' + else: + map[l] = '+' +for k in sort(umap.keys()): + u = umap[k] + qm = '.qmail' + u.dash + u.pre + qmlen = len(qm) + if u.wild: + for p in os.listdir(u.home): + if not p.startswith(qm): + continue + ext = p[qmlen:] + addlocal(os.path.join(u.home, p), u.name + ext) + else: + addlocal(os.path.join(u.home, qm), u.name, u.dash == '') + +for dom in open('control/locals'): + if len(dom) and dom[-1] == '\n': + dom = dom[:-1] + map['@' + dom] = '' + +for v in open('control/virtualdomains'): + if len(v) and v[-1] == '\n': + v = v[:-1] + (addr, pre) = v.split(':', 2) + map['V' + addr] = pre + +for l in sort(map.keys()): + print '%s:%s' % (l, map[l])