• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

修订版6a8f77a632351a53269e3fc43bfba7596fa4e880 (tree)
时间2012-03-13 23:29:42
作者qwerty2501 <qwerty2501@user...>
Commiterqwerty2501

Log Message

IEクッキーが取れなかった場合の最後の手段を追加

更改概述

差异

--- a/backup.bat
+++ b/backup.bat
@@ -1,4 +1,5 @@
11 cmd /c git add *.cpp
2+cmd /c git add *.c
23 cmd /c git add *.
34 cmd /c git add *.h
45 cmd /c git add nlite\nlite.rc
--- a/shareCookie/shareCookie.c
+++ b/shareCookie/shareCookie.c
@@ -12,7 +12,8 @@
1212 #include <qwerty\qwerty_common.h>
1313 #include <qwerty\windebuger.h>
1414
15-
15+static TCHAR ieCookiePath[_MAX_PATH]; //IEのクッキーパス
16+static TCHAR ieCookieSecPath[_MAX_PATH]; //IEセキュリティモードのパス
1617 static WCHAR fireFoxCookiePath[_MAX_PATH]; //ファイアフォックスのクッキーのパス
1718 static sqlite3 *firefoxCookie; //ファイアフォックスのクッキーのDB
1819 static sqlite3_stmt *firefoxCookieStmt; //ファイアフォックスのクッキー取得用ステートメント
@@ -42,6 +43,17 @@ static INLINE VOID cookieStepExec(sqlite3_stmt *stmt,LPWSTR cooki,SIZE_T bufSize
4243 ///
4344 static BROWSERTYPE getDefaultBrowserType();
4445
46+
47+///
48+///ユーザー個別の規定のブラウザタイプを取得
49+///
50+static BROWSERTYPE getDefaultBrowserTypeInvidialUser();
51+
52+///
53+///端末全体の規定のブラウザタイプを取得
54+///
55+static BROWSERTYPE getDefaultBrowserTypeLocalMachine();
56+
4557 ///
4658 ///自力で解析す場合の共通処理
4759 ///
@@ -53,6 +65,15 @@ static INLINE COOKIE_RESULT SelfParseCookie(LPCWSTR cookieFilePath,LPWSTR cookie
5365 static INLINE COOKIE_RESULT GetCookieInternetExplorer(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein,BOOL isIE);
5466
5567 ///
68+///インターネットエクスプローラーのクッキーファイルを自力で解析
69+///
70+static INLINE COOKIE_RESULT GetCookieInternetExplorerSelfParse(LPCWSTR dir,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein);
71+
72+///
73+///自力解析時のコールバック関数
74+///
75+static COOKIE_RESULT selfParseIECallBack(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein);
76+///
5677 ///ファイアフォックスのクッキーを取得
5778 ///
5879 static INLINE COOKIE_RESULT GetCookieFireFox(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein);
@@ -80,6 +101,15 @@ static INLINE COOKIE_RESULT GetCookieSafari(LPCSTR targetString,LPCSTR targetEnd
80101
81102 VOID InitializeShareCookie(LPCWSTR appDataPath,LPCWSTR localAppDataPath){
82103
104+ //IEの設定
105+
106+ //クッキーフォルダ検索
107+ SHGetFolderPathW(0,CSIDL_COOKIES,0,SHGFP_TYPE_CURRENT,ieCookiePath);
108+ _tcscat(ieCookiePath,TEXT("\\"));
109+ _stprintf(ieCookieSecPath,TEXT("%s%s"),ieCookiePath,TEXT("Low\\"));
110+
111+
112+
83113 //FireFoxの設定
84114 {
85115
@@ -422,6 +452,124 @@ end:
422452 return result;
423453 }
424454
455+static INLINE COOKIE_RESULT GetCookieInternetExplorerSelfParse(LPCWSTR dir,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein){
456+
457+
458+ COOKIE_RESULT result = COOKIE_ERR_DETAIL_NOTFOUND;
459+ TCHAR seachFormat[_MAX_PATH];
460+ TCHAR cookieFileBuf[_MAX_PATH];
461+ WIN32_FIND_DATA findData;
462+ HANDLE hFindFile = NULL;
463+ _stprintf(seachFormat,TEXT("%s%s"),dir,TEXT("?*.txt"));
464+
465+ hFindFile = FindFirstFile(seachFormat,&findData);
466+
467+ do{
468+ if(hFindFile == INVALID_HANDLE_VALUE)goto notfind;
469+
470+ if((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FALSE){
471+
472+ _stprintf(cookieFileBuf,TEXT("%s%s"),dir,findData.cFileName);
473+ result = SelfParseCookie(cookieFileBuf,cookie,bufSize,key,domein,selfParseIECallBack);
474+
475+ if(result != COOKIE_ERR_DETAIL_NOTFOUND)goto end;
476+
477+ }
478+
479+
480+
481+ }while(FindNextFile(hFindFile,&findData));
482+
483+end:
484+
485+ FindClose(hFindFile);
486+ return result;
487+
488+notfind:
489+ result = COOKIE_ERR_DETAIL_NOTFOUND;
490+ goto end;
491+}
492+
493+static COOKIE_RESULT selfParseIECallBack(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein){
494+
495+ COOKIE_RESULT result = COOKIE_ERR_UNKNOWN;
496+
497+ CHAR mb_key[_MAX_PATH];
498+ CHAR mb_domein[_MAX_PATH];
499+ CHAR cookie_mbBuff[_MAX_PATH];
500+ DWORD cookieBufSize = 0;
501+ LPCSTR keyStartPointer = NULL;
502+ LPCSTR cookieStartPointer = NULL;
503+ LPCSTR cookieEndPointer = NULL;
504+ LPCSTR astorStartPointer = NULL;
505+ LPCSTR domeinStartPointer = NULL;
506+
507+ if(ARRAY_LENGTH(mb_key) < GetLenToMB(CP_THREAD_ACP,key)){
508+
509+ goto keybuffbigerr;
510+
511+ } else if(ARRAY_LENGTH(mb_domein) < GetLenToMB(CP_THREAD_ACP,domein) ){
512+
513+ goto domeinbuffbigerr;
514+
515+ }
516+
517+
518+ WideToMB(CP_THREAD_ACP,key,mb_key,ARRAY_LENGTH(mb_key));
519+ WideToMB(CP_THREAD_ACP,domein,mb_domein,ARRAY_LENGTH(mb_domein));
520+
521+ keyStartPointer = strstr(targetString,mb_key);
522+
523+ if(keyStartPointer == NULL)goto notfound;
524+ cookieStartPointer = strstr(keyStartPointer,"\n");
525+
526+ if(cookieStartPointer == NULL)goto notfound;
527+
528+ cookieStartPointer++;
529+
530+ cookieEndPointer = strstr(cookieStartPointer,"\n");
531+
532+ astorStartPointer = strstr(cookieEndPointer+1,"*");
533+ domeinStartPointer = strstr(cookieEndPointer+1,mb_domein);
534+ if(astorStartPointer == NULL || domeinStartPointer == NULL || astorStartPointer <= domeinStartPointer)goto notfound;
535+ cookieBufSize = cookieEndPointer - cookieStartPointer;
536+ strncpy(cookie_mbBuff,cookieStartPointer,cookieBufSize);
537+ cookie_mbBuff[cookieBufSize]='\0';
538+ if(((INT_PTR)bufSize) < GetLenToWide(CP_THREAD_ACP,cookie_mbBuff) + wcslen(key) + 1){
539+
540+ goto cookiebuffbigerr;
541+ }
542+ wcscpy(cookie,key);
543+ cookie += wcslen(cookie);
544+ cookie[0] = L'=';
545+ cookie++;
546+
547+ MBToWide(CP_THREAD_ACP,cookie_mbBuff,cookie,bufSize);
548+ result = COOKIE_ERR_OK;
549+
550+end:
551+
552+ return result;
553+
554+keybuffbigerr:
555+ result =COOKIE_ERR_DETAIL_KEY_TOOBIG;
556+ goto end;
557+
558+
559+domeinbuffbigerr:
560+ result = COOKIE_ERR_DETAIL_DOMEIN_TOOBIG;
561+ goto end;
562+
563+
564+notfound:
565+ result = COOKIE_ERR_DETAIL_NOTFOUND;
566+ goto end;
567+
568+cookiebuffbigerr:
569+ result = COOKIE_ERR_DETAIL_DOMEIN_TOOBIG;
570+ goto end;
571+}
572+
425573 ///
426574 ///ファイアフォックスのクッキーを取得
427575 ///
@@ -957,6 +1105,20 @@ fileopenerr:
9571105
9581106 BROWSERTYPE getDefaultBrowserType(){
9591107
1108+ BROWSERTYPE rslt = getDefaultBrowserTypeInvidialUser();
1109+
1110+ if(rslt == BT_NOSETTING){
1111+
1112+ rslt = getDefaultBrowserTypeLocalMachine();
1113+ }
1114+
1115+ return rslt;
1116+
1117+}
1118+
1119+
1120+static BROWSERTYPE getDefaultBrowserTypeInvidialUser(){
1121+
9601122 BROWSERTYPE rslt = BT_NOSETTING;
9611123 WCHAR browserName[_MAX_PATH];
9621124 DWORD cName = sizeof(browserName);
@@ -1004,4 +1166,57 @@ BROWSERTYPE getDefaultBrowserType(){
10041166
10051167 RegCloseKey(hKey);
10061168 return rslt;
1169+
1170+}
1171+
1172+
1173+static BROWSERTYPE getDefaultBrowserTypeLocalMachine(){
1174+
1175+
1176+ BROWSERTYPE rslt = BT_NOSETTING;
1177+
1178+
1179+ return rslt;
1180+
1181+}
1182+
1183+
1184+
1185+
1186+
1187+
1188+
1189+
1190+
1191+
1192+
1193+
1194+
1195+
1196+
1197+
1198+
1199+
1200+
1201+
1202+
1203+
1204+
1205+
1206+
1207+
1208+
1209+VOID ShareCookieUnitTest(){
1210+
1211+ TCHAR cookieBuf[_MAX_PATH];
1212+ SIZE_T cookieBufSize = ARRAY_LENGTH(cookieBuf);
1213+ LPCTSTR key = TEXT("user_session");
1214+ LPCTSTR domein = TEXT("nicovideo.jp");
1215+ check(GetCookieInternetExplorerSelfParse(ieCookiePath,cookieBuf,cookieBufSize,key,domein) == COOKIE_ERR_OK,TEXT("ie通常クッキー取得に失敗しました"));
1216+ dumpln(TEXT("ienormal:%s"),cookieBuf);
1217+
1218+ check(GetCookieInternetExplorerSelfParse(ieCookieSecPath,cookieBuf,cookieBufSize,key,domein) == COOKIE_ERR_OK,TEXT("ieセキュリティモードクッキー取得に失敗しました"));
1219+ dumpln(TEXT("iesec:%s"),cookieBuf);
1220+
1221+ return;
10071222 }
\ No newline at end of file