freetds AT lists.ibiblio.org
Subject: FreeTDS Development Group
List archive
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset
- From: Sebastien FLAESCH <sf AT 4js.com>
- To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
- Subject: Re: [freetds] Unicode: Need for a DSN parameter to define thecharset
- Date: Tue, 15 Jan 2008 16:15:31 +0100
New version of the patch with Frediano's suggestions.
Not quite sure about the strcasecmp() in src/tds/config.c...
Is there any spec about values for ODBC boolean parameters?
= Can one set YES / YeS / No / nO ?
= Are true/false/0/1 allowed?
Seb
Sebastien FLAESCH wrote:
No problem...
I adapt my patch with your suggestion and send a new diff.
Seb
ZIGLIO, Frediano, VF-IT wrote:
Thanks Frediano.Ehmm... no I didn't compile it, consider it as a suggestion....
I think you update has a problem:
The "def" parameter is not removed from myGetPrivateProfileString()...
Does this compile without warnings on your machine???
I also wonder about your diff... looks like inversed?
...
Seb
freddy77
_______________________________________________
FreeTDS mailing list
FreeTDS AT lists.ibiblio.org
http://lists.ibiblio.org/mailman/listinfo/freetds
_______________________________________________
FreeTDS mailing list
FreeTDS AT lists.ibiblio.org
http://lists.ibiblio.org/mailman/listinfo/freetds
Index: include/tds.h
===================================================================
RCS file: /cvsroot/freetds/freetds/include/tds.h,v
retrieving revision 1.284
diff -c -r1.284 tds.h
*** include/tds.h 27 Dec 2007 13:45:22 -0000 1.284
--- include/tds.h 15 Jan 2008 15:11:02 -0000
***************
*** 1387,1392 ****
--- 1387,1393 ----
typedef void (*TDSCONFPARSE) (const char *option, const char *value, void *param);
int tds_read_conf_section(FILE * in, const char *section, TDSCONFPARSE tds_conf_parse, void *parse_param);
int tds_read_conf_file(TDSCONNECTION * connection, const char *server);
+ void tds_parse_conf_section(const char *option, const char *value, void *param);
TDSCONNECTION *tds_read_config_info(TDSSOCKET * tds, TDSLOGIN * login, TDSLOCALE * locale);
void tds_fix_connection(TDSCONNECTION * connection);
void tds_config_verstr(const char *tdsver, TDSCONNECTION * connection);
Index: src/odbc/connectparams.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/odbc/connectparams.c,v
retrieving revision 1.72
diff -c -r1.72 connectparams.c
*** src/odbc/connectparams.c 1 Jul 2007 10:10:52 -0000 1.72
--- src/odbc/connectparams.c 15 Jan 2008 15:11:03 -0000
***************
*** 39,44 ****
--- 39,60 ----
TDS_RCSID(var, "$Id: connectparams.c,v 1.72 2007/07/01 10:10:52 freddy77 Exp $");
+ static const char *odbc_param_Servername = "Servername";
+ static const char *odbc_param_Address = "Address";
+ static const char *odbc_param_Server = "Server";
+ static const char *odbc_param_Port = "Port";
+ static const char *odbc_param_Instance = "Instance";
+ static const char *odbc_param_TDS_Version = "TDS_Version";
+ static const char *odbc_param_Language = "Language";
+ static const char *odbc_param_Database = "Database";
+ static const char *odbc_param_TextSize = "TextSize";
+ static const char *odbc_param_PacketSize = "PacketSize";
+ static const char *odbc_param_ClientCharset = "ClientCharset";
+ static const char *odbc_param_DumpFile = "DumpFile";
+ static const char *odbc_param_DumpFileAppend = "DumpFileAppend";
+ static const char *odbc_param_DebugFlags = "DebugFlags";
+ static const char *odbc_param_Encryption = "Encryption";
+
#if !HAVE_SQLGETPRIVATEPROFILESTRING
/*
***************
*** 114,119 ****
--- 130,142 ----
return 1;
}
+ static int
+ myGetPrivateProfileString(const char *DSN, const char *key, char *buf)
+ {
+ buf[0] = '\0';
+ return SQLGetPrivateProfileString(DSN, key, "", buf, FILENAME_MAX, "odbc.ini");
+ }
+
/**
* Read connection information from given DSN
* @param DSN DSN name
***************
*** 128,135 ****
int address_specified = 0;
/* use old servername */
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "Servername", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
freetds_conf_less = 0;
tds_dstr_copy(&connection->server_name, tmp);
tds_read_conf_file(connection, tmp);
--- 151,157 ----
int address_specified = 0;
/* use old servername */
! if (myGetPrivateProfileString(DSN, odbc_param_Servername, tmp) > 0) {
freetds_conf_less = 0;
tds_dstr_copy(&connection->server_name, tmp);
tds_read_conf_file(connection, tmp);
***************
*** 137,152 ****
/* search for server (compatible with ms one) */
if (freetds_conf_less) {
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "Address", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
address_specified = 1;
/* TODO parse like MS */
tds_lookup_host(tmp, tmp);
tds_dstr_copy(&connection->ip_addr, tmp);
}
!
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "Server", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
tds_dstr_copy(&connection->server_name, tmp);
if (!address_specified) {
if (!parse_server(tmp, connection))
--- 159,171 ----
/* search for server (compatible with ms one) */
if (freetds_conf_less) {
! if (myGetPrivateProfileString(DSN, odbc_param_Address, tmp) > 0) {
address_specified = 1;
/* TODO parse like MS */
tds_lookup_host(tmp, tmp);
tds_dstr_copy(&connection->ip_addr, tmp);
}
! if (myGetPrivateProfileString(DSN, odbc_param_Server, tmp) > 0) {
tds_dstr_copy(&connection->server_name, tmp);
if (!address_specified) {
if (!parse_server(tmp, connection))
***************
*** 155,189 ****
}
}
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "Port", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
connection->port = atoi(tmp);
- }
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "TDS_Version", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
tds_config_verstr(tmp, connection);
- }
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "Language", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
tds_dstr_copy(&connection->language, tmp);
- }
- tmp[0] = '\0';
if (tds_dstr_isempty(&connection->database)
! && SQLGetPrivateProfileString(DSN, "Database", "", tmp, FILENAME_MAX, "odbc.ini") > 0)
tds_dstr_copy(&connection->database, tmp);
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "TextSize", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
! connection->text_size = atoi(tmp);
! }
! tmp[0] = '\0';
! if (SQLGetPrivateProfileString(DSN, "PacketSize", "", tmp, FILENAME_MAX, "odbc.ini") > 0) {
! connection->block_size = atoi(tmp);
! }
return 1;
}
--- 174,215 ----
}
}
! if (myGetPrivateProfileString(DSN, odbc_param_Port, tmp) > 0)
connection->port = atoi(tmp);
! if (myGetPrivateProfileString(DSN, odbc_param_Instance, tmp) > 0)
! tds_dstr_copy(&connection->instance_name, tmp);
!
! if (myGetPrivateProfileString(DSN, odbc_param_TDS_Version, tmp) > 0)
tds_config_verstr(tmp, connection);
! if (myGetPrivateProfileString(DSN, odbc_param_Language, tmp) > 0)
tds_dstr_copy(&connection->language, tmp);
if (tds_dstr_isempty(&connection->database)
! && myGetPrivateProfileString(DSN, odbc_param_Database, tmp) > 0)
tds_dstr_copy(&connection->database, tmp);
! if (myGetPrivateProfileString(DSN, odbc_param_TextSize, tmp) > 0)
! tds_parse_conf_section(TDS_STR_TEXTSZ, tmp, connection);
! if (myGetPrivateProfileString(DSN, odbc_param_PacketSize, tmp) > 0)
! tds_parse_conf_section(TDS_STR_BLKSZ, tmp, connection);
!
! if (myGetPrivateProfileString(DSN, odbc_param_ClientCharset, tmp) > 0)
! tds_parse_conf_section(TDS_STR_CLCHARSET, tmp, connection);
!
! if (myGetPrivateProfileString(DSN, odbc_param_DumpFile, tmp) > 0)
! tds_parse_conf_section(TDS_STR_DUMPFILE, tmp, connection);
!
! if (myGetPrivateProfileString(DSN, odbc_param_DumpFileAppend, tmp) > 0)
! tds_parse_conf_section(TDS_STR_APPENDMODE, tmp, connection);
!
! if (myGetPrivateProfileString(DSN, odbc_param_DebugFlags, tmp) > 0)
! tds_parse_conf_section(TDS_STR_DEBUGFLAGS, tmp, connection);
!
! if (myGetPrivateProfileString(DSN, odbc_param_Encryption, tmp) > 0)
! tds_parse_conf_section(TDS_STR_ENCRYPTION, tmp, connection);
return 1;
}
***************
*** 279,294 ****
} else if (strcasecmp(option, "WSID") == 0) {
dest_s = &connection->client_host_name;
} else if (strcasecmp(option, "LANGUAGE") == 0) {
! dest_s = &connection->language;
! } else if (strcasecmp(option, "Port") == 0) {
! connection->port = atoi(tds_dstr_cstr(&value));
! } else if (strcasecmp(option, "TDS_Version") == 0) {
! tds_config_verstr(tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, "TextSize") == 0) {
! connection->text_size = atoi(tds_dstr_cstr(&value));
! } else if (strcasecmp(option, "PacketSize") == 0) {
! connection->block_size = atoi(tds_dstr_cstr(&value));
! /* TODO "Address" field */
}
/* copy to destination */
--- 305,332 ----
} else if (strcasecmp(option, "WSID") == 0) {
dest_s = &connection->client_host_name;
} else if (strcasecmp(option, "LANGUAGE") == 0) {
! tds_parse_conf_section(TDS_STR_LANGUAGE, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_Port) == 0) {
! tds_parse_conf_section(TDS_STR_PORT, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_Instance) == 0) {
! tds_parse_conf_section(TDS_STR_INSTANCE, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_TDS_Version) == 0) {
! tds_parse_conf_section(TDS_STR_VERSION, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_TextSize) == 0) {
! tds_parse_conf_section(TDS_STR_TEXTSZ, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_PacketSize) == 0) {
! tds_parse_conf_section(TDS_STR_BLKSZ, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_ClientCharset) == 0) {
! tds_parse_conf_section(TDS_STR_CLCHARSET, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_DumpFile) == 0) {
! tds_parse_conf_section(TDS_STR_DUMPFILE, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_DumpFileAppend) == 0) {
! tds_parse_conf_section(TDS_STR_APPENDMODE, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_DebugFlags) == 0) {
! tds_parse_conf_section(TDS_STR_DEBUGFLAGS, tds_dstr_cstr(&value), connection);
! } else if (strcasecmp(option, odbc_param_Encryption) == 0) {
! tds_parse_conf_section(TDS_STR_ENCRYPTION, tds_dstr_cstr(&value), connection);
! /* TODO odbc_param_Address field */
}
/* copy to destination */
***************
*** 487,492 ****
--- 525,543 ----
NULL
};
+ static const char *const aEncryption[] = {
+ TDS_STR_ENCRYPTION_OFF,
+ TDS_STR_ENCRYPTION_REQUEST,
+ TDS_STR_ENCRYPTION_REQUIRE,
+ NULL
+ };
+
+ static const char *const aBoolean[] = {
+ "Yes",
+ "No",
+ NULL
+ };
+
/*
static const char *aAuth[] = {
"Server",
***************
*** 496,624 ****
};
*/
! int
! ODBCINSTGetProperties(HODBCINSTPROPERTY hLastProperty)
{
hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
hLastProperty = hLastProperty->pNext;
memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "Servername", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("Name of FreeTDS connection to connect to.\n"
! "This server name refer to entry in freetds.conf file, not real server name.\n"
! "This property cannot be used with Server property.");
!
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "Server", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("Name of server to connect to.\n"
! "This should be the name of real server.\n"
! "This property cannot be used with Servername property.");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "Address", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("The hostname or ip address of the server.");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "Port", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "1433", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("TCP/IP Port to connect to.");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "Database", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("Default database.");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_LISTBOX;
! hLastProperty->aPromptData = malloc(sizeof(aTDSver));
! memcpy(hLastProperty->aPromptData, aTDSver, sizeof(aTDSver));
! tds_strlcpy(hLastProperty->szName, "TDS_Version", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "4.2", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("The TDS protocol version.\n"
! " 4.2 MSSQL 6.5 or Sybase < 10.x\n"
! " 5.0 Sybase >= 10.x\n" " 7.0 MSSQL 7 or MSSQL 2000\n" " 8.0 MSSQL 2000");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_COMBOBOX;
! hLastProperty->aPromptData = malloc(sizeof(aLanguage));
! memcpy(hLastProperty->aPromptData, aLanguage, sizeof(aLanguage));
! tds_strlcpy(hLastProperty->szName, "Language", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "us_english", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("The default language setting.");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_HIDDEN;
! tds_strlcpy(hLastProperty->szName, "TextSize", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("Text datatype limit.");
/* ??? in odbc.ini ??? */
/*
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "UID", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("User ID (Beware of security issues).");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "PWD", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("Password (Beware of security issues).");
*/
/*
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_LISTBOX;
! hLastProperty->aPromptData = malloc(sizeof(aAuth));
! memcpy(hLastProperty->aPromptData, aAuth, sizeof(aAuth));
! tds_strlcpy(hLastProperty->szName, "Authentication", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "Server", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("The server authentication mechanism.");
*/
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "Domain", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("The default domain to use when using Domain Authentication.");
! hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
! hLastProperty = hLastProperty->pNext;
! memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, "PacketSize", INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, "", INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup("Size of network packets.");
return 1;
}
--- 547,678 ----
};
*/
! static HODBCINSTPROPERTY
! addProperty(HODBCINSTPROPERTY hLastProperty)
{
hLastProperty->pNext = (HODBCINSTPROPERTY) malloc(sizeof(ODBCINSTPROPERTY));
hLastProperty = hLastProperty->pNext;
memset(hLastProperty, 0, sizeof(ODBCINSTPROPERTY));
! return hLastProperty;
! }
! static HODBCINSTPROPERTY
! definePropertyString(HODBCINSTPROPERTY hLastProperty, const char *name, const char *value, const char *comment)
! {
! hLastProperty = addProperty(hLastProperty);
hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_TEXTEDIT;
! tds_strlcpy(hLastProperty->szName, name, INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, value, INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup(comment);
! return hLastProperty;
! }
! static HODBCINSTPROPERTY
! definePropertyBoolean(HODBCINSTPROPERTY hLastProperty, const char *name, const char *value, const char *comment)
! {
! hLastProperty = addProperty(hLastProperty);
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_LISTBOX;
! hLastProperty->aPromptData = malloc(sizeof(aBoolean));
! memcpy(hLastProperty->aPromptData, aBoolean, sizeof(aBoolean));
! tds_strlcpy(hLastProperty->szName, name, INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, value, INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup(comment);
! return hLastProperty;
! }
! static HODBCINSTPROPERTY
! definePropertyHidden(HODBCINSTPROPERTY hLastProperty, const char *name, const char *value, const char *comment)
! {
! hLastProperty = addProperty(hLastProperty);
! hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_HIDDEN;
! tds_strlcpy(hLastProperty->szName, name, INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, value, INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup(comment);
! return hLastProperty;
! }
! static HODBCINSTPROPERTY
! definePropertyList(HODBCINSTPROPERTY hLastProperty, const char *name, const char *value, void *list, int size, const char *comment)
! {
! hLastProperty = addProperty(hLastProperty);
hLastProperty->nPromptType = ODBCINST_PROMPTTYPE_LISTBOX;
! hLastProperty->aPromptData = malloc(size);
! memcpy(hLastProperty->aPromptData, list, size);
! tds_strlcpy(hLastProperty->szName, name, INI_MAX_PROPERTY_NAME);
! tds_strlcpy(hLastProperty->szValue, value, INI_MAX_PROPERTY_VALUE);
! hLastProperty->pszHelp = (char *) strdup(comment);
! return hLastProperty;
! }
! int
! ODBCINSTGetProperties(HODBCINSTPROPERTY hLastProperty)
! {
! hLastProperty = definePropertyString(hLastProperty, odbc_param_Servername, "",
! "Name of FreeTDS connection to connect to.\n"
! "This server name refer to entry in freetds.conf file, not real server name.\n"
! "This property cannot be used with Server property.");
!
! hLastProperty = definePropertyString(hLastProperty, odbc_param_Server, "",
! "Name of server to connect to.\n"
! "This should be the name of real server.\n"
! "This property cannot be used with Servername property.");
!
! hLastProperty = definePropertyString(hLastProperty, odbc_param_Address, "",
! "The hostname or ip address of the server.");
!
! hLastProperty = definePropertyString(hLastProperty, odbc_param_Port, "1433",
! "TCP/IP Port to connect to.");
!
! hLastProperty = definePropertyString(hLastProperty, odbc_param_Database, "",
! "Default database.");
!
! hLastProperty = definePropertyList(hLastProperty, odbc_param_TDS_Version, "4.2", (void*) aTDSver, sizeof(aTDSver),
! "The TDS protocol version.\n"
! " 4.2 MSSQL 6.5 or Sybase < 10.x\n"
! " 5.0 Sybase >= 10.x\n"
! " 7.0 MSSQL 7 or MSSQL 2000\n"
! " 8.0 MSSQL 2000");
! hLastProperty = definePropertyList(hLastProperty, odbc_param_Language, "us_english", (void*) aLanguage, sizeof(aLanguage),
! "The default language setting.");
!
! hLastProperty = definePropertyHidden(hLastProperty, odbc_param_TextSize, "",
! "Text datatype limit.");
/* ??? in odbc.ini ??? */
/*
! hLastProperty = definePropertyString(hLastProperty, odbc_param_UID, "",
! "User ID (Beware of security issues).");
! hLastProperty = definePropertyString(hLastProperty, odbc_param_PWD, "",
! "Password (Beware of security issues).");
*/
/*
! hLastProperty = definePropertyList(hLastProperty, odbc_param_Authentication, "Server", aAuth, sizeof(aAuth),
! "The server authentication mechanism.");
!
! hLastProperty = definePropertyString(hLastProperty, odbc_param_Domain, "",
! "The default domain to use when using Domain Authentication.");
*/
! hLastProperty = definePropertyString(hLastProperty, odbc_param_PacketSize, "",
! "Size of network packets.");
! hLastProperty = definePropertyString(hLastProperty, odbc_param_ClientCharset, "",
! "The client character set name to convert application characters to UCS-2 in TDS 7.0 and higher.");
!
! hLastProperty = definePropertyString(hLastProperty, odbc_param_DumpFile, "",
! "Specifies the location of a tds dump file and turns on logging.");
!
! hLastProperty = definePropertyBoolean(hLastProperty, odbc_param_DumpFileAppend, "",
! "Appends dump file instead of overwriting it. Useful for debugging when many processes are active.");
!
! hLastProperty = definePropertyString(hLastProperty, odbc_param_DebugFlags, "",
! "Sets granularity of logging. A set of bit that specify levels and informations. See table below for bit specification.");
!
! hLastProperty = definePropertyList(hLastProperty, odbc_param_Encryption, TDS_STR_ENCRYPTION_OFF, aEncryption, sizeof(aEncryption),
! "The encryption method.");
return 1;
}
Index: src/tds/config.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/tds/config.c,v
retrieving revision 1.132
diff -c -r1.132 config.c
*** src/tds/config.c 23 Dec 2007 21:12:02 -0000 1.132
--- src/tds/config.c 15 Jan 2008 15:11:05 -0000
***************
*** 84,90 ****
static void tds_config_env_tdsport(TDSCONNECTION * connection);
static void tds_config_env_tdshost(TDSCONNECTION * connection);
static int tds_read_conf_sections(FILE * in, const char *server, TDSCONNECTION * connection);
- static void tds_parse_conf_section(const char *option, const char *value, void *param);
static void tds_read_interfaces(const char *server, TDSCONNECTION * connection);
static int tds_config_boolean(const char *value);
static int parse_server_name_for_port(TDSCONNECTION * connection, TDSLOGIN * login);
--- 84,89 ----
***************
*** 352,360 ****
static int
tds_config_boolean(const char *value)
{
! if (!strcmp(value, "yes") || !strcmp(value, "on") || !strcmp(value, "true") || !strcmp(value, "1"))
return 1;
! if (!strcmp(value, "no") || !strcmp(value, "off") || !strcmp(value, "false") || !strcmp(value, "0"))
return 0;
tdsdump_log(TDS_DBG_INFO1, "UNRECOGNIZED boolean value: '%s'. Treating as 'no'.\n", value);
return 0;
--- 351,359 ----
static int
tds_config_boolean(const char *value)
{
! if (!strcasecmp(value, "yes") || !strcmp(value, "on") || !strcmp(value, "true") || !strcmp(value, "1"))
return 1;
! if (!strcasecmp(value, "no") || !strcmp(value, "off") || !strcmp(value, "false") || !strcmp(value, "0"))
return 0;
tdsdump_log(TDS_DBG_INFO1, "UNRECOGNIZED boolean value: '%s'. Treating as 'no'.\n", value);
return 0;
***************
*** 471,477 ****
#undef option
}
! static void
tds_parse_conf_section(const char *option, const char *value, void *param)
{
TDSCONNECTION *connection = (TDSCONNECTION *) param;
--- 470,477 ----
#undef option
}
! /* Also used to scan ODBC.INI entries */
! void
tds_parse_conf_section(const char *option, const char *value, void *param)
{
TDSCONNECTION *connection = (TDSCONNECTION *) param;
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset
, (continued)
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
James K. Lowden, 01/11/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
Sebastien FLAESCH, 01/11/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
James K. Lowden, 01/11/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
Frediano Ziglio, 01/12/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define the charset, Sebastien FLAESCH, 01/12/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
Frediano Ziglio, 01/12/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
James K. Lowden, 01/11/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
Sebastien FLAESCH, 01/11/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
Sebastien FLAESCH, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
ZIGLIO, Frediano, VF-IT, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
Sebastien FLAESCH, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
ZIGLIO, Frediano, VF-IT, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
Sebastien FLAESCH, 01/15/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define thecharset, Sebastien FLAESCH, 01/15/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define thecharset, James K. Lowden, 01/15/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define thecharset, Sebastien FLAESCH, 01/15/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define thecharset, James K. Lowden, 01/16/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define thecharset, Sebastien FLAESCH, 01/16/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define thecharset, ZIGLIO, Frediano, VF-IT, 01/18/2008
- Re: [freetds] Unicode: Need for a DSN parameter to define thecharset, Sebastien FLAESCH, 01/18/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
Sebastien FLAESCH, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
ZIGLIO, Frediano, VF-IT, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
Sebastien FLAESCH, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define thecharset,
ZIGLIO, Frediano, VF-IT, 01/15/2008
-
Re: [freetds] Unicode: Need for a DSN parameter to define the charset,
James K. Lowden, 01/11/2008
Archive powered by MHonArc 2.6.24.