ACK

Sorry it took so long. Patch looks good, and works as expected for me.

-Steffan

On 02-05-14 02:28, David Sommerseth wrote:
> OpenVPN will do some simple sanity checking at startup to ensure the expected
> files and directories is in place.  However, with --client-config-dir and
> --ccd-exclusive, things are slightly different.  In both cases it is perfectly
> fine that files does not exists, and we cannot know any file names beforehand
> due to these filenames being based upon the certificate's CN field.
> 
> The problem arises when OpenVPN cannot open files inside a directory because
> the directory permissions are too restrictive, have wrong ownership (triggered
> by the usage of --user/--group) or other security mechanisms the OS uses.
> 
> When a client connects, the test_file() function is used to check if a client
> config file has been prepared.  And if not, it continues without trying to 
> read
> it.  So, if the privileges of the running OpenVPN process is not allowed to
> open and read an existing file, OpenVPN will treat this as a non-existing file
> without saying anything.  This is clearly wrong.  So this patch adds an 
> warning
> message in the OpenVPN log if it could not open the file due to lack of
> permissions.
> 
> This will work fine on all *nix based OSes.  Windows however reports 'no such
> file or directory' (errno=2/-ENOENT) even on privilege access errors when the
> directory this file resides is too restrictive.  But there is no easy way to
> work around that.  However, I believe that the initial sanity checking at
> startup will catch that one, as it will check if the directories it needs
> exists.
> 
> This patch has only gone through simple basic testing, with both too few
> privileges and with proper privileges to the CCD directory.  With wrong
> privileges, the following error can be found if CN=Test client
> 
>   Fri May  2 00:00:10 2014 us=281993 127.0.0.1:41017 Could not access file 
> '/etc/clients/Test client': Permission denied (errno=13)
> 
> [v2 - use openvpn_errno() instead of errno, for better platform support]
> 
> Trac: #277
> Trac-URL: https://community.openvpn.net/openvpn/ticket/277
> Signed-off-by: David Sommerseth <d...@users.sourceforge.net>
> ---
>  src/openvpn/misc.c |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/src/openvpn/misc.c b/src/openvpn/misc.c
> index 7483184..63b4c1c 100644
> --- a/src/openvpn/misc.c
> +++ b/src/openvpn/misc.c
> @@ -861,6 +861,12 @@ test_file (const char *filename)
>         fclose (fp);
>         ret = true;
>       }
> +      else
> +     {
> +       if( openvpn_errno () == EACCES ) {
> +         msg( M_WARN | M_ERRNO, "Could not access file '%s'", filename);
> +       }
> +     }
>      }
>  
>    dmsg (D_TEST_FILE, "TEST FILE '%s' [%d]",
> 

Reply via email to