=pod

=head1 NAME

OPENSSL_config, OPENSSL_no_config - simple OpenSSL configuration functions

=head1 SYNOPSIS

 #include <openssl/conf.h>

 void OPENSSL_config(const char *config_name);
 void OPENSSL_no_config(void);

=head1 DESCRIPTION

OPENSSL_config() configures OpenSSL using the standard B<openssl.cnf>
configuration file name using B<config_name>. If B<config_name> is NULL then
the file specified in the environment variable B<OPENSSL_CONF> will be used,
and if that is not set then a system default location is used.
Errors are silently ignored.
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.

=head1 NOTES

The OPENSSL_config() function is designed to be a very simple "call it and
forget it" function.
It is however B<much> better than nothing. Applications which need finer
control over their configuration functionality should use the configuration
functions such as CONF_modules_load() directly. This function is deprecated
and its use should be avoided.
Applications should instead call CONF_modules_load() during
initialization (that is before starting any threads).

There are several reasons why calling the OpenSSL configuration routines is
advisable. For example, to load dynamic ENGINEs from shared libraries (DSOs).
However very few applications currently support the control interface and so
very few can load and use dynamic ENGINEs. Equally in future more sophisticated
ENGINEs will require certain control operations to customize them. If an
application calls OPENSSL_config() it doesn't need to know or care about
ENGINE control operations because they can be performed by editing a
configuration file.

=head1 RETURN VALUES

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)>

=head1 HISTORY

The OPENSSL_no_config() and OPENSSL_config() functions were
deprecated in OpenSSL 1.1.0 by OPENSSL_init_crypto().

=cut
