Thread: Possible 9.0 bug
I have a small test case (shown below) that is not working under 9.0beta1 but works fine under 8.1. I have other code that is virtually identical to this that does not encounter the error. When I connect using empty string user id and password (and specifying ident in pg_hba) I get the following: ================ >testconnect Database connection failed: connection failed:-402:could not connect to database "mchs" on line 53 Could not connect to database: connection failed:-402:could not connect to database "mchs" on line 53 ================= When I put in non-empty user id and password, it is OK: >testconnect Connected to database OK Disconnected from database ================= This is my test case: ================= #include <stdio.h> #include <stdlib.h> #include <string.h> #define USERNAME "" #define PASSWORD "" #include <sqlca.h> int db_connect(char *); void db_disconnect(); int main(int argc, char *argv[]) { char message[81]; if (db_connect(message) != 0) { printf("Could not connect to database: %s\n", message); } else { printf("Connected to database OK\n"); db_disconnect(); } return 0; } int db_connect(char *message) { int result = 0; EXEC SQL BEGIN DECLARE SECTION; VARCHAR username[128]; VARCHAR password[32]; EXEC SQL END DECLARE SECTION; strcpy(username.arr,USERNAME); username.len = strlen(username.arr); strcpy(password.arr,PASSWORD); password.len = strlen(password.arr); EXEC SQL CONNECT TO mchs USER :username IDENTIFIED BY :password; if (sqlca.sqlcode == 0) { result = 0; } else { result = 1; sprintf(message,"connection failed:%d:%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc); printf("\nDatabase connection failed: %s\n", message); } return result; } void db_disconnect() { EXEC SQL ROLLBACK; EXEC SQL CONNECT RESET; printf("\nDisconnected from database\n"); }
On 05/07/2010 05:25 AM, Paul Anderson wrote: > I have a small test case (shown below) that is not working under > 9.0beta1 but works fine under 8.1. I have other code that is virtually > identical to this that does not encounter the error. Can you try this on 8.4? -- -- Josh Berkus PostgreSQL Experts Inc. http://www.pgexperts.com
Hi Paul, actually this bug was introduced in 8.4 when ecpg moved to the new libpq connect function. Thanks for spotting it. The code in CVS is fixed for both, 8.4 and 9.0. Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org ICQ 179140304, AIM/Yahoo/Skype michaelmeskes, Jabber meskes@jabber.org VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
Thanks! Paul On 5/7/10 3:41 PM, Michael Meskes wrote: > Hi Paul, > > actually this bug was introduced in 8.4 when ecpg moved to the new libpq > connect function. Thanks for spotting it. The code in CVS is fixed for both, > 8.4 and 9.0. > > Michael >
I tried it on 8.4.1 and it did not fail. Is that consistent? On 5/7/10 3:41 PM, Michael Meskes wrote: > Hi Paul, > > actually this bug was introduced in 8.4 when ecpg moved to the new libpq > connect function. Thanks for spotting it. The code in CVS is fixed for both, > 8.4 and 9.0. > > Michael >
While the test case I sent earlier runs under 8.4.1, a different program with almost identical code fails using 8.4.1. The problem I reported earlier only occurred in some cases. I have a number of programs with near identical connection code and only some of them failed. Paul On 5/7/10 3:41 PM, Michael Meskes wrote: > Hi Paul, > > actually this bug was introduced in 8.4 when ecpg moved to the new libpq > connect function. Thanks for spotting it. The code in CVS is fixed for both, > 8.4 and 9.0. > > Michael >
On Fri, May 07, 2010 at 03:46:14PM -0400, Paul Anderson wrote: > I tried it on 8.4.1 and it did not fail. Is that consistent? Well the bug might get hidden by some other stuff but it definitely was there. The problem was that the code only checked for user/password == NULL to find empty parameters which of course doesn't catch "". Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org ICQ 179140304, AIM/Yahoo/Skype michaelmeskes, Jabber meskes@jabber.org VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL
On Fri, May 07, 2010 at 03:59:17PM -0400, Paul Anderson wrote: > The problem I reported earlier only occurred in some cases. I have > a number of programs with near identical connection code and only > some of them failed. If you want you can try if there is another problem being discovered by your test cases. The patch is here: http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/interfaces/ecpg/ecpglib/connect.c.diff?r1=1.54;r2=1.55 It's just a short one, but it fixed your test case for me. Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org ICQ 179140304, AIM/Yahoo/Skype michaelmeskes, Jabber meskes@jabber.org VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL