@@ -885,7 +885,15 @@
#ifdef _WIN32
/* On Windows, find temp dir via environment variables */
o->tmp_dir = win_get_tempdir();
-#else
+
+ if (!o->tmp_dir)
+ {
+ /* Warn if we can't find a valid temporary directory, which should
+ * be unlikely. */
+ msg(M_USAGE, "Could not find a suitable temporary directory."
+ " (GetTempPath() failed). Consider using --tmp-dir");
+ }
+#else /* ifdef _WIN32 */
/* Non-windows platforms use $TMPDIR, and if not set, default to '/tmp' */
o->tmp_dir = getenv("TMPDIR");
if (!o->tmp_dir)
@@ -147,4 +147,26 @@
}
return true;
}
+
+const char *
+win_get_tempdir(void)
+{
+ static char tmpdir[MAX_PATH];
+ WCHAR wtmpdir[MAX_PATH];
+
+ if (!GetTempPathW(_countof(wtmpdir), wtmpdir))
+ {
+ return NULL;
+ }
+
+ if (WideCharToMultiByte(CP_UTF8, 0, wtmpdir, -1, NULL, 0, NULL, NULL) > sizeof(tmpdir))
+ {
+ msg(M_WARN, "Could not get temporary directory. Path is too long."
+ " Consider using --tmp-dir");
+ return NULL;
+ }
+
+ WideCharToMultiByte(CP_UTF8, 0, wtmpdir, -1, tmpdir, sizeof(tmpdir), NULL, NULL);
+ return tmpdir;
+}
#endif /* _WIN32 */
@@ -40,5 +40,8 @@
/* return true if filename is safe to be used on Windows */
bool win_safe_filename(const char *fn);
+/* Find temporary directory */
+const char *win_get_tempdir(void);
+
#endif /* OPENVPN_WIN32_UTIL_H */
#endif /* ifdef _WIN32 */
@@ -1137,34 +1137,6 @@
set_win_sys_path(buf, es);
}
-
-const char *
-win_get_tempdir(void)
-{
- static char tmpdir[MAX_PATH];
- WCHAR wtmpdir[MAX_PATH];
-
- if (!GetTempPathW(_countof(wtmpdir), wtmpdir))
- {
- /* 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 using --tmp-dir");
- return NULL;
- }
-
- if (WideCharToMultiByte(CP_UTF8, 0, wtmpdir, -1, NULL, 0, NULL, NULL) > sizeof(tmpdir))
- {
- msg(M_WARN, "Could not get temporary directory. Path is too long."
- " Consider using --tmp-dir");
- return NULL;
- }
-
- WideCharToMultiByte(CP_UTF8, 0, wtmpdir, -1, tmpdir, sizeof(tmpdir), NULL, NULL);
- return tmpdir;
-}
-
static bool
win_block_dns_service(bool add, int index, const HANDLE pipe)
{
Attention is currently required from: flichtenheld. Hello flichtenheld, I'd like you to do a code review. Please visit http://gerrit.openvpn.net/c/openvpn/+/481?usp=email to review the following change. Change subject: Move get_tmp_dir to win32-util.c and error out on failure ...................................................................... Move get_tmp_dir to win32-util.c and error out on failure Currently we only warn in get_tmp_dir fails and set o->tmp_dir to a null pointer. This will not be caught by check_file_access_chroot either since that ignores NULL pointers but other parts of OpenVPN will assume that tmp_dir is set to a non-NULL string. Also move get_tmp_dir to ssl-utils.c to use it in unit tests. Change-Id: I525ccf7872880367b248ebebb0ddc83551498042 Signed-off-by: Arne Schwabe <arne@rfc2549.org> --- M src/openvpn/options.c M src/openvpn/win32-util.c M src/openvpn/win32-util.h M src/openvpn/win32.c 4 files changed, 34 insertions(+), 29 deletions(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/81/481/1