pgpass.diff
src/app/qgspgsourceselect.cpp (working copy) | ||
---|---|---|
406 | 406 |
if ( pd != 0 ) |
407 | 407 |
PQfinish( pd ); |
408 | 408 | |
409 |
pd = PQconnectdb( m_connectionInfo.toLocal8Bit() ); // use what is set based on locale; after connecting, use Utf8 |
|
410 | ||
411 |
#if defined(PG_VERSION_NUM) && PG_VERSION_NUM >= 80300 |
|
412 |
// if the connection needs a password ask for one |
|
413 |
if ( PQstatus( pd ) == CONNECTION_BAD && PQconnectionNeedsPassword( pd ) ) |
|
414 |
#else |
|
415 |
// if the connection failed and we didn't have a password, ask for one and retry |
|
416 |
if ( PQstatus( pd ) == CONNECTION_BAD && password.isEmpty() ) |
|
417 |
#endif |
|
409 |
pd = PQconnectdb( uri.connectionInfo().toLocal8Bit() ); // use what is set based on locale; after connecting, use Utf8 |
|
410 |
// check the connection status |
|
411 |
if ( PQstatus( pd ) != CONNECTION_OK && QString::fromUtf8( PQerrorMessage( pd ) ) == PQnoPasswordSupplied ) |
|
418 | 412 |
{ |
419 |
// get password from user |
|
420 |
bool makeConnection = false; |
|
421 |
password = QInputDialog::getText( this, tr( "Password for " ) + username, |
|
422 |
tr( "Please enter your password:" ), |
|
423 |
QLineEdit::Password, QString::null, &makeConnection ); |
|
424 |
// allow null password entry in case its valid for the database |
|
425 |
if ( makeConnection ) |
|
413 |
QString password = QString::null; |
|
414 | ||
415 |
while ( PQstatus( pd ) != CONNECTION_OK ) |
|
426 | 416 |
{ |
427 |
uri.setConnection( settings.value( key + "/host" ).toString(), |
|
428 |
settings.value( key + "/port" ).toString(), |
|
429 |
database, |
|
430 |
settings.value( key + "/username" ).toString(), |
|
431 |
password, |
|
432 |
( QgsDataSourceURI::SSLmode ) settings.value( key + "/sslmode", QgsDataSourceURI::SSLprefer ).toInt() ); |
|
417 |
bool ok = true; |
|
418 |
password = QInputDialog::getText( this, |
|
419 |
tr( "Enter password" ), |
|
420 |
tr( "Error: %1\nEnter password for %2" ) |
|
421 |
.arg( QString::fromUtf8( PQerrorMessage( pd ) ) ) |
|
422 |
.arg( uri.connectionInfo() ), |
|
423 |
QLineEdit::Password, |
|
424 |
password, |
|
425 |
&ok ); |
|
433 | 426 | |
434 |
m_connectionInfo = uri.connectionInfo(); |
|
435 |
PQfinish( pd ); |
|
436 |
pd = PQconnectdb( m_connectionInfo.toLocal8Bit() ); // use what is set based on locale; after connecting, use Utf8 |
|
427 |
::PQfinish( pd ); |
|
428 | ||
429 |
if ( !ok ) |
|
430 |
break; |
|
431 | ||
432 |
pd = PQconnectdb( QString( "%1 password='%2'" ).arg( uri.connectionInfo() ).arg( password ).toLocal8Bit() ); |
|
437 | 433 |
} |
438 | 434 |
} |
439 | 435 |
src/app/qgsnewconnection.cpp (working copy) | ||
---|---|---|
18 | 18 | |
19 | 19 |
#include <QSettings> |
20 | 20 |
#include <QMessageBox> |
21 |
#include <QInputDialog> |
|
21 | 22 | |
22 | 23 |
#include "qgsnewconnection.h" |
23 | 24 |
#include "qgscontexthelp.h" |
... | ... | |
139 | 140 |
QgsDataSourceURI uri; |
140 | 141 |
uri.setConnection( txtHost->text(), txtPort->text(), txtDatabase->text(), txtUsername->text(), txtPassword->text(), ( QgsDataSourceURI::SSLmode ) cbxSSLmode->itemData( cbxSSLmode->currentIndex() ).toInt() ); |
141 | 142 | |
142 |
QgsDebugMsg( "PQconnectdb(" + uri.connectionInfo() + ");" );
|
|
143 |
QgsDebugMsg( "PQconnectdb(\"" + uri.connectionInfo() + "\");" );
|
|
143 | 144 | |
144 |
PGconn *pd = PQconnectdb( uri.connectionInfo().toLocal8Bit().data() ); |
|
145 |
PGconn *pd = PQconnectdb( uri.connectionInfo().toLocal8Bit() ); // use what is set based on locale; after connecting, use Utf8 |
|
146 |
// check the connection status |
|
147 |
if ( PQstatus( pd ) != CONNECTION_OK && QString::fromUtf8( PQerrorMessage( pd ) ) == PQnoPasswordSupplied ) |
|
148 |
{ |
|
149 |
QString password = QString::null; |
|
150 | ||
151 |
while ( PQstatus( pd ) != CONNECTION_OK ) |
|
152 |
{ |
|
153 |
bool ok = true; |
|
154 |
password = QInputDialog::getText( this, |
|
155 |
tr( "Enter password" ), |
|
156 |
tr( "Error: %1\nEnter password for %2" ) |
|
157 |
.arg( QString::fromUtf8( PQerrorMessage( pd ) ) ) |
|
158 |
.arg( uri.connectionInfo() ), |
|
159 |
QLineEdit::Password, |
|
160 |
password, |
|
161 |
&ok ); |
|
162 | ||
163 |
::PQfinish( pd ); |
|
164 | ||
165 |
if ( !ok ) |
|
166 |
break; |
|
167 | ||
168 |
pd = PQconnectdb( QString( "%1 password='%2'" ).arg( uri.connectionInfo() ).arg( password ).toLocal8Bit() ); |
|
169 |
} |
|
170 |
} |
|
171 | ||
145 | 172 |
if ( PQstatus( pd ) == CONNECTION_OK ) |
146 | 173 |
{ |
147 | 174 |
// Database successfully opened; we can now issue SQL commands. |
src/providers/postgres/qgspostgresprovider.cpp (working copy) | ||
---|---|---|
44 | 44 |
#include "qgspostgisbox3d.h" |
45 | 45 |
#include "qgslogger.h" |
46 | 46 | |
47 |
#include <QInputDialog> |
|
48 | ||
47 | 49 |
const QString POSTGRES_KEY = "postgres"; |
48 | 50 |
const QString POSTGRES_DESCRIPTION = "PostgreSQL/PostGIS data provider"; |
49 | 51 | |
... | ... | |
304 | 306 | |
305 | 307 |
PGconn *pd = PQconnectdb( conninfo.toLocal8Bit() ); // use what is set based on locale; after connecting, use Utf8 |
306 | 308 |
// check the connection status |
309 |
if ( PQstatus( pd ) != CONNECTION_OK && QString::fromUtf8( PQerrorMessage( pd ) ) == PQnoPasswordSupplied ) |
|
310 |
{ |
|
311 |
QString password = QString::null; |
|
312 | ||
313 |
while ( PQstatus( pd ) != CONNECTION_OK ) |
|
314 |
{ |
|
315 |
bool ok = true; |
|
316 |
password = QInputDialog::getText( 0, |
|
317 |
tr( "Enter password" ), |
|
318 |
tr( "Error: %1\nEnter password for %2" ) |
|
319 |
.arg( QString::fromUtf8( PQerrorMessage( pd ) ) ) |
|
320 |
.arg( conninfo ), |
|
321 |
QLineEdit::Password, |
|
322 |
password, |
|
323 |
&ok ); |
|
324 | ||
325 |
::PQfinish( pd ); |
|
326 | ||
327 |
if ( !ok ) |
|
328 |
break; |
|
329 | ||
330 |
pd = PQconnectdb( QString( "%1 password='%2'" ).arg( conninfo ).arg( password ).toLocal8Bit() ); |
|
331 |
} |
|
332 |
} |
|
333 | ||
307 | 334 |
if ( PQstatus( pd ) != CONNECTION_OK ) |
308 | 335 |
{ |
336 |
::PQfinish( pd ); |
|
309 | 337 |
QgsDebugMsg( "Connection to database failed" ); |
310 | 338 |
return NULL; |
311 | 339 |
} |