diff options
author | David Sommerseth <davids@redhat.com> | 2011-04-14 16:21:16 +0200 |
---|---|---|
committer | David Sommerseth <davids@redhat.com> | 2011-04-14 21:10:02 +0200 |
commit | ca4c6d618d743ec4a3b6f7ef8003d891603ec1a6 (patch) | |
tree | e2f011c6cadfda68fe185527be28633cc2aa9ccb /win32.c | |
parent | 9ed122efe870288ea75ee62a4eae2373a655145b (diff) | |
download | openvpn-ca4c6d618d743ec4a3b6f7ef8003d891603ec1a6.tar.gz openvpn-ca4c6d618d743ec4a3b6f7ef8003d891603ec1a6.tar.xz openvpn-ca4c6d618d743ec4a3b6f7ef8003d891603ec1a6.zip |
Change the default --tmp-dir path to a more suitable path
In commit 4e1cc5f6dda22e9 the create_temp_filename() function was
reviewed and hardened, which in the end renamed this function to
create_temp_file() in commit 495e3cec5d156.
With these changes it became more evident that OpenVPN needs a directory
where it can create temporary files. The create_temp_file() will create
such files f.ex. if --client-connect or --plugin which makes use of
the OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY hook, such as openvpn-auth-pam.so.
When this happens, OpenVPN will normally create these files in the directory
OpenVPN was started. In many cases, this will fail due to restricted access.
By using --tmp-dir and pointing it to a directory writeable to the user
running OpenVPN, it works again.
This patch makes OpenVPN use a more suitable temproary directory by default,
instead of the current working directory. On non-Windows platforms this
default value is set to '/tmp', but can be modified at compile-time by
running ./configure --with-tmp-dir-path=<TEMP DIR PATH>. On Windows, it
will use GetTempPath() to find temporary paths recommended by the OS. If
this fails, it will fallback to the old behaviour, using the directory
where OpenVPN was started.
In any cases, this default value can be overridden in the configuration
file by using the --tmp-dir option, as before.
To check what the default is at runime, you can see this easily by doing
this:
$ ./openvpn --verb 4 --dev tun | grep tmp_dir
Signed-off-by: David Sommerseth <davids@redhat.com>
Tested-by: Jan Just Keijser <janjust@nikhef.nl>
Acked-by: Gert Doering <gert@greenie.muc.de>
Notes
Notes:
This commit message falsely states that the default '/tmp' path can be
modified at compile time. This patch restrict the fallback on non-Windows
to '/tmp' and the start-up directory for OpenVPN on Windows. On all POSIX
platforms '/tmp' should exist anyway and it can be modified by setting
$TMPDIR at runtime, or via --tmp-dir.
This patch also includes a two comments to the #ifdef blocks in the same
area. These lines were not removed as they were considered helpful and it
does not change the running code in any way. It was initially added to
make sure the changes needed in this patch came on the right place. It
should probably have been mentioned in the commit log anyhow though.
David Sommerseth
Diffstat (limited to 'win32.c')
-rw-r--r-- | win32.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -1093,4 +1093,23 @@ env_set_add_win32 (struct env_set *es) set_win_sys_path (DEFAULT_WIN_SYS_PATH, es); } + +const char * +win_get_tempdir() +{ + static char buf[MAX_PATH]; + char *tmpdir = buf; + + CLEAR(buf); + + if (!GetTempPath(sizeof(buf),buf)) { + /* Warn if we can't find a valid temporary directory, which should + * be unlikely. + */ + msg (M_WARN, "Could not find a suitable temporary directory." + " (GetTempPath() failed). Consider to use --tmp-dir"); + tmpdir = NULL; + } + return tmpdir; +} #endif |