1/**************************************************
2 * SQLWriteDSNToIni
3 *
4 **************************************************
5 * This code was created by Peter Harvey @ CodeByDesign.
6 * Released under LGPL 28.JAN.99
7 *
8 * Contributions from...
9 * -----------------------------------------------
10 * Peter Harvey - pharvey@codebydesign.com
11 **************************************************/
12
13#include <config.h>
14#include <odbcinstext.h>
15
16extern void __clear_ini_cache( void );
17
18BOOL SQLWriteDSNToIni( LPCSTR pszDSN,
19 LPCSTR pszDriver )
20{
21 HINI hIni;
22 char szFileName[ODBC_FILENAME_MAX+1];
23
24 SQLRemoveDSNFromIni( pszDSN );
25
26 /* SANITY CHECKS */
27 if ( pszDSN == NULL )
28 {
29 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_GENERAL_ERR, "" );
30 return FALSE;
31 }
32 if ( pszDSN[0] == '\0' )
33 {
34 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_GENERAL_ERR, "" );
35 return FALSE;
36 }
37 if ( (strcasecmp( pszDSN, "DEFAULT" ) != 0 ) && (pszDriver == NULL ) )
38 {
39 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_INVALID_NAME, "" );
40 return FALSE;
41 }
42 if ( (strcasecmp( pszDSN, "DEFAULT" ) != 0 ) && (pszDriver[0] == '\0') )
43 {
44 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_INVALID_NAME, "" );
45 return FALSE;
46 }
47 if ( SQLValidDSN( pszDSN ) == FALSE )
48 {
49 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_INVALID_DSN, "" );
50 return FALSE;
51 }
52
53 /* OK */
54 if ( _odbcinst_ConfigModeINI( szFileName ) == FALSE )
55 {
56 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_REQUEST_FAILED, "" );
57 return FALSE;
58 }
59#ifdef __OS2__
60 if ( iniOpen( &hIni, szFileName, "#;", '[', ']', '=', TRUE, 1L ) != INI_SUCCESS )
61#else
62 if ( iniOpen( &hIni, szFileName, "#;", '[', ']', '=', TRUE ) != INI_SUCCESS )
63#endif
64 {
65 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_REQUEST_FAILED, "" );
66 return FALSE;
67 }
68 iniObjectInsert( hIni, (char *)pszDSN );
69 if ( pszDriver != NULL )
70 {
71 iniPropertyInsert( hIni, "Driver", (char *)pszDriver );
72 }
73 if ( iniCommit( hIni ) != INI_SUCCESS )
74 {
75 iniClose( hIni );
76 inst_logPushMsg( __FILE__, __FILE__, __LINE__, LOG_CRITICAL, ODBC_ERROR_REQUEST_FAILED, "" );
77 return FALSE;
78 }
79
80 iniClose( hIni );
81
82 __clear_ini_cache();
83
84 return TRUE;
85}
86
87BOOL INSTAPI SQLWriteDSNToIniW (LPCWSTR lpszDSN,
88 LPCWSTR lpszDriver)
89{
90 char *drv, *dsn;
91 BOOL ret;
92
93 dsn = _single_string_alloc_and_copy( lpszDSN );
94 drv = _single_string_alloc_and_copy( lpszDriver );
95
96 ret = SQLWriteDSNToIni( dsn, drv );
97
98 free( dsn );
99 free( drv );
100
101 return ret;
102}
103