-$(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/*"`
generate: generate_apps generate_crypto_bn generate_crypto_objects \
generate_crypto_conf generate_crypto_asn1
+doc-nits:
+ (cd $(SRCDIR); $(PERL) util/find-doc-nits.pl -n ) >doc-nits
+ 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(3)>
-
=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(3)>, 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(3)>, 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(3)>, 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(3)>, 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(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(3)>, 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(3)>, L<ERR_get_error(3)>, L<rand(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(3)>, 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(3)>, 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(3)>, 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(3)>, 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(3)>, 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(3)>, L<ERR_get_error(3)>, L<rand(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(3)>, 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(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(3)>, 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
RSA
ENGINE
UI
+ UI_METHOD
BIO
Each is identified by an B<CRYPTO_EX_INDEX_xxx> define in the B<crypto.h>
=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(3)>, L<ec(3)>, 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(3)>, L<ec(3)>, 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(3)>, L<ec(3)>, 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(3)>, L<ec(3)>, 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(3)>, L<ec(3)>, 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(3)>, L<ec(3)>, 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(3)>, L<ec(3)>, 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(3)>, L<ec(3)>, 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(3)>,
-L<SCT_verify(3)>,
+L<ct(7)>,
+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
UI_add_error_string, UI_dup_error_string, UI_construct_prompt,
UI_add_user_data, UI_get0_user_data, UI_get0_result, UI_process,
UI_ctrl, UI_set_default_method, UI_get_default_method, UI_get_method,
-UI_set_method, UI_OpenSSL, - user interface
+UI_set_method, UI_OpenSSL, UI_null - user interface
=head1 SYNOPSIS
const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);
UI_METHOD *UI_OpenSSL(void);
+ const UI_METHOD *UI_null(void);
=head1 DESCRIPTION
UI_OpenSSL() is the default OpenSSL UI method for prompting
passphrases on the command line.
+UI_null() is a UI method that does nothing. Its use is to avoid
+getting internal defaults for passed UI_METHOD pointers.
+
=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
=pod
-=for comment openssl_manual_section:7
-
=head1 NAME
ct - Certificate Transparency
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<crypto(3)>,
-L<d2i_PKCS8PrivateKey(3)>
+L<crypto(7)>,
+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
=pod
-=for comment openssl_manual_section:7
-
=head1 NAME
x509 - X.509 certificate handling
=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(3)>,
-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
=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
=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
=over 4
-=item
+=item *
If neither the rbio or wbio have changed from their previous values then nothing
is done.
-=item
+=item *
If the rbio and wbio parameters are different and both are different to their
previously set values then one reference is consumed for the rbio and one
reference is consumed for the wbio.
-=item
+=item *
If the rbio and wbio parameters are the same and the rbio is not the same as the
previously set value then one reference is consumed.
-=item
+=item *
If the rbio and wbio parameters are the same and the rbio is the same as the
previously set value, then no additional references are consumed.
-=item
+=item *
If the rbio and wbio parameters are different and the rbio is the same as the
previously set value then one reference is consumbed for the wbio and no
references are consumed for the rbio.
-=item
+=item *
If the rbio and wbio parameters are different and the wbio is the same as the
previously set value and the old rbio and wbio values were the same as each
other then one reference is consumed for the rbio and no references are consumed
for the wbio.
-=item
+=item *
If the rbio and wbio parameters are different and the wbio is the same as the
previously set value and the old rbio and wbio values were different to each
L<SSL_get_rbio(3)>,
L<SSL_connect(3)>, L<SSL_accept(3)>,
-L<SSL_shutdown(3)>, L<ssl(3)>, L<bio(3)>
+L<SSL_shutdown(3)>, L<ssl(7)>, L<bio(7)>
=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
=pod
-=for comment openssl_manual_section:7
-
=head1 NAME
-SSL - OpenSSL SSL/TLS library
+ssl - OpenSSL SSL/TLS library
=head1 SYNOPSIS
Then the TLS/SSL handshake is performed using
L<SSL_accept(3)> or L<SSL_connect(3)>
respectively.
-L<SSL_read(3)> and L<SSL_write(3)> are used
-to read and write data on the TLS/SSL connection.
+L<SSL_read(3)> and L<SSL_write(3)> are
+used to read and write data on the TLS/SSL connection.
L<SSL_shutdown(3)> can be used to shut down the
TLS/SSL connection.
=item void B<SSL_CTX_set_cert_store>(SSL_CTX *ctx, X509_STORE *cs);
+=item void B<SSL_CTX_set1_cert_store>(SSL_CTX *ctx, X509_STORE *cs);
+
=item void B<SSL_CTX_set_cert_verify_cb>(SSL_CTX *ctx, int (*cb)(), char *arg)
=item int B<SSL_CTX_set_cipher_list>(SSL_CTX *ctx, char *str);
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.
=item void (*B<SSL_get_info_callback>(const SSL *ssl);)()
+=item int B<SSL_get_key_update_type>(SSL *s);
+
=item STACK *B<SSL_get_peer_cert_chain>(const SSL *ssl);
=item X509 *B<SSL_get_peer_certificate>(const SSL *ssl);
=item int B<SSL_is_init_finished>(SSL *ssl);
+=item int B<SSL_key_update>(SSL *s, int updatetype);
+
=item STACK *B<SSL_load_client_CA_file>(const char *file);
=item SSL *B<SSL_new>(SSL_CTX *ctx);
=head1 SEE ALSO
-L<openssl(1)>, L<crypto(3)>,
+L<openssl(1)>, L<crypto(7)>,
L<CRYPTO_get_ex_new_index(3)>,
L<SSL_accept(3)>, L<SSL_clear(3)>,
L<SSL_connect(3)>,
L<SSL_load_client_CA_file(3)>,
L<SSL_new(3)>,
L<SSL_pending(3)>,
+L<SSL_read_ex(3)>,
L<SSL_read(3)>,
L<SSL_rstate_string(3)>,
L<SSL_session_reused(3)>,
L<SSL_shutdown(3)>,
L<SSL_state_string(3)>,
L<SSL_want(3)>,
+L<SSL_write_ex(3)>,
L<SSL_write(3)>,
L<SSL_SESSION_free(3)>,
L<SSL_SESSION_get_time(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
--- /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 Getopt::Std;
-
-our($opt_s);
-
-my $temp = '/tmp/docnits.txt';
-my $OUT;
-
-my %mandatory_sections =
- ( '*' => [ 'NAME', 'DESCRIPTION', 'COPYRIGHT' ],
- 1 => [ 'SYNOPSIS', 'OPTIONS' ],
- 3 => [ 'SYNOPSIS', 'RETURN VALUES' ],
- 5 => [ ],
- 7 => [ ] );
-my %default_sections =
- ( apps => 1,
- crypto => 3,
- ssl => 3 );
-
-# 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 $contents =~ /=for comment openssl_manual_section:7/
- or $filename =~ m@/apps/@;
-
- 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 = $default_sections{$dirname} || 3;
- if ($contents =~ /^=for\s+comment\s+openssl_manual_section:\s*(\d+)\s*$/m) {
- $section = $1;
- }
-
- 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, $!";
-}
-
-getopts('s');
-
-foreach (@ARGV ? @ARGV : glob('doc/*/*.pod')) {
- &check($_);
-}
-
-exit;