I had a similar problem answered here not long ago though it wasn't causing
a segfault.
Try using r->err_headers_out instead of r->headers_out
As you're returning an error, I believe these are the values that will be
used for headers.
If that doesn't fix it, try running through a debugger or check the core
dump for the exact cause of the segfault for further hints.
----- Original Message -----
From: <[email protected]>
To: <[email protected]>
Sent: Friday, January 23, 2009 6:07 PM
Subject: external redirect
Hi,
I'd like to do an external redirect.
When I return HTTP_MOVED_TEMPORARILY from my request
handler, the client browser gets the standard "FOUND"
message which is ok so far.
However, when I also try to set the new "Location" this
always causes a segmentation fault:
char* uri=apr_pstrdup(r->pool,"http://localhost/abcdef");
apr_table_setn(r->headers_out,"Location",uri);
return HTTP_MOVED_TEMPORARILY;
I also tried to do this from the access-checker hook (for
testing), however it segfaults immediately:
static int done_once=false;
static int
_hook_access_checker(request_rec* r){
if(done_once)
return DECLINED;
else{
done_onc=true;
/* ok (no segfault) but of course no redirection: */
//return HTTP_MOVED_TEMPORARILY;
/* seg fault: */
char* uri=apr_pstrdup(r->pool,"http://localhost/abcdef");
apr_table_setn(r->headers_out,"Location",uri);
return HTTP_MOVED_TEMPORARILY;
}
}
Thank You for any further hints...
Felix