httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Donovan <donov...@bellatlantic.net>
Subject Re: what should be done in a vhost_db module?
Date Mon, 07 Apr 2008 14:00:28 GMT
Robert Schulze wrote:
> Hi,
> 
> I'm currently working on a module to create virtualhosts on the fly out 
> of a cdb-database file.
> 
...
> In one module I saw the following:
> 
> <--------------------------------------------------------------------
> 
> request_rec *top = (r->main)?r->main:r;
> 
> /* ... */
> 
> top->server->server_hostname = apr_pstrdup (top->pool, hostname);
> 
> r->parsed_uri.hostinfo = apr_pstrdup(r->pool,r->server->server_hostname);
> 
> r->parsed_uri.hostname = apr_pstrdup(r->pool,r->server->server_hostname);
> 
> <--------------------------------------------------------------------
> 
> and thats exactly where I got some problems.
> I sometimes noticed, that the virtual host name in /server-status/ 
> contained only weird characters, which I think is a result of freeing a 
> buffer which is currently in use.
> I think the problem is the wrong pool for allocating space for the 
> server_hostname.
> 

In a threaded mpm, the same r->server struct is used by multiple requests simultaneously.
 It isn't 
safe to change anything in it on the fly.

It is usually good enough to look up a new root directory and use apr_filepath_merge() to
set the 
actual filename in a "translate_name" hook, without trying to update the server_rec.

r->hostname has the requested hostname for any scripts which require this info.

Take a look at mod_vhost_alias, or mod_vhost_dbd at http://dbd-modules.googlecode.com for
examples.

-tom-






Mime
View raw message