[Openvpn-devel,2/2,v3] pf: clean up temporary files if plugin init fails
Commit Message
From: Steffan Karger <steffan.karger@fox-it.com>
close_instance() tries to remove the file in c2.pf.filename, but that only
works if we actually set that if we fail. So, set that filename as soon
as we know we've created the file.
Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
---
v2: As suggested by Antionio, get rid of local 'gc' and 'file' vars.
v3: Make (struct pf_context).filename a const char *
src/openvpn/pf.c | 10 ++++------
src/openvpn/pf.h | 2 +-
2 files changed, 5 insertions(+), 7 deletions(-)
@@ -618,19 +618,18 @@ pf_load_from_buffer_list(struct context *c, const struct buffer_list *config)
void
pf_init_context(struct context *c)
{
- struct gc_arena gc = gc_new();
#ifdef PLUGIN_PF
if (plugin_defined(c->plugins, OPENVPN_PLUGIN_ENABLE_PF))
{
- const char *pf_file = create_temp_file(c->options.tmp_dir, "pf", &gc);
- if (pf_file)
+ c->c2.pf.filename = create_temp_file(c->options.tmp_dir, "pf",
+ &c->c2.gc);
+ if (c->c2.pf.filename)
{
- setenv_str(c->c2.es, "pf_file", pf_file);
+ setenv_str(c->c2.es, "pf_file", c->c2.pf.filename);
if (plugin_call(c->plugins, OPENVPN_PLUGIN_ENABLE_PF, NULL, NULL, c->c2.es) == OPENVPN_PLUGIN_FUNC_SUCCESS)
{
event_timeout_init(&c->c2.pf.reload, 1, now);
- c->c2.pf.filename = string_alloc(pf_file, &c->c2.gc);
c->c2.pf.enabled = true;
#ifdef ENABLE_DEBUG
if (check_debug_level(D_PF_DEBUG))
@@ -659,7 +658,6 @@ pf_init_context(struct context *c)
#endif
}
#endif
- gc_free(&gc);
}
void
@@ -75,7 +75,7 @@ struct pf_context {
bool enabled;
struct pf_set *pfs;
#ifdef PLUGIN_PF
- char *filename;
+ const char *filename;
time_t file_last_mod;
unsigned int n_check_reload;
struct event_timeout reload;