Skip to content

Commit 686801a

Browse files
committed
Use proper API to swap virtualhosts, rather than directly editing the config file
1 parent 6788045 commit 686801a

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

feature-web.pl

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4268,55 +4268,70 @@ sub get_default_apache_website
42684268
# entries in httpd.conf
42694269
sub set_default_website
42704270
{
4271-
local ($d) = @_;
4272-
local $p = &domain_has_website($d);
4271+
my ($d) = @_;
4272+
my $p = &domain_has_website($d);
42734273
if ($p ne 'web') {
42744274
return &plugin_call($p, "feature_set_web_default", $d);
42754275
}
42764276
&require_apache();
42774277
foreach my $port ($d->{'web_port'},
42784278
$d->{'ssl'} ? ( $d->{'web_sslport'} ) : ( )) {
4279-
local ($virt, $vconf, $conf) = &get_apache_virtual($d->{'dom'}, $port);
4279+
my ($virt, $vconf, $conf) = &get_apache_virtual($d->{'dom'}, $port);
42804280
$virt || return "No Apache virtualhost found for $d->{'dom'}:$port";
4281-
local ($oldvirt, $oldd) = &get_default_apache_website($d, $port);
4281+
my ($oldvirt, $oldd) = &get_default_apache_website($d, $port);
42824282
if ($virt && $oldvirt && $virt ne $oldvirt) {
42834283
if ($virt->{'file'} eq $oldvirt->{'file'}) {
4284-
# Need to move up in file
4285-
local $lref = &read_file_lines($virt->{'file'});
4286-
local @oldl = @$lref[$virt->{'line'} .. $virt->{'eline'}];
4287-
splice(@$lref, $virt->{'line'},
4288-
$virt->{'eline'} - $virt->{'line'} + 1);
4289-
splice(@$lref, $oldvirt->{'line'}, 0, @oldl);
4284+
# Swap virtualhosts in the file
4285+
my $oldvirtcopy = { %$oldvirt };
4286+
$oldvirtcopy->{'members'} =
4287+
[ &clone_apache_config($oldvirt->{'members'}) ];
4288+
my $virtcopy = { %$virt };
4289+
$virtcopy->{'members'} =
4290+
[ &clone_apache_config($virt->{'members'}) ];
4291+
delete($oldvirtcopy->{'file'});
4292+
delete($oldvirtcopy->{'line'});
4293+
delete($oldvirtcopy->{'eline'});
4294+
&apache::save_directive_struct(
4295+
$oldvirt, $virtcopy, $conf, $conf);
4296+
&apache::save_directive_struct(
4297+
$virt, $oldvirtcopy, $conf, $conf);
42904298
&flush_file_lines($virt->{'file'});
42914299
}
42924300
else {
42934301
# Swap file order
42944302
$virt->{'file'} =~ /^(.*)\/([^\/]+)$/;
4295-
local ($dir, $file) = ($1, $2);
4303+
my ($dir, $file) = ($1, $2);
42964304
$oldvirt->{'file'} =~ /^(.*)\/([^\/]+)$/;
4297-
local ($olddir, $oldfile) = ($1, $2);
4298-
local $adddir = $apache::config{'virt_file'} ?
4305+
my ($olddir, $oldfile) = ($1, $2);
4306+
my $adddir = $apache::config{'virt_file'} ?
42994307
&apache::server_root($apache::config{'virt_file'}) :
43004308
undef;
43014309
if ($dir eq $olddir && $dir eq $adddir) {
43024310
# Separate files in the add-to dir
43034311
&apache::delete_webfile_link("$dir/$file");
43044312
&rename_logged("$dir/$file", "$dir/0-$file");
43054313
&apache::create_webfile_link("$dir/0-$file");
4314+
&apache::recursive_set_lines_files(
4315+
$virt->{'members'},
4316+
$virt->{'line'}+1,
4317+
"$dir/0-$file");
43064318
if ($oldfile =~ /^0-(.*)$/) {
43074319
&apache::delete_webfile_link(
43084320
"$dir/$oldfile");
43094321
&rename_logged("$dir/$oldfile",
43104322
"$dir/$1");
43114323
&apache::create_webfile_link("$dir/$1");
4324+
&apache::recursive_set_lines_files(
4325+
$oldvirt->{'members'},
4326+
$oldvirt->{'line'}+1,
4327+
"$dir/$1");
43124328
}
43134329
}
43144330
else {
43154331
# Cannot handle this case
43164332
return "Cannot handle swap between $virt->{'file'} and $oldvirt->{'file'}";
43174333
}
43184334
}
4319-
undef(@apache::get_config_cache);
43204335
&register_post_action(\&restart_apache);
43214336
}
43224337
}

0 commit comments

Comments
 (0)