You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bugs@httpd.apache.org by bu...@apache.org on 2002/11/22 11:38:17 UTC

DO NOT REPLY [Bug 14763] New: - Virtual hosts with different AssignUserID works from the same user

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14763>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14763

Virtual hosts with different AssignUserID works from the same user

           Summary: Virtual hosts with different AssignUserID works from the
                    same user
           Product: Apache httpd-2.0
           Version: 2.0.43
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: perchild
        AssignedTo: bugs@httpd.apache.org
        ReportedBy: admin@ter-net.com


I run apache (with mpm perchild) on linux with NameBased virtual host in such a way:
...
<IfModule perchild.c>
NumServers           2
StartThreads         10
MinSpareThreads      5
MaxSpareThreads     10
MaxThreadsPerChild  2000
MaxRequestsPerChild 1000
ChildPerUserID soloma users 1
ChildPerUserID boris users 1
</IfModule>
...
<VirtualHost *>
    AssignUserId boris users
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /var/home/boris/www/
    ServerName boris.hosts
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
<VirtualHost *>
    AssignUserId soloma users
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /var/home/soloma/www/
    ServerName soloma.hosts
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

In this case both hosts (soloma.hosts, boris.hosts) works from the same user.

Possible reason:
in function perchild_post_read:
/////
      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
                     "Determining if request should be passed. "
                     "Child Num: %d, SD: %d, sd from table: %d, hostname from
server: %s", child_num,
                     sconf->input, child_info_table[child_num].input,
                     r->server->server_hostname);
        /* sconf is the server config for this vhost, so if our socket
         * is not the same that was set in the config, then the request
         * needs to be passed to another child. */
        if (sconf->input != child_info_table[child_num].input) {
            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
                         "Passing request.");
            if (pass_request(r) == -1) {
                ap_log_error(APLOG_MARK, APLOG_ERR, 0,
                             ap_server_conf, "Could not pass request to proper "
                             "child, request will not be honored.");
            }
            longjmp(jmpbuffer, 1);
//////////////

I think this is incorrect for several virtual hosts

Correct version may be like this:
/////
       if (sconf->input != child_info_table[child_num].input) {

            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
                         "Passing request.");
            for(i=0; i< num_daemons;i++)
            {
            if(sconf->input == child_info_table[i].input)
            {
                if (pass_request(r, i) == -1) {
                ap_log_error(APLOG_MARK, APLOG_ERR, 0,
                             ap_server_conf, "Could not pass request to proper "
                             "child, request will not be honored.");

                }
                break;
            }
            }
            longjmp(jmpbuffer, 1);
        }

/////

---------------------------------------------------------------------
To unsubscribe, e-mail: bugs-unsubscribe@httpd.apache.org
For additional commands, e-mail: bugs-help@httpd.apache.org