On Sun, 30 Dec 2007 09:22:28 +0800 Michael Clark <[EMAIL PROTECTED]> wrote:
> I'm getting a segfault here in mod_dav from trunk Oops ... more haste less speed:-( I attach a revised patch (against current trunk). This is completely untested; just posting before going to bed, in case anyone feels like picking it up. If not, I'll try and find time to revisit it tomorrow. -- Nick Kew Application Development with Apache - the Apache Modules Book http://www.apachetutor.org/
Index: modules/dav/main/util.c =================================================================== --- modules/dav/main/util.c (revision 607466) +++ modules/dav/main/util.c (working copy) @@ -1465,6 +1465,7 @@ dav_buffer work_buf = { 0 }; dav_response *new_response; int resource_state; + const char *etag; #if DAV_DEBUG if (depth && response == NULL) { @@ -1482,17 +1483,23 @@ *response = NULL; /* Set the ETag header required by dav_meets_conditions() */ - if ((err = (*resource->hooks->set_headers)(r, resource)) != NULL) { - return dav_push_error(r->pool, err->status, 0, - "Unable to set up HTTP headers.", - err); + etag = apr_table_get(r->headers_out, "ETag"); + if (!etag) { + etag = (*resource->hooks->getetag)(resource); + if (etag) { + apr_table_set(r->headers_out, "ETag", etag); + } } - - resource_state = dav_get_resource_state(r, resource); /* Do the standard checks for conditional requests using * If-..-Since, If-Match etc */ - if ((result = dav_meets_conditions(r, resource_state)) != OK) { - /* ### fix this up... how? */ + if (etag) { + resource_state = dav_get_resource_state(r, resource); + result = dav_meets_conditions(r, resource_state); + } + else { + result = ap_meets_conditions(r); + } + if (result != OK) { return dav_new_error(r->pool, result, 0, NULL); }