From 86dacdb74c20d8af6ec900b7cd163df031ab90e4 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Mon, 10 May 1999 15:27:19 +0000 Subject: [PATCH] libpq++ uses fe_setauthsvc which is deprecated and results in an error on connection. This patch changes it to use PQconnectdb rather than {fe_setauthsvc,PQsetdb}. This still isn't the complete solution, as there is no provision for user,password in class PgEnv, but it does get rid of the error message. Tested with gcc version egcs-2.91.60 19981201 (egcs-1.1.1 release) under NetBSD-1.3K/i386. Cheers, Patrick Welche --- doc/src/sgml/libpq.sgml | 2 +- src/interfaces/libpq++/pgconnection.cc | 24 +++++++++++------------- src/interfaces/libpq++/pgenv.cc | 18 +++++++++++++++++- src/interfaces/libpq++/pgenv.h | 2 ++ 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index cbde3387fc3..3442185fd40 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -316,7 +316,7 @@ char *PQoptions(PGconn *conn) Returns the status of the connection. The status can be CONNECTION_OK or CONNECTION_BAD. <synopsis> -ConnStatusType *PQstatus(PGconn *conn) +ConnStatusType PQstatus(PGconn *conn) </synopsis> </Para> diff --git a/src/interfaces/libpq++/pgconnection.cc b/src/interfaces/libpq++/pgconnection.cc index 96ef215700f..9cbdd896171 100644 --- a/src/interfaces/libpq++/pgconnection.cc +++ b/src/interfaces/libpq++/pgconnection.cc @@ -10,13 +10,14 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgconnection.cc,v 1.2 1997/02/13 10:00:27 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgconnection.cc,v 1.3 1999/05/10 15:27:18 momjian Exp $ * *------------------------------------------------------------------------- */ #include <stdlib.h> #include <string.h> +#include <strstream> #include "pgconnection.h" extern "C" { @@ -88,21 +89,18 @@ ConnStatusType PgConnection::Connect(const char* dbName) PQtrace(pgConn, debug); #endif - // Set Host Authentication service - char errorMessage[ERROR_MSG_LENGTH]; - memset(errorMessage, 0, sizeof(errorMessage)); - fe_setauthsvc(pgEnv.Auth(), errorMessage); - // Connect to the database - pgConn = PQsetdb(pgEnv.Host(), pgEnv.Port(), pgEnv.Option(), pgEnv.TTY(), dbName); + ostrstream conninfo; + conninfo << "dbname="<<dbName; + conninfo << pgEnv; + pgConn=PQconnectdb(conninfo.str()); + conninfo.freeze(0); - // Return the connection status - if (errorMessage) { - SetErrorMessage( errorMessage ); - return CONNECTION_BAD; + if(ConnectionBad()) { + SetErrorMessage( PQerrorMessage(pgConn) ); } - else - return Status(); + + return Status(); } // PgConnection::status -- return connection or result status diff --git a/src/interfaces/libpq++/pgenv.cc b/src/interfaces/libpq++/pgenv.cc index 451a4f3fde3..b7edbd12fe0 100644 --- a/src/interfaces/libpq++/pgenv.cc +++ b/src/interfaces/libpq++/pgenv.cc @@ -14,7 +14,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgenv.cc,v 1.3 1997/02/13 10:00:33 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq++/Attic/pgenv.cc,v 1.4 1999/05/10 15:27:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -66,3 +66,19 @@ string PgEnv::getenv(const char* name) char* env = ::getenv(name); return (env ? env : ""); } + + +// Extract the PgEnv contents into a form suitable for PQconnectdb +// which happens to be readable, hence choice of << +ostream& operator << (ostream &s, const PgEnv& a) +{ + s<<' '; // surround with whitespace, just in case + if(a.pgHost.length() !=0)s<<" host=" <<a.pgHost; + if(a.pgPort.length() !=0)s<<" port=" <<a.pgPort; + // deprecated: if(a.pgAuth.length()!=0)s<<" authtype="<<a.pgAuth; + if(a.pgOption.length()!=0)s<<" options="<<a.pgOption; + if(a.pgTty.length() !=0)s<<" tty=" <<a.pgTty; + s<<' '; + + return s; +} diff --git a/src/interfaces/libpq++/pgenv.h b/src/interfaces/libpq++/pgenv.h index 43068aacce2..e3e8d6303b6 100644 --- a/src/interfaces/libpq++/pgenv.h +++ b/src/interfaces/libpq++/pgenv.h @@ -19,6 +19,7 @@ #define PGENV_H #include <string> +#include <iostream> #ifdef __sun__ #ifndef __GNUC__ @@ -79,6 +80,7 @@ public: protected: string getenv(const char*); + friend ostream& operator << (ostream &, const PgEnv&); }; #endif // PGENV_H -- GitLab