Deprecate CONF_modules_free() and make it a no-op
authorMatt Caswell <matt@openssl.org>
Mon, 4 Apr 2016 16:00:04 +0000 (17:00 +0100)
committerMatt Caswell <matt@openssl.org>
Wed, 13 Apr 2016 07:52:33 +0000 (08:52 +0100)
CONF_modules_free() should not be called expicitly - we should leave
auto-deinit to clean this up instead.

Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
crypto/conf/conf_mod.c
crypto/init.c
doc/crypto/CONF_modules_free.pod
doc/crypto/OPENSSL_config.pod
include/internal/conf.h
include/openssl/conf.h

index aede656..99f552c 100644 (file)
@@ -60,7 +60,7 @@
 #include <ctype.h>
 #include <openssl/crypto.h>
 #include "internal/cryptlib.h"
-#include <openssl/conf.h>
+#include "internal/conf.h"
 #include "internal/dso.h"
 #include <openssl/x509.h>
 
@@ -460,7 +460,7 @@ int CONF_module_add(const char *name, conf_init_func *ifunc,
         return 0;
 }
 
-void CONF_modules_free(void)
+void conf_modules_free_intern(void)
 {
     CONF_modules_finish();
     CONF_modules_unload(1);
index ca19408..f5473ec 100644 (file)
@@ -457,7 +457,7 @@ void OPENSSL_cleanup(void)
     fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
                     "rand_cleanup_intern()\n");
     fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
-                    "CONF_modules_free()\n");
+                    "conf_modules_free_intern()\n");
 #ifndef OPENSSL_NO_ENGINE
     fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: "
                     "engine_cleanup_intern()\n");
@@ -477,11 +477,11 @@ void OPENSSL_cleanup(void)
      * must be called before engine_cleanup_intern()
      * - ENGINEs use CRYPTO_EX_DATA and therefore, must be cleaned up
      * before the ex data handlers are wiped in CRYPTO_cleanup_all_ex_data().
-     * - CONF_modules_free() can end up in ENGINE code so must be called before
-     * engine_cleanup_intern()
+     * - conf_modules_free_intern() can end up in ENGINE code so must be called
+     * before engine_cleanup_intern()
      */
     rand_cleanup_intern();
-    CONF_modules_free();
+    conf_modules_free_intern();
 #ifndef OPENSSL_NO_ENGINE
     engine_cleanup_intern();
 #endif
index 37a7b16..12e594d 100644 (file)
@@ -9,10 +9,15 @@
 
  #include <openssl/conf.h>
 
- void CONF_modules_free(void);
  void CONF_modules_finish(void);
  void CONF_modules_unload(int all);
 
+Deprecated:
+
+ #if OPENSSL_API_COMPAT < 0x10100000L
+ # define CONF_modules_free()
+ #endif
+
 =head1 DESCRIPTION
 
 CONF_modules_free() closes down and frees up all memory allocated by all
@@ -27,8 +32,10 @@ B<all> is B<1> all modules, including builtin modules will be unloaded.
 
 =head1 NOTES
 
-Normally applications will only call CONF_modules_free() at application to
-tidy up any configuration performed.
+Normally in versions of OpenSSL prior to 1.1.0 applications will only call
+CONF_modules_free() at application to tidy up any configuration performed. From
+1.1.0 CONF_modules_free() is deprecated an no explicit CONF cleanup as required
+at all. For more information see L<OPENSSL_init_crypto(3)>.
 
 =head1 RETURN VALUE
 
@@ -39,4 +46,8 @@ None of the functions return a value.
 L<conf(5)>, L<OPENSSL_config(3)>,
 L<CONF_modules_load_file(3)>
 
+=head1 HISTORY
+
+CONF_modules_free() was deprecated in OpenSSL 1.1.0.
+
 =cut
index 4c82566..77061a0 100644 (file)
@@ -23,9 +23,6 @@ Multiple calls have no effect.
 OPENSSL_no_config() disables configuration. If called before OPENSSL_config()
 no configuration takes place.
 
-Applications should free up configuration at application closedown by calling
-CONF_modules_free().
-
 If the application is built with B<OPENSSL_LOAD_CONF> defined, then a
 call to OpenSSL_add_all_algorithms() will implicitly call OPENSSL_config()
 first.
@@ -57,8 +54,7 @@ Neither OPENSSL_config() nor OPENSSL_no_config() return a value.
 =head1 SEE ALSO
 
 L<conf(5)>,
-L<CONF_modules_load_file(3)>,
-L<CONF_modules_free(3)>
+L<CONF_modules_load_file(3)>
 
 =head1 HISTORY
 
index 3bd6069..e21f22f 100644 (file)
@@ -53,6 +53,7 @@ struct ossl_init_settings_st {
 
 void openssl_config_internal(const char *config_name);
 void openssl_no_config_internal(void);
+void conf_modules_free_intern(void);
 
 #ifdef __cplusplus
 }
index 24e9dee..29189d0 100644 (file)
@@ -186,7 +186,9 @@ int CONF_modules_load_file(const char *filename, const char *appname,
                            unsigned long flags);
 void CONF_modules_unload(int all);
 void CONF_modules_finish(void);
-void CONF_modules_free(void);
+#if OPENSSL_API_COMPAT < 0x10100000L
+# define CONF_modules_free()
+#endif
 int CONF_module_add(const char *name, conf_init_func *ifunc,
                     conf_finish_func *ffunc);