WinInetが、どの種類の認証に対応しているのかよく分かってないんだけど、Digest認証はIEでも5以降のみ対応みたいなので、たぶんWinInetもIE5以降に付属のバージョンじゃないと対応してないと思う。Basic認証とかNTLM認証はもっと前から対応してそうなんだけど、NTLM認証は対応サーバがないので未確認。Basic認証とDigest認証がIE6のwininet.dll環境でできることを確認できた。
HTTPで認証する場合、どうやら1回目の接続時は認証情報なしでつないでみて、認証が必要ってエラーが返ってきたら再度送りなおすみたいなんだけど、問題は再度送りなおすって作業はWinInetが勝手にやってくれないこと。めんどくさ。今回はHttpSendRequestExでデータを送り込んでるんだけど、やるべきことは、HttpEndRequest()の返り値がFalseの場合で、かつ、GetLastError()の値がERROR_INTERNET_FORCE_RETRYの場合は、再度HttpSendRequestExからやり直すということ。詳細は、MSの技術文章を参照。gotoなんてすごい久しぶりに使ったよ。というより、もしかしたらCでは初めて使ったかも。
寝違えたみたいで、一昨日の朝から3連休中ずっと痛かった。って、まだ治ってないので明日の朝治るかもわかんないけど。
ようやくエアコンなしでも1日過ごせるようになってきた。ただし東向きの部屋なので午前中晴れてないのが条件。もう9月も終わるってのに、最高気温が30℃近い日が多いのは何とかならないものか。
この前壊れたFX1は壊れたままで修理には出さず、LX1買いました。16:9って確かに新鮮。普通に撮るだけでもなんかいい感じに撮れてしまう。まだ試してないけど、星空モードだとシャッターを最大60秒開けておけるので、期待。あぁ、北海道で星空撮りたかったよ...。それと、やっぱり各種マニュアルモードが付いてるのはよさげ。
前回の続き。とりあえず、今日の目標は、証明書に問題があっても無視してHTTPSの通信ができるようにすること。結果から言うと、なんとか目標達成。でも、前回のところに書いたInternetSetOption()だけだとダメだった。前回の段階では試してなくて、多分できるだろうとしか思ってなかったけど、結構苦戦した。InternetConnect()とHttpOpenRequest()のフラグにHTTPSのためには最低限INTERNET_FLAG_SECUREを、今回のように無視して接続させるためにはINTERNET_FLAG_IGNORE_CERT_CN_INVALIDとかINTERNET_FLAG_IGNORE_CERT_DATE_INVALIDも設定しないといけない。無視する場合はInternetSetOption()での設定も必要だけど、こちらはフラグの定義名が違うので注意("SECURITY_FLAG_"で始まる各定義を使う)。今のwininet.hだと同じ値が定義されてるけど念のため。
INTERNET_FLAG_SECUREを、HTTPSじゃない普通のHTTPの時にセットすると通信時にエラーになってしまうので、プロトコルを見てフラグをセットするかどうかを決めることになる。InternetCrackUrl()でスキームを得ている場合は、URL_COMPONENTS構造体のlpszSchemeを見ればHTTPSかどうか分かる。
動作を確認してて気づいたんだけど、これだけだと、IEに信用されてない証明書の場合、証明書をIEで登録しとかないとHttpSendRequestEx()でエラーになる。でも、おかげで、前回拾えなかったエラーがここで拾えることが分かった(今思うと、前回はInternetConnectとかでフラグ設定してなかったので、エラーは出ないけどサーバからの返り値が読めないという問題だった)。証明書はIEで登録してもらえば何とかなるか。
自分の持ってる株がストップ高になってた。これまで半年は5%程度の範囲に収まってたのが、1日で約15%上昇。何でかはよく分からん。
単に証明書のエラーを無視するようにするんなら、InternetSetOption()で無視するように設定すればいいんだけど、やっぱIEみたいにユーザに警告を表示するのが理想。そのためには、最初は無視しない設定で接続して、エラーが出たらそれをユーザに示して、ユーザに無視するか選んでもらう必要がある。とりあえず、ルート証明書からたどれないのか、期限が無効なのか、ドメイン名が違うのか、ってのを調べたい。
という感じで、HTTPSのエラーも取得できるらしいんだけど、InternetOpen()を非同期モードで開くと、InternetWriteFile()がエラーになってしまう..。同期モードでしか使えないのか。かと言って、同期モードにすると、コールバックのされ方が変わるので、コールバック関数でINTERNET_STATUS_REQUEST_COMPLETEを拾えなくなってエラーがセットできない。どうすればいいんだ。InternetWriteFileとInternetReadFileを使ってるのを全部変更するしかないかも。
なんか手術があるからということで妹に呼び出されたので、状況もよく分からないまま昨日から地元に行ってきた(今日は月曜なので会社を休んだ)。検査で悪いところが見つかったので、十二指腸と膵臓を全摘出、膵臓から十二指腸に向かう管と胃の出口、腸への入り口をつなぐらしく、8時間ぐらいかかる大手術らしい。
で、今日が手術だったんだけど、手術を行うフロアはエレベータから降りたところまでしか付いていけないので、別のフロア(普段の病室があるフロア)の待合室で待ってるようにとのこと。予定より1時間ぐらい早く始まって、5時間で終了。どうやら、予想より軽症だったので、十二指腸の摘出だけで終わったので手術時間も短かったらしい。実は、元の予定だと、大阪まで戻るにはあまり余裕がなかったので、早く終わったのはその意味でもよかった。元の手術だと、3週間は病院にいないといけなかったはずだけど、これなら早く出られるかも。
どこの党であれ、ひとつの党が過半数を占めるのはよくないと思う。それにしても、ここまで勢力が激変するとは思っても見なかったな。俺の選挙区も民主→公明に変わっちゃった(自民は候補者なしで公明の人に推薦が付いてた)。
ちょっと前までは、なんでどの曲も好んで黒鍵を使う調なんだよ!とか思ってたけど、最近になって黒鍵のありがたみが分かってきた。黒鍵を使うからこそ目で見ないでも多少は指を動かしたりできるし、両手の指が交差する弾き方も可能になる。それと、今練習してる曲の指が交差するところは、オリジナルから移調したら指が絡まって絶対弾けないよ。
Microsoftの日本語ページから一番新しいのをもらってきてインストールして、O-84氏のソースをビルドしてみる。ヘッダがないって文句を言われた。さっきもらってきたのをよく見てみると、「MicrosoftR DirectXR 9.0 SDK Update (August 2005)」って書かれてる。ん?アップデート?ってことは単品で完結しないのか。同じページでUpdateが付いてないのをダウンロードしようとしたけど、なぜかリンク切れ。やる気ねーな。英語ページのほうで何とか発見したので、こいつを入れてから、さらにさっきのUpdateを入れなおしたところ、無事ビルドできた。
自動でDVD-Rに書き出すとこまでやろうと思ったんだけど、cdrecordがカーネル2.6に対応してないとかいうエラーが出て使えない..他のを探すのも面倒だし、cronの中でDVD-Rに書き出すのはあんまりよくないかもしれないので、とりあえずcron.weeklyにスクリプトを作ってリポジトリのダンプを毎週書き出すようにした。あとは気が向いたときにWinマシンで吸い出して他のバックアップと一緒にDVD-RAMに入れることにした。そういえば、サーバにはせっかくDVD-Rドライブつけたのに、1年半で1回も書き出し用途に使ってないなぁ。
あまり深く考えずに設定してたので、昨日の段階では認証なしでも読み込みは可能な状態になってた。それと、せっかくhttps用の設定をしたのに、httpでもアクセス可能な状態だった。ということで、dav_svn.confの設定を変更。昨日の段階では、
<Location /svn/rep> DAV svn SVNPath /var/svn/rep AuthType Basic AuthName "Subversion Repositry" AuthUserFile /etc/subversion/.passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
だったのを、次のように変更した。(SSLRequireSSLを追加&Requireを外に出した)
<Location /svn/rep> DAV svn SVNPath /var/svn/rep SSLRequireSSL AuthType Basic AuthName "Subversion Repositry" AuthUserFile /etc/subversion/.passwd Require valid-user </Location>
これで、httpsかつ認証をパスしないと何も見えないはず。
"sarge apache2 ssl"でググって準備完了。Apacheまわりでちょっとてこずったのが2つ。1つ目は証明書の有効期限。デフォルトだと30日で切れるので、昔の記録を参考に、
$ apache2-ssl-certificate -days 365
みたいにすると有効期限の長い証明書を作成できる(apache2-ssl-certificateには、証明書を作るときに使われるオプションがそのまま引数に渡せる)。もうひとつはApacheのVirtualHostの設定。ホスト名を設定しないといけないんだけど、自分の部屋からだとルータを通らないからIP違うんだよねぇ。結局、
<VirtualHost www.aaa.bbb.net:443 192.168.0.2:443>
という感じで併記したらできた。やっぱsargeはいいねぇ。今のところ、インストール以降にコンパイル作業は全くしてない。debianのパッケージなので、セキュリティアップデートも簡単だし。woodyの時は自分でコンパイルしたのをいろいろ入れてたおかげでアップデートも大変だったよ。これまでSubversionをサーバに入れないで使ってたのもそれが理由。
リポジトリは1つにしたいんだけど、これまでWindowsのローカルマシン内で使ってたときはモジュールごとにリポジトリを作ってたので、移転ついでに統合することにした。複数のリポジトリの統合を参考に統合完了。svnのリビジョン番号はリポジトリ内で一意に付くので、統合したおかげでリビジョン番号が崩れてしまった。それと、統合前のコミット分についてはリビジョンの大小と時間の前後がモジュールを超えると一致しないけど、そもそも関係ないから別リポジトリにしてたので、たぶん問題はないはず。
前回以降に完了したのが
で、やり残してるのが、
かなり片付いてきた。