diff options
-rw-r--r-- | gpg_wrapper.cpp | 14 | ||||
-rw-r--r-- | init.cpp | 12 | ||||
-rw-r--r-- | main.cpp | 38 | ||||
-rw-r--r-- | messages.cpp | 17 | ||||
-rw-r--r-- | new_gpg.rc | 3 | ||||
-rw-r--r-- | new_gpg.sln | 20 | ||||
-rw-r--r-- | new_gpg.vcproj | 6 | ||||
-rw-r--r-- | options.cpp | 67 | ||||
-rw-r--r-- | resource.h | 5 | ||||
-rw-r--r-- | utilities.cpp | 3 |
10 files changed, 121 insertions, 64 deletions
diff --git a/gpg_wrapper.cpp b/gpg_wrapper.cpp index 566031f..8ff6631 100644 --- a/gpg_wrapper.cpp +++ b/gpg_wrapper.cpp @@ -20,6 +20,8 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD aexitcode)
{
+ extern bool bDebugLog;
+ extern fstream debuglog;
BOOL success;
STARTUPINFO sinfo = {0};
SECURITY_ATTRIBUTES sattrs = {0};
@@ -80,6 +82,12 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD mir_free(home_dir);
}
+ if(bDebugLog)
+ { + char* tmp = mir_utf8encodeW(commandline.c_str()); + debuglog<<"in: "<<tmp<<"\n";
+ mir_free(tmp);
+ }
success = CreateProcess(NULL, (TCHAR*)commandline.c_str(), NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &sinfo, &pri);
if (!success)
@@ -109,6 +117,12 @@ pxResult pxExecute(wstring *acommandline, char *ainput, string *aoutput, LPDWORD }
storeOutput(readstdout,aoutput);
+
+ if(bDebugLog)
+ { + debuglog<<"out: "<<aoutput->c_str()<<"\n";
+ }
+
WaitForSingleObject(pri.hProcess,INFINITE);
CloseHandle(pri.hThread);
@@ -17,7 +17,7 @@ #include "commonheaders.h"
//global variables
-bool bAppendTags = false;
+bool bAppendTags = false, bDebugLog = false;
TCHAR *inopentag = NULL, *inclosetag = NULL, *outopentag = NULL, *outclosetag = NULL, *password = NULL;
list <JabberAccount*> Accounts;
@@ -30,6 +30,7 @@ extern char *date(); MM_INTERFACE mmi = {0};
UTF8_INTERFACE utfi = {0};
XML_API xi = {0};
+fstream debuglog;
#define MIID_GPG { 0x4227c050, 0x8d97, 0x48d2, { 0x91, 0xec, 0x6a, 0x95, 0x2b, 0x3d, 0xab, 0x94 } }
@@ -84,6 +85,13 @@ void init_vars() inclosetag = UniGetContactSettingUtf(NULL, szGPGModuleName, "szInCloseTag", _T("</GnuPGdec>"));
outopentag = UniGetContactSettingUtf(NULL, szGPGModuleName, "szOutOpenTag", _T("<GPGenc>"));
outclosetag = UniGetContactSettingUtf(NULL, szGPGModuleName, "szOutCloseTag", _T("</GnuPgenc>"));
+ bDebugLog = DBGetContactSettingByte(NULL, szGPGModuleName, "bDebugLog", 0);
+ if(bDebugLog)
+ {
+ TCHAR *tmp = UniGetContactSettingUtf(NULL, szGPGModuleName, "szLogFilePath", _T("C:\\gpglog.txt"));
+ debuglog.open(tmp, std::ios::app |std::ios::ate |std::ios::binary);
+// mir_free(tmp);
+ }
}
extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
@@ -187,5 +195,7 @@ extern "C" int __declspec(dllexport) Unload(void) mir_free(outclosetag);
if(password)
delete [] password;
+ if(debuglog.is_open())
+ debuglog.close();
return 0;
}
@@ -80,7 +80,7 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM DWORD code;
string::size_type p = 0, p2 = 0, stop = 0;
{
- wstring cmd = _T("--list-secret-keys");
+ wstring cmd = _T("--batch --list-secret-keys");
if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
@@ -151,7 +151,7 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM {
string out;
DWORD code;
- wstring cmd = _T("--export -a ");
+ wstring cmd = _T("--batch --export -a ");
cmd += fp;
if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
@@ -202,6 +202,8 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM }
switch (((LPNMHDR)lParam)->code)
{
+ default:
+ break;
}
}
@@ -279,6 +281,8 @@ static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP {
switch (((LPNMHDR)lParam)->code)
{
+ default:
+ break;
}
}
break;
@@ -339,6 +343,8 @@ static BOOL CALLBACK DlgProcNewKeyDialog(HWND hwndDlg, UINT msg, WPARAM wParam, {
switch (((LPNMHDR)lParam)->code)
{
+ default:
+ break;
}
}
break;
@@ -516,8 +522,12 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, wstring cmd;
cmd += _T("--batch --yes --gen-key \"");
cmd += path;
- cmd += _T("\"");
- pxExecute(&cmd, "", &out, &code);
+ cmd += _T("\""); + if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
+ {
+ MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
+ break;
+ } }
DeleteFile(path.c_str());
DestroyWindow(hwndDlg);
@@ -532,12 +542,12 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, DWORD code;
string::size_type p = 0, p2 = 0, stop = 0;
{
- wstring cmd = _T("--list-secret-keys");
+ wstring cmd = _T("--list-secret-keys"); if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
break;
- }
+ } }
cp866_to_cp1251(&out);
ListView_DeleteAllItems(hwndList_g);
@@ -598,6 +608,8 @@ static BOOL CALLBACK DlgProcKeyGenDialog(HWND hwndDlg, UINT msg, WPARAM wParam, {
switch (((LPNMHDR)lParam)->code)
{
+ default:
+ break;
}
}
break;
@@ -668,12 +680,12 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam, DWORD code;
string::size_type p = 0, p2 = 0, stop = 0;
{
- wstring cmd = _T("--list-keys");
+ wstring cmd = _T("--batch --list-keys"); if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
break;
- }
+ } }
cp866_to_cp1251(&out);
while(p != string::npos)
@@ -733,8 +745,8 @@ static BOOL CALLBACK DlgProcLoadExistingKey(HWND hwndDlg,UINT msg,WPARAM wParam, extern HWND hPubKeyEdit;
string out;
DWORD code;
- wstring cmd = _T("--export -a ");
- cmd += id;
+ wstring cmd = _T("--batch --export -a ");
+ cmd += id; if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
@@ -878,16 +890,16 @@ void ImportKey() mir_free(ptmp);
f<<new_key.c_str();
f.close();
- cmd += _T(" --trust-model always ");
+ cmd += _T(" --batch ");
cmd += _T(" --import \"");
cmd += tmp2;
cmd += _T("\"");
- }
+ } if(pxExecute(&cmd, "", &output, &exitcode) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
return;
- }
+ } DBDeleteContactSetting(new_key_hcnt, szGPGModuleName, "bAlwatsTrust");
cp866_to_cp1251(&output);
{
diff --git a/messages.cpp b/messages.cpp index fa4f8e3..f523778 100644 --- a/messages.cpp +++ b/messages.cpp @@ -31,7 +31,7 @@ int RecvMsgSvc(WPARAM w, LPARAM l) char *msg = pre->szMessage;
if (!msg)
return CallService(MS_PROTO_CHAINRECV, w, l);
- bool unicode = (bool)(pre->flags&PREF_UNICODE);
+ BOOL unicode = (BOOL)(pre->flags&PREF_UNICODE);
{ //check for gpg related data
wchar_t *tmp = mir_utf8decodeW(msg);
@@ -167,8 +167,12 @@ int RecvMsgSvc(WPARAM w, LPARAM l) {
if(errno == ENOENT)
{
+ string str = pre->szMessage;
mir_free((void**)pre->szMessage);
- pre->szMessage = "Failed to decrypt GPG encrypted message";
+ str.insert(0, "Failed to decrypt GPG encrypted message:\n");
+ char *tmp = new char [str.length()+1];
+ strcpy(tmp, str.c_str());
+ pre->szMessage = tmp;
return CallService(MS_PROTO_CHAINRECV, w, (LPARAM)ccs);
}
}
@@ -232,13 +236,12 @@ int SendMsgSvc(WPARAM w, LPARAM l) char *msg = (char*)(ccs->lParam);
if (!msg)
return CallService(MS_PROTO_CHAINSEND, w, l);
- bool unicode = (bool)(ccs->wParam&PREF_UNICODE);
+ BOOL unicode = (BOOL)(ccs->wParam&PREF_UNICODE);
{ //encrypt data here
wchar_t *tmp = mir_utf8decodeW(msg);
wstring str = tmp;
mir_free(tmp);
- wstring::size_type s1, s2;
{ //not xmpp, just replace whole message
string out;
DWORD code;
@@ -253,7 +256,7 @@ int SendMsgSvc(WPARAM w, LPARAM l) // cmd += _T("--comment \"\" --no-version ");
if(DBGetContactSettingByte(ccs->hContact, szGPGModuleName, "bAlwaysTrust", 0))
cmd += _T("--trust-model always ");
- cmd += _T("--batch --yes -e -a -r ");
+ cmd += _T("--comment \"\" --no-version --batch --yes -e -a -r ");
TCHAR *tmp2 = mir_a2t(tmp);
mir_free(tmp);
cmd += tmp2;
@@ -277,13 +280,11 @@ int SendMsgSvc(WPARAM w, LPARAM l) mir_free(tmp);
f.close();
}
- //MessageBox(0, cmd.c_str(), _T("in"), MB_OK);
if(pxExecute(&cmd, "", &out, &code) == pxNotFound)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
return CallService(MS_PROTO_CHAINSEND, w, l);
}
- //MessageBoxA(0, out.c_str(), "out", MB_OK);
if(out.find("There is no assurance this key belongs to the named user") != string::npos)
{
out.clear();
@@ -415,6 +416,8 @@ static BOOL CALLBACK DlgProcKeyPassword(HWND hwndDlg, UINT msg, WPARAM wParam, L {
switch (((LPNMHDR)lParam)->code)
{
+ default:
+ break;
}
}
break;
@@ -247,6 +247,9 @@ BEGIN PUSHBUTTON "Export PubKey",IDC_SAVE_KEY_BUTTON,64,135,54,14
PUSHBUTTON "Delete key",IDC_DELETE_KEY_BUTTON,121,135,50,14
PUSHBUTTON "Select own key",IDC_SELECT_KEY,222,193,57,14
+ CONTROL "Turn on debug log",IDC_DEBUG_LOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,181,159,89,10
+ EDITTEXT IDC_LOG_FILE_EDIT,11,157,98,14,ES_AUTOHSCROLL
+ PUSHBUTTON "Browse",IDC_LOG_FILE_SET,119,156,50,14
END
IDD_OPT_GPG_BIN DIALOGEX 0, 0, 282, 214
diff --git a/new_gpg.sln b/new_gpg.sln index a32e3e6..e3091fb 100644 --- a/new_gpg.sln +++ b/new_gpg.sln @@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
-Project("{EAF909A5-FA59-4C3D-9431-0FCC20D5BCF9}") = "new_gpg", "new_gpg.icproj", "{9AD3350E-D58E-4128-A90D-6DC4C3775198}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "new_gpg", "new_gpg.vcproj", "{F29D0C8D-141A-43CF-86B2-34A04653F8D4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,24 +13,18 @@ Global Release Unicode|Win32 = Release Unicode|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Debug(service)|Win32.ActiveCfg = Debug(service)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Debug(service)|Win32.Build.0 = Debug(service)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Debug|Win32.ActiveCfg = Debug|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Debug|Win32.Build.0 = Debug|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode (service only)(static)|Win32.ActiveCfg = Release Unicode (service only)(static)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode (service only)(static)|Win32.Build.0 = Release Unicode (service only)(static)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode (service only)|Win32.ActiveCfg = Release Unicode (service only)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode (service only)|Win32.Build.0 = Release Unicode (service only)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode (static)|Win32.ActiveCfg = Release Unicode (static)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode (static)|Win32.Build.0 = Release Unicode (static)|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
- {9AD3350E-D58E-4128-A90D-6DC4C3775198}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
{F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Debug(service)|Win32.ActiveCfg = Debug(service)|Win32
+ {F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Debug(service)|Win32.Build.0 = Debug(service)|Win32
{F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Debug|Win32.Build.0 = Debug|Win32
{F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode (service only)(static)|Win32.ActiveCfg = Release Unicode (service only)(static)|Win32
+ {F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode (service only)(static)|Win32.Build.0 = Release Unicode (service only)(static)|Win32
{F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode (service only)|Win32.ActiveCfg = Release Unicode (service only)|Win32
+ {F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode (service only)|Win32.Build.0 = Release Unicode (service only)|Win32
{F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode (static)|Win32.ActiveCfg = Release Unicode (static)|Win32
+ {F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode (static)|Win32.Build.0 = Release Unicode (static)|Win32
{F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {F29D0C8D-141A-43CF-86B2-34A04653F8D4}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/new_gpg.vcproj b/new_gpg.vcproj index dac2ba2..7558805 100644 --- a/new_gpg.vcproj +++ b/new_gpg.vcproj @@ -245,9 +245,9 @@ />
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
+ Optimization="1"
InlineFunctionExpansion="1"
- FavorSizeOrSpeed="1"
+ FavorSizeOrSpeed="2"
OmitFramePointers="true"
WholeProgramOptimization="true"
AdditionalIncludeDirectories=""X:\install\git\miranda\miranda-im\miranda\include";X:\install\git\miranda\mim_plugs;../../include"
@@ -255,7 +255,7 @@ StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
- EnableEnhancedInstructionSet="2"
+ EnableEnhancedInstructionSet="1"
FloatingPointModel="0"
PrecompiledHeaderFile=".\Release Unicode (static)/testplug.pch"
AssemblerListingLocation=".\Release Unicode (static)/"
diff --git a/options.cpp b/options.cpp index a64695f..b2692c1 100644 --- a/options.cpp +++ b/options.cpp @@ -169,6 +169,10 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA ListView_SetColumnWidth(hwndList, 4, LVSCW_AUTOSIZE); i++; } + tmp = UniGetContactSettingUtf(NULL, szGPGModuleName, "szLogFilePath", _T("")); + SetDlgItemText(hwndDlg, IDC_LOG_FILE_EDIT, tmp); + mir_free(tmp); + CheckStateLoadDB(hwndDlg, IDC_DEBUG_LOG, "bDebugLog", 0); return TRUE; } @@ -209,7 +213,7 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA cmd += _T(" --batch --yes --delete-key "); ptmp = mir_a2t(tmp); cmd += ptmp; - mir_free(ptmp); + mir_free(ptmp);
if(pxExecute(&cmd, "", &output,&exitcode) == pxNotFound) { MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK); @@ -234,35 +238,45 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA ListView_SetItemText(hwndList, item_num, 1, _T("not set")); break; case IDC_SELECT_KEY: - void ShowFirstRunDialog(); - ShowFirstRunDialog(); + { + void ShowFirstRunDialog(); + ShowFirstRunDialog(); + } break; - default: - break; case IDC_SAVE_KEY_BUTTON: - tmp = GetFilePath(_T("Export public key"), _T("*"), _T(".asc pubkey file"), true); - if(!tmp) { - break; + tmp = GetFilePath(_T("Export public key"), _T("*"), _T(".asc pubkey file"), true); + if(!tmp) + { + break; + } + wfstream f(tmp, std::ios::out); + delete [] tmp; + wstring str; + { + TCHAR *tmp = UniGetContactSettingUtf(user_data[item_num+1], szGPGModuleName, "GPGPubKey", _T("")); + str.append(tmp); + mir_free(tmp); + } + wstring::size_type s = 0; + while((s = str.find(_T("\r"), s)) != wstring::npos) + { + str.erase(s, 1); + } + f<<str.c_str(); + f.close(); } - wfstream f(tmp, std::ios::out); - delete [] tmp; - wstring str; + break; + case IDC_LOG_FILE_SET: { - TCHAR *tmp = UniGetContactSettingUtf(user_data[item_num+1], szGPGModuleName, "GPGPubKey", _T("")); - str.append(tmp); + tmp = GetFilePath(_T("Set log file"), _T("*"), _T("LOG files"), 1); + SetDlgItemText(hwndDlg, IDC_LOG_FILE_EDIT, tmp); mir_free(tmp); } - wstring::size_type s = 0; - while((s = str.find(_T("\r"), s)) != wstring::npos) - { - str.erase(s, 1); - } - f<<str.c_str(); - f.close(); + break; + default: break; - } - + } SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } @@ -286,6 +300,13 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA case PSN_APPLY: { + extern bool bDebugLog; + bDebugLog = CheckStateStoreDB(hwndDlg, IDC_DEBUG_LOG, "bDebugLog"); + { + TCHAR tmp[512]; + GetDlgItemText(hwndDlg, IDC_LOG_FILE_EDIT, tmp, 512); + DBWriteContactSettingTString(NULL, szGPGModuleName, "szLogFilePath", tmp); + } return TRUE; } } @@ -531,7 +552,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP } f<<str.c_str(); f.close(); - cmd += _T(" --trust-model always "); + cmd += _T(" --batch "); cmd += _T(" --import \""); cmd += tmp2; cmd += _T("\""); @@ -27,6 +27,7 @@ #define IDC_IN_OPEN_TAG 1025
#define IDC_KEY_PASSWD 1025
#define IDC_PASSWORD 1025
+#define IDC_LOG_FILE_EDIT 1025
#define IDC_BUTTON1 1026
#define IDC_SAVE_KEY_BUTTON 1026
#define IDC_GENERATE_KEY 1026
@@ -51,7 +52,9 @@ #define IDC_EXISTING_KEY_LIST 1045
#define IDC_BUTTON2 1046
#define IDC_OTHER 1046
+#define IDC_LOG_FILE_SET 1046
#define IDC_SAVE_PASSWORD 1047
+#define IDC_DEBUG_LOG 1048
// Next default values for new objects
//
@@ -59,7 +62,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 112
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1048
+#define _APS_NEXT_CONTROL_VALUE 1049
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
diff --git a/utilities.cpp b/utilities.cpp index 5ba8398..2cef87e 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -267,9 +267,6 @@ void cp866_to_cp1251(string *str) void HistoryLog(HANDLE hContact, char *data, int event_type, int flags) { - PBYTE pCurBlob; - WORD wTextLen; - char szText[MAX_PATH]; DBEVENTINFO Event = {0}; Event.cbSize = sizeof(Event); Event.szModule = szGPGModuleName; |