[pgsql-jp: 34720] windowsにおけるpsqlのパスワード等の入力

上野 弘太 ueno @ crosstech.co.jp
2005年 1月 26日 (水) 14:24:41 JST


上野と申します。

わかってしまえば、とても些細なことですが、
けっこうハマッタことがあったので、一応報告させて頂きます。

postgresql Version 8.0.0 windows版をインストールしてみましたが、
利用している内に、 psql で postgresqlサーバーに接続しなくなりました。

windows版postgresql と一緒にインストールされた pgadminIII は、問題なく利用できます。
JDBC経由のjavaアプリも動作しています。
にもかかわらず、

psql を起動すると、 パスワードプロンプトが表示されずに、
いきなり認証エラーが表示されてしまいます。(パスワードを入力していないのに認証エラーとなる)
==============================================================
C:> psql -h localhost -U user1 testdb1
psql: FATAL:  password authentication failed for user "user1"
<Enter>
==============================================================


いろいろと調べた結果、
 \dev という名前のフォルダが有ると、このようなことが発生してしまうようです。


私のPCには、 C:\dev が有りました。
psql を Cドライブ内の任意のフォルダ内で実行すると、上記のような症状となります。
D とか、 E とかの他のドライブなら発生しません。( D や E には \dev が無い)


postgresql 8.0 のソースを調べて見てみました。

パスワードの入力は、 postgresql-8.0.0\src\port\sprompt.c  の 
char * simple_prompt(const char *prompt, int maxlen, bool echo) で行っていました。

simple_prompt() では、下記のようにしてコンソールをオープンしています。
=========================================
	termin = fopen("/dev/tty", "r");
	termout = fopen("/dev/tty", "w");
=========================================

つまり、windowsの場合、fopen("/dev/tty", "w") で \dev\tty というファイルを作成してしまうことがあるようです。
そして、 \dev\tty が作成されると、 fopen("/dev/tty", "r") は、 \dev\tty を開いてしまい・・
という事みたいです。

/dev/tty を CON に修正してコンパイルしたところ、
\dev が有っても、パスワードプロンプトが表示されるようになりました。


以上です。



pgsql-jp メーリングリストの案内