mirror of https://github.com/OpenVPN/openvpn-gui
Optionally allow overwrite when importing a config
- Prompt the user for permission if import may overwrite an existing config. - Also raise an error if the import file source matches the global or local config directory. Reimporting a config on to itself is not supported. This also avoids ERROR_SHARING_VIOLATION in CopyFile() when source and destination are the same. Signed-off-by: Selva Nair <selva.nair@gmail.com>pull/343/head
parent
dd7234534b
commit
b696a7c16d
32
main.c
32
main.c
|
@ -761,6 +761,14 @@ ImportConfigFile()
|
||||||
TCHAR destination[MAX_PATH];
|
TCHAR destination[MAX_PATH];
|
||||||
PTCHAR fileName = source + fn.nFileOffset;
|
PTCHAR fileName = source + fn.nFileOffset;
|
||||||
|
|
||||||
|
/* check if the source points to the config_dir */
|
||||||
|
if (wcsncmp(source, o.global_config_dir, wcslen(o.global_config_dir)) == 0
|
||||||
|
|| wcsncmp(source, o.config_dir, wcslen(o.config_dir)) == 0)
|
||||||
|
{
|
||||||
|
ShowLocalizedMsg(IDS_ERR_IMPORT_SOURCE, source);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_sntprintf_0(destination, _T("%s\\%s"), o.config_dir, fileName);
|
_sntprintf_0(destination, _T("%s\\%s"), o.config_dir, fileName);
|
||||||
|
|
||||||
destination[_tcslen(destination) - _tcslen(o.ext_string) - 1] = _T('\0');
|
destination[_tcslen(destination) - _tcslen(o.ext_string) - 1] = _T('\0');
|
||||||
|
@ -770,27 +778,29 @@ ImportConfigFile()
|
||||||
|
|
||||||
_sntprintf_0(destination, _T("%s\\%s"), destination, fileName);
|
_sntprintf_0(destination, _T("%s\\%s"), destination, fileName);
|
||||||
|
|
||||||
if (!CopyFile(source, destination, TRUE))
|
bool no_overwrite = TRUE;
|
||||||
|
while(!CopyFile(source, destination, no_overwrite))
|
||||||
{
|
{
|
||||||
if (GetLastError() == ERROR_FILE_EXISTS)
|
if (GetLastError() != ERROR_FILE_EXISTS || !no_overwrite)
|
||||||
{
|
{
|
||||||
fileName[_tcslen(fileName) - _tcslen(o.ext_string) - 1] = _T('\0');
|
MsgToEventLog(EVENTLOG_ERROR_TYPE, L"Copy file <%s> to <%s> failed (error = %lu)",
|
||||||
ShowLocalizedMsg(IDS_ERR_IMPORT_EXISTS, fileName);
|
source, destination, GetLastError());
|
||||||
|
ShowLocalizedMsg(IDS_ERR_IMPORT_FAILED, destination);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* A file with same name exists. Ask the user whether to replace or not. */
|
||||||
|
if (ShowLocalizedMsgEx(MB_YESNO, _T(PACKAGE_NAME), IDS_NFO_IMPORT_OVERWRITE, fileName) == IDNO)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* try again with overwrite allowed */
|
||||||
|
no_overwrite = FALSE;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
ShowLocalizedMsg(IDS_NFO_IMPORT_SUCCESS);
|
ShowLocalizedMsg(IDS_NFO_IMPORT_SUCCESS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowLocalizedMsg(IDS_ERR_IMPORT_FAILED, destination);
|
ShowLocalizedMsg(IDS_ERR_IMPORT_FAILED, destination);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -304,6 +304,8 @@
|
||||||
#define IDS_ERR_IMPORT_EXISTS 1901
|
#define IDS_ERR_IMPORT_EXISTS 1901
|
||||||
#define IDS_ERR_IMPORT_FAILED 1902
|
#define IDS_ERR_IMPORT_FAILED 1902
|
||||||
#define IDS_NFO_IMPORT_SUCCESS 1903
|
#define IDS_NFO_IMPORT_SUCCESS 1903
|
||||||
|
#define IDS_NFO_IMPORT_OVERWRITE 1904
|
||||||
|
#define IDS_ERR_IMPORT_SOURCE 1905
|
||||||
|
|
||||||
/* Save password related messages */
|
/* Save password related messages */
|
||||||
#define IDS_NFO_DELETE_PASS 2001
|
#define IDS_NFO_DELETE_PASS 2001
|
||||||
|
|
|
@ -392,6 +392,8 @@ BEGIN
|
||||||
IDS_ERR_IMPORT_EXISTS "A config named ""%s"" already exists."
|
IDS_ERR_IMPORT_EXISTS "A config named ""%s"" already exists."
|
||||||
IDS_ERR_IMPORT_FAILED "Failed to import file. The following path could not be created.\n\n%s\n\nMake sure you have the right permissions."
|
IDS_ERR_IMPORT_FAILED "Failed to import file. The following path could not be created.\n\n%s\n\nMake sure you have the right permissions."
|
||||||
IDS_NFO_IMPORT_SUCCESS "File imported successfully."
|
IDS_NFO_IMPORT_SUCCESS "File imported successfully."
|
||||||
|
IDS_NFO_IMPORT_OVERWRITE "A config named ""%s"" already exists. Do you want to replace it?"
|
||||||
|
IDS_ERR_IMPORT_SOURCE "Cannot import file <%s> as it is already in the global or local config directory"
|
||||||
|
|
||||||
/* save/delete password */
|
/* save/delete password */
|
||||||
IDS_NFO_DELETE_PASS "Press OK to delete saved passwords for config ""%s"""
|
IDS_NFO_DELETE_PASS "Press OK to delete saved passwords for config ""%s"""
|
||||||
|
|
|
@ -459,6 +459,8 @@ BEGIN
|
||||||
IDS_ERR_IMPORT_FAILED "Failed to import file. The following path could not be created.\n\n" \
|
IDS_ERR_IMPORT_FAILED "Failed to import file. The following path could not be created.\n\n" \
|
||||||
"%s\n\nMake sure you have the right permissions."
|
"%s\n\nMake sure you have the right permissions."
|
||||||
IDS_NFO_IMPORT_SUCCESS "File imported successfully."
|
IDS_NFO_IMPORT_SUCCESS "File imported successfully."
|
||||||
|
IDS_NFO_IMPORT_OVERWRITE "A config named ""%s"" already exists. Do you want to replace it?"
|
||||||
|
IDS_ERR_IMPORT_SOURCE "Cannot import file <%s> as it is already in the global or local config directory"
|
||||||
|
|
||||||
/* save/delete password */
|
/* save/delete password */
|
||||||
IDS_NFO_DELETE_PASS "Press OK to delete saved passwords for config ""%s"""
|
IDS_NFO_DELETE_PASS "Press OK to delete saved passwords for config ""%s"""
|
||||||
|
|
Loading…
Reference in New Issue