> what happens if you preload Apache::Registry in httpd.conf:
>
> PerlModule Apache::Registry

Didn't try that.  But code examination seems to imply that it would have
no effect.

1. Apache::Registry gets run, so:

        unless (defined $Apache::Registry::NameWithVirtualHost) {
            $Apache::Registry::NameWithVirtualHost = 1;
        }

   Now NameWithVirtualHost is 1.

2. a non-virtualhost request is received so perl_handler in mod_perl.c does:

    if((nwvh = ApachePerlRun_name_with_virtualhost())) {
        if(!r->server->is_virtual) {
            SAVESPTR(nwvh);
            sv_setiv(nwvh, 0);
        }
    }

   now NameWithVirtualHost is 0.

   and it stays zero forever.

On reflection my fix is over the top - it has the effect of overriding
the value of NameWithVirtualHost set by the user.

I don't think perl_handler should be changing NameWithVirtualHost *AT ALL*,
that should be left up to the user, with a default in Registry.pm.

I attach patches to do that.  They work for me.

One last query, what about ApachePerlRun_namespace in PerlRunXS.xs, that
seems to think that the mere existence of the variable NameWithVirtualHost
implies that names should be modified with the virtualhost.  It doesn't
check the *VALUE* of the variable:

#ifndef ApachePerlRun_name_with_virtualhost
#define ApachePerlRun_name_with_virtualhost() \
    perl_get_sv("Apache::Registry::NameWithVirtualHost", FALSE)
#endif

SV *ApachePerlRun_namespace(request_rec *r, char *root)
{
    ...
    if(r->server->is_virtual && ApachePerlRun_name_with_virtualhost()) {
        uri = pstrcat(r->pool, r->server->server_hostname, uri, NULL);
        uri_len += strlen(r->server->server_hostname);
    }

--
John Hughes <[EMAIL PROTECTED]>,
        CalvaEDI SA.                            Tel: +33-1-4313-3131
        66 rue du Moulin de la Pointe,          Fax: +33-1-4313-3139
        75013 PARIS.
--- mod_perl-1.21/src/modules/perl/mod_perl.c.orig      Thu Jul  1 20:17:38 1999
+++ mod_perl-1.21/src/modules/perl/mod_perl.c   Wed Jan 19 11:35:12 2000
@@ -751,7 +751,6 @@
     dPPDIR;
     dPPREQ;
     dTHR;
-    SV *nwvh = Nullsv;
 
     (void)acquire_mutex(mod_perl_mutex);
     
@@ -772,13 +771,6 @@
                     (int)sv_count, (int)sv_objcount));
     ENTER;
     SAVETMPS;
-
-    if((nwvh = ApachePerlRun_name_with_virtualhost())) {
-       if(!r->server->is_virtual) {
-           SAVESPTR(nwvh);
-           sv_setiv(nwvh, 0);
-       }
-    }
 
     if (siggv) {
        save_hptr(&GvHV(siggv)); 
--- mod_perl-1.21/lib/Apache/Registry.pm.orig   Wed Jan 13 03:56:34 1999
+++ mod_perl-1.21/lib/Apache/Registry.pm        Wed Jan 19 11:38:05 2000
@@ -62,7 +62,7 @@
            substr($uri, 0, length($uri)-length($r->path_info)) :
                $uri;
 
-       if($Apache::Registry::NameWithVirtualHost) {
+       if($Apache::Registry::NameWithVirtualHost && $r->server->is_virtual) {
            my $name = $r->get_server_name;
            $script_name = join "", $name, $script_name if $name;
        }

Reply via email to