[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