-$(RM) `find . -name '*{- $depext -}' -a \! -path "./.git/*"`
-$(RM) `find . -name '*{- $objext -}' -a \! -path "./.git/*"`
$(RM) core
- $(RM) tags TAGS
+ $(RM) tags TAGS doc-nits
$(RM) test/.rnd
$(RM) openssl.pc libcrypto.pc libssl.pc
-$(RM) `find . -type l -a \! -path "./.git/*"`
doc-nits:
(cd $(SRCDIR); $(PERL) util/find-doc-nits.pl -n ) >doc-nits
- if [ -s doc-nits ] ; then cat doc-nits; exit 1; fi
+ if [ -s doc-nits ] ; then cat doc-nits; rm doc-nits ; exit 1; fi
# Test coverage is a good idea for the future
#coverage: $(PROGRAMS) $(TESTPROGRAMS)
=head1 NAME
-ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp, ASN1_STRING_print - ASN1_STRING output routines
+ASN1_tag2str, ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp, ASN1_STRING_print
+- ASN1_STRING output routines
=head1 SYNOPSIS
int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags);
int ASN1_STRING_print(BIO *out, const ASN1_STRING *str);
+ const char *ASN1_tag2str(int tag);
=head1 DESCRIPTION
ASN1_STRING_print_ex(). It replaces unprintable characters (other than CR, LF)
with '.'.
+ASN1_tag2str() returns a human-readable name of the specified ASN.1 B<tag>.
+
=head1 NOTES
ASN1_STRING_print() is a legacy function which should be avoided in new applications.
=head1 COPYRIGHT
-Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2002-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
BN_BLINDING_create_param() returns the newly created B<BN_BLINDING>
parameters or NULL on error.
-=head1 SEE ALSO
-
-L<bn(7)>
-
=head1 HISTORY
BN_BLINDING_thread_id() was first introduced in OpenSSL 1.0.0, and it
=head1 COPYRIGHT
-Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2005-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<BN_add(3)>,
+L<ERR_get_error(3)>, L<BN_add(3)>,
L<BN_CTX_start(3)>
=head1 HISTORY
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<BN_CTX_new(3)>,
+L<ERR_get_error(3)>, L<BN_CTX_new(3)>,
L<BN_add_word(3)>, L<BN_set_bit(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<BN_add(3)>
+L<ERR_get_error(3)>, L<BN_add(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<BN_zero(3)>,
+L<ERR_get_error(3)>, L<BN_zero(3)>,
L<ASN1_INTEGER_to_BN(3)>,
L<BN_num_bytes(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
BN_is_zero(), BN_is_one() BN_is_word() and BN_is_odd() return 1 if
the condition is true, 0 otherwise.
-=head1 SEE ALSO
-
-L<bn(7)>
-
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>
+L<ERR_get_error(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<RAND_bytes(3)>
+L<ERR_get_error(3)>, L<RAND_bytes(3)>
=head1 HISTORY
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<BN_add(3)>
+L<ERR_get_error(3)>, L<BN_add(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<BN_add(3)>,
+L<ERR_get_error(3)>, L<BN_add(3)>,
L<BN_CTX_new(3)>
=head1 HISTORY
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<BN_add(3)>,
+L<ERR_get_error(3)>, L<BN_add(3)>,
L<BN_CTX_new(3)>
=head1 HISTORY
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>
+L<ERR_get_error(3)>
=head1 HISTORY
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<DH_size(3)>, L<DSA_size(3)>,
+L<DH_size(3)>, L<DSA_size(3)>,
L<RSA_size(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<ERR_get_error(3)>, L<RAND_add(3)>, L<RAND_bytes(3)>
+L<ERR_get_error(3)>, L<RAND_add(3)>, L<RAND_bytes(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<BN_num_bytes(3)>, L<BN_add(3)>
+L<BN_num_bytes(3)>, L<BN_add(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
BN_swap() exchanges the values of I<a> and I<b>.
-L<bn(7)>
-
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<bn(7)>, L<BN_bn2bin(3)>
+L<BN_bn2bin(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<config(5)>, L<OPENSSL_config(3)>,
-L<NCONF_free(3)>
+L<config(5)>, L<OPENSSL_config(3)>
=head1 COPYRIGHT
=head1 COPYRIGHT
-Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
+L<crypto(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
L<EC_POINT_new(3)>, L<EC_POINT_add(3)>, L<EC_KEY_new(3)>,
L<EC_GFp_simple_method(3)>,
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
+L<crypto(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
L<EC_POINT_new(3)>, L<EC_POINT_add(3)>, L<EC_KEY_new(3)>,
L<d2i_ECPKParameters(3)>,
L<BN_mod_mul_montgomery(3)>
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_new(3)>,
+L<crypto(7)>, L<EC_GROUP_new(3)>,
L<EC_POINT_new(3)>, L<EC_POINT_add(3)>, L<EC_KEY_new(3)>,
L<EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)>
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_copy(3)>,
+L<crypto(7)>, L<EC_GROUP_copy(3)>,
L<EC_POINT_new(3)>, L<EC_POINT_add(3)>, L<EC_KEY_new(3)>,
L<EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)>
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_new(3)>,
+L<crypto(7)>, L<EC_GROUP_new(3)>,
L<EC_GROUP_copy(3)>, L<EC_POINT_new(3)>,
L<EC_POINT_add(3)>,
L<EC_GFp_simple_method(3)>,
=head1 COPYRIGHT
-Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_new(3)>,
+L<crypto(7)>, L<EC_GROUP_new(3)>,
L<EC_GROUP_copy(3)>, L<EC_POINT_new(3)>,
L<EC_POINT_add(3)>,
L<EC_GFp_simple_method(3)>,
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
+L<crypto(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
L<EC_POINT_new(3)>, L<EC_KEY_new(3)>,
L<EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)>
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<crypto(7)>, L<ec(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
+L<crypto(7)>, L<EC_GROUP_new(3)>, L<EC_GROUP_copy(3)>,
L<EC_POINT_add(3)>, L<EC_KEY_new(3)>,
L<EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)>
=head1 COPYRIGHT
-Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
and libssl). All resources allocated by OpenSSL are freed. Typically there
should be no need to call this function directly as it is initiated
automatically on application exit. This is done via the standard C library
-L<atexit(3)> function. In the event that the application will close in a manner
+atexit() function. In the event that the application will close in a manner
that will not call the registered atexit() handlers then the application should
call OPENSSL_cleanup() directly. Developers of libraries using OpenSSL
are discouraged from calling this function and should instead, typically, rely
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
L<ct(7)>,
-L<SCT_verify(3)>,
+L<SCT_validate(3)>,
L<OBJ_nid2obj(3)>
=head1 HISTORY
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
the B<PKCS7_DETACHED> flag set.
Otherwise the type of the returned structure can be determined
-using PKCS7_type().
+using PKCS7_type_is_enveloped(), etc.
To support future functionality if B<bcont> is not B<NULL>
B<*bcont> should be initialized to B<NULL>. For example:
=head1 SEE ALSO
-L<ERR_get_error(3)>, L<PKCS7_type(3)>
+L<ERR_get_error(3)>,
L<SMIME_read_PKCS7(3)>, L<PKCS7_sign(3)>,
L<PKCS7_verify(3)>, L<PKCS7_encrypt(3)>
L<PKCS7_decrypt(3)>
=head1 COPYRIGHT
-Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2002-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 NAME
+ssl_ct_validation_cb,
SSL_enable_ct, SSL_CTX_enable_ct, SSL_disable_ct, SSL_CTX_disable_ct,
SSL_set_ct_validation_callback, SSL_CTX_set_ct_validation_callback,
SSL_ct_is_enabled, SSL_CTX_ct_is_enabled -
#include <openssl/ssl.h>
+ typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx,
+ const STACK_OF(SCT) *scts, void *arg);
+
int SSL_enable_ct(SSL *s, int validation_mode);
int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode);
int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback,
L<SSL_session_reused(3)>,
L<SSL_set_verify(3)>,
L<SSL_CTX_set_verify(3)>,
-L<ssl_ct_validation_cb(3)>,
L<SSL_SESSION_get_time(3)>
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
file, the key logging callback should log B<line>, followed by a newline.
B<line> will always be a NULL-terminated string.
-
=head1 SEE ALSO
-L<ssl(3)>
+L<ssl(7)>
=head1 COPYRIGHT
=head1 NAME
+SSL_get_ex_data_X509_STORE_CTX_idx,
SSL_CTX_set_verify, SSL_set_verify,
SSL_CTX_set_verify_depth, SSL_set_verify_depth,
SSL_verify_cb
void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb verify_callback);
void SSL_set_verify(SSL *s, int mode, SSL_verify_cb verify_callback);
+ SSL_get_ex_data_X509_STORE_CTX_idx(void);
+
void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);
void SSL_set_verify_depth(SSL *s, int depth);
+
typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx);
=head1 DESCRIPTION
this case last B<verify_callback> set specifically for this B<ssl> remains. If
no special B<callback> was set before, the default callback for the underlying
B<ctx> is used, that was valid at the time B<ssl> was created with
-L<SSL_new(3)>.
+L<SSL_new(3)>. Within the callback function,
+B<SSL_get_ex_data_X509_STORE_CTX_idx> can be called to get the data index
+of the current SSL object that is doing the verification.
SSL_CTX_set_verify_depth() sets the maximum B<depth> for the certificate chain
verification that shall be allowed for B<ctx>. (See the BUGS section.)
The example makes use of the ex_data technique to store application data
into/retrieve application data from the SSL structure
-(see L<SSL_get_ex_new_index(3)>,
+(see L<CRYPTO_get_ex_new_index(3)>,
L<SSL_get_ex_data_X509_STORE_CTX_idx(3)>).
...
L<SSL_get_peer_certificate(3)>,
L<SSL_CTX_set_cert_verify_callback(3)>,
L<SSL_get_ex_data_X509_STORE_CTX_idx(3)>,
-L<SSL_get_ex_new_index(3)>
+L<CRYPTO_get_ex_new_index(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<SSL_get_rbio(7)>,
+L<SSL_get_rbio(3)>,
L<SSL_connect(3)>, L<SSL_accept(3)>,
L<SSL_shutdown(3)>, L<ssl(7)>, L<bio(7)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 COPYRIGHT
-Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
1.0.0, and all certificate stores have to be rehashed when moving from OpenSSL
0.9.8 to 1.0.0.
-OpenSSL includes a L<c_rehash(1)> utility which creates symlinks with correct
+OpenSSL includes a L<rehash(1)> utility which creates symlinks with correct
hashed names for all files with .pem suffix in a given directory.
=head1 SEE ALSO
L<PEM_read_PrivateKey(3)>,
-L<d2i_X509_bio(3)>,
L<X509_STORE_load_locations(3)>,
-L<X609_store_add_lookup(3)>,
+L<X509_store_add_lookup(3)>,
L<SSL_CTX_load_verify_locations(3)>,
=head1 COPYRIGHT
-Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<EVP_SHA1(3)>
+L<EVP_sha1(3)>
=head1 COPYRIGHT
=head1 SEE ALSO
L<crypto(7)>,
-L<d2i_PKCS8PrivateKey(3)>
+L<d2i_PKCS8PrivateKey_bio(3)>
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
L<CTLOG_STORE_get0_log_by_id(3)>,
L<SCT_new(3)>,
L<SCT_print(3)>,
-L<SCT_verify(3)>,
L<SCT_validate(3)>,
-L<CT_POLICY_EVAL_CTX(3)>,
+L<SCT_validate(3)>,
+L<CT_POLICY_EVAL_CTX_new(3)>,
L<SSL_CTX_set_ct_validation_callback(3)>
=head1 HISTORY
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 SEE ALSO
-L<BF_encrypt(3)>, L<DES_crypt(3)>, L<IDEA(3)>,
-L<RC2(3)>
+L<BF_encrypt(3)>, L<DES_crypt(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
each connection with the duplicated handle.
Use of SSL_dup() avoids the need to repeat the configuration of the
handles for each connection.
-This is used internally by L<BIO_s_accept(3)> to construct
-per-connection SSL handles after L<accept(2)>.
For SSL_dup() to work, the connection MUST be in its initial state
and MUST NOT have not yet have started the SSL handshake.
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
=head1 DESCRIPTION
-A X.509 certificate is a structured grouping of information about
+An X.509 certificate is a structured grouping of information about
an individual, a device, or anything one can imagine. A X.509 CRL
(certificate revocation list) is a tool to help determine if a
certificate is still valid. The exact definition of those can be
L<d2i_X509_NAME(3)>,
L<d2i_X509_REQ(3)>,
L<d2i_X509_SIG(3)>,
-L<crypto(7)>,
-L<x509v3(3)>
+L<X509v3(3)>,
+L<crypto(7)>
=head1 COPYRIGHT
-Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2003-2017 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
+++ /dev/null
-#! /usr/bin/env perl
-# Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License"). You may not use
-# this file except in compliance with the License. You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-
-require 5.10.0;
-use warnings;
-use strict;
-use File::Basename;
-
-# Collection of links in each POD file.
-# filename => [ "foo(1)", "bar(3)", ... ]
-my %link_collection = ();
-# Collection of names in each POD file.
-# "name(s)" => filename
-my %name_collection = ();
-
-sub collect {
- my $filename = shift;
- $filename =~ m|man(\d)/|;
- my $section = $1;
- my $simplename = basename($filename, ".pod");
- my $err = 0;
-
- my $contents = '';
- {
- local $/ = undef;
- open POD, $filename or die "Couldn't open $filename, $!";
- $contents = <POD>;
- close POD;
- }
-
- $contents =~ /=head1 NAME([^=]*)=head1 /ms;
- my $tmp = $1;
- unless (defined $tmp) {
- warn "weird name section in $filename\n";
- return 1;
- }
- $tmp =~ tr/\n/ /;
- $tmp =~ s/-.*//g;
-
- my @names = map { s/\s+//g; $_ } split(/,/, $tmp);
- unless (grep { $simplename eq $_ } @names) {
- warn "$simplename missing among the names in $filename\n";
- push @names, $simplename;
- }
- foreach my $name (@names) {
- next if $name eq "";
- my $namesection = "$name($section)";
- if (exists $name_collection{$namesection}) {
- warn "$namesection, found in $filename, already exists in $name_collection{$namesection}\n";
- $err++;
- } else {
- $name_collection{$namesection} = $filename;
- }
- }
-
- my @foreign_names =
- map { map { s/\s+//g; $_ } split(/,/, $_) }
- $contents =~ /=for\s+comment\s+foreign\s+manuals:\s*(.*)\n\n/;
- foreach (@foreign_names) {
- $name_collection{$_} = undef; # It still exists!
- }
-
- my @links = $contents =~ /L<
- # if the link is of the form L<something|name(s)>,
- # then remove 'something'. Note that 'something'
- # may contain POD codes as well...
- (?:(?:[^\|]|<[^>]*>)*\|)?
- # we're only interested in referenses that have
- # a one digit section number
- ([^\/>\(]+\(\d\))
- /gx;
- $link_collection{$filename} = [ @links ];
-
- return $err;
-}
-
-sub check {
- foreach my $filename (sort keys %link_collection) {
- foreach my $link (@{$link_collection{$filename}}) {
- warn "$link in $filename refers to a non-existing manual\n"
- unless exists $name_collection{$link};
- }
- }
-}
-
-
-my $errs = 0;
-foreach (@ARGV ? @ARGV : glob('doc/*/*.pod')) {
- $errs += collect($_);
-}
-check() unless $errs > 0;
-
-exit;
--- /dev/null
+#! /usr/bin/env perl
+# Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the OpenSSL license (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+
+require 5.10.0;
+use warnings;
+use strict;
+use Pod::Checker;
+use File::Find;
+use File::Basename;
+use File::Spec::Functions;
+use Getopt::Std;
+use lib catdir(dirname($0), "perl");
+use OpenSSL::Util::Pod;
+
+# Options.
+our($opt_s);
+our($opt_u);
+our($opt_h);
+our($opt_n);
+our($opt_l);
+
+sub help()
+{
+ print <<EOF;
+Find small errors (nits) in documentation. Options:
+ -l Print bogus links
+ -n Print nits in POD pages
+ -s Also print missing sections in POD pages (implies -n)
+ -u List undocumented functions
+ -h Print this help message
+EOF
+ exit;
+}
+
+my $temp = '/tmp/docnits.txt';
+my $OUT;
+
+my %mandatory_sections =
+ ( '*' => [ 'NAME', 'DESCRIPTION', 'COPYRIGHT' ],
+ 1 => [ 'SYNOPSIS', 'OPTIONS' ],
+ 3 => [ 'SYNOPSIS', 'RETURN VALUES' ],
+ 5 => [ ],
+ 7 => [ ] );
+
+# Cross-check functions in the NAME and SYNOPSIS section.
+sub name_synopsis()
+{
+ my $id = shift;
+ my $filename = shift;
+ my $contents = shift;
+
+ # Get NAME section and all words in it.
+ return unless $contents =~ /=head1 NAME(.*)=head1 SYNOPSIS/ms;
+ my $tmp = $1;
+ $tmp =~ tr/\n/ /;
+ $tmp =~ s/-.*//g;
+ $tmp =~ s/,//g;
+
+ my $dirname = dirname($filename);
+ my $simplename = basename($filename);
+ $simplename =~ s/.pod$//;
+ my $foundfilename = 0;
+ my %foundfilenames = ();
+ my %names;
+ foreach my $n ( split ' ', $tmp ) {
+ $names{$n} = 1;
+ $foundfilename++ if $n eq $simplename;
+ $foundfilenames{$n} = 1
+ if -f "$dirname/$n.pod" && $n ne $simplename;
+ }
+ print "$id the following exist as other .pod files:\n",
+ join(" ", sort keys %foundfilenames), "\n"
+ if %foundfilenames;
+ print "$id $simplename (filename) missing from NAME section\n",
+ unless $foundfilename;
+
+ # Find all functions in SYNOPSIS
+ return unless $contents =~ /=head1 SYNOPSIS(.*)=head1 DESCRIPTION/ms;
+ my $syn = $1;
+ foreach my $line ( split /\n+/, $syn ) {
+ my $sym;
+ $line =~ s/STACK_OF\([^)]+\)/int/g;
+ $line =~ s/__declspec\([^)]+\)//;
+ if ( $line =~ /env (\S*)=/ ) {
+ # environment variable env NAME=...
+ $sym = $1;
+ } elsif ( $line =~ /typedef.*\(\*(\S+)\)\(.*/ ) {
+ # a callback function: typedef ... (*NAME)(...
+ $sym = $1;
+ } elsif ( $line =~ /typedef.* (\S+);/ ) {
+ # a simple typedef: typedef ... NAME;
+ $sym = $1;
+ } elsif ( $line =~ /#define ([A-Za-z0-9_]+)/ ) {
+ $sym = $1;
+ } elsif ( $line =~ /([A-Za-z0-9_]+)\(/ ) {
+ $sym = $1;
+ }
+ else {
+ next;
+ }
+ print "$id $sym missing from NAME section\n"
+ unless defined $names{$sym};
+ $names{$sym} = 2;
+
+ # Do some sanity checks on the prototype.
+ print "$id prototype missing spaces around commas: $line\n"
+ if ( $line =~ /[a-z0-9],[^ ]/ );
+ }
+
+ foreach my $n ( keys %names ) {
+ next if $names{$n} == 2;
+ print "$id $n missing from SYNOPSIS\n";
+ }
+}
+
+sub check()
+{
+ my $filename = shift;
+ my $dirname = basename(dirname($filename));
+
+ my $contents = '';
+ {
+ local $/ = undef;
+ open POD, $filename or die "Couldn't open $filename, $!";
+ $contents = <POD>;
+ close POD;
+ }
+
+ my $id = "${filename}:1:";
+
+ &name_synopsis($id, $filename, $contents)
+ unless $contents =~ /=for comment generic/
+ or $filename =~ m@man[157]/@;
+
+ print "$id doesn't start with =pod\n"
+ if $contents !~ /^=pod/;
+ print "$id doesn't end with =cut\n"
+ if $contents !~ /=cut\n$/;
+ print "$id more than one cut line.\n"
+ if $contents =~ /=cut.*=cut/ms;
+ print "$id missing copyright\n"
+ if $contents !~ /Copyright .* The OpenSSL Project Authors/;
+ print "$id copyright not last\n"
+ if $contents =~ /head1 COPYRIGHT.*=head/ms;
+ print "$id head2 in All uppercase\n"
+ if $contents =~ /head2\s+[A-Z ]+\n/;
+ print "$id extra space after head\n"
+ if $contents =~ /=head\d\s\s+/;
+ print "$id period in NAME section\n"
+ if $contents =~ /=head1 NAME.*\.\n.*=head1 SYNOPSIS/ms;
+ print "$id POD markup in NAME section\n"
+ if $contents =~ /=head1 NAME.*[<>].*=head1 SYNOPSIS/ms;
+
+ # Look for multiple consecutive openssl #include lines.
+ # Consecutive because of files like md5.pod. Sometimes it's okay
+ # or necessary, as in ssl/SSL_set1_host.pod
+ if ( $contents !~ /=for comment multiple includes/ ) {
+ if ( $contents =~ /=head1 SYNOPSIS(.*)=head1 DESCRIPTION/ms ) {
+ my $count = 0;
+ foreach my $line ( split /\n+/, $1 ) {
+ if ( $line =~ m@include <openssl/@ ) {
+ if ( ++$count == 2 ) {
+ print "$id has multiple includes\n";
+ }
+ } else {
+ $count = 0;
+ }
+ }
+ }
+ }
+
+ return unless $opt_s;
+
+ # Find what section this page is in. If run from "." assume
+ # section 3.
+ my $section = 3;
+ $section = $1 if $dirname =~ /man([1-9])/;
+
+ foreach ((@{$mandatory_sections{'*'}}, @{$mandatory_sections{$section}})) {
+ print "$id: missing $_ head1 section\n"
+ if $contents !~ /^=head1\s+${_}\s*$/m;
+ }
+
+ open my $OUT, '>', $temp
+ or die "Can't open $temp, $!";
+ podchecker($filename, $OUT);
+ close $OUT;
+ open $OUT, '<', $temp
+ or die "Can't read $temp, $!";
+ while ( <$OUT> ) {
+ next if /\(section\) in.*deprecated/;
+ print;
+ }
+ close $OUT;
+ unlink $temp || warn "Can't remove $temp, $!";
+}
+
+my %dups;
+
+sub parsenum()
+{
+ my $file = shift;
+ my @apis;
+
+ open my $IN, '<', $file
+ or die "Can't open $file, $!, stopped";
+
+ while ( <$IN> ) {
+ next if /\bNOEXIST\b/;
+ next if /\bEXPORT_VAR_AS_FUNC\b/;
+ push @apis, $1 if /([^\s]+).\s/;
+ }
+
+ close $IN;
+
+ print "# Found ", scalar(@apis), " in $file\n";
+ return sort @apis;
+}
+
+sub getdocced()
+{
+ my $dir = shift;
+ my %return;
+
+ foreach my $pod ( glob("$dir/*.pod") ) {
+ my %podinfo = extract_pod_info($pod);
+ foreach my $n ( @{$podinfo{names}} ) {
+ $return{$n} = $pod;
+ print "# Duplicate $n in $pod and $dups{$n}\n"
+ if defined $dups{$n} && $dups{$n} ne $pod;
+ $dups{$n} = $pod;
+ }
+ }
+
+ return %return;
+}
+
+my %docced;
+
+sub printem()
+{
+ my $libname = shift;
+ my $numfile = shift;
+ my $count = 0;
+
+ foreach my $func ( &parsenum($numfile) ) {
+ next if $docced{$func};
+
+ # Skip ASN1 utilities
+ next if $func =~ /^ASN1_/;
+
+ print "$libname:$func\n";
+ $count++;
+ }
+ print "# Found $count missing from $numfile\n\n";
+}
+
+
+# Collection of links in each POD file.
+# filename => [ "foo(1)", "bar(3)", ... ]
+my %link_collection = ();
+# Collection of names in each POD file.
+# "name(s)" => filename
+my %name_collection = ();
+
+sub collectnames {
+ my $filename = shift;
+ $filename =~ m|man(\d)/|;
+ my $section = $1;
+ my $simplename = basename($filename, ".pod");
+ my $id = "${filename}:1:";
+
+ my $contents = '';
+ {
+ local $/ = undef;
+ open POD, $filename or die "Couldn't open $filename, $!";
+ $contents = <POD>;
+ close POD;
+ }
+
+ $contents =~ /=head1 NAME([^=]*)=head1 /ms;
+ my $tmp = $1;
+ unless (defined $tmp) {
+ print "$id weird name section\n";
+ return;
+ }
+ $tmp =~ tr/\n/ /;
+ $tmp =~ s/-.*//g;
+
+ my @names = map { s/\s+//g; $_ } split(/,/, $tmp);
+ unless (grep { $simplename eq $_ } @names) {
+ print "$id missing $simplename\n";
+ push @names, $simplename;
+ }
+ foreach my $name (@names) {
+ next if $name eq "";
+ my $name_sec = "$name($section)";
+ if (! exists $name_collection{$name_sec}) {
+ $name_collection{$name_sec} = $filename;
+ } else { #elsif ($filename ne $name_collection{$name_sec}) {
+ print "$id $name_sec also in $name_collection{$name_sec}\n";
+ }
+ }
+
+ my @foreign_names =
+ map { map { s/\s+//g; $_ } split(/,/, $_) }
+ $contents =~ /=for\s+comment\s+foreign\s+manuals:\s*(.*)\n\n/;
+ foreach (@foreign_names) {
+ $name_collection{$_} = undef; # It still exists!
+ }
+
+ my @links = $contents =~ /L<
+ # if the link is of the form L<something|name(s)>,
+ # then remove 'something'. Note that 'something'
+ # may contain POD codes as well...
+ (?:(?:[^\|]|<[^>]*>)*\|)?
+ # we're only interested in referenses that have
+ # a one digit section number
+ ([^\/>\(]+\(\d\))
+ /gx;
+ $link_collection{$filename} = [ @links ];
+}
+
+sub checklinks {
+ foreach my $filename (sort keys %link_collection) {
+ foreach my $link (@{$link_collection{$filename}}) {
+ print "${filename}:1: reference to non-existing $link\n"
+ unless exists $name_collection{$link};
+ }
+ }
+}
+
+getopts('lnshu');
+
+&help() if ( $opt_h );
+
+die "Need one of -l -n -s or -u flags.\n"
+ unless $opt_l or $opt_n or $opt_s or $opt_u;
+
+if ( $opt_n or $opt_s ) {
+ foreach (@ARGV ? @ARGV : glob('doc/*/*.pod')) {
+ &check($_);
+ }
+}
+
+if ( $opt_l ) {
+ foreach (@ARGV ? @ARGV : glob('doc/*/*.pod')) {
+ collectnames($_);
+ }
+ checklinks();
+}
+
+if ( $opt_u ) {
+ my %temp = &getdocced('doc/man3');
+ foreach ( keys %temp ) {
+ $docced{$_} = $temp{$_};
+ }
+ &printem('crypto', 'util/libcrypto.num');
+ &printem('ssl', 'util/libssl.num');
+}
+
+exit;
+++ /dev/null
-#! /usr/bin/env perl
-# Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License"). You may not use
-# this file except in compliance with the License. You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-
-require 5.10.0;
-use warnings;
-use strict;
-use Pod::Checker;
-use File::Find;
-use File::Basename;
-use File::Spec::Functions;
-use Getopt::Std;
-use lib catdir(dirname($0), "perl");
-use OpenSSL::Util::Pod;
-
-# Options.
-our($opt_s);
-our($opt_u);
-our($opt_h);
-our($opt_n);
-
-sub help()
-{
- print <<EOF;
-Find small errors (nits) in documentation. Options:
- -n Print nits in POD pages
- -s Also print missing sections in POD pages (implies -n)
- -u List undocumented functions
- -h Print this help message
-EOF
- exit;
-}
-
-my $temp = '/tmp/docnits.txt';
-my $OUT;
-
-my %mandatory_sections =
- ( '*' => [ 'NAME', 'DESCRIPTION', 'COPYRIGHT' ],
- 1 => [ 'SYNOPSIS', 'OPTIONS' ],
- 3 => [ 'SYNOPSIS', 'RETURN VALUES' ],
- 5 => [ ],
- 7 => [ ] );
-
-# Cross-check functions in the NAME and SYNOPSIS section.
-sub name_synopsis()
-{
- my $id = shift;
- my $filename = shift;
- my $contents = shift;
-
- # Get NAME section and all words in it.
- return unless $contents =~ /=head1 NAME(.*)=head1 SYNOPSIS/ms;
- my $tmp = $1;
- $tmp =~ tr/\n/ /;
- $tmp =~ s/-.*//g;
- $tmp =~ s/,//g;
-
- my $dirname = dirname($filename);
- my $simplename = basename($filename);
- $simplename =~ s/.pod$//;
- my $foundfilename = 0;
- my %foundfilenames = ();
- my %names;
- foreach my $n ( split ' ', $tmp ) {
- $names{$n} = 1;
- $foundfilename++ if $n eq $simplename;
- $foundfilenames{$n} = 1
- if -f "$dirname/$n.pod" && $n ne $simplename;
- }
- print "$id the following exist as other .pod files:\n",
- join(" ", sort keys %foundfilenames), "\n"
- if %foundfilenames;
- print "$id $simplename (filename) missing from NAME section\n",
- unless $foundfilename;
-
- # Find all functions in SYNOPSIS
- return unless $contents =~ /=head1 SYNOPSIS(.*)=head1 DESCRIPTION/ms;
- my $syn = $1;
- foreach my $line ( split /\n+/, $syn ) {
- my $sym;
- $line =~ s/STACK_OF\([^)]+\)/int/g;
- $line =~ s/__declspec\([^)]+\)//;
- if ( $line =~ /env (\S*)=/ ) {
- # environment variable env NAME=...
- $sym = $1;
- } elsif ( $line =~ /typedef.*\(\*(\S+)\)\(.*/ ) {
- # a callback function: typedef ... (*NAME)(...
- $sym = $1;
- } elsif ( $line =~ /typedef.* (\S+);/ ) {
- # a simple typedef: typedef ... NAME;
- $sym = $1;
- } elsif ( $line =~ /#define ([A-Za-z0-9_]+)/ ) {
- $sym = $1;
- } elsif ( $line =~ /([A-Za-z0-9_]+)\(/ ) {
- $sym = $1;
- }
- else {
- next;
- }
- print "$id $sym missing from NAME section\n"
- unless defined $names{$sym};
- $names{$sym} = 2;
-
- # Do some sanity checks on the prototype.
- print "$id prototype missing spaces around commas: $line\n"
- if ( $line =~ /[a-z0-9],[^ ]/ );
- }
-
- foreach my $n ( keys %names ) {
- next if $names{$n} == 2;
- print "$id $n missing from SYNOPSIS\n";
- }
-}
-
-sub check()
-{
- my $filename = shift;
- my $dirname = basename(dirname($filename));
-
- my $contents = '';
- {
- local $/ = undef;
- open POD, $filename or die "Couldn't open $filename, $!";
- $contents = <POD>;
- close POD;
- }
-
- my $id = "${filename}:1:";
-
- &name_synopsis($id, $filename, $contents)
- unless $contents =~ /=for comment generic/
- or $filename =~ m@man[157]/@;
-
- print "$id doesn't start with =pod\n"
- if $contents !~ /^=pod/;
- print "$id doesn't end with =cut\n"
- if $contents !~ /=cut\n$/;
- print "$id more than one cut line.\n"
- if $contents =~ /=cut.*=cut/ms;
- print "$id missing copyright\n"
- if $contents !~ /Copyright .* The OpenSSL Project Authors/;
- print "$id copyright not last\n"
- if $contents =~ /head1 COPYRIGHT.*=head/ms;
- print "$id head2 in All uppercase\n"
- if $contents =~ /head2\s+[A-Z ]+\n/;
- print "$id extra space after head\n"
- if $contents =~ /=head\d\s\s+/;
- print "$id period in NAME section\n"
- if $contents =~ /=head1 NAME.*\.\n.*=head1 SYNOPSIS/ms;
- print "$id POD markup in NAME section\n"
- if $contents =~ /=head1 NAME.*[<>].*=head1 SYNOPSIS/ms;
-
- # Look for multiple consecutive openssl #include lines.
- # Consecutive because of files like md5.pod. Sometimes it's okay
- # or necessary, as in ssl/SSL_set1_host.pod
- if ( $contents !~ /=for comment multiple includes/ ) {
- if ( $contents =~ /=head1 SYNOPSIS(.*)=head1 DESCRIPTION/ms ) {
- my $count = 0;
- foreach my $line ( split /\n+/, $1 ) {
- if ( $line =~ m@include <openssl/@ ) {
- if ( ++$count == 2 ) {
- print "$id has multiple includes\n";
- }
- } else {
- $count = 0;
- }
- }
- }
- }
-
- return unless $opt_s;
-
- # Find what section this page is in. If run from "." assume
- # section 3.
- my $section = 3;
- $section = $1 if $dirname =~ /man([1-9])/;
-
- foreach ((@{$mandatory_sections{'*'}}, @{$mandatory_sections{$section}})) {
- print "$id: missing $_ head1 section\n"
- if $contents !~ /^=head1\s+${_}\s*$/m;
- }
-
- open my $OUT, '>', $temp
- or die "Can't open $temp, $!";
- podchecker($filename, $OUT);
- close $OUT;
- open $OUT, '<', $temp
- or die "Can't read $temp, $!";
- while ( <$OUT> ) {
- next if /\(section\) in.*deprecated/;
- print;
- }
- close $OUT;
- unlink $temp || warn "Can't remove $temp, $!";
-}
-
-my %dups;
-
-sub parsenum()
-{
- my $file = shift;
- my @apis;
-
- open my $IN, '<', $file
- or die "Can't open $file, $!, stopped";
-
- while ( <$IN> ) {
- next if /\bNOEXIST\b/;
- next if /\bEXPORT_VAR_AS_FUNC\b/;
- push @apis, $1 if /([^\s]+).\s/;
- }
-
- close $IN;
-
- print "# Found ", scalar(@apis), " in $file\n";
- return sort @apis;
-}
-
-sub getdocced()
-{
- my $dir = shift;
- my %return;
-
- foreach my $pod ( glob("$dir/*.pod") ) {
- my %podinfo = extract_pod_info($pod);
- foreach my $n ( @{$podinfo{names}} ) {
- $return{$n} = $pod;
- print "# Duplicate $n in $pod and $dups{$n}\n"
- if defined $dups{$n} && $dups{$n} ne $pod;
- $dups{$n} = $pod;
- }
- }
-
- return %return;
-}
-
-my %docced;
-
-sub printem()
-{
- my $libname = shift;
- my $numfile = shift;
- my $count = 0;
-
- foreach my $func ( &parsenum($numfile) ) {
- next if $docced{$func};
-
- # Skip ASN1 utilities
- next if $func =~ /^ASN1_/;
-
- print "$libname:$func\n";
- $count++;
- }
- print "# Found $count missing from $numfile\n\n";
-}
-
-
-getopts('nshu');
-
-&help() if ( $opt_h );
-
-die "Need one of -n -s or -u flags.\n"
- unless $opt_n or $opt_s or $opt_u;
-
-if ( $opt_n or $opt_s ) {
- foreach (@ARGV ? @ARGV : glob('doc/*/*.pod')) {
- &check($_);
- }
-}
-if ( $opt_u ) {
- my %temp = &getdocced('doc/man3');
- foreach ( keys %temp ) {
- $docced{$_} = $temp{$_};
- }
- &printem('crypto', 'util/libcrypto.num');
- &printem('ssl', 'util/libssl.num');
-}
-
-exit;