diff options
Diffstat (limited to 'src/interfaces/odbc/drvconn.c')
-rw-r--r-- | src/interfaces/odbc/drvconn.c | 435 |
1 files changed, 0 insertions, 435 deletions
diff --git a/src/interfaces/odbc/drvconn.c b/src/interfaces/odbc/drvconn.c deleted file mode 100644 index 6c08376ac4b..00000000000 --- a/src/interfaces/odbc/drvconn.c +++ /dev/null @@ -1,435 +0,0 @@ -/*------- - Module: drvconn.c - * - * Description: This module contains only routines related to - * implementing SQLDriverConnect. - * - * Classes: n/a - * - * API functions: SQLDriverConnect - * - * Comments: See "notice.txt" for copyright and license information. - *------- - */ - -#include "psqlodbc.h" - -#include <stdio.h> -#include <stdlib.h> - -#include "connection.h" - -#ifndef WIN32 -#include <sys/types.h> -#include <sys/socket.h> -#define NEAR -#else -#include <winsock.h> -#endif - -#include <string.h> - -#ifdef WIN32 -#include <windowsx.h> -#include "resource.h" -#endif -#include "pgapifunc.h" - -#ifndef TRUE -#define TRUE (BOOL)1 -#endif -#ifndef FALSE -#define FALSE (BOOL)0 -#endif - -#include "dlg_specific.h" - -/* prototypes */ -void dconn_get_connect_attributes(const UCHAR FAR * connect_string, ConnInfo *ci); -static void dconn_get_common_attributes(const 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); - -extern HINSTANCE NEAR s_hModule; /* Saved module handle. */ -#endif - - -RETCODE SQL_API -PGAPI_DriverConnect( - HDBC hdbc, - HWND hwnd, - UCHAR FAR * szConnStrIn, - SWORD cbConnStrIn, - UCHAR FAR * szConnStrOut, - SWORD cbConnStrOutMax, - SWORD FAR * pcbConnStrOut, - UWORD fDriverCompletion) -{ - static char *func = "PGAPI_DriverConnect"; - ConnectionClass *conn = (ConnectionClass *) hdbc; - ConnInfo *ci; - -#ifdef WIN32 - RETCODE dialog_result; -#endif - RETCODE result; - char connStrIn[MAX_CONNECT_STRING]; - char connStrOut[MAX_CONNECT_STRING]; - int retval; - char salt[5]; - char password_required = AUTH_REQ_OK; - int len = 0; - SWORD lenStrout; - - - mylog("%s: entering...\n", func); - - if (!conn) - { - CC_log_error(func, "", NULL); - return SQL_INVALID_HANDLE; - } - - make_string(szConnStrIn, cbConnStrIn, connStrIn); - - mylog("**** PGAPI_DriverConnect: fDriverCompletion=%d, connStrIn='%s'\n", fDriverCompletion, connStrIn); - qlog("conn=%u, PGAPI_DriverConnect( in)='%s', fDriverCompletion=%d\n", conn, connStrIn, fDriverCompletion); - - ci = &(conn->connInfo); - - /* 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!) - */ - getDSNinfo(ci, CONN_DONT_OVERWRITE); - dconn_get_common_attributes(connStrIn, ci); - logs_on_off(1, ci->drivers.debug, ci->drivers.commlog); - - /* Fill in any default parameters if they are not there. */ - getDSNdefaults(ci); - /* initialize pg_version */ - CC_initialize_pg_version(conn); - salt[0] = '\0'; - -#ifdef WIN32 -dialog: -#endif - ci->focus_password = password_required; - - 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_COMPLETE_REQUIRED: - - /* Fall through */ - - 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) - { - dialog_result = dconn_DoDialog(hwnd, ci); - if (dialog_result != SQL_SUCCESS) - return dialog_result; - } - break; -#else - case SQL_DRIVER_PROMPT: - case SQL_DRIVER_COMPLETE: - case SQL_DRIVER_COMPLETE_REQUIRED: -#endif - 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' || - ci->server[0] == '\0' || - ci->database[0] == '\0' || - ci->port[0] == '\0') - { - /* (password_required && ci->password[0] == '\0')) */ - - return SQL_NO_DATA_FOUND; - } - - /* do the actual connect */ - retval = CC_connect(conn, password_required, salt); - 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 */ - } - else - { -#ifdef WIN32 - password_required = -retval; - goto dialog; -#else - return SQL_ERROR; /* until a better solution is found. */ -#endif - } - } - 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 - */ - result = SQL_SUCCESS; - - lenStrout = cbConnStrOutMax; - if (conn->ms_jet && lenStrout > 255) - lenStrout = 255; - makeConnectString(connStrOut, ci, lenStrout); - 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. - */ - strncpy_null(szConnStrOut, connStrOut, cbConnStrOutMax); - - if (len >= cbConnStrOutMax) - { - int clen; - - for (clen = strlen(szConnStrOut) - 1; clen >= 0 && szConnStrOut[clen] != ';'; clen--) - szConnStrOut[clen] = '\0'; - result = SQL_SUCCESS_WITH_INFO; - conn->errornumber = CONN_TRUNCATED; - conn->errormsg = "The buffer was too small for the ConnStrOut."; - } - } - - if (pcbConnStrOut) - *pcbConnStrOut = len; - - mylog("szConnStrOut = '%s' len=%d,%d\n", szConnStrOut, len, cbConnStrOutMax); - qlog("conn=%u, PGAPI_DriverConnect(out)='%s'\n", conn, szConnStrOut); - - - mylog("PGAPI_DriverConnect: returning %d\n", result); - return result; -} - - -#ifdef WIN32 -RETCODE -dconn_DoDialog(HWND hwnd, ConnInfo *ci) -{ - int dialog_result; - - mylog("dconn_DoDialog: ci = %u\n", ci); - - if (hwnd) - { - dialog_result = DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_CONFIG), - hwnd, dconn_FDriverConnectProc, (LPARAM) ci); - if (!dialog_result || (dialog_result == -1)) - return SQL_NO_DATA_FOUND; - else - return SQL_SUCCESS; - } - - return SQL_ERROR; -} - - -BOOL FAR PASCAL -dconn_FDriverConnectProc( - HWND hdlg, - UINT wMsg, - WPARAM wParam, - LPARAM lParam) -{ - ConnInfo *ci; - - switch (wMsg) - { - case WM_INITDIALOG: - ci = (ConnInfo *) lParam; - - /* Change the caption for the setup dialog */ - SetWindowText(hdlg, "PostgreSQL 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); - ShowWindow(GetDlgItem(hdlg, IDC_DRIVER), SW_HIDE); - - SetWindowLong(hdlg, DWL_USER, lParam); /* Save the ConnInfo for - * the "OK" */ - 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)); - break; - - case WM_COMMAND: - switch (GET_WM_COMMAND_ID(wParam, lParam)) - { - case IDOK: - ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER); - - GetDlgStuff(hdlg, ci); - - case IDCANCEL: - EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK); - return TRUE; - - case IDC_DATASOURCE: - ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER); - DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV), - hdlg, ds_options1Proc, (LPARAM) ci); - break; - - case IDC_DRIVER: - ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER); - DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV), - hdlg, driver_optionsProc, (LPARAM) ci); - break; - } - } - - return FALSE; -} -#endif /* WIN32 */ - - -void -dconn_get_connect_attributes(const UCHAR FAR * connect_string, ConnInfo *ci) -{ - char *our_connect_string; - char *pair, - *attribute, - *value, - *equals; - char *strtok_arg; - - CC_conninfo_init(ci); - - our_connect_string = strdup(connect_string); - strtok_arg = our_connect_string; - - mylog("our_connect_string = '%s'\n", our_connect_string); - - while (1) - { - pair = strtok(strtok_arg, ";"); - if (strtok_arg) - strtok_arg = 0; - if (!pair) - break; - - equals = strchr(pair, '='); - if (!equals) - continue; - - *equals = '\0'; - attribute = pair; /* ex. DSN */ - value = equals + 1; /* ex. 'CEO co1' */ - - mylog("attribute = '%s', value = '%s'\n", attribute, value); - - if (!attribute || !value) - continue; - - /* Copy the appropriate value to the conninfo */ - copyAttributes(ci, attribute, value); - - } - - free(our_connect_string); -} - -static void -dconn_get_common_attributes(const UCHAR FAR * connect_string, ConnInfo *ci) -{ - char *our_connect_string; - char *pair, - *attribute, - *value, - *equals; - char *strtok_arg; - - our_connect_string = strdup(connect_string); - strtok_arg = our_connect_string; - - mylog("our_connect_string = '%s'\n", our_connect_string); - - while (1) - { - pair = strtok(strtok_arg, ";"); - if (strtok_arg) - strtok_arg = 0; - if (!pair) - break; - - equals = strchr(pair, '='); - if (!equals) - continue; - - *equals = '\0'; - attribute = pair; /* ex. DSN */ - value = equals + 1; /* ex. 'CEO co1' */ - - mylog("attribute = '%s', value = '%s'\n", attribute, value); - - if (!attribute || !value) - continue; - - /* Copy the appropriate value to the conninfo */ - copyCommonAttributes(ci, attribute, value); - - } - - free(our_connect_string); -} |