[QGIS Commit] r12698 - trunk/qgis/src/providers/postgres

svn_qgis at osgeo.org svn_qgis at osgeo.org
Thu Jan 7 15:23:10 EST 2010


Author: jef
Date: 2010-01-07 15:23:08 -0500 (Thu, 07 Jan 2010)
New Revision: 12698

Modified:
   trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
   trunk/qgis/src/providers/postgres/qgspostgresprovider.h
Log:
add postgresql password cache

Modified: trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
===================================================================
--- trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2010-01-07 19:03:14 UTC (rev 12697)
+++ trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2010-01-07 20:23:08 UTC (rev 12698)
@@ -51,6 +51,7 @@
 
 QMap<QString, QgsPostgresProvider::Conn *> QgsPostgresProvider::Conn::connectionsRO;
 QMap<QString, QgsPostgresProvider::Conn *> QgsPostgresProvider::Conn::connectionsRW;
+QMap<QString, QString> QgsPostgresProvider::Conn::passwordCache;
 int QgsPostgresProvider::providerIds = 0;
 
 QgsPostgresProvider::QgsPostgresProvider( QString const & uri )
@@ -310,25 +311,36 @@
   {
     QString password = QString::null;
 
-    while( PQstatus( pd ) != CONNECTION_OK )
+    while ( PQstatus( pd ) != CONNECTION_OK )
     {
       bool ok = true;
-      password = QInputDialog::getText( 0,
-                                        tr( "Enter password" ),
-                                        tr( "Error: %1Enter password for %2")
+
+      if ( passwordCache.contains( conninfo ) )
+      {
+        password = passwordCache.take( conninfo );
+      }
+      else
+      {
+        password = QInputDialog::getText( 0,
+                                          tr( "Enter password" ),
+                                          tr( "Error: %1Enter password for %2" )
                                           .arg( QString::fromUtf8( PQerrorMessage( pd ) ) )
                                           .arg( conninfo ),
-                                        QLineEdit::Password,
-                                        password,
-                                        &ok );
+                                          QLineEdit::Password,
+                                          password,
+                                          &ok );
+      }
 
+      if ( !ok )
+        break;
+
       ::PQfinish( pd );
 
-      if( !ok )
-        break;
-
       pd = PQconnectdb( QString( "%1 password='%2'" ).arg( conninfo ).arg( password ).toLocal8Bit() );
     }
+
+    if ( PQstatus( pd ) == CONNECTION_OK )
+      passwordCache[ conninfo ] = password;
   }
 
   if ( PQstatus( pd ) != CONNECTION_OK )

Modified: trunk/qgis/src/providers/postgres/qgspostgresprovider.h
===================================================================
--- trunk/qgis/src/providers/postgres/qgspostgresprovider.h	2010-01-07 19:03:14 UTC (rev 12697)
+++ trunk/qgis/src/providers/postgres/qgspostgresprovider.h	2010-01-07 20:23:08 UTC (rev 12698)
@@ -660,6 +660,7 @@
 
         static QMap<QString, Conn *> connectionsRW;
         static QMap<QString, Conn *> connectionsRO;
+        static QMap<QString, QString> passwordCache;
     };
 
     class Result



More information about the QGIS-commit mailing list