허용된 메서드에서 오류 400을 반환하는 Apache LimitExcept

허용된 메서드에서 오류 400을 반환하는 Apache LimitExcept

내 Apache에는 다음 지시문이 있습니다 httpd.conf.

<LimitExcept OPTIONS PROPFIND REPORT>
   deny from all
</LimitExcept>

OPTIONSPROPFIND예상대로 작동 REPORT하지만 400: Bad Request. 모두 제거 LimitExcept하면 모든 것이 예상대로 작동합니다.

왜 이런 일이 일어날 수 있는지에 대한 아이디어가 있습니까?

(참조해 주세요내 질문은 여기내가 무엇을 하려는지 확인하기 위해).

액세스 로그에는 다음이 표시됩니다.

192.168.161.1 - - [21/Jun/2010:08:42:26 +1000] "REPORT /logs/MV101Apps/!svn/bc/7699/MyApp/MyApps.edp HTTP/1.1" 400 101

오류 로그에는 다음이 표시됩니다.

[Mon Jun 21 08:42:26 2010] [error] [client 192.168.161.1] client denied by server configuration: C:/Program Files/CollabNet/Subversion Server/httpd/htdocs/logs

업데이트

<LimitExcept>좋아요, 빠른 검사를 통해 URL 이 있든 없든 REPORT동일하게 유지된다는 사실을 알 수 있습니다. 다음은 로그가 없는 모습입니다 <LimitExcept>(구성의 다른 모든 항목은 동일하게 유지됨).

192.168.161.1 - - [22/Jun/2010:21:03:42 +1000] "REPORT /logs/MV101Apps/!svn/bc/7821/MyApp/MyApps.edp HTTP/1.1" 200 115

(URL은 명령에 의해 생성된 Subversion URL입니다 . 나는 여기에 svn log추가하는 사람이 아닙니다 .)!svn

전체 VirutalHost는 /logs/다음과 같습니다.

<Location /logs/>
   DAV svn
   SVNParentPath C:\SVN
   <LimitExcept OPTIONS PROPFIND REPORT>
       deny from all
   </LimitExcept>
</Location>

답변1

다음은 2.2.15의 최신 mod_dav.c 모습입니다(간결하게 편집됨).

static int dav_method_report(request_rec *r)
{
  int result;
  apr_xml_doc *doc;

  if ((result = ap_xml_parse_input(r, &doc)) != OK)
    return result;
  if (doc == NULL) {
    return HTTP_BAD_REQUEST;
  }

그래서 내 직감은 ap_xml_parse_input(r, &doc))가 doc=NULL을 떠나고 있다는 것입니다. 의심스러운 문서 이름(!이 포함되어 있음)에 액세스할 수 없고 400을 반환하는 것에 기반합니다.

"REPORT /logs/MV101Apps/!svn/bc/7699/MyApp/MyApps.edp HTTP/1.1"

...

client denied by server configuration: C:/Program Files/CollabNet/Subversion Server/httpd/htdocs/logs

...access_log의 가상 /logs/가 error_log의 이 디렉터리에 매핑되는 방식과 해당 위치에서 리소스를 읽을 수 있도록 허용하는 적절한 액세스 제어가 있는지에 문제가 있는 것 같습니다. 다음에는 모든 구성 정보를 확인해야 합니다.

관련 정보