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
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" : "");
}
+ 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));
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
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);
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
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
{
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);
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)
INI_PORT,
ci->port,
ODBC_INI);
+
+ SQLWritePrivateProfileString(DSN,
+ INI_SSLMODE,
+ ci->sslmode,
+ ODBC_INI);
#ifndef USE_LIBPQ
#ifdef HAVE_UNIX_SOCKETS
#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
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 ));
}
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));
}
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];
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
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
#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