forked from virtualmin/virtualmin-gpl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
create-alias.pl
executable file
·117 lines (102 loc) · 3.36 KB
/
create-alias.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/local/bin/perl
=head1 create-alias.pl
Create a new mail alias
This command can be used to add a new email alias to a
virtual server. It takes three mandatory parameters : C<--domain> followed by the
domain name, C<--from> followed by the name of the alias within that domain, and
C<--to> followed by a destination address. For example, to create an alias for
[email protected] that delivers mail to the user joe, you could run :
virtualmin create-alias --domain foo.com --from sales --to [email protected]
The C<--to> option can be given multiple times, to create more than one
destination for the alias. To create an alias for all addresses in the domain
that are not matched by another alias or mail user, use the option C<--from "*">
.
Aliases can have short descriptions associated with them, to explain
what the alias is for. To set one when creating, you can use the --desc
option followed by a one-line description.
To more easily create aliases with autoresponders, you should use the
C<create-simple-alias> command, which is analogous to the simple alias
creation form in Virtualmin UI.
=cut
package virtual_server;
if (!$module_name) {
$main::no_acl_check++;
$ENV{'WEBMIN_CONFIG'} ||= "/etc/webmin";
$ENV{'WEBMIN_VAR'} ||= "/var/webmin";
if ($0 =~ /^(.*)\/[^\/]+$/) {
chdir($pwd = $1);
}
else {
chop($pwd = `pwd`);
}
$0 = "$pwd/create-alias.pl";
require './virtual-server-lib.pl';
$< == 0 || die "create-alias.pl must be run as root";
}
@OLDARGV = @ARGV;
# Parse command-line args
&require_mail();
while(@ARGV > 0) {
local $a = shift(@ARGV);
if ($a eq "--domain") {
$domain = shift(@ARGV);
}
elsif ($a eq "--from") {
$from = shift(@ARGV);
}
elsif ($a eq "--to") {
push(@to, shift(@ARGV));
}
elsif ($a eq "--desc") {
$can_alias_comments ||
usage("Your mail server does not support alias descriptions");
$cmt = shift(@ARGV);
}
elsif ($a eq "--multiline") {
$multiline = 1;
}
elsif ($a eq "--help") {
&usage();
}
else {
&usage("Unknown parameter $a");
}
}
$from || &usage("No from address specified");
@to || &usage("No destination addresses specified");
$d = &get_domain_by("dom", $domain);
$d || usage("Virtual server $domain does not exist");
$d->{'mail'} || usage("Virtual server $domain does not have email enabled");
$from =~ /\@/ && &usage("No domain name is needed in the --from parameter");
$err = &valid_alias_name($from);
$err && &usage("Invalid alias name : $err");
$d->{'aliascopy'} && &usage("Aliases cannot be edited in alias domains in copy mode");
# Check for clash
&obtain_lock_mail($d);
@aliases = &list_domain_aliases($d);
$email = $from eq "*" ? "\@$domain" : "$from\@$domain";
($clash) = grep { $_->{'from'} eq $email } @aliases;
$clash && &usage("An alias for the same email address already exists");
# Create it
$virt = { 'from' => $email,
'to' => \@to,
'cmt' => $cmt };
&create_virtuser($virt);
&sync_alias_virtuals($d);
&release_lock_mail($d);
&virtualmin_api_log(\@OLDARGV, $d);
&run_post_actions_silently();
print "Alias for $email created successfully\n";
sub usage
{
print "$_[0]\n\n" if ($_[0]);
print "Adds a mail alias to a virtual server.\n";
print "\n";
print "virtualmin create-alias --domain domain.name\n";
print " --from mailbox|\"*\"\n";
print " <--to address>+\n";
if ($can_alias_comments) {
print " [--desc \"Comment text\"]\n";
}
exit(1);
}