Blame


1 990faa37 2021-06-06 op #!/usr/bin/env awk
2 990faa37 2021-06-06 op
3 990faa37 2021-06-06 op # expects action to be defined, like -v action=aliases
4 990faa37 2021-06-06 op
5 990faa37 2021-06-06 op /^[[:space:]]*$/ { next }
6 990faa37 2021-06-06 op /^[[:space:]]*#/ { next }
7 990faa37 2021-06-06 op
8 990faa37 2021-06-06 op /:$/ {
9 990faa37 2021-06-06 op # drop the :
10 990faa37 2021-06-06 op gsub(":", "", $1);
11 990faa37 2021-06-06 op domain = $1;
12 990faa37 2021-06-06 op domains[domainslen++] = domain;
13 990faa37 2021-06-06 op next;
14 990faa37 2021-06-06 op }
15 990faa37 2021-06-06 op
16 990faa37 2021-06-06 op $1 == "user" {
17 990faa37 2021-06-06 op user = sprintf("%s@%s", $2, domain);
18 990faa37 2021-06-06 op users[user] = $3
19 990faa37 2021-06-06 op
20 990faa37 2021-06-06 op # change “vmail” to match the local user that
21 990faa37 2021-06-06 op # delivers the mail
22 990faa37 2021-06-06 op aliases[user] = "vmail";
23 990faa37 2021-06-06 op next;
24 990faa37 2021-06-06 op }
25 990faa37 2021-06-06 op
26 990faa37 2021-06-06 op $1 == "alias" {
27 990faa37 2021-06-06 op if ($3 != "") {
28 990faa37 2021-06-06 op target = $3;
29 990faa37 2021-06-06 op } else {
30 990faa37 2021-06-06 op target = user;
31 990faa37 2021-06-06 op }
32 990faa37 2021-06-06 op
33 990faa37 2021-06-06 op if (domain != "") {
34 990faa37 2021-06-06 op alias = sprintf("%s@%s", $2, domain);
35 990faa37 2021-06-06 op } else {
36 990faa37 2021-06-06 op alias = $2;
37 990faa37 2021-06-06 op }
38 990faa37 2021-06-06 op aliases[alias] = target;
39 990faa37 2021-06-06 op }
40 990faa37 2021-06-06 op
41 990faa37 2021-06-06 op # output in the correct format
42 990faa37 2021-06-06 op END {
43 990faa37 2021-06-06 op if (action == "aliases") {
44 990faa37 2021-06-06 op for (alias in aliases) {
45 990faa37 2021-06-06 op if (match(alias, "@"))
46 990faa37 2021-06-06 op continue;
47 990faa37 2021-06-06 op printf("%s: %s\n", alias, aliases[alias]);
48 990faa37 2021-06-06 op }
49 990faa37 2021-06-06 op } else if (action == "virtuals") {
50 990faa37 2021-06-06 op for (alias in aliases) {
51 990faa37 2021-06-06 op if (!match(alias, "@"))
52 990faa37 2021-06-06 op continue;
53 990faa37 2021-06-06 op printf("%s %s\n", alias, aliases[alias]);
54 990faa37 2021-06-06 op }
55 990faa37 2021-06-06 op } else if (action == "domains") {
56 990faa37 2021-06-06 op for (domain in domains) {
57 990faa37 2021-06-06 op printf("%s\n", domains[domain]);
58 990faa37 2021-06-06 op }
59 990faa37 2021-06-06 op } else if (action == "users") {
60 990faa37 2021-06-06 op for (user in users) {
61 990faa37 2021-06-06 op printf("%s %s\n", user, users[user]);
62 990faa37 2021-06-06 op }
63 990faa37 2021-06-06 op } else if (action == "users.passwd") {
64 990faa37 2021-06-06 op for (user in users) {
65 990faa37 2021-06-06 op # user@doma.in:hash::::::
66 990faa37 2021-06-06 op # user@doma.in:hash::::::userdb_quota_rule=*:storage=1G
67 990faa37 2021-06-06 op printf("%s:%s::::::\n", user, users[user]);
68 990faa37 2021-06-06 op }
69 990faa37 2021-06-06 op } else if (action == "users.mdirs") {
70 990faa37 2021-06-06 op for (user in users) {
71 990faa37 2021-06-06 op split(user, m, "@");
72 990faa37 2021-06-06 op # adjust the maildir path
73 990faa37 2021-06-06 op printf("/var/vmail/%s/%s/Maildir\n", m[2], m[1]);
74 990faa37 2021-06-06 op }
75 990faa37 2021-06-06 op } else {
76 990faa37 2021-06-06 op print "unknown action!\n" > "/dev/stderr"
77 990faa37 2021-06-06 op exit 1
78 990faa37 2021-06-06 op }
79 990faa37 2021-06-06 op }