2012年8月30日木曜日

Malformed permissions property: 'langid' 対策

(臨時修正版:http://dl.dropbox.com/u/24560712/new-pg8.2.22w8.zip

Windows 8又はWindows Server 2012に、PostgreSQL 8.2 の導入を試みると、失敗するようです。

次の様なエラーメッセージが表示されます。

Malformed permissions property: 'langid'

原因を特定致しました。

未初期化の変数に対する読み取りアクセスが原因のようです。(これは、PostgreSQL側に問題が有ります。Windows側の問題では有りません。)

修正ファイル編:

mstファイル置き場へのリンクを設置致します。使用方法につきましては、各人にて調査され、対処してください。自己責任でお願いいたします:
https://sites.google.com/site/kaihatsublog/pginstca

分析編:

次にコードを示します。(pgFoundary/pginstaller/pginst/ca/pginstca.cファイル中、RunInitdbから抜粋しています)

 serverdir = strchr(langid,';');
 if (!datadir)
 {
  SendErrorMessage(hInstall,L"Malformed permissions property: 'langid'.");
  return ERROR_INSTALL_FAILURE;
 }

serverdirに書き込んでいるのに、datadirを読み取っています。

Windows 8以前では、未使用のスタックが汚れていた(?)ため、発現しなかったようですが、
Windows 8以遠では、未使用のスタックを0で掃除する(?)ようになったため、発現するようです。

この問題は8.2以降で修正されていますが、8.2系列には補修が適用されていないようです。

Orca及びOllyDbg v2.01 (beta 2)の力を借り、解析しました所、次の様になっています。


そこでパッチを当てました。pginstca 3758 EC F0

Stirlingでパッチを適用し、Orcaで書き戻した所、セットアップが成功するようになりました。

5 件のコメント:

  1. 後日調べました所、同じ指摘が過去に別の所で議論されていました。

    http://archives.postgresql.org/pgsql-hackers/2011-10/msg00231.php

    返信削除
  2. window8の環境でpostgresql8.2のうまく入りません。
    検索なんとかここまでたどり着きました。ありがとうございます!
    しかし、KU様のmst使い
    msiexec /i postgresql-8.2.msi TRANSFORMS=new-8.2.22-pginstca.mst
    で実行してみたところ、エラー2721が発生しました。
    もう少し詳しく説明いただけないでしょうか
    なんとか解決したいです!

    返信削除
  3. はじめまして。

    私の知っている方法ですと、ちょっと大変な作業になります。

    Orcaを使って、msiファイルにmstファイルを適用する方法です。

    改変後の物(27MB)をこっそりdropboxに置きますので、お急ぎでしたら、こちらをどうぞ: http://dl.dropbox.com/u/24560712/new-pg8.2.22w8.zip

    手順はこのようになります。

    (1) Windows Server 2003 SP1 Platform SDK Web Installから、Orcaのセットアップを入手

    http://www.microsoft.com/en-us/download/details.aspx?id=6510

    (2) Orcaをセットアップします

    (3) Orcaを起動します

    (4) [Tools]→[Options]で、[Database]の[Copy embedded streams during 'Save As']をオンにします。

    (5) [File]→[Open]で、postgresql-8.2-int.msiを開きます

    (6) [Transform]→[Apply Transform]で、new-8.2.22-pginstca.mstを開きます。

    (7) [File]→[Save Transformed As]で、別のファイルに保存します。

    (8) [File]→[Close]で、閉じます。

    (9) 別のファイルの名前をpostgresql-8.2-int.msiに変更します。

    (10) postgresql-8.2.msiを実行して、セットアップします。

    返信削除
  4. KU様のインストールファイルで一機に解決しました。
    今まで悩んでた何日間なんだったんだろうと思いました。
    この恩を返ししたのですが、連絡先とかもらえるでしょうか

    返信削除
  5. お役に立てて幸いです(^^

    後の事は気にしないでください。

    返信削除