summaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-06-06 00:05:40 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-06-06 00:05:40 +0300
commit9d905146c450baed1ecb180652cca904879ab9c8 (patch)
tree17dbc9e198ee9e8c7a5e88156119bd3e44ac3b99 /main.cpp
parentad52d967c7f67428bf7c6aea6c376a1a43c65735 (diff)
implemented #44 (access rights checking)
Diffstat (limited to 'main.cpp')
-rwxr-xr-xmain.cpp41
1 files changed, 40 insertions, 1 deletions
diff --git a/main.cpp b/main.cpp
index 5e4034e..23d486b 100755
--- a/main.cpp
+++ b/main.cpp
@@ -1787,6 +1787,45 @@ void InitCheck()
{
{//parse gpg output
gpg_valid = isGPGValid();
+ bool home_dir_access = false, temp_access = false;
+ TCHAR *home_dir = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
+ std::wstring test_path = home_dir;
+ mir_free(home_dir);
+ test_path += _T("/");
+ test_path += toUTF16(get_random(13));
+ wfstream test_file;
+ test_file.open(test_path, std::ios::trunc | std::ios::out);
+ if(test_file.is_open() && test_file.good())
+ {
+ test_file<<_T("access_test\n");
+ if(test_file.good())
+ home_dir_access = true;
+ test_file.close();
+ DeleteFile(test_path.c_str());
+ }
+ home_dir = _tgetenv(_T("TEMP"));
+ test_path = home_dir;
+ test_path += _T("/");
+ test_path += toUTF16(get_random(13));
+ test_file.open(test_path, std::ios::trunc | std::ios::out);
+ if(test_file.is_open() && test_file.good())
+ {
+ test_file<<_T("access_test\n");
+ if(test_file.good())
+ temp_access = true;
+ test_file.close();
+ DeleteFile(test_path.c_str());
+ }
+ if(!home_dir_access || !temp_access || !gpg_valid)
+ {
+ char buf[4096];
+ strcpy(buf, gpg_valid?Translate("GPG binary is set and valid (this is good).\n"):Translate("GPG binary unset or invalid (plugin will not work).\n"));
+ strcat(buf, home_dir_access?Translate("Home dir write access granted (this is good).\n"):Translate("Home dir have not write access (plugin most probably will not work).\n"));
+ strcat(buf, temp_access?Translate("Temp dir write access granted (this is good).\n"):Translate("Temp dir have not write access (plugin should work, but may have some problems, filetransfers will not work)."));
+ if(!gpg_valid)
+ strcat(buf, Translate("\nGPG will be disabled until you solve this problems"));
+ MessageBoxA(0, buf, Translate("GPG plugin problems"), MB_OK);
+ }
if(!gpg_valid)
return;
gpg_keyexist = isGPGKeyExist();
@@ -1814,7 +1853,7 @@ void InitCheck()
if(result == pxNotFound)
return;
}
- TCHAR *home_dir = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
+ home_dir = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
wstring tmp_dir = home_dir;
mir_free(home_dir);
tmp_dir += _T("\\tmp");