]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Ensure that client-connect files are always deleted
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Thu, 9 Oct 2014 21:40:49 +0000 (23:40 +0200)
committerDavid Sommerseth <davids@redhat.com>
Tue, 14 Oct 2014 16:01:47 +0000 (18:01 +0200)
On a long-running, busy server using either a plug-in which hooks into
OPENVPN_PLUGIN_CLIENT_CONNECT or a configuration using --client-connect
a lot of unused files will be lingering and potentially filling up
the file system with temporary files if the plug-in or --client-connect
script fails.

This patch ensures that these files are always removed in the end,
regardless if the plug-in or script succeeds or fails.

Signed-off-by: David Sommerseth <davids@redhat.com>
Acked-by: David Sommerseth <davids@redhat.com>
Message-Id: 20141012195919.GU3738@type
URL: http://thread.gmane.org/gmane.network.openvpn.devel/9104/focus=9118

src/openvpn/multi.c

index 59101545e98af51904d9db0cd5d61fa640e79882..dc96854499f24bb50efe122b68a8e7c9d3c40020 100644 (file)
@@ -1459,10 +1459,6 @@ multi_client_connect_post (struct multi_context *m,
                             option_types_found,
                             mi->context.c2.es);
 
-      if (!platform_unlink (dc_file))
-       msg (D_MULTI_ERRORS, "MULTI: problem deleting temporary file: %s",
-            dc_file);
-
       /*
        * If the --client-connect script generates a config file
        * with an --ifconfig-push directive, it will override any
@@ -1705,6 +1701,11 @@ multi_connection_established (struct multi_context *m, struct multi_instance *mi
              multi_client_connect_post (m, mi, dc_file, option_permissions_mask, &option_types_found);
              ++cc_succeeded_count;
            }
+
+         if (!platform_unlink (dc_file))
+           msg (D_MULTI_ERRORS, "MULTI: problem deleting temporary file: %s",
+                dc_file);
+
         script_depr_failed:
          argv_reset (&argv);
        }
@@ -1758,6 +1759,11 @@ multi_connection_established (struct multi_context *m, struct multi_instance *mi
            }
          else
            cc_succeeded = false;
+
+         if (!platform_unlink (dc_file))
+           msg (D_MULTI_ERRORS, "MULTI: problem deleting temporary file: %s",
+                dc_file);
+
         script_failed:
          argv_reset (&argv);
        }