笠原@Ruby初心者です.

先日は,ruby-1.2.xに対応したpostgresに関してお教えいただき
ありがとうございました.
結局,ruby-1.3.6 + postgres-0.5.2 という最新の組み合わせで
挑戦してみることにしました.

で,早速,postgresでは,データベースに接続するユーザとパス
ワードが指定できないことに気づきました.
新参ものですので,過去の経緯でサポートする必要なしという
結論に達したものか,要望がなくて実装されていないのか,
存じ上げませんが,少なくとも,私にとっては必要な機能なので
パッチを作りました.
基本的に,PQsetdbを呼んでいた部分をPQsetdbLoginを呼ぶように
置き換えただけです.
必須ではない引数を二つ加えた(ユーザ名とパスワード)だけ
なので,既存のプログラムは変更せずに動きます.

Vine Linux 1.0 + PostgreSQL6.4.2でしかテストしておりませんが,
認証機能が必要な方は,お使いくださいませ.

-- 
┏──────────────────
│∇      Норио Касахара 
│ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
│ 笠原 規男  kasa / air.linkclub.or.jp  


--- postgres.c.dist     Tue Jul 13 13:13:33 1999
+++ postgres.c  Wed Aug  4 13:15:30 1999
@@ -46,4 +46,4 @@ pgconn_s_connect(argc, argv, pgconn)
     int i;
-    VALUE arg[5];
-    char *pghost, *pgopt, *pgtty, *pgdbname;
+    VALUE arg[7];
+    char *pghost, *pgopt, *pgtty, *pgdbname, *pglogin, *pgpwd;
     int pgport = -1;
@@ -52,5 +52,6 @@ pgconn_s_connect(argc, argv, pgconn)
 
-    pghost=pgopt=pgtty=pgdbname=NULL;
+    pghost=pgopt=pgtty=pgdbname=pglogin=pgpwd=NULL;
     pgport=-1;
-    rb_scan_args(argc,argv,"05", &arg[0], &arg[1], &arg[2], &arg[3],
&arg[4]);
+    rb_scan_args(argc,argv,"07", &arg[0], &arg[1], &arg[2], &arg[3],
&arg[4],
+                                &arg[5], &arg[6]);
     if (!NIL_P(arg[0])) {
@@ -74,8 +75,18 @@ pgconn_s_connect(argc, argv, pgconn)
     }
+    if (!NIL_P(arg[5])) {
+       Check_Type(arg[5], T_STRING);
+       pglogin = RSTRING(arg[5])->ptr;
+    }
+    if (!NIL_P(arg[6])) {
+       Check_Type(arg[6], T_STRING);
+       pgpwd = RSTRING(arg[6])->ptr;
+    }
     if (pgport!=-1) {
        sprintf(port_buffer, "%d", pgport);
-       conn = PQsetdb(pghost, port_buffer, pgopt, pgtty, pgdbname);
+       conn = PQsetdbLogin(pghost, port_buffer, pgopt, pgtty, pgdbname,
+                           pglogin, pgpwd);
     }
     else {
-       conn = PQsetdb(pghost, NULL, pgopt, pgtty, pgdbname);
+       conn = PQsetdbLogin(pghost, NULL, pgopt, pgtty, pgdbname,
+                           pglogin, pgpwd);
     }
@@ -737,2 +748,3 @@ Init_postgres()
     rb_define_singleton_method(rb_cPGconn, "setdb", pgconn_s_connect,
-1);
+    rb_define_singleton_method(rb_cPGconn, "setdblogin",
pgconn_s_connect, -1);