[Openvpn-devel,v1] platform: Add function to determine temp directory
Commit Message
From: Frank Lichtenheld <frank@lichtenheld.com>
Move the code out of options.c and make it shareable.
Replace various stripped down versions of the code from
test_*
Change-Id: I40f72dc038a38e5ad1d3dd04cb10cb7d5cad5d19
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
Acked-by: Razvan Cojocaru <razvanc@mailbox.org>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1780
---
This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1780
This mail reflects revision 1 of this Change.
Acked-by according to Gerrit (reflected above):
Razvan Cojocaru <razvanc@mailbox.org>
Comments
Sounds like a good cleanup effort :-) - tests still pass on FreeBSD & GHA.
Your patch has been applied to the master branch.
commit ab630a14940faf45285473bb9f94ddf1f429ae7a
Author: Frank Lichtenheld
Date: Sat Aug 15 15:06:12 2026 +0200
platform: Add function to determine temp directory
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
Acked-by: Razvan Cojocaru <razvanc@mailbox.org>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1780
Message-Id: <20260815130619.20187-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg38408.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
--
kind regards,
Gert Doering
@@ -881,25 +881,8 @@
o->auth_token_generate = false;
/* Set default --tmp-dir */
-#ifdef _WIN32
- /* On Windows, find temp dir via environment variables */
- o->tmp_dir = win_get_tempdir();
+ o->tmp_dir = platform_get_tmp_dir();
- if (!o->tmp_dir)
- {
- /* Error out if we can't find a valid temporary directory, which should
- * be very 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)
- {
- o->tmp_dir = "/tmp";
- }
-#endif /* _WIN32 */
o->allow_recursive_routing = false;
#ifndef ENABLE_DCO
@@ -584,6 +584,34 @@
return NULL;
}
+const char *
+platform_get_tmp_dir(void)
+{
+ const char *ret;
+#ifdef _WIN32
+ /* On Windows, find temp dir via environment variables */
+ ret = win_get_tempdir();
+
+ if (!ret)
+ {
+ /* Error out if we can't find a valid temporary directory, which should
+ * be very unlikely. */
+ msg(M_USAGE, "Could not find a suitable temporary directory."
+ " (GetTempPath() failed). Consider using --tmp-dir");
+ }
+#else
+ /* Non-windows platforms use $TMPDIR, and if not set, default to '/tmp' */
+ ret = getenv("TMPDIR");
+ if (!ret)
+ {
+ ret = "/tmp";
+ }
+#endif
+
+ return ret;
+}
+
+
/*
* Put a directory and filename together.
*/
@@ -128,6 +128,13 @@
const char *platform_create_temp_file(const char *directory, const char *prefix,
struct gc_arena *gc);
+/**
+ * Get a directory for temporary files
+ *
+ * @return path to a directory
+ */
+const char *platform_get_tmp_dir(void);
+
/** Put a directory and filename together. */
const char *platform_gen_path(const char *directory, const char *filename, struct gc_arena *gc);
@@ -115,19 +115,6 @@
"-----END PRIVATE KEY-----\n";
-static const char *
-get_tmp_dir(void)
-{
- const char *ret;
-#ifdef _WIN32
- ret = win_get_tempdir();
-#else
- ret = "/tmp";
-#endif
- assert_non_null(ret);
- return ret;
-}
-
static struct
{
struct gc_arena gc;
@@ -140,8 +127,8 @@
{
(void)state;
global_state.gc = gc_new();
- global_state.certfile = platform_create_temp_file(get_tmp_dir(), "cert", &global_state.gc);
- global_state.keyfile = platform_create_temp_file(get_tmp_dir(), "key", &global_state.gc);
+ global_state.certfile = platform_create_temp_file(platform_get_tmp_dir(), "cert", &global_state.gc);
+ global_state.keyfile = platform_create_temp_file(platform_get_tmp_dir(), "key", &global_state.gc);
int certfd = open(global_state.certfile, O_RDWR);
int keyfd = open(global_state.keyfile, O_RDWR);
@@ -188,7 +175,7 @@
cert = ctx.crt_chain;
#endif
- const char *tmpfile = platform_create_temp_file(get_tmp_dir(), "ut_pem", &gc);
+ const char *tmpfile = platform_create_temp_file(platform_get_tmp_dir(), "ut_pem", &gc);
backend_x509_write_pem(cert, tmpfile);
struct buffer exported_pem = buffer_read_from_file(tmpfile, &gc);
@@ -720,7 +720,7 @@
tls_options.tls_crypt_v2_verify_script = "/bin/true";
}
- tls_options.tmp_dir = "/tmp";
+ tls_options.tmp_dir = platform_get_tmp_dir();
/* Since we override rand_bytes the tmpfile name is non-random as well.
* Build the expected name via the same code path as