NCBI C++ ToolKit
connection_string_parse.c
Go to the documentation of this file.

Go to the SVN repository for this file.

1 #include "common.h"
2 #include "freetds/odbc.h"
3 
4 #include <freetds/test_assert.h>
5 
6 
7 #ifdef _WIN32
9 #endif
10 
11 static void
12 assert_equal_dstr(DSTR a, const char *b)
13 {
14  assert(b && strcmp(tds_dstr_cstr(&a), b)==0);
15 }
16 
17 static void
18 assert_equal_str(TDS_PARSED_PARAM param, const char *b)
19 {
20  /* printf("param %.*s b %s\n", (int) param.len, param.p, b); */
21  assert(b && strlen(b) == param.len && strncmp(param.p, b, param.len)==0);
22 }
23 
24 static int
26 {
27  TDSLOGIN *login;
28  TDS_ERRS errs = {0};
30  TDS_PARSED_PARAM parsed_params[ODBC_PARAM_SIZE];
31  const char *connect_string = "DRIVER=libtdsodbc.so;SERVER=127.0.0.1;PORT=1337;UID=test_username;PWD=test_password;DATABASE=test_db;ClientCharset=UTF-8;";
32 
33  const char *connect_string_end = connect_string + strlen(connect_string);
35  if (!tds_set_language(login, "us_english"))
36  return 1;
39 
40  odbc_errs_reset(&errs);
41 
42  if (!odbc_parse_connect_string(&errs, connect_string, connect_string_end, login, parsed_params))
43  return 1;
44 
45  assert_equal_str(parsed_params[ODBC_PARAM_UID], "test_username");
46  assert_equal_dstr(login->server_name, "127.0.0.1");
47  assert_equal_dstr(login->password, "test_password");
48  assert_equal_str(parsed_params[ODBC_PARAM_PWD], "test_password");
49  assert(login->port == 1337);
50 
53 
54  return 0;
55 }
56 
57 static int
59 {
60  TDSLOGIN *login;
61  TDS_ERRS errs = {0};
63  TDS_PARSED_PARAM parsed_params[ODBC_PARAM_SIZE];
64  const char *connect_string = "DRIVER={libtdsodbc.so};SERVER={127.0.0.1};PORT={1337};UID={test_username};PWD={test_password};DATABASE={test_db};ClientCharset={UTF-8};";
65 
66  const char *connect_string_end = connect_string + strlen(connect_string);
68  if (!tds_set_language(login, "us_english"))
69  return 1;
72 
73  odbc_errs_reset(&errs);
74 
75  if (!odbc_parse_connect_string(&errs, connect_string, connect_string_end, login, parsed_params))
76  return 1;
77 
78  assert_equal_str(parsed_params[ODBC_PARAM_UID], "{test_username}");
79  assert_equal_dstr(login->server_name, "127.0.0.1");
80  assert_equal_dstr(login->password, "test_password");
81  assert_equal_str(parsed_params[ODBC_PARAM_PWD], "{test_password}");
82  assert(login->port == 1337);
83 
86 
87  return 0;
88 }
89 
90 static int
92 {
93  TDSLOGIN *login;
94  TDS_ERRS errs = {0};
96  TDS_PARSED_PARAM parsed_params[ODBC_PARAM_SIZE];
97  const char *connect_string = "DRIVER={libtdsodbc.so};SERVER={127.0.0.1};PORT={1337};UID={test_username};PWD={[]{}}(),;?*=!@};DATABASE={test_db};ClientCharset={UTF-8};";
98 
99  const char *connect_string_end = connect_string + strlen(connect_string);
100  login = tds_alloc_login(0);
101  if (!tds_set_language(login, "us_english"))
102  return 1;
105 
106  odbc_errs_reset(&errs);
107 
108  if (!odbc_parse_connect_string(&errs, connect_string, connect_string_end, login, parsed_params))
109  return 1;
110 
111  assert_equal_str(parsed_params[ODBC_PARAM_UID], "{test_username}");
112  assert_equal_dstr(login->server_name, "127.0.0.1");
113  assert_equal_dstr(login->password, "[]{}(),;?*=!@");
114  assert_equal_str(parsed_params[ODBC_PARAM_PWD], "{[]{}}(),;?*=!@}");
115  assert(login->port == 1337);
116 
119 
120  return 0;
121 }
122 
123 static int
125 {
126  TDSLOGIN *login;
127  TDS_ERRS errs = {0};
128  TDSLOCALE *locale;
129  TDS_PARSED_PARAM parsed_params[ODBC_PARAM_SIZE];
130  const char *connect_string = "DRIVER={libtdsodbc.so};SERVER={127.0.0.1};PORT={1337};UID={test_username};PWD={test{}}_password};DATABASE={test_db};ClientCharset={UTF-8};";
131 
132  const char *connect_string_end = connect_string + strlen(connect_string);
133  login = tds_alloc_login(0);
134  if (!tds_set_language(login, "us_english"))
135  return 1;
138 
139  odbc_errs_reset(&errs);
140 
141  if (!odbc_parse_connect_string(&errs, connect_string, connect_string_end, login, parsed_params))
142  return 1;
143 
144  assert_equal_str(parsed_params[ODBC_PARAM_UID], "{test_username}");
145  assert_equal_dstr(login->server_name, "127.0.0.1");
146  assert_equal_dstr(login->password, "test{}_password");
147  assert_equal_str(parsed_params[ODBC_PARAM_PWD], "{test{}}_password}");
148  assert(login->port == 1337);
149 
152 
153  return 0;
154 }
155 
156 static int
158 {
159  TDSLOGIN *login;
160  TDS_ERRS errs = {0};
161  TDSLOCALE *locale;
162  TDS_PARSED_PARAM parsed_params[ODBC_PARAM_SIZE];
163  const char *connect_string = "DRIVER={libtdsodbc.so};SERVER={127.0.0.1};PORT={1337};UID={test_username};PWD={test{}};_password};DATABASE={test_db};ClientCharset={UTF-8};";
164 
165  const char *connect_string_end = connect_string + strlen(connect_string);
166  login = tds_alloc_login(0);
167  if (!tds_set_language(login, "us_english"))
168  return 1;
171 
172  odbc_errs_reset(&errs);
173 
174  if (!odbc_parse_connect_string(&errs, connect_string, connect_string_end, login, parsed_params))
175  return 1;
176 
177  assert_equal_str(parsed_params[ODBC_PARAM_UID], "{test_username}");
178  assert_equal_dstr(login->server_name, "127.0.0.1");
179  assert_equal_dstr(login->password, "test{};_password");
180  assert_equal_str(parsed_params[ODBC_PARAM_PWD], "{test{}};_password}");
181  assert(login->port == 1337);
182 
185 
186  return 0;
187 }
188 
189 
190 int main(int argc, char *argv[])
191 {
192 #ifdef _WIN32
193  hinstFreeTDS = GetModuleHandle(NULL);
194 #endif
195 
196  if (simple_string() != 0)
197  return 1;
198 
199  if (simple_escaped_string() != 0)
200  return 1;
201 
203  return 1;
204 
205  if (test_special_symbols() != 0)
206  return 1;
207 
209  return 1;
210 
211  return 0;
212 }
int main(int argc, char *argv[])
static int simple_escaped_string(void)
static void assert_equal_str(TDS_PARSED_PARAM param, const char *b)
static void assert_equal_dstr(DSTR a, const char *b)
static int simple_string(void)
static int test_special_symbols(void)
static int password_contains_curly_braces(void)
static int password_contains_curly_braces_and_separator(void)
void odbc_errs_reset(struct _sql_errors *errs)
reset errors
Definition: error.c:343
int odbc_parse_connect_string(TDS_ERRS *errs, const char *connect_string, const char *connect_string_end, TDSLOGIN *login, TDS_PARSED_PARAM *parsed_params)
Parses a connection string for SQLDriverConnect().
@ ODBC_PARAM_PWD
Definition: odbc.h:528
@ ODBC_PARAM_SIZE
Definition: odbc.h:529
@ ODBC_PARAM_UID
Definition: odbc.h:528
HINSTANCE hinstFreeTDS
Definition: initnet.c:10
static TDSLOGIN * login
Definition: dataread.c:31
#define tds_free_login
#define tds_init_login
#define tds_alloc_login
#define tds_set_language
#define tds_free_locale
#define NULL
Definition: ncbistd.hpp:225
static const char * tds_dstr_cstr(DSTR *s)
Returns a C version (NUL terminated string) of dstr.
Definition: string.h:66
#define tds_alloc_locale
int strncmp(const char *str1, const char *str2, size_t count)
Definition: odbc_utils.hpp:133
int strcmp(const char *str1, const char *str2)
Definition: odbc_utils.hpp:160
unsigned int a
Definition: ncbi_localip.c:102
static char * locale
Definition: pcregrep.c:149
void * HINSTANCE
Definition: sqltypes.h:116
#define assert(x)
Definition: srv_diag.hpp:58
size_t len
Definition: odbc.h:540
const char * p
Definition: odbc.h:539
Structure to hold a string.
Definition: tds.h:116
Definition: tds.h:584
DSTR password
password of account login
Definition: tds.h:602
DSTR server_name
server name (in freetds.conf)
Definition: tds.h:585
int port
port of database service
Definition: tds.h:586
Modified on Thu May 02 14:33:44 2024 by modify_doxy.py rev. 669887