Received: from mail.art-media.it (root@[195.103.82.2]) by hub.org (8.8.8/8.7.5) with ESMTP id MAA26804; Thu, 18 Jun 1998 12:58:06 -0400 (EDT) Received: from art-media.it (bw4.art-media.it [195.103.82.101]) by mail.art-media.it (8.8.7/8.8.7) with ESMTP id SAA14258; Thu, 18 Jun 1998 18:19:23 +0200 Message-ID: <358946ED.59DA2EC7@art-media.it> Date: Thu, 18 Jun 1998 18:57:17 +0200 From: Dario Fumagalli Organization: Art & Media S.a.S. X-Mailer: Mozilla 4.04 [en] (Win95; I) MIME-Version: 1.0 To: pgsql-interfaces@hub.org, pgsql-general@hub.org Subject: Libpq++ autenthication problem II Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Original message: Hi all, I'm having some problems trying to use the "password" and "crypt" authentication protocols in my libpq++ apps. Until now my programs were always on the same machine and were CGIs. So I used "trust" authentication in my pg_hba.conf file. Since I'm spreading the PostgreSQL fame as much as I can some customers are asking my company for some PostgreSQL-based apps. For one of those customers I must provide a degree of security better than "trust", possibly "crypt". I'm searching documentation or examples about "password" and "crypt" connections using libpq++. I searched on the WEB site (libpq IS documented, but perhaps I'm too a newbie to translate the given explainations to working code (= code that compiles AND succeeds in the connections)). I also tried searching the interfaces mailing list archives, but with no luck. Following there is an example (it is src/interfaces/libpq++/examples/testlibpq0.cc with some lines added) of my first efforts. I know that everything else is OK. My v. 6.3.1 installation works OK since the last year; people can view my data using libpq++ based CGIs (those that use the "trust" authentication); JDBC both on server (listening on a port) and on client (JDBC drivers downloaded with applets) work even with "password" authentication; ODBC connections are OK (thanks Byron :) ) with "trust" and "password" authentication (not for "crypt" but it seems it is not implemented yet on the driver's side...); PHP 3 connections work both with "password" and "crypt" protocols. All the listed means of connection work with other databases AND with this specific database. I'm really sure I'm making a little mistake somewhere in the code. If someone could help, I'll be grateful... Listing of src/interfaces/libpq++/examples/testlibpq0.cc with temptative (first 5 lines changed) authentication support (those username and password work in psql): /*------------------------------------------------------------------------- * * testlibpq0.c-- * small test program for libpq++, * small interactive loop where queries can be entered interactively * and sent to the backend * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION * $Header: /usr/local/cvsroot/pgsql/src/interfaces/libpq++/examples/testlibpq0.cc,v 1.3 1997/02/13 10:00:42 scrappy Exp $ * *------------------------------------------------------------------------- */ #include #include int main() { PgEnv Env; // Costruisce l'ambiente per PostgreSQL. Necessario se si usa // l'autenticazione (come nel caso di Jia) Env.Auth("password"); // Sostituire con "crypt" se necessario Env.Option("user=jiaguest password=c3e0scx"); // Open the connection to the database and make sure it's OK PgDatabase data(Env, "template1"); if ( data.ConnectionBad() ) { cout << "Connection was unsuccessful..." << endl << "Error message returned: " << data.ErrorMessage() << endl; return 1; } else cout << "Connection successful... Enter queries below:" << endl; // Interactively obtain and execute queries ExecStatusType status; string buf; int done = 0; while (!done) { cout << "> "; cout.flush(); getline(cin, buf); if ( buf != "" ) if ( (status = data.Exec( buf.c_str() )) == PGRES_TUPLES_OK ) data.DisplayTuples(); else cout << "No tuples returned..." << endl << "status = " << status << endl << "Error returned: " << data.ErrorMessage() << endl; else done = 1; } return 0; } // End main() One possible answer (since I received none :( ): I looked at the sources under interfaces/libpq++ and they seem rather obsolete. The following are my findings (hope to be correct): In fact they use an old method (valid before password and crypt authentication appeared) of connecting to the backend. This older method is unable to connect via those new authentication protocols. I also found some old bits here and there (related to the connection) that perhaps could be removed. Since I want to use a C++ interface to PostgreSQL (and I'm bragging sooo much with my colleagues and friends about its "mighty powers") I could rewrite some pieces here and there. Given that: - I found a workaround (using environment variables), but it's not elegant. - due to the new connection method (a string) I have collisions with overloaded constructors' parameters. I can write code that can cope with the new authentication methods, but the current C++ interface will be broken. - I'm not the only one on this planet who wants to use libpq++. - I have proofs (other mails) of people who need / like to connect to PostgreSQL using libpq++ AND password or crypt authentication methods. In those days a library that does not permit password protected connections is virtually useless. I would like to ask the authors if I can rewrite some parts of libpq++ and post them. It will NOT be only a patch and will NOT be backwardly compatible. Moreover, if The Authors agree with it (and I modify the library), I would like to be put on the developers' list. This will help me spread the PostgreSQL fame even more in others Italian programmers' mailing lists where I know there are a lot of people interested in DBMS. Cheers, Dario Fumagalli Art & Media Via Villa Giusti, 11 - 10142 Torino (Italy) Tel. +39-11-7707412 PBX - Fax +39-11-704283 email swdevel@art-media.it dfumagalli@art-media.it (personal mail slot) http://www.art-media.it