mirror of
https://github.com/webmin/webmin.git
synced 2026-09-22 13:30:43 +01:00
Drop Apache comment preservation from this PR
This commit is contained in:
@@ -126,7 +126,6 @@ if (&read_file($site_file, \%site)) {
|
||||
# value - Value (possibly with spaces)
|
||||
# members - For type 1, a reference to the array of members
|
||||
# indent - Number of spaces before the name
|
||||
# comment - Full text for a comment stored as a dummy directive
|
||||
sub parse_config_file
|
||||
{
|
||||
local($fh, @rv, $line, %dummy);
|
||||
@@ -147,22 +146,8 @@ foreach my $d (&get_httpd_defines()) {
|
||||
}
|
||||
while($line = <$fh>) {
|
||||
$line =~ s/\r|\n//g;
|
||||
if ($line =~ /^(\s*)(#.*)$/) {
|
||||
# Keep comments in the structure so block rewrites preserve them
|
||||
local(%dir);
|
||||
%dir = ('line', $_[1],
|
||||
'eline', $_[1],
|
||||
'file', $_[2],
|
||||
'type', 0,
|
||||
'name', 'dummy',
|
||||
'comment', $2);
|
||||
local $indent = $1;
|
||||
$indent =~ s/\t/ /g;
|
||||
$dir{'indent'} = length($indent);
|
||||
push(@rv, \%dir);
|
||||
$_[1]++;
|
||||
}
|
||||
elsif ($line =~ /^\s*<\/(\S+)\s*(.*)>/) {
|
||||
$line =~ s/^\s*#.*$//g;
|
||||
if ($line =~ /^\s*<\/(\S+)\s*(.*)>/) {
|
||||
# end of a container directive. This can only happen in a
|
||||
# recursive call to this function
|
||||
$_[1]++;
|
||||
@@ -799,7 +784,7 @@ foreach my $dir (@$dirs) {
|
||||
$line+1, $file);
|
||||
}
|
||||
$dir->{'eline'} = $line;
|
||||
$line++ if ($dir->{'name'} ne 'dummy' || defined($dir->{'comment'}));
|
||||
$line++ if ($dir->{'name'} ne 'dummy');
|
||||
}
|
||||
return $line;
|
||||
}
|
||||
@@ -1945,13 +1930,7 @@ sub directive_lines
|
||||
{
|
||||
my @rv;
|
||||
foreach my $d (@_) {
|
||||
if ($d->{'name'} eq 'dummy') {
|
||||
if (defined($d->{'comment'})) {
|
||||
my $indent = (" " x $d->{'indent'});
|
||||
push(@rv, $indent.$d->{'comment'});
|
||||
}
|
||||
next;
|
||||
}
|
||||
next if ($d->{'name'} eq 'dummy');
|
||||
my $indent = (" " x $d->{'indent'});
|
||||
if ($d->{'type'}) {
|
||||
push(@rv, $indent."<$d->{'name'} $d->{'value'}>");
|
||||
|
||||
@@ -28,16 +28,6 @@ print $fh $text;
|
||||
close($fh) || die "Failed to close $file: $!";
|
||||
}
|
||||
|
||||
sub read_text
|
||||
{
|
||||
my ($file) = @_;
|
||||
open(my $fh, '<', $file) || die "Failed to read $file: $!";
|
||||
local $/ = undef;
|
||||
my $text = <$fh>;
|
||||
close($fh) || die "Failed to close $file: $!";
|
||||
return $text;
|
||||
}
|
||||
|
||||
# Load the Apache module with an isolated Webmin configuration.
|
||||
write_text(File::Spec->catfile($webmin_config, 'config'),
|
||||
"os_type=debian-linux\n".
|
||||
@@ -98,48 +88,4 @@ is($directory->{'eline'}, 15, 'outer block includes the nested closing line');
|
||||
is($alias->{'line'}, 16, 'following directive starts after the outer block');
|
||||
is($next, 10 + scalar(@lines), 'returned line follows serialized output');
|
||||
|
||||
# Parsed comments are not Apache directives, but block rewrites must retain
|
||||
# their text and indentation around nested containers.
|
||||
my $roundtrip = File::Spec->catfile($tmp, 'comments.conf');
|
||||
my $roundtrip_text =
|
||||
"# outer comment\n".
|
||||
"<Directory /srv/example>\n".
|
||||
" # nested comment\n".
|
||||
" <Files *.php>\n".
|
||||
" Require all denied\n".
|
||||
" </Files>\n".
|
||||
"</Directory>\n";
|
||||
write_text($roundtrip, $roundtrip_text);
|
||||
open(my $fh, '<', $roundtrip) || die "Failed to read $roundtrip: $!";
|
||||
my $line = 0;
|
||||
my @parsed = main::parse_config_file($fh, $line, $roundtrip);
|
||||
close($fh) || die "Failed to close $roundtrip: $!";
|
||||
is(join("\n", main::directive_lines(@parsed))."\n", $roundtrip_text,
|
||||
'comments survive parsing and serialization');
|
||||
|
||||
# Removing one of two parsed virtual hosts must use spans that include their
|
||||
# comments, or remnants of the removed block will make Apache invalid.
|
||||
my $vhosts_file = File::Spec->catfile($tmp, 'vhosts.conf');
|
||||
my $first_vhost =
|
||||
"<VirtualHost *:80>\n".
|
||||
" # first comment\n".
|
||||
" ServerName first.example\n".
|
||||
"</VirtualHost>\n";
|
||||
my $second_vhost =
|
||||
"<VirtualHost *:443>\n".
|
||||
" # second comment\n".
|
||||
" ServerName second.example\n".
|
||||
"</VirtualHost>\n";
|
||||
write_text($vhosts_file, $first_vhost.$second_vhost);
|
||||
open($fh, '<', $vhosts_file) || die "Failed to read $vhosts_file: $!";
|
||||
$line = 0;
|
||||
my @vhost_config = main::parse_config_file($fh, $line, $vhosts_file);
|
||||
close($fh) || die "Failed to close $vhosts_file: $!";
|
||||
my @vhosts = main::find_directive_struct('VirtualHost', \@vhost_config);
|
||||
main::save_directive_struct($vhosts[1], undef,
|
||||
\@vhost_config, \@vhost_config);
|
||||
main::flush_file_lines($vhosts_file);
|
||||
is(read_text($vhosts_file), $first_vhost,
|
||||
'removing a block also removes all of its comments');
|
||||
|
||||
done_testing();
|
||||
|
||||
Reference in New Issue
Block a user