]> 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>
Mon, 20 Oct 2014 08:43:23 +0000 (10:43 +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
(cherry picked from commit 7da9d40243e0743e2d050ceb6ae34e467dd58973)

src/openvpn/multi.c

index e213975aa0e23e17a570f83d9e1884d4fb4c6265..374950ea0b626de9553fc04dbadf2c954e23a0d4 100644 (file)
@@ -1452,10 +1452,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
@@ -1698,6 +1694,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);
        }
@@ -1751,6 +1752,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);
        }