[PHP-users 26949] Re: proc_open()を使用してGnuPGの復号化をしたい

canada-php@kaede.to canada-php @ kaede.to
2005年 9月 22日 (木) 01:13:35 JST


かなだです。

matsui 9999さんの<BAY15-F9DD7D7B012F567045745396940 @ phx.gbl>から
> >batchmodeを追っかけてみると、gpgのオプ
> >ションに--batchをつけるとbatchmodeがセットされる(で、
> >ttypfpがstderrにセットされる)ようです(解決になるかど
> >うか分かりませんが)。
> 
> batchモード(非対話モード)で実行してみました。
> パスフレーズ有の鍵でも、この方法だと復号化できました。

やはりその部分だったようですね。ということは、

> 今は何故、パスフレーズ有の鍵で失敗するのか気になっ
> ています。

対話モードの時にgpgがTERMDEVICEを開こうとして失敗す
るのが原因だと思われます。

ソースコードを見たところ、なぜか、TERMDEVICEが何であれ
「cannot open /dev/tty:」というメッセージを出すよう
になっているので、必ずしも/dev/ttyのオープンに失敗し
ているとは限らなさそうです。

util/ttyio.c
| ttyfp = batchmode? stderr : fopen(TERMDEVICE, "r+");
| if( !ttyfp ) {
| log_error("cannot open /dev/tty: %s\n", strerror(errno) );

ですので、該当する部分を書き直してgpgをコンパイルし
なおすか、TERMDEVICEに該当するデバイスを準備してやれ
ばエラーはなくなる気がします。

ともあれまずコンパイル時にTERMDEVICEが何に定義されて
いたのか確認してみることをお勧めします。

-- 
かなだまさかつ


PHP-users メーリングリストの案内