Add SSL support.
authorDave Page <dpage@pgadmin.org>
Mon, 25 Jul 2005 20:38:31 +0000 (20:38 +0000)
committerDave Page <dpage@pgadmin.org>
Mon, 25 Jul 2005 20:38:31 +0000 (20:38 +0000)
connection.c
connection.h
dlg_specific.c
dlg_specific.h
dlg_wingui.c
libpqconnection.h
psqlodbc.rc
resource.h

index 220409f238dc947ad3b908a4dc7ba9ce68bd0e45..478ace117b8a29255f49dc80d7b9e237f088fa29 100644 (file)
@@ -1248,12 +1248,12 @@ CC_connect(ConnectionClass *self, char password_req, char *salt_para)
            return 0;
        }
 
-       mylog("CC_connect(): DSN = '%s', server = '%s', port = '%s',"
+       mylog("CC_connect(): DSN = '%s', server = '%s', port = '%s', sslmode = '%s'"
 #ifdef HAVE_UNIX_SOCKETS
              " uds = '%s',"
 #endif
              " database = '%s', username = '%s',"
-             " password='%s'\n", ci->dsn, ci->server, ci->port,
+             " password='%s'\n", ci->dsn, ci->server, ci->port, ci->sslmode,
 #ifdef HAVE_UNIX_SOCKETS
              ci->uds,
 #endif
@@ -2639,9 +2639,9 @@ CC_connect(ConnectionClass *self, char password_req, char *salt_para)
            return 0;
        }
 
-       mylog("CC_connect(): DSN = '%s', server = '%s', port = '%s',"
+       mylog("CC_connect(): DSN = '%s', server = '%s', port = '%s', sslmode = '%s',"
              " database = '%s', username = '%s',"
-             " password='%s'\n", ci->dsn, ci->server, ci->port,
+             " password='%s'\n", ci->dsn, ci->server, ci->port, ci->sslmode,
              ci->database, ci->username, ci->password ? "xxxxx" : "");
 
 
@@ -3104,6 +3104,19 @@ LIBPQ_connect(ConnectionClass *self)
    }
 
 
+   if(self->connInfo.sslmode[0] != '\0')
+   {
+       size_t size = (sizeof(char) * (strlen(" sslmode=") + strlen(self->connInfo.sslmode) + 1));
+       conninfo = (char *)realloc(conninfo,size+strlen(conninfo));
+       if(!conninfo)
+       {
+           CC_set_error(self, CONN_MEMORY_ALLOCATION_FAILED,"Could not allocate memory for connection string(sslmode)");
+           mylog("i could not allocate memory for sslmode \n");
+       }
+       conninfo = strcat(conninfo," sslmode=");
+       conninfo = strcat(conninfo,self->connInfo.sslmode);
+   }
+    
    if(self->connInfo.password[0] != '\0')
    {
        size_t size = (sizeof(char) * (strlen(" password=") + strlen(self->connInfo.password) + 1));
index 018e256fd36dcb999a7e01cdc11d6a0d6f807257..63890bff2b6779da84f9f17da4731456bb5079fa 100644 (file)
@@ -245,6 +245,7 @@ typedef struct
    char        conn_settings[LARGE_REGISTRY_LEN];
    char        protocol[SMALL_REGISTRY_LEN];
    char        port[SMALL_REGISTRY_LEN];
+   char        sslmode[MEDIUM_REGISTRY_LEN];
 #ifdef HAVE_UNIX_SOCKETS
    char        uds[LARGE_REGISTRY_LEN];
 #endif
index 359f11cf3d3509584df2d69a6e6075c028328a31..f12381d3cf90808e4e6b304813cf10a61645a9f0 100644 (file)
@@ -46,12 +46,13 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
    BOOL        abbrev = (len < 1024);
 
    /* fundamental info */
-   sprintf(connect_string, "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;PWD=%s",
+   sprintf(connect_string, "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;SSLMODE=%s;UID=%s;PWD=%s",
            got_dsn ? "DSN" : "DRIVER",
            got_dsn ? ci->dsn : ci->drivername,
            ci->database,
            ci->server,
            ci->port,
+            ci->sslmode,
            ci->username,
            ci->password);
 
@@ -285,6 +286,9 @@ copyAttributes(ConnInfo *ci, const char *attribute, const char *value)
 
    else if (stricmp(attribute, INI_PORT) == 0)
        strcpy(ci->port, value);
+    
+   else if (stricmp(attribute, INI_SSLMODE) == 0 || stricmp(attribute, "sslmode") == 0)
+       strcpy(ci->sslmode, value);
 
 #ifndef USE_LIBPQ
 #ifdef HAVE_UNIX_SOCKETS
@@ -335,7 +339,7 @@ copyAttributes(ConnInfo *ci, const char *attribute, const char *value)
    else if (stricmp(attribute, "CX") == 0)
        unfoldCXAttribute(ci, value);
 
-   mylog("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',onlyread='%s',protocol='%s',conn_settings='%s',disallow_premature=%d)\n", ci->dsn, ci->server, ci->database, ci->username, ci->password ? "xxxxx" : "", ci->port, ci->onlyread, ci->protocol, ci->conn_settings, ci->disallow_premature);
+   mylog("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',sslmode='%s',onlyread='%s',protocol='%s',conn_settings='%s',disallow_premature=%d)\n", ci->dsn, ci->server, ci->database, ci->username, ci->password ? "xxxxx" : "", ci->port, ci->sslmode, ci->onlyread, ci->protocol, ci->conn_settings, ci->disallow_premature);
 }
 
 void
@@ -406,6 +410,9 @@ getDSNdefaults(ConnInfo *ci)
 {
    if (ci->port[0] == '\0')
        strcpy(ci->port, DEFAULT_PORT);
+    
+   if (ci->sslmode[0] == '\0')
+       strcpy(ci->sslmode, DEFAULT_SSLMODE);
 
    if (ci->onlyread[0] == '\0')
        sprintf(ci->onlyread, "%d", globals.onlyread);
@@ -499,6 +506,9 @@ getDSNinfo(ConnInfo *ci, char overwrite)
    if (ci->port[0] == '\0' || overwrite)
        SQLGetPrivateProfileString(DSN, INI_PORT, "", ci->port, sizeof(ci->port), ODBC_INI);
 
+   if (ci->sslmode[0] == '\0' || overwrite)
+       SQLGetPrivateProfileString(DSN, INI_SSLMODE, "", ci->sslmode, sizeof(ci->sslmode), ODBC_INI);
+    
 #ifndef USE_LIBPQ
 #ifdef HAVE_UNIX_SOCKETS
    if (ci->uds[0] == '\0' || overwrite)
@@ -738,6 +748,11 @@ writeDSNinfo(const ConnInfo *ci)
                                 INI_PORT,
                                 ci->port,
                                 ODBC_INI);
+                                 
+   SQLWritePrivateProfileString(DSN,
+                                INI_SSLMODE,
+                                ci->sslmode,
+                                ODBC_INI);
 
 #ifndef USE_LIBPQ
 #ifdef HAVE_UNIX_SOCKETS
index 11a0074ba01fe391b5ded5a58d41e3f5e7daa216..9e2a44ba29d05c3b3a0caa366ee9d606573c9d79 100644 (file)
@@ -43,6 +43,7 @@
 #define INI_KDESC          "Description"   /* Data source description */
 #define INI_SERVER         "Servername"    /* Name of Server running PostgreSQL */
 #define INI_PORT           "Port"      /* Port on which the Postmaster is listening */
+#define INI_SSLMODE         "SSLmode"
 
 #if !defined WIN32 && defined HAVE_SYS_UN_H
 #ifndef HAVE_UNIX_SOCKETS
 
 /* Connection Defaults */
 #define DEFAULT_PORT           "5432"
+#define DEFAULT_SSLMODE         "prefer"
 #define DEFAULT_READONLY       0
 #define DEFAULT_PROTOCOL       "6.4"   /* the latest protocol is the default */
 #define DEFAULT_USEDECLAREFETCH        0
index c13decbaeddd841903a13b07e5211628235b684d..63de1884ec12870806b549c1753e5e81d0a4e522 100644 (file)
@@ -60,6 +60,11 @@ SetDlgStuff(HWND hdlg, const ConnInfo *ci)
    SetDlgItemText(hdlg, IDC_USER, ci->username);
    SetDlgItemText(hdlg, IDC_PASSWORD, ci->password);
    SetDlgItemText(hdlg, IDC_PORT, ci->port);
+    SendDlgItemMessage(hdlg, IDC_SSLMODE, CB_ADDSTRING, 0, (LPARAM) ((LPSTR) "prefer" ));
+    SendDlgItemMessage(hdlg, IDC_SSLMODE, CB_ADDSTRING, 0, (LPARAM) ((LPSTR) "allow" ));
+    SendDlgItemMessage(hdlg, IDC_SSLMODE, CB_ADDSTRING, 0, (LPARAM) ((LPSTR) "require" ));
+    SendDlgItemMessage(hdlg, IDC_SSLMODE, CB_ADDSTRING, 0, (LPARAM) ((LPSTR) "disable" ));
+    SendDlgItemMessage(hdlg, IDC_SSLMODE, CB_SELECTSTRING, -1, (LPARAM) ((LPSTR) ci->sslmode ));
 }
 
 
@@ -73,6 +78,7 @@ GetDlgStuff(HWND hdlg, ConnInfo *ci)
    GetDlgItemText(hdlg, IDC_USER, ci->username, sizeof(ci->username));
    GetDlgItemText(hdlg, IDC_PASSWORD, ci->password, sizeof(ci->password));
    GetDlgItemText(hdlg, IDC_PORT, ci->port, sizeof(ci->port));
+    GetDlgItemText(hdlg, IDC_SSLMODE, ci->sslmode, sizeof(ci->sslmode));
 }
 
 
index 8061ea6c23519c9630fb154c4b2b522b8157fb87..55fdae21a36c7aa4b8841ce1aed567647f7014db 100644 (file)
@@ -211,6 +211,7 @@ typedef struct
    char        conn_settings[LARGE_REGISTRY_LEN];
    char        protocol[SMALL_REGISTRY_LEN];
    char        port[SMALL_REGISTRY_LEN];
+   char        sslmode[MEDIUM_REGISTRY_LEN];
    char        onlyread[SMALL_REGISTRY_LEN];
    char        fake_oid_index[SMALL_REGISTRY_LEN];
    char        show_oid_column[SMALL_REGISTRY_LEN];
index b46dd175dd5f4ee277739bae21f91cb370ab09fb..6ccae836932162817fe6276e709dcebebc6cbf7a 100644 (file)
@@ -39,15 +39,18 @@ FONT 9, "
 BEGIN
     RTEXT           "\83f\81|\83^\83\\81|\83X\96¼:(&N)",IDC_DSNAMETEXT,2,9,63,17,NOT 
                     WS_GROUP,WS_EX_TRANSPARENT | WS_EX_RIGHT
-    EDITTEXT        IDC_DSNAME,71,12,188,13,ES_AUTOHSCROLL | WS_GROUP,
+    EDITTEXT        IDC_DSNAME,71,7,188,13,ES_AUTOHSCROLL | WS_GROUP,
                     WS_EX_TRANSPARENT
-    RTEXT           "\90à\96¾:(&D)",IDC_DESCTEXT,5,31,60,16,SS_CENTERIMAGE | NOT 
+    RTEXT           "\90à\96¾:(&D)",IDC_DESCTEXT,5,27,60,16,SS_CENTERIMAGE | NOT 
                     WS_GROUP,WS_EX_TRANSPARENT | WS_EX_RIGHT
-    EDITTEXT        IDC_DESC,71,32,189,13,ES_AUTOHSCROLL,WS_EX_TRANSPARENT
+    EDITTEXT        IDC_DESC,71,28,189,13,ES_AUTOHSCROLL,WS_EX_TRANSPARENT
+    RTEXT           "SS&L Mode",IDC_STATIC,37,50,28,9,NOT WS_GROUP
+    COMBOBOX        IDC_SSLMODE,71,47,65,12,CBS_DROPDOWNLIST | WS_VSCROLL |
+                    WS_TABSTOP
     RTEXT           "\83T\81|\83o\81|\96¼:(&S)",IDC_STATIC,17,68,48,15,NOT WS_GROUP
     EDITTEXT        IDC_SERVER,69,66,203,14,ES_AUTOHSCROLL
     RTEXT           "\83f\81|\83^\83x\81|\83X\96¼:(&b)",IDC_STATIC,5,91,60,15,NOT WS_GROUP
-    EDITTEXT        IDC_DATABASE,69,88,203,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_DATABASE,71,88,203,14,ES_AUTOHSCROLL
     RTEXT           "&Port:",IDC_STATIC,281,101,22,11
     EDITTEXT        IDC_PORT,307,99,37,14,ES_AUTOHSCROLL
     RTEXT           "\83\86\81|\83U\81|\96¼:(&U)",IDC_STATIC,18,139,47,15
@@ -389,6 +392,9 @@ BEGIN
     EDITTEXT        IDC_DESC,192,22,104,12,ES_AUTOHSCROLL
     RTEXT           "Data&base",IDC_STATIC,16,40,38,12,NOT WS_GROUP
     EDITTEXT        IDC_DATABASE,57,39,72,12,ES_AUTOHSCROLL
+    RTEXT           "SS&L Mode",IDC_STATIC,145,40,45,12,NOT WS_GROUP
+    COMBOBOX        IDC_SSLMODE,192,36,104,50,CBS_DROPDOWNLIST | WS_VSCROLL |
+                    WS_TABSTOP
     RTEXT           "&Server",IDC_STATIC,26,55,29,12,NOT WS_GROUP
     EDITTEXT        IDC_SERVER,57,54,72,12,ES_AUTOHSCROLL
     RTEXT           "&Port",IDC_STATIC,168,56,22,12
index 5db9ed8275b06b2638ef45a46fe2c98d803f9154..ed349a7dbba3c4382c0d6b299b2a2495798e672e 100644 (file)
 #define IDC_DRIVERNAME                  1076
 #define IDC_MANAGEDSN                   1077
 #define IDC_DRIVER_LIST                 1078
+#define IDC_SSLMODE                     1079
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        106
+#define _APS_NEXT_RESOURCE_VALUE        109
 #define _APS_NEXT_COMMAND_VALUE         40001
-#define _APS_NEXT_CONTROL_VALUE         1079
+#define _APS_NEXT_CONTROL_VALUE         1082
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif