Hi -- > 1) Per #38034, it appears that ap_meets_conditions() treats "*" incorrectly.
More precisely, I should say that ap_meets_conditions() isn't designed to support the NULL resources of RFC 2518 (WebDAV). I'm certainly no expert on these issues, so guidance is welcome. RFC 2616 section 14.24 (and 14.26 is similar) says, "If the request would, without the If-Match header field, result in anything other than a 2xx or 412 status, then the If-Match header MUST be ignored." Thus in the typical case, if a resource doesn't exist, 404 should be returned, so ap_meets_conditions() doesn't need to handle this case at all. RFC 2518 introduces lock-null resources for use with certain methods such as LOCK, PUT, and UNLOCK. (RFC 4918, it seems, deprecates lock-null resources in favour of "locked empty resources".) For these particular methods and resources, other language from RFC 2616's section 14.24 (again, 14.26 is similar) comes into play, specifically, "If none of the entity tags match, or if '*' is given and no current entity exists, the server MUST NOT perform the requested method, and MUST return a 412 (Precondition Failed) response." Personally, I'd be inclined to try to make ap_meets_conditions() handle support these different situations in as generic a way as possible (in case other non-mod_dav DAV modules or other HTTP extensions need to use the same logic), but that may be difficult to do without introducing compatibility problems and/or contorted code. Another option would be the one described by Paritosh Shah: > For this, we can create a new dav_meets_conditions() which > calls ap_meets_conditions() and also handles those other cases. Thoughts, corrections, etc.? Chris. -- GPG Key ID: 366A375B GPG Key Fingerprint: 485E 5041 17E1 E2BB C263 E4DE C8E3 FA36 366A 375B
