---- Changes since 1.510 ----
Added support for CIDR maps and multiple SMTP client restriction maps.
Added spam checking to the autoreply script, if spamassassin is installed.
+---- Changes since 1.550 ----
+Fixed a bug that prevented editing of server processes with the same name but different types, and add detection of clashes for servers with the same name and type.
};
}
else {
- ($prog) = grep { $_->{'name'} eq $in{'name'} } @$master;
+ ($prog) = grep { $_->{'name'} eq $in{'name'} &&
+ $_->{'type'} eq $in{'type'} } @$master;
$prog || &error($text{'master_egone'});
&ui_print_header(undef, $text{'master_edit'}, "");
}
print &ui_form_start("save_master.cgi", "post");
print &ui_hidden("new", $in{'new'}),"\n";
print &ui_hidden("old", $in{'name'}),"\n";
+print &ui_hidden("oldtype", $in{'type'}),"\n";
print &ui_table_start($text{'master_header'}, "width=100%", 4);
print &ui_table_row($text{'master_type'},
master_procs=At most $1
master_name2=Server name/port
master_egone=Server process no longer exists!
+master_eclash=A server process with the same name and transport type already exists
master_err=Failed to save server process
master_ename=Missing or invalid server name or port
master_ehost=Invalid host address to listen on
$text{'master_max'} ], "100%");
foreach $m (@$master) {
print &ui_columns_row([
- "<a href='edit_master.cgi?name=".&urlize($m->{'name'})."'>".
+ "<a href='edit_master.cgi?name=".&urlize($m->{'name'}).
+ "&type=".&urlize($m->{'type'})."'>".
$m->{'name'}."</a>",
$m->{'enabled'} ? $text{'yes'} :
"<font color=#ff0000>$text{'no'}</font>",
$prog = { };
}
else {
- ($prog) = grep { $_->{'name'} eq $in{'old'} } @$master;
+ ($prog) = grep { $_->{'name'} eq $in{'old'} &&
+ $_->{'type'} eq $in{'oldtype'} } @$master;
$prog || &error($text{'master_egone'});
}
&lock_file($config{'postfix_master'});
$prog->{'maxprocs'} = $in{'procs'};
}
+ # Check for clash by name and type, but only between enabled servers
+ if ($in{'enabled'}) {
+ if ($in{'new'} || $in{'name'} ne $in{'old'} ||
+ $in{'type'} ne $in{'oldtype'}) {
+ ($clash) = grep { $_->{'name'} eq $in{'name'} &&
+ $_->{'type'} eq $in{'type'} &&
+ $_->{'enabled'} } @$master;
+ $clash && &error($text{'master_eclash'});
+ }
+ }
+
# Save or update
if ($in{'new'}) {
&create_master($prog);