[aescrypt] PATCH: Detect that some destination files (plain or .aes) cannot be written prior to collecting password.
Paul E. Jones
paulej at packetizer.com
Fri Sep 6 09:55:18 EDT 2013
OK... I'll add this to the to-do list :-)
But, I'm not sure when I'll have it done. It will likely not be until sometime over the next 3 months.
Paul
> -----Original Message-----
> From: aescrypt-bounces at lists.packetizer.com [mailto:aescrypt-
> bounces at lists.packetizer.com] On Behalf Of Kaz Kylheku
> Sent: Friday, September 06, 2013 5:35 AM
> To: aescrypt at lists.packetizer.com
> Subject: [aescrypt] PATCH: Detect that some destination files (plain or
> .aes) cannot be written prior to collecting password.
>
> Patch for detecting that destination files cannot be written prior to
> asking for password.
>
> If any file exists, and can be opened for reading, then a simple message
> is issued for that file and the operation is canceled, e.g:
>
> Output file C:\foo.txt exists already
>
> If a file exists, but cannot be opened for reading then the reason is
> added to the error message. For example:
>
> Output file C:\foo.txt exists already:
> Access is denied.
>
>
>
> diff -urp AESCrypt_source_v309-ORIG/AESCrypt/AESCryptWorkerThreads.cpp
> AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.cpp
> ---
> AESCrypt_source_v309-ORIG/AESCrypt/AESCryptWorkerThreads.cpp 2013-03-
> 09
> 23:13:54.000000000 -0800
> +++ AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.cpp 2013-09-06
> 02:16:14.849193800 -0700
> @@ -104,23 +104,17 @@ void AESCryptWorkerThreads::ProcessFiles
> {
> PasswdDialog dlg;
>
> - // Prompt the user for a password
> - if (dlg.DoModal(::GetActiveWindow(), (encrypt ? 1 : 0)) == IDOK)
> - {
> - if (StartThread(file_list,
> - dlg.passwd,
> - encrypt) == false)
> - {
> - // We were unable to start a thread, so we must clean up
> - // the file list.
> - delete file_list;
> - }
> - }
> - else
> - {
> - // The user canceled the operation, so delete the file list
> - delete file_list;
> - }
> + if (CheckOverwriteFiles(file_list, encrypt) && // files are not in
> the
> way
> + dlg.DoModal(::GetActiveWindow(), (encrypt ? 1 : 0)) == IDOK &&
> //
> prompt for password
> + StartThread(file_list, dlg.passwd, encrypt)) // start thread
> + {
> + // Thread started successfully and now owns file_list
> + return;
> + }
> +
> + // The operation did not proceed so ownership of the file
> + // list did not pass to the thread; we must delete it.
> + delete file_list;
> }
>
> /*
> @@ -283,6 +277,32 @@ DWORD WINAPI ThreadInit(LPVOID lpParamet
> }
>
> /*
> + * CheckOverwriteFiles
> + *
> + * Returns false if any of the destination files of the given
> + * file list already exist or cannot be used.
> + */
> +bool AESCryptWorkerThreads::CheckOverwriteFiles(
> + StringList *file_list,
> + bool encrypt)
> +{
> + for (StringListIter i = file_list->begin(); i != file_list->end();
> i++) {
> + const String &name = *i;
> + String dest = encrypt ? name + _T(".aes") : name.substr(0,
> name.length() - 4);
> + BufferedFile check_file;
> + DWORD result_code = check_file.OpenFile(dest.c_str(), false,
> OPEN_EXISTING);
> +
> + if (result_code != ERROR_FILE_NOT_FOUND) {
> + ::ReportError( _T("Output file ") + dest + _T(" exists
> already"),
> + result_code);
> + return false;
> + }
> + }
> +
> + return true;
> +}
> +
> +/*
> * EncryptFiles
> *
> * This function is called by the worker thread to encrypt a list of
> files.
> diff -urp AESCrypt_source_v309-ORIG/AESCrypt/AESCryptWorkerThreads.h
> AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.h
> ---
> AESCrypt_source_v309-ORIG/AESCrypt/AESCryptWorkerThreads.h 2013-03-09
> 23:13:54.000000000 -0800
> +++ AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.h 2013-09-06
> 01:43:02.101147000 -0700
> @@ -27,6 +27,9 @@ class AESCryptWorkerThreads
>
> inline void DoMessageLoop();
>
> + bool CheckOverwriteFiles( StringList *file_list,
> + bool encrypt);
> +
> void EncryptFiles( StringList *file_list,
> TCHAR *passwd);
>
> diff -urp AESCrypt_source_v309-ORIG/AESCrypt/stdafx.h
> AESCrypt_source_v309/AESCrypt/stdafx.h
> --- AESCrypt_source_v309-ORIG/AESCrypt/stdafx.h 2013-03-09
> 23:13:54.000000000 -0800
> +++ AESCrypt_source_v309/AESCrypt/stdafx.h 2013-09-06
> 01:26:21.891136400
> -0700
> @@ -41,7 +41,9 @@
>
> // STL
> #include <list>
> -typedef std::list< std::basic_string<TCHAR> > StringList;
> +typedef std::basic_string<TCHAR> String;
> +typedef std::list< String > StringList;
> +typedef std::list< String >::iterator StringListIter;
>
> // Win32
> #include <commctrl.h>
More information about the aescrypt
mailing list