web-dev-qa-db-ja.com

許可されたメソッドでエラー400を返すApacheLimitExcept

Apache httpd.confに次のディレクティブがあります。

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

OPTIONSPROPFINDは期待どおりに機能しますが、REPORT400: 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>の有無にかかわらずREPORTURLは同じままであることがわかります。これは、<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はコマンドsvn logによって生成されたSubversionURLであることに注意してください-私はそれに!svnを追加するものではありません)

/logs/の完全なVirutalHostは、次のようになります。

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

これは、最新のmod_dav.cが2.2.15でどのように見えるかです(簡潔にするために編集):

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のこのディレクトリにどのようにマップされているか、およびその場所からリソースを読み取ることができる適切なアクセス制御があるかどうかにあるようです。次に、そのすべての構成情報を確認する必要があります。

3
user15590