summaryrefslogtreecommitdiff
path: root/src/interfaces/odbc/drvconn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/odbc/drvconn.c')
-rw-r--r--src/interfaces/odbc/drvconn.c342
1 files changed, 183 insertions, 159 deletions
diff --git a/src/interfaces/odbc/drvconn.c b/src/interfaces/odbc/drvconn.c
index 2cbe6e6a87..1f5560198a 100644
--- a/src/interfaces/odbc/drvconn.c
+++ b/src/interfaces/odbc/drvconn.c
@@ -1,14 +1,14 @@
-/* Module: drvconn.c
+/* Module: drvconn.c
*
- * Description: This module contains only routines related to
- * implementing SQLDriverConnect.
+ * Description: This module contains only routines related to
+ * implementing SQLDriverConnect.
*
- * Classes: n/a
+ * Classes: n/a
*
- * API functions: SQLDriverConnect
+ * API functions: SQLDriverConnect
*
- * Comments: See "notice.txt" for copyright and license information.
+ * Comments: See "notice.txt" for copyright and license information.
*
*/
@@ -53,45 +53,50 @@
#include "dlg_specific.h"
/* prototypes */
-void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci);
+void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci);
#ifdef WIN32
BOOL FAR PASCAL dconn_FDriverConnectProc(HWND hdlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
-RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci);
+RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci);
+
+extern HINSTANCE NEAR s_hModule;/* Saved module handle. */
-extern HINSTANCE NEAR s_hModule; /* Saved module handle. */
#endif
extern GLOBAL_VALUES globals;
-RETCODE SQL_API SQLDriverConnect(
- HDBC hdbc,
- HWND hwnd,
- UCHAR FAR *szConnStrIn,
- SWORD cbConnStrIn,
- UCHAR FAR *szConnStrOut,
- SWORD cbConnStrOutMax,
- SWORD FAR *pcbConnStrOut,
- UWORD fDriverCompletion)
+RETCODE SQL_API
+SQLDriverConnect(
+ HDBC hdbc,
+ HWND hwnd,
+ UCHAR FAR *szConnStrIn,
+ SWORD cbConnStrIn,
+ UCHAR FAR *szConnStrOut,
+ SWORD cbConnStrOutMax,
+ SWORD FAR *pcbConnStrOut,
+ UWORD fDriverCompletion)
{
-static char *func = "SQLDriverConnect";
-ConnectionClass *conn = (ConnectionClass *) hdbc;
-ConnInfo *ci;
+ static char *func = "SQLDriverConnect";
+ ConnectionClass *conn = (ConnectionClass *) hdbc;
+ ConnInfo *ci;
+
#ifdef WIN32
-RETCODE dialog_result;
+ RETCODE dialog_result;
+
#endif
-RETCODE result;
-char connStrIn[MAX_CONNECT_STRING];
-char connStrOut[MAX_CONNECT_STRING];
-int retval;
-char password_required = FALSE;
-int len = 0;
+ RETCODE result;
+ char connStrIn[MAX_CONNECT_STRING];
+ char connStrOut[MAX_CONNECT_STRING];
+ int retval;
+ char password_required = FALSE;
+ int len = 0;
mylog("%s: entering...\n", func);
- if ( ! conn) {
+ if (!conn)
+ {
CC_log_error(func, "", NULL);
return SQL_INVALID_HANDLE;
}
@@ -103,17 +108,17 @@ int len = 0;
ci = &(conn->connInfo);
- /* Parse the connect string and fill in conninfo for this hdbc. */
+ /* Parse the connect string and fill in conninfo for this hdbc. */
dconn_get_connect_attributes(connStrIn, ci);
- /* If the ConnInfo in the hdbc is missing anything, */
- /* this function will fill them in from the registry (assuming */
- /* of course there is a DSN given -- if not, it does nothing!) */
+ /* If the ConnInfo in the hdbc is missing anything, */
+ /* this function will fill them in from the registry (assuming */
+ /* of course there is a DSN given -- if not, it does nothing!) */
getDSNinfo(ci, CONN_DONT_OVERWRITE);
- /* Fill in any default parameters if they are not there. */
+ /* Fill in any default parameters if they are not there. */
getDSNdefaults(ci);
- /* initialize pg_version */
+ /* initialize pg_version */
CC_initialize_pg_version(conn);
#ifdef WIN32
@@ -121,51 +126,54 @@ dialog:
#endif
ci->focus_password = password_required;
- switch(fDriverCompletion) {
+ switch (fDriverCompletion)
+ {
#ifdef WIN32
- case SQL_DRIVER_PROMPT:
- dialog_result = dconn_DoDialog(hwnd, ci);
- if(dialog_result != SQL_SUCCESS) {
- return dialog_result;
- }
- break;
+ case SQL_DRIVER_PROMPT:
+ dialog_result = dconn_DoDialog(hwnd, ci);
+ if (dialog_result != SQL_SUCCESS)
+ return dialog_result;
+ break;
- case SQL_DRIVER_COMPLETE_REQUIRED:
+ case SQL_DRIVER_COMPLETE_REQUIRED:
- /* Fall through */
+ /* Fall through */
- case SQL_DRIVER_COMPLETE:
+ case SQL_DRIVER_COMPLETE:
- /* Password is not a required parameter. */
- if( ci->username[0] == '\0' ||
- ci->server[0] == '\0' ||
- ci->database[0] == '\0' ||
- ci->port[0] == '\0' ||
- password_required) {
+ /* Password is not a required parameter. */
+ if (ci->username[0] == '\0' ||
+ ci->server[0] == '\0' ||
+ ci->database[0] == '\0' ||
+ ci->port[0] == '\0' ||
+ password_required)
+ {
- dialog_result = dconn_DoDialog(hwnd, ci);
- if(dialog_result != SQL_SUCCESS) {
- return dialog_result;
+ dialog_result = dconn_DoDialog(hwnd, ci);
+ if (dialog_result != SQL_SUCCESS)
+ return dialog_result;
}
- }
- break;
+ break;
#else
- case SQL_DRIVER_PROMPT:
- case SQL_DRIVER_COMPLETE:
- case SQL_DRIVER_COMPLETE_REQUIRED:
+ case SQL_DRIVER_PROMPT:
+ case SQL_DRIVER_COMPLETE:
+ case SQL_DRIVER_COMPLETE_REQUIRED:
#endif
- case SQL_DRIVER_NOPROMPT:
- break;
+ case SQL_DRIVER_NOPROMPT:
+ break;
}
- /* Password is not a required parameter unless authentication asks for it.
- For now, I think it's better to just let the application ask over and over until
- a password is entered (the user can always hit Cancel to get out)
- */
- if( ci->username[0] == '\0' ||
+ /*
+ * Password is not a required parameter unless authentication asks for
+ * it. For now, I think it's better to just let the application ask
+ * over and over until a password is entered (the user can always hit
+ * Cancel to get out)
+ */
+ if (ci->username[0] == '\0' ||
ci->server[0] == '\0' ||
- ci->database[0] == '\0' ||
- ci->port[0] == '\0') {
+ ci->database[0] == '\0' ||
+ ci->port[0] == '\0')
+ {
/* (password_required && ci->password[0] == '\0')) */
return SQL_NO_DATA_FOUND;
@@ -174,12 +182,16 @@ dialog:
/* do the actual connect */
retval = CC_connect(conn, password_required);
- if (retval < 0) { /* need a password */
- if (fDriverCompletion == SQL_DRIVER_NOPROMPT) {
+ if (retval < 0)
+ { /* need a password */
+ if (fDriverCompletion == SQL_DRIVER_NOPROMPT)
+ {
CC_log_error(func, "Need password but Driver_NoPrompt", conn);
- return SQL_ERROR; /* need a password but not allowed to prompt so error */
+ return SQL_ERROR; /* need a password but not allowed to
+ * prompt so error */
}
- else {
+ else
+ {
#ifdef WIN32
password_required = TRUE;
goto dialog;
@@ -188,39 +200,44 @@ dialog:
#endif
}
}
- else if (retval == 0) {
- /* error msg filled in above */
+ else if (retval == 0)
+ {
+ /* error msg filled in above */
CC_log_error(func, "Error from CC_Connect", conn);
return SQL_ERROR;
}
/*********************************************/
- /* Create the Output Connection String */
+ /* Create the Output Connection String */
/*********************************************/
result = SQL_SUCCESS;
makeConnectString(connStrOut, ci);
len = strlen(connStrOut);
- if(szConnStrOut) {
-
- /* Return the completed string to the caller. The correct method is to
- only construct the connect string if a dialog was put up, otherwise,
- it should just copy the connection input string to the output.
- However, it seems ok to just always construct an output string. There
- are possible bad side effects on working applications (Access) by
- implementing the correct behavior, anyway.
- */
+ if (szConnStrOut)
+ {
+
+ /*
+ * Return the completed string to the caller. The correct method
+ * is to only construct the connect string if a dialog was put up,
+ * otherwise, it should just copy the connection input string to
+ * the output. However, it seems ok to just always construct an
+ * output string. There are possible bad side effects on working
+ * applications (Access) by implementing the correct behavior,
+ * anyway.
+ */
strncpy_null(szConnStrOut, connStrOut, cbConnStrOutMax);
- if (len >= cbConnStrOutMax) {
+ if (len >= cbConnStrOutMax)
+ {
result = SQL_SUCCESS_WITH_INFO;
conn->errornumber = CONN_TRUNCATED;
conn->errormsg = "The buffer was too small for the result.";
}
}
- if(pcbConnStrOut)
+ if (pcbConnStrOut)
*pcbConnStrOut = len;
mylog("szConnStrOut = '%s'\n", szConnStrOut);
@@ -232,108 +249,117 @@ dialog:
}
#ifdef WIN32
-RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci)
+RETCODE
+dconn_DoDialog(HWND hwnd, ConnInfo *ci)
{
-int dialog_result;
+ int dialog_result;
-mylog("dconn_DoDialog: ci = %u\n", ci);
+ mylog("dconn_DoDialog: ci = %u\n", ci);
- if(hwnd) {
+ if (hwnd)
+ {
dialog_result = DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_CONFIG),
- hwnd, dconn_FDriverConnectProc, (LPARAM) ci);
- if(!dialog_result || (dialog_result == -1)) {
+ hwnd, dconn_FDriverConnectProc, (LPARAM) ci);
+ if (!dialog_result || (dialog_result == -1))
return SQL_NO_DATA_FOUND;
- } else {
+ else
return SQL_SUCCESS;
- }
}
return SQL_ERROR;
}
-BOOL FAR PASCAL dconn_FDriverConnectProc(
- HWND hdlg,
- UINT wMsg,
- WPARAM wParam,
- LPARAM lParam)
+BOOL FAR PASCAL
+dconn_FDriverConnectProc(
+ HWND hdlg,
+ UINT wMsg,
+ WPARAM wParam,
+ LPARAM lParam)
{
-ConnInfo *ci;
+ ConnInfo *ci;
- switch (wMsg) {
- case WM_INITDIALOG:
- ci = (ConnInfo *) lParam;
+ switch (wMsg)
+ {
+ case WM_INITDIALOG:
+ ci = (ConnInfo *) lParam;
- /* Change the caption for the setup dialog */
- SetWindowText(hdlg, "PostgreSQL Connection");
+ /* Change the caption for the setup dialog */
+ SetWindowText(hdlg, "PostgreSQL Connection");
- SetWindowText(GetDlgItem(hdlg, IDC_DATASOURCE), "Connection");
+ SetWindowText(GetDlgItem(hdlg, IDC_DATASOURCE), "Connection");
- /* Hide the DSN and description fields */
- ShowWindow(GetDlgItem(hdlg, IDC_DSNAMETEXT), SW_HIDE);
- ShowWindow(GetDlgItem(hdlg, IDC_DSNAME), SW_HIDE);
- ShowWindow(GetDlgItem(hdlg, IDC_DESCTEXT), SW_HIDE);
- ShowWindow(GetDlgItem(hdlg, IDC_DESC), SW_HIDE);
+ /* Hide the DSN and description fields */
+ ShowWindow(GetDlgItem(hdlg, IDC_DSNAMETEXT), SW_HIDE);
+ ShowWindow(GetDlgItem(hdlg, IDC_DSNAME), SW_HIDE);
+ ShowWindow(GetDlgItem(hdlg, IDC_DESCTEXT), SW_HIDE);
+ ShowWindow(GetDlgItem(hdlg, IDC_DESC), SW_HIDE);
- SetWindowLong(hdlg, DWL_USER, lParam);/* Save the ConnInfo for the "OK" */
+ SetWindowLong(hdlg, DWL_USER, lParam); /* Save the ConnInfo for
+ * the "OK" */
- SetDlgStuff(hdlg, ci);
+ SetDlgStuff(hdlg, ci);
- if (ci->database[0] == '\0')
- ; /* default focus */
- else if (ci->server[0] == '\0')
- SetFocus(GetDlgItem(hdlg, IDC_SERVER));
- else if (ci->port[0] == '\0')
- SetFocus(GetDlgItem(hdlg, IDC_PORT));
- else if (ci->username[0] == '\0')
- SetFocus(GetDlgItem(hdlg, IDC_USER));
- else if (ci->focus_password)
- SetFocus(GetDlgItem(hdlg, IDC_PASSWORD));
+ if (ci->database[0] == '\0')
+ ; /* default focus */
+ else if (ci->server[0] == '\0')
+ SetFocus(GetDlgItem(hdlg, IDC_SERVER));
+ else if (ci->port[0] == '\0')
+ SetFocus(GetDlgItem(hdlg, IDC_PORT));
+ else if (ci->username[0] == '\0')
+ SetFocus(GetDlgItem(hdlg, IDC_USER));
+ else if (ci->focus_password)
+ SetFocus(GetDlgItem(hdlg, IDC_PASSWORD));
- break;
+ break;
- case WM_COMMAND:
- switch (GET_WM_COMMAND_ID(wParam, lParam)) {
- case IDOK:
+ case WM_COMMAND:
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+ case IDOK:
- ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
+ ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
- GetDlgStuff(hdlg, ci);
+ GetDlgStuff(hdlg, ci);
- case IDCANCEL:
- EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
- return TRUE;
+ case IDCANCEL:
+ EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
+ return TRUE;
- case IDC_DRIVER:
+ case IDC_DRIVER:
- DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV),
- hdlg, driver_optionsProc, (LPARAM) NULL);
+ DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV),
+ hdlg, driver_optionsProc, (LPARAM) NULL);
- break;
+ break;
- case IDC_DATASOURCE:
+ case IDC_DATASOURCE:
- ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
- DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DS),
- hdlg, ds_optionsProc, (LPARAM) ci);
+ ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
+ DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DS),
+ hdlg, ds_optionsProc, (LPARAM) ci);
- break;
- }
+ break;
+ }
}
return FALSE;
}
-#endif /* WIN32 */
+#endif /* WIN32 */
-void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci)
+void
+dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci)
{
-char *our_connect_string;
-char *pair, *attribute, *value, *equals;
-char *strtok_arg;
+ char *our_connect_string;
+ char *pair,
+ *attribute,
+ *value,
+ *equals;
+ char *strtok_arg;
memset(ci, 0, sizeof(ConnInfo));
@@ -342,29 +368,28 @@ char *strtok_arg;
mylog("our_connect_string = '%s'\n", our_connect_string);
- while(1) {
+ while (1)
+ {
pair = strtok(strtok_arg, ";");
- if(strtok_arg) {
+ if (strtok_arg)
strtok_arg = 0;
- }
- if(!pair) {
+ if (!pair)
break;
- }
equals = strchr(pair, '=');
- if ( ! equals)
+ if (!equals)
continue;
*equals = '\0';
- attribute = pair; /* ex. DSN */
- value = equals + 1; /* ex. 'CEO co1' */
+ attribute = pair; /* ex. DSN */
+ value = equals + 1; /* ex. 'CEO co1' */
mylog("attribute = '%s', value = '%s'\n", attribute, value);
- if( !attribute || !value)
- continue;
+ if (!attribute || !value)
+ continue;
- /* Copy the appropriate value to the conninfo */
+ /* Copy the appropriate value to the conninfo */
copyAttributes(ci, attribute, value);
}
@@ -372,4 +397,3 @@ char *strtok_arg;
free(our_connect_string);
}
-