OSDN Git Service

ファイル作成関数作成中
[nlite/nlite.git] / shareCookie / shareCookie.c
1
2 #include "shareCookie.h"
3
4
5 #include <shlobj.h>
6 #include <Wininet.h>
7 #include <Iepmapi.h>
8 #include <sqlite3\sqlite3.h>
9 #include <sqlite3\sqliteManager.h>
10
11 #include <qwerty\qwerty_common.h>
12 #include <qwerty\windebuger.h>
13
14
15 static WCHAR fireFoxCookiePath[_MAX_PATH];                      //\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\83N\83b\83L\81[\82Ì\83p\83X
16 static sqlite3 *firefoxCookie;                                          //\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\83N\83b\83L\81[\82ÌDB
17 static sqlite3_stmt *firefoxCookieStmt;                         //\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\83N\83b\83L\81[\8eæ\93¾\97p\83X\83e\81[\83g\83\81\83\93\83g
18 static CRITICAL_SECTION firefoxCs;                                      //\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\83N\83b\83L\81[\8eæ\93¾\97p\83N\83\8a\83e\83B\83J\83\8b\83Z\83N\83V\83\87\83\93
19
20
21 static WCHAR googleChromeCookiePath[_MAX_PATH];         //\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\82Ì\83N\83b\83L\81[\82Ì\83p\83X
22 static sqlite3 *googleChromeCookie;                                     //\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\82Ì\83N\83b\83L\81[\82ÌDB
23 static sqlite3_stmt *googleChromeCookieStmt;            //\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\82Ì\83N\83b\83L\81[\8eæ\93¾\97p\83X\83e\81[\83g\83\81\83\93\83g
24 static CRITICAL_SECTION googleChromeCs;                         //\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\82Ì\83N\83b\83L\81[\8eæ\93¾\97p\83N\83\8a\83e\83B\83J\83\8b\83Z\83N\83V\83\87\83\93
25
26
27
28
29 ///
30 ///\83N\83\8d\81[\83\80\82Æ\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\8b¤\92Ê\8f\88\97\9d
31 ///
32 static INLINE UINT checkDBAndStmt(sqlite3 **db,sqlite3_stmt **stmt,LPCWSTR path,LPCWSTR sql);
33 static INLINE VOID cookieStepExec(sqlite3_stmt *stmt,LPWSTR cooki,SIZE_T bufSize,COOKIE_RESULT *result);
34
35
36 ///
37 ///\83C\83\93\83^\81[\83l\83b\83g\83G\83N\83X\83v\83\8d\81[\83\89\81[\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
38 ///
39 static INLINE COOKIE_RESULT GetCookieInternetExplorer(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein,BOOL isIE);
40
41 ///
42 ///\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
43 ///
44 static INLINE COOKIE_RESULT GetCookieFireFox(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
45
46 ///
47 ///\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
48 ///
49 static INLINE COOKIE_RESULT GetCookieGoogleChrome(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
50
51 ///
52 ///\83I\83y\83\89\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
53 ///
54 static INLINE COOKIE_RESULT GetCookieOpera(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
55
56 ///
57 ///\83T\83t\83@\83\8a\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
58 ///
59 static INLINE COOKIE_RESULT GetCookieSafari(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
60
61 #define FIREFOX_GET_COOKIE_SQL  "SELECT a.name, a.value FROM moz_cookies a WHERE a.name = ?1 AND a.baseDomain = ?2 "                                            //\83t\83@\83C\83A\83t\83H\83b\83N\83X\83N\83b\83L\81[\8eæ\93¾\97pSQL
62
63
64 #define GOOGLECHROME_GET_COOKIE_SQL     "SELECT a.name,a.value FROM cookies a WHERE a.name = ?1 AND (a.host_key = ?2 OR a.host_key = ?3)"       //\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\83N\83b\83L\81[\8eæ\93¾\97pSQL \93ª\82É.\95t\82¢\82Ä\82é\82Ì\82Æ\95t\82¢\82Ä\82È\82¢\82Ì\82ª\82 \82Á\82½\82Ì\82Å\82Æ\82è\82¦\82 \82¦\82¸\97¼\95û\8fE\82¤\82±\82Æ\82É\82µ\82½\81B\8bK\91¥\90«\82ª\82í\82©\82ê\82Î\82à\82¤\8f­\82µ\83X\83}\81[\83g\82É\82¢\82¯\82é
65
66
67 VOID InitializeShareCookie(LPCWSTR appDataPath,LPCWSTR localAppDataPath){
68
69         //FireFox\82Ì\90Ý\92è
70         {
71
72                 WCHAR fireFoxProfilesPath[_MAX_PATH];
73                 WCHAR fireFoxCookieTmp[_MAX_PATH];
74                 LPWSTR fireFoxCookieFileName = L"cookies.sqlite";
75                 
76
77         
78                 LPWSTR index;
79
80
81                 wcscpy(fireFoxProfilesPath,appDataPath);
82                 wcscat(fireFoxProfilesPath,L"Mozilla\\Firefox\\profiles.ini");
83
84                 GetPrivateProfileStringW(L"Profile0",L"Path",L"",fireFoxCookieTmp,sizeof(fireFoxCookieTmp) / sizeof(fireFoxCookieTmp[0]),fireFoxProfilesPath);
85
86                 for(index = wcsstr(fireFoxCookieTmp,L"/");index != NULL ;index = wcsstr(fireFoxCookieTmp,L"/")){
87
88                         index[0] = L'\\';
89
90
91                 }
92
93                 switch(GetPrivateProfileIntW(L"Profile0",L"IsRelative",2,fireFoxProfilesPath)){
94
95                 case 0:
96
97                         wcscpy(fireFoxCookiePath,fireFoxCookieTmp);
98                         break;
99
100                 case 1:
101                         wcscpy(fireFoxCookiePath,appDataPath);
102                         wcscat(fireFoxCookiePath,L"Mozilla\\Firefox\\");
103                         wcscat(fireFoxCookiePath,fireFoxCookieTmp);
104                         wcscat(fireFoxCookiePath,L"\\");
105                         wcscat(fireFoxCookiePath,fireFoxCookieFileName);
106
107                         break;
108
109                 default:
110                         //ZeroMemory(fireFoxCookiePath,sizeof(fireFoxCookiePath) / sizeof(fireFoxCookiePath[0]));
111
112                         break;
113
114
115
116
117                 }
118                 /*
119                 if(SqliteManager_open(&firefoxCookie,fireFoxCookiePath,SQLITE_OPEN_READONLY,0) == SQLITE_OK){
120
121                         rc = SqliteManager_prepare( firefoxCookie, WTEXT(FIREFOX_GET_COOKIE_SQL), -1, &firefoxCookieStmt,(void**)NULL);
122                         dumpln(TEXT("firefox\82Ì\83N\83b\83L\81[\83t\83@\83C\83\8b\82ð\8aJ\82¢\82½"));
123                 }
124                 */
125                 checkDBAndStmt(&firefoxCookie,&firefoxCookieStmt,fireFoxCookiePath,WTEXT(FIREFOX_GET_COOKIE_SQL));
126
127                 InitializeCriticalSection(&firefoxCs);
128         }
129         
130         //GoogleChrome\82Ì\90Ý\92è
131         {
132
133                 wcscpy(googleChromeCookiePath,localAppDataPath);
134                 wcscat(googleChromeCookiePath,L"Google\\Chrome\\User Data\\Default\\Cookies");
135
136
137                 
138                 /*
139                 if(SqliteManager_open(&googleChromeCookie,googleChromeCookiePath,SQLITE_OPEN_READONLY,0) == SQLITE_OK){
140
141
142                         rc = SqliteManager_prepare( googleChromeCookie, WTEXT(GOOGLECHROME_GET_COOKIE_SQL), -1, &googleChromeCookieStmt,(void**)NULL);
143                         dumpln(TEXT("chrome\82Ì\83N\83b\83L\81[\83t\83@\83C\83\8b\82ð\8aJ\82¢\82½"));
144                 }
145                 */
146                 checkDBAndStmt(&googleChromeCookie,&googleChromeCookieStmt,googleChromeCookiePath,WTEXT(GOOGLECHROME_GET_COOKIE_SQL));
147
148                 InitializeCriticalSection(&googleChromeCs);
149
150
151
152
153
154
155
156         }
157
158         return;
159 }
160
161 VOID FinalizeShareCookie(){
162
163
164         DeleteCriticalSection(&firefoxCs);
165         DeleteCriticalSection(&googleChromeCs);
166         sqlite3_finalize(firefoxCookieStmt);
167         sqlite3_finalize(googleChromeCookieStmt);
168         SqliteManager_close(&firefoxCookie);
169         SqliteManager_close(&googleChromeCookie);
170
171
172
173         return;
174 }
175
176
177
178 COOKIE_RESULT GetCookie(BROWSERTYPE browserType,LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
179
180         //\83u\83\89\83E\83U\83^\83C\83v\82É\82æ\82è\8eÀ\8ds\82·\82é\8aÖ\90\94\82ð\8c\88\92è\82·\82é
181
182         switch(browserType){
183
184                 //IE\82Ì\8fê\8d\87
185         case BT_INTERNET_EXPLORER:
186
187
188                 return GetCookieInternetExplorer(cookie,bufSize,key,domein,TRUE);
189
190                 //\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\8fê\8d\87
191         case BT_FIRE_FOX:
192
193                 return  GetCookieFireFox(cookie,bufSize,key,domein);
194
195                 //\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\82Ì\8fê\8d\87
196         case BT_GOOGLE_CHROME:
197
198
199                 return  GetCookieGoogleChrome(cookie,bufSize,key,domein);
200
201                 //\83I\83y\83\89\82Ì\8fê\8d\87
202         case BT_OPERA:
203
204
205                 return  GetCookieOpera(cookie,bufSize,key,domein);
206
207                 //\83T\83t\83@\83\8a\82Ì\8fê\8d\87
208         case BT_SAFARI:
209
210                 return  GetCookieSafari(cookie,bufSize,key,domein);
211
212
213                 //IE\83R\83\93\83|\81[\83l\83\93\83g\82Ì\8fê\8d\87
214         case BT_IE_COMPONENT:
215
216                 return GetCookieInternetExplorer(cookie,bufSize,key,domein,FALSE);
217
218
219                 //\83u\83\89\83E\83U\83^\83C\83v\82ª\90Ý\92è\82³\82ê\82Ä\82¢\82È\82¢\8fê\8d\87
220         case BT_NOSETTING:
221
222                 return  COOKIE_ERR_BROWSERTYPE_NOSETTING;
223
224
225
226
227                 //\96¢\92è\8b`\82Ì\83u\83\89\83E\83U\83^\83C\83v\82ª\8ew\92è\82³\82ê\82½\8fê\8d\87
228         default:
229
230                 return  COOKIE_ERR_UNDEFINED_BROWSERTYPE;
231
232         }
233
234
235
236
237
238 }
239
240 ///
241 ///\83C\83\93\83^\81[\83l\83b\83g\83G\83N\83X\83v\83\8d\81[\83\89\81[\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
242 ///
243 static INLINE COOKIE_RESULT GetCookieInternetExplorer(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein,BOOL isIE){
244
245 #define GET_IE_COOKIE_URL_MAXLENGTH                     LENGTH_512              //url\83o\83b\83t\83@\92·
246         
247         HKEY hKey = (HKEY)NULL;                                                                 //\83\8c\83W\83X\83g\83\8a\83L\81[
248         COOKIE_RESULT result = COOKIE_ERR_OK;                                           //\8c\8b\89Ê\83R\81[\83h
249         DWORD data;                                                                                             //\83\8c\83W\83X\83g\83\8a\92l\8ai\94[\95Ï\90\94
250         DWORD size = sizeof(data);                                                              //data\82Ì\83T\83C\83Y
251         HRESULT cookieResult;                                                                   //\83N\83b\83L\81[\8eæ\93¾\8c\8b\89Ê\83R\81[\83h
252         BOOL  isProtectedMode = FALSE;                                                  //\95Û\8cì\83\82\81[\83h\83t\83\89\83O
253         WCHAR url[GET_IE_COOKIE_URL_MAXLENGTH];                                 //url\83o\83b\83t\83@
254
255         //IE\82©IE\83R\83\93\83|\81[\83l\83\93\83g\82©\82ð\94»\92è
256         if(isIE){
257
258                 //\83\8c\83W\83X\83g\83\8a\83L\81[\82ð\93Ç\82Ý\8eæ\82è\90ê\97p\82Å\83I\81[\83v\83\93
259                 if(RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3"),0,KEY_READ,&hKey) != ERROR_SUCCESS){
260                         return COOKIE_ERR_INTERNETOPTION_NOTOPEN;
261                 }
262
263
264
265
266
267                 //\95Û\8cì\83\82\81[\83h\82Ì\8fó\91Ô\82ð\8eæ\93¾
268                 switch(RegQueryValueEx(hKey,TEXT("2500"),(LPDWORD)NULL,(LPDWORD)NULL,(LPBYTE)&data,&size)){
269
270
271                         //\95Û\8cì\83\82\81[\83h\8eæ\93¾\82É\90¬\8c÷
272                 case ERROR_SUCCESS:
273
274                         //\8eæ\93¾\82µ\82½\92l\82ª0\82¾\82Á\82½\8fê\8d\87\81A\95Û\8cì\83\82\81[\83h\83t\83\89\83O\82ðTRUE\82É\82·\82é
275                         isProtectedMode = data == 0;
276                         
277
278                         break;
279
280                 
281                         //\95Û\8cì\83\82\81[\83h\8eæ\93¾\82É\8e¸\94s\82µ\82½\8fê\8d\87\82Å\82à\83\8c\83W\83X\83g\83\8a\92l\82ª\8c©\82Â\82©\82ç\82È\82¢\83G\83\89\81[\82Å\82 \82ê\82Î\81AXP\88È\91O\82ÌOS\82Æ\94»\92è\82³\82ê\81A\95Û\8cì\83\82\81[\83h\82ÍFALSE\82Ì\82Ü\82Ü\82É\82·\82é
282                 case ERROR_FILE_NOT_FOUND:
283
284
285
286                         break;
287
288                         //\8fã\8bL\83G\83\89\81[\88È\8aO\82Ì\83G\83\89\81[\82ª\94­\90\82µ\82½\8fê\8d\87\81A\83N\83b\83L\81[\8eæ\93¾\82ð\8e¸\94s\82Æ\82·\82é
289                 default:
290                 
291                         result = COOKIE_ERR_PROTECTIONMODE_READFAILD;
292                         goto end;
293
294                 }//switch(RegQueryValueEx(hKey,TEXT("2500"),(LPDWORD)NULL,(LPDWORD)NULL,(LPBYTE)&data,&size))
295         }//if(isIE)
296
297
298
299         
300         
301
302         //\93n\82³\82ê\82½url\82Ì\92·\82³\82ªGET_IE_COOKIE_URL_MAXLENGTH\82æ\82è\82à\92·\82©\82Á\82½\8fê\8d\87\81AURL\95\8e\9a\97ñ\82ª\92·\82·\82¬\82é\83G\83\89\81[\83R\81[\83h\82ðresult\82É\82¢\82ê\82é
303         if(wcslen(domein) >= GET_IE_COOKIE_URL_MAXLENGTH){
304                 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
305
306
307         } else {
308                 //\83h\83\81\83C\83\93\82©\82çurl\82ð\90Ý\92è
309                 wcscpy(url,L"http://");
310                 wcscat(url,domein);
311
312                 //\95Û\8cì\83\82\81[\83h\83t\83\89\83O\82ªTRUE\82È\82çIEGetProtectedModeCookie\82Å\83N\83b\83L\81[\82Ì\92l\82ð\8eæ\93¾
313                 if(isProtectedMode == TRUE){
314                         cookieResult = IEGetProtectedModeCookie(url,key,cookie,&bufSize,0);
315                         
316
317                 //\95Û\8cì\83\82\81[\83h\83t\83\89\83O\82ªFALSE\82È\82çInternetGetCookieEx\82Å\83N\83b\83L\81[\82Ì\92l\82ð\8eæ\93¾
318                 }else{
319                         if(InternetGetCookieEx(url,key,cookie,&bufSize,0,NULL) == TRUE){
320
321                                 cookieResult = S_OK;
322                         }else {
323                                 cookieResult = GetLastError();
324                         }
325                                 
326                         
327                 }
328                         
329                 
330                         
331
332                 //\8c\8b\89Ê\83R\81[\83h\94»\92è
333                 if(cookieResult == ERROR_SUCCESS){
334
335
336                         //\8eæ\93¾\82µ\82½\83N\83b\83L\81[\82Ì\83T\83C\83Y\82ª0\82æ\82è\91å\82«\82¯\82ê\82Î\81Aresults\82É\90³\8fí\8fI\97¹\82Ì\92l\82ð\90Ý\92è
337                         if(bufSize > 0){
338
339                                 result = COOKIE_ERR_OK;
340
341                         //\8eæ\93¾\82µ\82½\83N\83b\83L\81[\82Ì\83T\83C\83Y\82ª0\82Ì\8fê\8d\87\81AnotFoundError\82ð\90Ý\92è
342                         } else {
343                                 result = COOKIE_ERR_DETAIL_NOTFOUND;
344
345                         }//if(bufSize > 0)
346
347                 //\8c\8b\89Ê\83R\81[\83h\82ª\90³\8fí\8fI\97¹\82Å\82Í\82È\82¢\8fê\8d\87results\82É\83G\83\89\81[\82Ì\8fÚ\8d×\82ð\90Ý\92è
348                 } else {
349         
350
351                         switch(cookieResult){
352                                 //\83o\83b\83t\83@\92·\82ª\91«\82è\82È\82¢\8fê\8d\87\82Ì\83G\83\89\81[winerror.h\82É\90Ý\92è\82³\82ê\82Ä\82¢\82È\82©\82Á\82½\82Ì\82Å\82»\82Ì\82Ü\82Ü\82Ì\92l\82Å\94ò\82Ô\82æ\82¤\82É\82µ\82Ä\82 \82é\82Ç\82±\82©\82É\92è\8b`\82³\82ê\82Ä\82¢\82é\82©\82à\82µ\82ê\82È\82¢\82Ì\82Å\8c©\82Â\82¯\82½\82ç\92è\8b`\83}\83N\83\8d\82É\92u\82«\8a·\82¦\82é
353                         case 0x8007007a:
354
355                                 result = COOKIEERR_DETAIL_RESULT_TOOBIG;
356
357                                 break;
358
359                                 //\96¢\92è\8b`\82Ì\83G\83\89\81[\82ª\94­\90\82µ\82½\8fê\8d\87
360
361
362                         case INTERNET_COOKIE_HTTPONLY:
363                         default:
364
365                                 wincheck(cookieResult);
366
367                                 result = COOKIE_ERR_UNKNOWN;
368
369                                 break;
370
371                         }//switch(cookieResult)
372                 }//if(cookieResult == ERROR_SUCCESS)
373         }//if(wcslen(domeins[index]) >= GET_IE_COOKIE_URL_MAXLENGTH)
374
375
376
377
378 end:
379         //\8aJ\82¢\82½\83\8c\83W\83X\83g\83\8a\82ð\95Â\82\82é
380         RegCloseKey(hKey);
381
382         return result;
383 }
384
385 ///
386 ///\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
387 ///
388 static INLINE COOKIE_RESULT GetCookieFireFox(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
389
390         COOKIE_RESULT result = COOKIE_ERR_OK;                                           //\8c\8b\89Ê\83R\81[\83h
391         LPCWSTR pName = (LPCWSTR)NULL;                                          //\96¼\91O\82Ì\92l\82ð\8am\95Û\82·\82é\88ê\8e\9e\93I\82È\83|\83C\83\93\83^
392         LPCWSTR pValue = (LPCWSTR)NULL;                                         //value\82Ì\92l\82ð\8am\95Û\82·\82é\88ê\8e\9e\93I\82È\83|\83C\83\93\83^
393         
394         
395
396         
397
398         //db,\83X\83e\81[\83g\83\81\83\93\83g\82ª\8aJ\82©\82ê\82Ä\82¢\82é\82©\83`\83F\83b\83N
399         switch(checkDBAndStmt(&firefoxCookie,&firefoxCookieStmt,fireFoxCookiePath, WTEXT(FIREFOX_GET_COOKIE_SQL))){
400
401         case 0:
402                 break;
403
404         case 1:
405                 result = COOKIE_ERR_DBOPEN_FAILED;
406                 goto end;
407
408         case 2:
409                 result = COOKIE_ERR_CREATESTMT_FAILED;
410                 goto end;
411
412
413         }
414
415         EnterCriticalSection(&firefoxCs);
416
417         
418
419         switch(sqlite3_bind_text16(firefoxCookieStmt,1,key,-1,SQLITE_STATIC)){
420
421         case SQLITE_OK:
422
423
424                 switch(sqlite3_bind_text16(firefoxCookieStmt,2,domein,-1,SQLITE_STATIC)){
425
426                 case SQLITE_OK:
427
428                         cookieStepExec(firefoxCookieStmt,cookie,bufSize, &result);
429
430                         
431
432
433                         break;
434
435                 case SQLITE_TOOBIG:
436
437                         result = COOKIE_ERR_DETAIL_URL_TOOBIG;
438
439
440                         break;
441
442                 default:
443
444                         result = COOKIE_ERR_UNKNOWN;
445
446
447                         break;
448
449                 }//switch(sqlite3_bind_text16(firefoxCookieStmt,2,domeins[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
450
451
452
453
454                 break;//SQLITE_OK
455
456         case SQLITE_TOOBIG:
457
458                 result = COOKIE_ERR_DETAIL_KEY_TOOBIG;
459
460                 break;
461
462         default:
463
464                 result = COOKIE_ERR_UNKNOWN;
465
466
467                 break;
468
469         }//switch(sqlite3_bind_text16(firefoxCookieStmt,1,key[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
470
471         //\83p\83\89\83\81\83^\82Ì\83\8a\83Z\83b\83g(\83o\83C\83\93\83h\89ð\8f\9c)
472         sqlite3_reset(firefoxCookieStmt);
473
474
475         
476         LeaveCriticalSection(&firefoxCs);
477
478 end:
479
480
481         return result;
482 }
483
484
485
486
487
488
489 ///
490 ///\83O\81[\83O\83\8b\83N\83\8d\81[\83\80\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
491 ///
492 static INLINE COOKIE_RESULT GetCookieGoogleChrome(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
493
494
495
496         COOKIE_RESULT result = COOKIE_ERR_OK;                                   //\8c\8b\89Ê\83R\81[\83h
497         LPCWSTR pName = (LPCWSTR)NULL;                                          //\96¼\91O\82Ì\92l\82ð\8am\95Û\82·\82é\88ê\8e\9e\93I\82È\83|\83C\83\93\83^
498         LPCWSTR pValue = (LPCWSTR)NULL;                                         //value\82Ì\92l\82ð\8am\95Û\82·\82é\88ê\8e\9e\93I\82È\83|\83C\83\93\83^
499         WCHAR host_key2Buf[LENGTH_DOMEIN] = {L"."};                                             //\83h\83\81\83C\83\93\82»\82Ì\82Q\97Ì\88æ
500         LPWSTR pHostKey = &host_key2Buf[1];
501         
502
503
504         
505
506         //db,\83X\83e\81[\83g\83\81\83\93\83g\82ª\8aJ\82©\82ê\82Ä\82¢\82é\82©\83`\83F\83b\83N
507         switch(checkDBAndStmt(&googleChromeCookie,&googleChromeCookieStmt,googleChromeCookiePath, WTEXT(GOOGLECHROME_GET_COOKIE_SQL))){
508
509         case 0:
510                 break;
511
512         case 1:
513                 result = COOKIE_ERR_DBOPEN_FAILED;
514                 goto end;
515
516         case 2:
517                 result = COOKIE_ERR_CREATESTMT_FAILED;
518                 goto end;
519
520
521         }
522
523         EnterCriticalSection(&googleChromeCs);
524
525
526
527
528         //\83X\83e\81[\83g\83\81\83\93\83g\82É\83p\83\89\83\81\83^\82ð\90Ý\92è1
529         switch(sqlite3_bind_text16(googleChromeCookieStmt,1,key,-1,SQLITE_STATIC)){
530
531         case SQLITE_OK:
532
533                 //\83X\83e\81[\83g\83\81\83\93\83g\82É\83p\83\89\83\81\83^\82ð\90Ý\92è2
534                 switch(sqlite3_bind_text16(googleChromeCookieStmt,2,domein,-1,SQLITE_STATIC)){
535
536                 case SQLITE_OK:
537
538                         if(wcslen(domein) > LENGTH_DOMEIN -2){
539
540                                 result = COOKIE_ERR_DETAIL_URL_TOOBIG;
541                                 
542
543                                 break;
544
545                         }
546
547                         wcscpy(pHostKey,domein);                                                //\82±\82Ì\82 \82½\82è\82Í\82à\82¤\8f­\82µ\8cø\97¦\89»\82Å\82«\82é\81H
548
549                         //\83X\83e\81[\83g\83\81\83\93\83g\82É\83p\83\89\83\81\83^\82ð\90Ý\92è3
550                         switch(sqlite3_bind_text16(googleChromeCookieStmt,3,host_key2Buf,-1,SQLITE_STATIC)){
551
552                         case SQLITE_OK:
553
554                 
555                                 //\83N\83b\83L\81[\8eæ\93¾SQL\8eÀ\8ds
556                                 cookieStepExec(googleChromeCookieStmt,cookie,bufSize,&result);
557
558                                 
559
560
561                                 break;
562
563
564                                 case SQLITE_TOOBIG:
565
566                                         result = COOKIE_ERR_DETAIL_URL_TOOBIG;
567
568
569                                         break;
570
571                                 default:
572                                 
573                                         result = COOKIE_ERR_UNKNOWN;
574
575
576                                 break;
577
578                         }//switch(sqlite3_bind_text16(googleChromeCookieStmt,3,domeins[index],-1,SQLITE_STATIC))
579
580
581
582                         break;
583
584                 case SQLITE_TOOBIG:
585
586                         result = COOKIE_ERR_DETAIL_URL_TOOBIG;
587
588
589                         break;
590
591                 default:
592                                 
593                         result = COOKIE_ERR_UNKNOWN;
594
595
596                         break;
597
598                 }//switch(sqlite3_bind_text16(googleChromeCookieStmt,2,domeins[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
599
600
601
602
603                 break;//SQLITE_OK
604
605         case SQLITE_TOOBIG:
606
607                 result = COOKIE_ERR_DETAIL_KEY_TOOBIG;
608
609
610                 break;
611
612         default:
613
614                 result = COOKIE_ERR_UNKNOWN;
615
616
617         }//switch(sqlite3_bind_text16(googleChromeCookieStmt,1,key[index],sizeof(WCHAR) * (wcslen(key[index]) + 1),SQLITE_STATIC))
618
619         //\83p\83\89\83\81\83^\82Ì\83\8a\83Z\83b\83g(\83o\83C\83\93\83h\89ð\8f\9c)
620         sqlite3_reset(googleChromeCookieStmt);
621
622
623         
624         LeaveCriticalSection(&googleChromeCs);
625
626 end:
627
628
629
630         return result;
631 }
632
633 ///
634 ///\83I\83y\83\89\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
635 ///
636 static INLINE COOKIE_RESULT GetCookieOpera(LPWSTR cookies,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
637
638         return COOKIE_ERR_DETAIL_NOTFOUND;
639 }
640
641 ///
642 ///\83T\83t\83@\83\8a\82Ì\83N\83b\83L\81[\82ð\8eæ\93¾
643 ///
644 static INLINE COOKIE_RESULT GetCookieSafari(LPWSTR cookies,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein){
645
646
647         return COOKIE_ERR_DETAIL_NOTFOUND;
648 }
649
650 ///
651 ///\83N\83\8d\81[\83\80\82Æ\83t\83@\83C\83A\83t\83H\83b\83N\83X\82Ì\8b¤\92Ê\8f\88\97\9d
652 ///
653
654 static INLINE UINT checkDBAndStmt(sqlite3 **db,sqlite3_stmt **stmt,LPCWSTR path,LPCWSTR sql){
655
656
657         //DB\83|\83C\83\93\83^\82ªNULL\82Ì\8fê\8d\87\82à\82¤\88ê\93xDB\82ð\83I\81[\83v\83\93\82·\82é\82»\82ê\82Å\82àNULL\82Ì\8fê\8d\87\81A\83G\83\89\81[\82ð\95Ô\82·
658         if(*db == NULL){
659                 SqliteManager_open(db,path,SQLITE_OPEN_READONLY,0);
660                 if(*db == NULL){
661                         return 1;
662
663                 }
664         }
665
666         //\83X\83e\81[\83g\83\81\83\93\83g\82ªNULL\82Ì\8fê\8d\87\82à\82¤\88ê\93x\83X\83e\81[\83g\83\81\83\93\83g\82Ì\8dì\90¬\82ð\8ds\82¤\81A\8e¸\94s\82µ\82½\8fê\8d\87\83G\83\89\81[\82ð\95Ô\82·
667         if(*stmt == NULL){
668                 SqliteManager_prepare( *db,sql, -1, stmt,(void**)NULL);
669                 if(*stmt == NULL){
670                         return 2;
671
672
673                 }
674         }
675
676         return 0;
677
678 }
679
680 static INLINE VOID cookieStepExec(sqlite3_stmt *stmt,LPWSTR cookie,SIZE_T bufSize,COOKIE_RESULT *result){
681
682         LPCWSTR pName;
683         LPCWSTR pValue;
684         INT_PTR rc;
685
686
687         //dumpln_mb(CP_UTF8,"sql%s",sqlite3_sql(stmt));
688
689         do{
690                 //sql\82ª\90¬\8c÷\82µ\82½\8fê\8d\87\81A\8eæ\93¾\82µ\82½value\82ð\8c\8b\89Ê\82É\8eû\82ß\82é
691                 rc =  sqlite3_step( stmt );
692
693         }while(SQLITE_BUSY == rc || SQLITE_LOCKED == rc);
694
695
696         switch(rc){
697
698         case SQLITE_ROW:
699
700
701                 pName = (LPCWSTR)sqlite3_column_text16( stmt, 0 );
702                 pValue   = (LPCWSTR)sqlite3_column_text16( stmt, 1 );
703
704                 //\8eæ\93¾\82µ\82½\95\8e\9a\97ñ\82ª\83o\83b\83t\83@\82Ì\83T\83C\83Y\82æ\82è\91å\82«\82©\82Á\82½\8fê\8d\87\81A\83o\83b\83t\83@\83T\83C\83Y\82ª\8f¬\82³\82¢\83G\83\89\81[\82ð\8ai\94[\82·\82é
705                 if(wcslen(pValue) + wcslen(pName) + 2 >= bufSize){
706
707                         *result = COOKIEERR_DETAIL_RESULT_TOOBIG;
708
709
710                 } else  {
711
712
713                         wcscpy(cookie,pName);
714                         wcscat(cookie,L"=");
715                         wcscat(cookie,pValue);
716
717
718                         
719
720                         
721
722                 }
723                         
724
725
726                 break;
727
728
729         case SQLITE_DONE:
730                 *result = COOKIE_ERR_DETAIL_NOTFOUND;
731
732                 break;
733
734         default:
735                 *result = COOKIE_ERR_UNKNOWN;
736
737                 break;
738
739         }
740
741         return;
742
743
744 }