Hi,

I'm currently working on a module to create virtualhosts on the fly out of a cdb-database file.

I looked at some module which do basically the same with other data sources. What I now wonder is, what else I have to do except for setting the r->filename and maybe some script-alias-foo.

In one module I saw the following:

8<--------------------------------------------------------------------

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);

8<--------------------------------------------------------------------

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.

I thought I fixed that with this solution:

8<--------------------------------------------------------------------

if(r->hostname!=NULL)
        {
r->server->server_hostname = apr_pstrdup(r->connection->pool, r->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);
        }

8<--------------------------------------------------------------------

But that didn't fix the problem completely.

My question now: do I have to set server->server_hostname and if so, from which pool should I allocate the memory from?

with kind regards,

Robert Schulze

Reply via email to