cvsを認証必須のプロキシ経由で使いたい

目的

id:taiyo:20080401#p1 を参照。

結果

社内プロキシの設定では、CVSプロトコルを用いての取得はムリ(80番以外のポートへのCONNECTメソッドを許可していないため)。
ViewCVSなどのWebインターフェースを経由してのアクセスなら可能なはず(CVSGrabを使用)。ただし未だ成功せず。

CVSの仕様

CVSのドキュメントには、proxyについての記載なし。また、ソース中にもそれらしき箇所はない。

参考情報(Jim White - Using CVS via HTTP proxy)によると、

  • CVSをHTTPプロキシ対応にするパッチはある
  • しかしCVSメンテナ達は、このパッチをメインツリーに取り込む気はない
    • CVSプロトコルはHTTPじゃないよ」
    • 「end-to-endのトンネルしたいなら SOCKSがあるじゃないか」

cvsのプロキシも今の状況では使えない

CVSにプロキシパッチをあてれば良いか?
しかし、社内プロキシは、cvspserver(2401番ポート)でのCONNECTメソッドは許可していない。

% (printf "CONNECT cvs.ruby-lang.org:2401 HTTP/1.0\n\n\n"; sleep 1 ) |\
>  telnet abcproxy.examlple.com 8080 | grep '^HTTP'
Connection closed by foreign host.
HTTP/1.0 403 Forbidden

cvsとproxy関連で cvsproxy(http://www.sra.co.jp/people/m-kasahr/cvsproxy/)というツールもあるが、このツールはプロキシサーバで動かす必要があり、それも出来ない(プロキシサーバのログインアカウントは持っていない)。

なので、CVSプロトコルをプロキシに通すことは、現状不可能。

CVSプロトコル以外ではどうか?

CVSGrab(CVSGrab - CVSGrab - Read sources stored in CVS behind a firewall)というツールがある。
これは、ViewCVSなどのウェブインターフェースからCVSツリー全体を落とすためのツール、のよう。
httpなら普通にアクセスできるはず。

ドキュメントにあるように試してみるものの、

% sh ../cvsgrab-2.3/cvsgrab.sh \
  -url http://cvs.sourceforge.net/viewcvs.py/cvsgrab/cvsgrab/ \
  -destDir . \
  -packageDir CVSGrab \
  -proxyHost abcproxy.examlple.com \
  -proxyPort 8080 \
  -proxyUser 4000000 \
  -proxyPassword PassWord
CVSGrab - -Using proxy abcproxy.examlple.com:8080
CVSGrab - -Login on the proxy with user name 4000000 ←ここで停止

なんでだろうなぁ。

その他の情報

http://cvs.m17n.org/cvs/committer.ja.html

committer の生活(http://cvs.m17n.org/cvs/committer.ja.html)というページが、CVSファイアウォールを越えるための一般的な方法が種々書かれていて、検討の参考になった。
ただしいずれの方法も、ファイアウォールサーバでの設定か、外部の中継サーバか、SOCKS接続環境が必要なため、使用できない。悲しい。