OSDN Git Service

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