From 1e64ed34c6e6dfb1412926511375cea3881b6492 Mon Sep 17 00:00:00 2001 From: jef Date: Thu, 2 Apr 2009 21:32:13 +0000 Subject: [PATCH] make SSL mode of PostgreSQL connections configuable git-svn-id: http://svn.osgeo.org/qgis/trunk@10456 c8812cc2-4d05-0410-92ff-de0c093fc19c --- python/core/qgsdatasourceuri.sip | 4 ++- src/app/qgsdbsourceselect.cpp | 9 ++++-- src/app/qgsnewconnection.cpp | 9 +++++- src/core/qgsdatasourceuri.cpp | 33 +++++++++++++++++++--- src/core/qgsdatasourceuri.h | 9 ++++-- src/plugins/spit/qgsspit.cpp | 3 +- src/ui/qgsnewconnectionbase.ui | 48 +++++++++++++++++++------------- 7 files changed, 84 insertions(+), 31 deletions(-) diff --git a/python/core/qgsdatasourceuri.sip b/python/core/qgsdatasourceuri.sip index 36935049c81..94e462c19e2 100644 --- a/python/core/qgsdatasourceuri.sip +++ b/python/core/qgsdatasourceuri.sip @@ -12,6 +12,7 @@ class QgsDataSourceURI %End public: + enum SSLmode { SSLprefer, SSLdisable, SSLallow, SSLrequire }; //! default constructor QgsDataSourceURI(); @@ -33,7 +34,8 @@ public: const QString& aPort, const QString& aDatabase, const QString& aUsername, - const QString& aPassword); + const QString& aPassword, + SSLmode sslmode ); //! Set all data source related members at once void setDataSource(const QString& aSchema, diff --git a/src/app/qgsdbsourceselect.cpp b/src/app/qgsdbsourceselect.cpp index dcbed7c19af..8512ec42da3 100644 --- a/src/app/qgsdbsourceselect.cpp +++ b/src/app/qgsdbsourceselect.cpp @@ -240,6 +240,7 @@ void QgsDbSourceSelect::deleteConnection() settings.remove( key + "/username" ); settings.remove( key + "/password" ); settings.remove( key + "/port" ); + settings.remove( key + "/sslmode" ); settings.remove( key + "/save" ); settings.remove( key ); //if(!success){ @@ -373,7 +374,10 @@ void QgsDbSourceSelect::on_btnConnect_clicked() settings.value( key + "/port" ).toString(), database, settings.value( key + "/username" ).toString(), - password ); + password, + (QgsDataSourceURI::SSLmode) settings.value( key + "/sslmode", QgsDataSourceURI::SSLprefer ).toInt() ); + + bool searchPublicOnly = settings.value( key + "/publicOnly" ).toBool(); bool searchGeometryColumnsOnly = settings.value( key + "/geometryColumnsOnly" ).toBool(); @@ -410,7 +414,8 @@ void QgsDbSourceSelect::on_btnConnect_clicked() settings.value( key + "/port" ).toString(), database, settings.value( key + "/username" ).toString(), - password ); + password, + (QgsDataSourceURI::SSLmode) settings.value( key + "/sslmode", QgsDataSourceURI::SSLprefer ).toInt() ); m_connectionInfo = uri.connectionInfo(); PQfinish( pd ); diff --git a/src/app/qgsnewconnection.cpp b/src/app/qgsnewconnection.cpp index 22e359fb301..f791b4bb76f 100644 --- a/src/app/qgsnewconnection.cpp +++ b/src/app/qgsnewconnection.cpp @@ -61,6 +61,12 @@ QgsNewConnection::QgsNewConnection( QWidget *parent, const QString& connName, Qt // Ensure that cb_plublicSchemaOnly is set correctly on_cb_geometryColumnsOnly_clicked(); + cbxSSLmode->insertItem( QgsDataSourceURI::SSLprefer, tr("prefer") ); + cbxSSLmode->insertItem( QgsDataSourceURI::SSLrequire, tr("require") ); + cbxSSLmode->insertItem( QgsDataSourceURI::SSLallow, tr("allow") ); + cbxSSLmode->insertItem( QgsDataSourceURI::SSLdisable, tr("disable") ); + cbxSSLmode->setCurrentIndex( settings.value( key + "/sslmode", QgsDataSourceURI::SSLprefer ).toInt() ); + if ( settings.value( key + "/save" ).toString() == "true" ) { txtPassword->setText( settings.value( key + "/password" ).toString() ); @@ -108,7 +114,7 @@ QgsNewConnection::~QgsNewConnection() void QgsNewConnection::testConnection() { QgsDataSourceURI uri; - uri.setConnection( txtHost->text(), txtPort->text(), txtDatabase->text(), txtUsername->text(), txtPassword->text() ); + uri.setConnection( txtHost->text(), txtPort->text(), txtDatabase->text(), txtUsername->text(), txtPassword->text(), (QgsDataSourceURI::SSLmode) cbxSSLmode->currentIndex() ); QgsLogger::debug( "PQconnectdb(" + uri.connectionInfo() + ");" ); @@ -142,6 +148,7 @@ void QgsNewConnection::saveConnection() settings.setValue( baseKey + "/publicOnly", cb_publicSchemaOnly->isChecked() ); settings.setValue( baseKey + "/geometryColumnsOnly", cb_geometryColumnsOnly->isChecked() ); settings.setValue( baseKey + "/save", chkStorePassword->isChecked() ? "true" : "false" ); + settings.setValue( baseKey + "/sslmode", cbxSSLmode->currentIndex() ); accept(); } diff --git a/src/core/qgsdatasourceuri.cpp b/src/core/qgsdatasourceuri.cpp index 4a698c302ca..e24b0dccf27 100644 --- a/src/core/qgsdatasourceuri.cpp +++ b/src/core/qgsdatasourceuri.cpp @@ -23,12 +23,12 @@ #include #include -QgsDataSourceURI::QgsDataSourceURI() +QgsDataSourceURI::QgsDataSourceURI() : mSSLmode(SSLprefer) { // do nothing } -QgsDataSourceURI::QgsDataSourceURI( QString uri ) +QgsDataSourceURI::QgsDataSourceURI( QString uri ) : mSSLmode(SSLprefer) { int i = 0; while ( i < uri.length() ) @@ -146,7 +146,21 @@ QgsDataSourceURI::QgsDataSourceURI( QString uri ) } else if ( pname == "sslmode" ) { - QgsDebugMsg( "sslmode ignored" ); + if( pval == "disable" ) + mSSLmode = SSLdisable; + else if( pval == "allow" ) + mSSLmode = SSLallow; + else if( pval == "prefer" ) + mSSLmode = SSLprefer; + else if( pval == "require" ) + mSSLmode = SSLrequire; + } + else if ( pname == "requiressl" ) + { + if( pval == "0" ) + mSSLmode = SSLdisable; + else + mSSLmode = SSLprefer; } else if ( pname == "krbsrvname" ) { @@ -293,6 +307,15 @@ QString QgsDataSourceURI::connectionInfo() const } } + if ( mSSLmode == SSLdisable ) + connectionInfo += " sslmode=disable"; + else if ( mSSLmode == SSLallow ) + connectionInfo += " sslmode=allow"; + else if ( mSSLmode == SSLrequire ) + connectionInfo += " sslmode=require"; + else if ( mSSLmode == SSLprefer ) + connectionInfo += " sslmode=prefer"; + return connectionInfo; } @@ -317,13 +340,15 @@ void QgsDataSourceURI::setConnection( const QString &host, const QString &port, const QString &database, const QString &username, - const QString &password ) + const QString &password, + SSLmode sslmode ) { mHost = host; mDatabase = database; mPort = port; mUsername = username; mPassword = password; + mSSLmode = sslmode; } void QgsDataSourceURI::setDataSource( const QString &schema, diff --git a/src/core/qgsdatasourceuri.h b/src/core/qgsdatasourceuri.h index 8fef562daee..3ebd260a6de 100644 --- a/src/core/qgsdatasourceuri.h +++ b/src/core/qgsdatasourceuri.h @@ -29,8 +29,8 @@ */ class CORE_EXPORT QgsDataSourceURI { - public: + enum SSLmode { SSLprefer, SSLdisable, SSLallow, SSLrequire }; //! default constructor QgsDataSourceURI(); @@ -52,7 +52,8 @@ class CORE_EXPORT QgsDataSourceURI const QString& aPort, const QString& aDatabase, const QString& aUsername, - const QString& aPassword ); + const QString& aPassword, + SSLmode sslmode ); //! Set all data source related members at once void setDataSource( const QString& aSchema, @@ -60,11 +61,13 @@ class CORE_EXPORT QgsDataSourceURI const QString& aGeometryColumn, const QString& aSql = QString() ); + QString username() const; QString schema() const; QString table() const; QString sql() const; QString geometryColumn() const; + enum SSLmode sslMode() const; void clearSchema(); void setSql( QString sql ); @@ -93,6 +96,8 @@ class CORE_EXPORT QgsDataSourceURI QString mUsername; //! password QString mPassword; + //! ssl mode + enum SSLmode mSSLmode; }; #endif //QGSDATASOURCEURI_H diff --git a/src/plugins/spit/qgsspit.cpp b/src/plugins/spit/qgsspit.cpp index 043a27baeb8..d218f645cbd 100644 --- a/src/plugins/spit/qgsspit.cpp +++ b/src/plugins/spit/qgsspit.cpp @@ -413,7 +413,8 @@ void QgsSpit::dbConnect() settings.value( key + "/port" ).toString(), database, settings.value( key + "/username" ).toString(), - password ); + password, + (QgsDataSourceURI::SSLmode) settings.value( key + "/sslmode", QgsDataSourceURI::SSLprefer ).toInt() ); conn = PQconnectdb( uri.connectionInfo().toUtf8() ); } diff --git a/src/ui/qgsnewconnectionbase.ui b/src/ui/qgsnewconnectionbase.ui index 96c95dcf6d5..9938e7d4647 100644 --- a/src/ui/qgsnewconnectionbase.ui +++ b/src/ui/qgsnewconnectionbase.ui @@ -6,13 +6,11 @@ 0 0 509 - 335 + 402 - - 3 - 3 + 0 0 @@ -93,12 +91,12 @@ - - 0 - 6 + + 0 + @@ -117,20 +115,20 @@ - - 0 - 6 + + 0 + - - 0 - 6 + + 0 + @@ -191,16 +189,23 @@ + + + + SSL mode + + + - - 0 - 6 + + 0 + @@ -231,6 +236,9 @@ + + + @@ -240,12 +248,12 @@ - - 0 - 6 + + 0 + @@ -299,7 +307,7 @@ QSizePolicy::Expanding - + 87 150