You are viewing a plain text version of this content. The canonical link for it is here.
Posted to test-cvs@httpd.apache.org by nd...@apache.org on 2003/08/13 01:36:51 UTC

cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestConfig.pm TestConfigPerl.pm

nd          2003/08/12 16:36:51

  Modified:    perl-framework/Apache-Test Changes
               perl-framework/Apache-Test/lib/Apache TestConfig.pm
                        TestConfigPerl.pm
  Log:
  allow the creation of name based virtual hosts from .conf.in files.
  If you supply <VirtualHost servername:module> sections it will open
  just one port and insert proper NameVirtualHost and ServerName directives
  into the conf.
  
  Reviewed by: Stas
  
  Revision  Changes    Path
  1.40      +4 -0      httpd-test/perl-framework/Apache-Test/Changes
  
  Index: Changes
  ===================================================================
  RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/Changes,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- Changes	12 Aug 2003 19:26:41 -0000	1.39
  +++ Changes	12 Aug 2003 23:36:51 -0000	1.40
  @@ -8,6 +8,10 @@
   
   =item 1.04-dev - 
   
  +Allow the creation of name based virtual hosts by supplying
  +<VirtualHost servername:module> containers in .conf.in$ files.
  +[Andr� Malo]
  +
   fix Apache::TestSSLCA to generate a separate index.txt file for each
   module, as on certain platforms openssl fails to re-use the same
   file. [Stas]
  
  
  
  1.170     +20 -9     httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm
  
  Index: TestConfig.pm
  ===================================================================
  RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
  retrieving revision 1.169
  retrieving revision 1.170
  diff -u -r1.169 -r1.170
  --- TestConfig.pm	6 Aug 2003 21:07:28 -0000	1.169
  +++ TestConfig.pm	12 Aug 2003 23:36:51 -0000	1.170
  @@ -927,10 +927,11 @@
   sub parse_vhost {
       my($self, $line) = @_;
   
  -    my($indent, $module);
  -    if ($line =~ /^(\s*)<VirtualHost\s+(?:_default_:)?(.*?)\s*>\s*$/) {
  -        $indent = $1 || "";
  -        $module = $2;
  +    my($indent, $module, $namebased);
  +    if ($line =~ /^(\s*)<VirtualHost\s+(?:_default_:|([^:]+):)?(.*?)\s*>\s*$/) {
  +        $indent    = $1 || "";
  +        $namebased = $2 || "";
  +        $module    = $3;
       }
       else {
           return undef;
  @@ -956,14 +957,23 @@
       }
   
       #allocate a port and configure this module into $self->{vhosts}
  -    my $port = $self->new_vhost($module);
  +    my $port = $self->new_vhost($module, $namebased);
   
       #extra config that should go *inside* the <VirtualHost ...>
  -    my @in_config = $self->servername_config($vars->{servername},
  +    my @in_config = $self->servername_config($namebased
  +                                                 ? $namebased
  +                                                 : $vars->{servername},
                                                $port);
   
  -    #extra config that should go *outside* the <VirtualHost ...>
  -    my @out_config = ([Listen => $port]);
  +    my @out_config = ();
  +    if ($self->{vhosts}->{$module}->{namebased} < 2) {
  +        #extra config that should go *outside* the <VirtualHost ...>
  +        @out_config = ([Listen => $port]);
  +
  +        if ($self->{vhosts}->{$module}->{namebased}) {
  +            push @out_config => [NameVirtualHost => "*:$port"];
  +        }
  +    }
   
       #there are two ways of building a vhost
       #first is when we parse test .pm and .c files
  @@ -989,7 +999,8 @@
           #used when parsing *.conf.in files
           in_string     => $form_string->($double_indent, @in_config),
           out_string    => $form_string->($indent, @out_config),
  -        line          => "$indent<VirtualHost _default_:$port>",
  +        line          => "$indent<VirtualHost " . ($namebased ? '*' : '_default_') .
  +                         ":$port>",
       };
   }
   
  
  
  
  1.76      +21 -7     httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigPerl.pm
  
  Index: TestConfigPerl.pm
  ===================================================================
  RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigPerl.pm,v
  retrieving revision 1.75
  retrieving revision 1.76
  diff -u -r1.75 -r1.76
  --- TestConfigPerl.pm	29 Jul 2003 15:19:24 -0000	1.75
  +++ TestConfigPerl.pm	12 Aug 2003 23:36:51 -0000	1.76
  @@ -214,17 +214,31 @@
   sub vhost_container {
       my($self, $module) = @_;
       my $port = $self->{vhosts}->{$module}->{port};
  -    VirtualHost => "_default_:$port";
  +    my $namebased = $self->{vhosts}->{$module}->{namebased};
  +
  +    VirtualHost => ($namebased ? '*' : '_default_') . ":$port";
   }
   
   sub new_vhost {
  -    my($self, $module) = @_;
  +    my($self, $module, $namebased) = @_;
  +    my($port, $servername, $vhost);
  +
  +    unless ($namebased and exists $self->{vhosts}->{$module}) {
  +        $port       = $self->server->select_port;
  +        $vhost      = $self->{vhosts}->{$module} = {};
  +
  +        $vhost->{port}       = $port;
  +        $vhost->{namebased}  = $namebased ? 1 : 0;
  +    }
  +    else {
  +        $vhost      = $self->{vhosts}->{$module};
  +        $port       = $vhost->{port};
  +        # remember the already configured Listen/NameVirtualHost
  +        $vhost->{namebased}++;
  +    }
   
  -    my $port       = $self->server->select_port;
  -    my $servername = $self->{vars}->{servername};
  -    my $vhost      = $self->{vhosts}->{$module} = {};
  +    $servername = $self->{vars}->{servername};
   
  -    $vhost->{port}       = $port;
       $vhost->{servername} = $servername;
       $vhost->{name}       = join ':', $servername, $port;
       $vhost->{hostport}   = $self->hostport($vhost, $module);
  @@ -354,7 +368,7 @@
       if ($cfg) {
           my $port = $cfg->{port};
           $cfg->{out_postamble}->();
  -        $self->postamble("$indent<VirtualHost _default_:$port>");
  +        $self->postamble($cfg->{line});
           $cfg->{in_postamble}->();
       } else {
           $self->postamble("$indent$line");