]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Remove duplicate X509 env variables
authorSteffan Karger <steffan@karger.me>
Thu, 9 Mar 2017 08:13:32 +0000 (09:13 +0100)
committerGert Doering <gert@greenie.muc.de>
Wed, 15 Mar 2017 19:45:06 +0000 (20:45 +0100)
Commit 13b585e8 added support for multiple X509 env variables with the
same name, but as a side effect caused these variables to pile up for
each renegotiation.  The old code would simply overwrite the old variables
(as long as an equally-long chain was used for the new session).

To stop the variables from piling up, this commit removes any old X509
env variables if we start negotiating a new TLS session.

Trac: #854

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1489047212-31994-1-git-send-email-steffan@karger.me>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14237.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/ssl.c
src/openvpn/ssl_verify.c
src/openvpn/ssl_verify.h

index 86450fe057f33fa10803775da69d2506687a4313..beee82f59149b54972988cfe5ff25ac1fd7169af 100644 (file)
@@ -2822,6 +2822,9 @@ tls_process(struct tls_multi *multi,
                                    session->opt->crl_file, session->opt->crl_file_inline);
             }
 
+            /* New connection, remove any old X509 env variables */
+            tls_x509_clear_env(session->opt->es);
+
             dmsg(D_TLS_DEBUG_MED, "STATE S_START");
         }
 
index 9f12ab8b273330b0e94a73d38068c35ceb70aa73..a6e9be3a814f4221160c65393ce3bfc861fe0ff4 100644 (file)
@@ -1486,4 +1486,21 @@ verify_final_auth_checks(struct tls_multi *multi, struct tls_session *session)
         gc_free(&gc);
     }
 }
+
+void
+tls_x509_clear_env(struct env_set *es)
+{
+    struct env_item *item = es->list;
+    while (item)
+    {
+        struct env_item *next = item->next;
+        if (item->string
+            && 0 == strncmp("X509_", item->string, strlen("X509_")))
+        {
+            env_set_del(es, item->string);
+        }
+        item = next;
+    }
+}
+
 #endif /* ENABLE_CRYPTO */
index ffab2189ba9607ef8c661b88e6c0cb92c7a6a033..d91799e113e02d320ce0e4a143798a76a2d2a9d5 100644 (file)
@@ -238,6 +238,9 @@ tls_client_reason(struct tls_multi *multi)
 #endif
 }
 
+/** Remove any X509_ env variables from env_set es */
+void tls_x509_clear_env(struct env_set *es);
+
 #endif /* ENABLE_CRYPTO */
 
 #endif /* SSL_VERIFY_H_ */