Fix the debugger's connection class to ensure database names requiring quotes will...
authordpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Mon, 10 Dec 2007 11:17:15 +0000 (11:17 +0000)
committerdpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Mon, 10 Dec 2007 11:17:15 +0000 (11:17 +0000)
git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@6878 a7884b65-44f6-0310-8a51-81a127f17b15

CHANGELOG
pgadmin/debugger/dbgPgConn.cpp

index e332f4729c838dcbb50c82e556cb9c57e2d884c2..d662fdb7840b994c9367b644ab7fe88ee5940023 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -36,6 +36,9 @@ Changes
 \r
 Date       Dev Ver    Change details\r
 ---------- --- -----  --------------\r
+2007-12-07 DP  1.8.1  Fix the debugger's connection class to ensure database\r
+                      names requiring quotes will work and that is can be used\r
+                      with SSL and Kerberos connections.\r
 2007-12-07 DP  1.8.1  Allow the length of array-typed columns to be changed\r
                       (eg. 'character varying[](100)'), per report from Ferenc\r
                       Lutischan\r
index 45ca28200666a0c2e61615e58dcd89d456c0c90e..a1dd6e4ea09a79d7b9ea7021810866860f141d2f 100644 (file)
@@ -78,50 +78,118 @@ void dbgPgConn::Init( const wxString &server, const wxString &database, const wx
        m_workerThread->Run();
     }
 
+    // Figure out the hostname/IP address
+    struct hostent *host;\r
+    unsigned long addr;
+    wxString hostip, hostname;
+
+#ifdef __WXMSW__\r
+    struct in_addr ipaddr;\r
+#else\r
+    unsigned long ipaddr;\r
+#endif\r
+    \r
+#ifndef __WXMSW__\r
+    if (!(server.IsEmpty() || server.StartsWith(wxT("/"))))\r
+    {\r
+#endif\r
+        addr = inet_addr(server.ToAscii());\r
+        if (addr == INADDR_NONE) // szServer is not an IP address\r
+        {\r
+            host = gethostbyname(server.ToAscii());\r
+            if (host == NULL)\r
+            {\r
+                wxLogError(__("Could not resolve hostname %s"), server.c_str());\r
+                return;\r
+            }\r
+\r
+               memcpy(&(ipaddr),host->h_addr,host->h_length); \r
+               hostip = wxString::FromAscii(inet_ntoa(*((struct in_addr*) host->h_addr_list[0])));\r
+            hostname = server;\r
+        }\r
+       else\r
+        {\r
+           hostip = server;\r
+            hostname = server;\r
+        }\r
+#ifndef __WXMSW__\r
+    }\r
+    else\r
+        hostname = server;\r
+#endif
+
     // Build up a connection string
     wxString connectParams;
 
-    if( server.Length()) 
+    if(hostname.Length()) 
     {
-       connectParams.Append( wxT( "host=" ));
-       connectParams.Append( server );
+       connectParams.Append(wxT( "host="));
+       connectParams.Append(hostname);
+
+       msg += delimiter + server; delimiter = _(":");
+    }
 
-       msg += delimiter + server; delimiter = _( ":" );
+    if (hostip.Length()) \r
+    {\r
+      connectParams.Append(wxT(" hostaddr="));\r
+      connectParams.Append(hostip);\r
     }
 
     if( port.Length()) 
     {
-       connectParams += wxT( " port=" );
+       connectParams += wxT(" port=");
        connectParams += port;
 
-       msg += delimiter + port; delimiter = _( ":" );
+       msg += delimiter + port; delimiter = _(":");
     }
 
 
     if( database.Length()) 
     {
-       connectParams.Append( wxT( " dbname=" ));
-       connectParams.Append( database );
+       connectParams.Append(wxT(" dbname="));
+       connectParams.Append(qtConnString(database));
 
-       msg += delimiter + database; delimiter = _( ":" );
+       msg += delimiter + database; delimiter = _(":");
     }
 
-    if( username.Length()) 
+    if(username.Length()) 
     {
-       connectParams.Append( wxT( " user=" ));
-       connectParams.Append( username );
+       connectParams.Append(wxT(" user="));
+       connectParams.Append(username );
 
-       msg += delimiter + username; delimiter =  _( ":" );
+       msg += delimiter + username; delimiter =  _(":");
     }
 
-    if( password.Length()) 
+    if(password.Length()) 
     {
-       connectParams.Append( wxT( " password=" ));
-       connectParams.Append( password );
+       connectParams.Append(wxT(" password="));
+       connectParams.Append(password);
+    }
+
+    switch (sslmode)\r
+    {\r
+        case 1: \r
+            connectParams.Append(wxT(" sslmode=require"));   \r
+            break;\r
+\r
+        case 2: \r
+            connectParams.Append(wxT(" sslmode=prefer"));\r
+            break;\r
+\r
+        case 3: \r
+            connectParams.Append(wxT(" sslmode=allow"));\r
+            break;\r
+\r
+        case 4: \r
+            connectParams.Append(wxT(" sslmode=disable"));\r
+            break;\r
+\r
+        default:\r
+            break;\r
     }
 
-    connectParams.Trim( true );
-    connectParams.Trim( false );
+    connectParams.Trim(true);
+    connectParams.Trim(false);
 
     m_frame->getStatusBar()->SetStatusText( wxString::Format(_( "Connecting to %s" ), msg.c_str()), 1 );       
     m_pgConn = PQconnectdb( connectParams.ToAscii());