1 | /************************************************** |
2 | * |
3 | ************************************************** |
4 | * This code was created by Peter Harvey @ CodeByDesign. |
5 | * Released under LGPL 28.JAN.99 |
6 | * |
7 | * Contributions from... |
8 | * ----------------------------------------------- |
9 | * Peter Harvey - pharvey@codebydesign.com |
10 | **************************************************/ |
11 | #include <config.h> |
12 | #ifdef HAVE_PWD_H |
13 | #include <pwd.h> |
14 | #endif |
15 | |
16 | #include <odbcinstext.h> |
17 | |
18 | #ifdef VMS |
19 | |
20 | BOOL _odbcinst_UserINI( char *pszFileName, BOOL bVerify ) |
21 | { |
22 | FILE *hFile; |
23 | char *szEnv_INIUSER = getvmsenv("ODBCINI" ); |
24 | struct passwd *pPasswd = NULL; |
25 | char *pHomeDir = NULL; |
26 | |
27 | pszFileName[0] = '\0'; |
28 | |
29 | if ( szEnv_INIUSER ) |
30 | { |
31 | strncpy( pszFileName, szEnv_INIUSER, ODBC_FILENAME_MAX ); |
32 | } |
33 | else |
34 | { |
35 | sprintf( pszFileName, "SYS$LOGIN:ODBC.INI" ); |
36 | } |
37 | |
38 | if ( bVerify ) |
39 | { |
40 | hFile = uo_fopen( pszFileName, "r" ); |
41 | if ( hFile ) |
42 | uo_fclose( hFile ); |
43 | else |
44 | return FALSE; |
45 | } |
46 | |
47 | return TRUE; |
48 | } |
49 | |
50 | #else |
51 | |
52 | BOOL _odbcinst_UserINI( char *pszFileName, BOOL bVerify ) |
53 | { |
54 | FILE *hFile; |
55 | char *szEnv_INIUSER = getenv("ODBCINI" ); |
56 | #ifdef HAVE_GETUID |
57 | uid_t nUserID = getuid(); |
58 | #else |
59 | uid_t nUserID = 0; |
60 | #endif |
61 | struct passwd *pPasswd = NULL; |
62 | char *pHomeDir = NULL; |
63 | |
64 | pHomeDir = "/home" ; |
65 | #ifdef HAVE_GETPWUID |
66 | pPasswd = (struct passwd *)getpwuid(nUserID); |
67 | #endif |
68 | |
69 | pszFileName[0] = '\0'; |
70 | |
71 | #ifdef HAVE_PWD_H |
72 | if ( pPasswd != NULL ) |
73 | if ( ( char *)pPasswd->pw_dir != NULL ) |
74 | pHomeDir = pPasswd->pw_dir; |
75 | #else |
76 | pHomeDir = getenv("HOME" ); |
77 | #endif |
78 | |
79 | if ( szEnv_INIUSER ) |
80 | { |
81 | strncpy( pszFileName, szEnv_INIUSER, ODBC_FILENAME_MAX ); |
82 | } |
83 | if ( pszFileName[0] == '\0' ) |
84 | { |
85 | sprintf( pszFileName, "%s%s" , pHomeDir, "/.odbc.ini" ); |
86 | } |
87 | |
88 | #ifdef DHAVE_ENDPWENT |
89 | /* |
90 | * close the password file |
91 | */ |
92 | endpwent(); |
93 | #endif |
94 | |
95 | if ( bVerify ) |
96 | { |
97 | /* |
98 | * create it of it doesn't exist |
99 | */ |
100 | |
101 | hFile = uo_fopen( pszFileName, "a" ); |
102 | if ( hFile ) |
103 | uo_fclose( hFile ); |
104 | else |
105 | return FALSE; |
106 | } |
107 | |
108 | return TRUE; |
109 | } |
110 | |
111 | #endif |
112 | |
113 | BOOL _odbcinst_FileINI( char *pszPath ) |
114 | { |
115 | char b1[ ODBC_FILENAME_MAX + 1 ]; |
116 | |
117 | /* we need a viable buffer (with space for FILENAME_MAX chars)... */ |
118 | if ( !pszPath ) |
119 | return FALSE; |
120 | |
121 | /* system configured to use a special location... */ |
122 | *pszPath = '\0'; |
123 | SQLGetPrivateProfileString( "ODBC" , "FileDSNPath" , "" , pszPath, FILENAME_MAX - 2, "odbcinst.ini" ); |
124 | if ( *pszPath ) |
125 | return TRUE; |
126 | |
127 | /* default location... */ |
128 | sprintf( pszPath, "%s/ODBCDataSources" , odbcinst_system_file_path( b1 )); |
129 | |
130 | return TRUE; |
131 | } |
132 | |
133 | |
134 | |