笠原@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);