Fix many doc L<> errors
authorRich Salz <rsalz@openssl.org>
Sat, 11 Mar 2017 13:56:44 +0000 (08:56 -0500)
committerRich Salz <rsalz@openssl.org>
Sat, 11 Mar 2017 13:56:44 +0000 (08:56 -0500)
Add 2017 copyright year
Add missing typedef to NAME
Remove ec(7) and bn(7) doc links
Remove .pod link errors, bogus links, make a few typo corrections
Fix some typo's in links and some missing items.
Don't link to C runtime functions (See OPENSSL_malloc for example/precedent)
Document ASN1_tag2str(), add a few typedef's that were missing from NAME
Update doc-nits target; addresses
    https://github.com/openssl/openssl/pull/1900#issuecomment-259943891,
Merge check-doc-links into find-doc-nits; if run regularly, would have found
    https://github.com/openssl/openssl/pull/2825

Reviewed-by: Richard Levitte <levitte@openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/2862)

47 files changed:
Configurations/unix-Makefile.tmpl
doc/man3/ASN1_STRING_print_ex.pod
doc/man3/BN_BLINDING_new.pod
doc/man3/BN_CTX_new.pod
doc/man3/BN_add.pod
doc/man3/BN_add_word.pod
doc/man3/BN_bn2bin.pod
doc/man3/BN_cmp.pod
doc/man3/BN_copy.pod
doc/man3/BN_generate_prime.pod
doc/man3/BN_mod_inverse.pod
doc/man3/BN_mod_mul_montgomery.pod
doc/man3/BN_mod_mul_reciprocal.pod
doc/man3/BN_new.pod
doc/man3/BN_num_bytes.pod
doc/man3/BN_rand.pod
doc/man3/BN_set_bit.pod
doc/man3/BN_swap.pod
doc/man3/BN_zero.pod
doc/man3/CONF_modules_load_file.pod
doc/man3/CRYPTO_get_ex_new_index.pod
doc/man3/ECPKParameters_print.pod
doc/man3/EC_GFp_simple_method.pod
doc/man3/EC_GROUP_copy.pod
doc/man3/EC_GROUP_new.pod
doc/man3/EC_KEY_get_enc_flags.pod
doc/man3/EC_KEY_new.pod
doc/man3/EC_POINT_add.pod
doc/man3/EC_POINT_new.pod
doc/man3/OPENSSL_init_crypto.pod
doc/man3/SCT_new.pod
doc/man3/SMIME_read_PKCS7.pod
doc/man3/SSL_CTX_set_ct_validation_callback.pod
doc/man3/SSL_CTX_set_keylog_callback.pod
doc/man3/SSL_CTX_set_verify.pod
doc/man3/SSL_set_bio.pod
doc/man3/UI_new.pod
doc/man3/X509_LOOKUP_hash_dir.pod
doc/man3/X509_digest.pod
doc/man3/d2i_PrivateKey.pod
doc/man7/ct.pod
doc/man7/des_modes.pod
doc/man7/ssl.pod
doc/man7/x509.pod
util/check-doc-links.pl [deleted file]
util/find-doc-nits [new file with mode: 0755]
util/find-doc-nits.pl [deleted file]

index 01f566569f63c939b3852178f90cfb67b9c2be69..26858d42f0c9bf9ae1d7704e9e8587ee4514168e 100644 (file)
@@ -289,7 +289,7 @@ clean: libclean
        -$(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/*"`
@@ -597,7 +597,7 @@ generate: generate_apps generate_crypto_bn generate_crypto_objects \
 
 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)
index d2bf538f6b60c27802a91ba80f6f809e88893ca1..a521f78ea9a9ef237f87386900dfffa795b950f2 100644 (file)
@@ -2,7 +2,8 @@
 
 =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
 
@@ -12,6 +13,7 @@ ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp, ASN1_STRING_print - ASN1_STRING o
  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
 
@@ -26,6 +28,8 @@ ASN1_STRING_print() prints B<str> to B<out> but using a different format to
 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.
@@ -91,7 +95,7 @@ L<ASN1_tag2str(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
index 50fb4c171c180096297a6ada8774faa1a8352453..4229e754a114a9fe4b0c6f6797a97430b759110a 100644 (file)
@@ -105,10 +105,6 @@ BN_BLINDING_get_flags() returns the currently set B<BN_BLINDING> flags
 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
@@ -116,7 +112,7 @@ deprecates BN_BLINDING_set_thread_id() and BN_BLINDING_get_thread_id().
 
 =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
index 84c23e0484584bd1376c17697c118dc6353e9264..623fcd56927a8ae01a88a69bc2f9e96da94335fb 100644 (file)
@@ -57,7 +57,7 @@ replace use of BN_CTX_init with BN_CTX_new instead:
 
 =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
@@ -66,7 +66,7 @@ BN_CTX_init() was removed in OpenSSL 1.1.0.
 
 =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
index c40fbb2501e4fb9c80ea59179bac38b3ade38893..db3b0d45b4790b353e8b8f62d6b066d016055730 100644 (file)
@@ -112,12 +112,12 @@ The error codes can be obtained by L<ERR_get_error(3)>.
 
 =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
index fa74282a93d0202ac804ac14f69935f842694ace..6c69bc485f2ef9b6750ae0046327505ffe0f8f3e 100644 (file)
@@ -47,11 +47,11 @@ B<(BN_ULONG)-1> if an error occurred.
 
 =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
index 8c9c213b4e49cea1670d7eded427acd6f8be4317..9e16c0d23965e7779a344c61b23bbcb72bb2f3eb 100644 (file)
@@ -100,13 +100,13 @@ The error codes can be obtained by L<ERR_get_error(3)>.
 
 =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
index 2ad29008def35807f17bed5206a7ac245c5ee2e8..95d162ff295793eb13109779d4fcadff1dd4782d 100644 (file)
@@ -35,13 +35,9 @@ of B<a> and B<b>.
 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
index 3668de0e28885fee63e32dd942043de9522fd977..500f4b2ee5e8be1e83c687c7b7bdbc471e74fb8b 100644 (file)
@@ -55,11 +55,11 @@ by L<ERR_get_error(3)>.
 
 =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
index 1f08c83ca8461ee6a1e7f7606b4a700f342e0c30..a4ef2302f663803c1fec86bde3dbe8b41bea419d 100644 (file)
@@ -175,7 +175,7 @@ Instead applications should create a BN_GENCB structure using BN_GENCB_new:
 
 =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
 
@@ -184,7 +184,7 @@ and BN_GENCB_get_arg() were added in OpenSSL 1.1.0
 
 =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
index 1dd7b02b6258f4dd43469ff0ce44dc6f254f053d..cb84a140988641951e435be3b91e5f45e8983765 100644 (file)
@@ -27,11 +27,11 @@ NULL on error. The error codes can be obtained by L<ERR_get_error(3)>.
 
 =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
index e97d4e594a3f70f9d3d11cc01f68928f546a5245..81056c76acb11b80c9cc9ecf01a86bb54e767471 100644 (file)
@@ -71,7 +71,7 @@ outside the expected range.
 
 =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
@@ -80,7 +80,7 @@ BN_MONT_CTX_init() was removed in OpenSSL 1.1.0
 
 =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
index f90f2f700236d765f046839231e58b4f3ec5f718..d480fed2d0d083be8221b318cabe3012fdee5f07 100644 (file)
@@ -57,7 +57,7 @@ The error codes can be obtained by L<ERR_get_error(3)>.
 
 =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
@@ -66,7 +66,7 @@ BN_RECP_CTX_init() was removed in OpenSSL 1.1.0
 
 =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
index 022f7be7f3f74ab37937ee5d31f226cd638fcdd4..36bd00da28f69707f7d49ee7f10c5806d17170fb 100644 (file)
@@ -44,7 +44,7 @@ BN_clear(), BN_free() and BN_clear_free() have no return values.
 
 =head1 SEE ALSO
 
-L<bn(7)>, L<ERR_get_error(3)>
+L<ERR_get_error(3)>
 
 =head1 HISTORY
 
@@ -52,7 +52,7 @@ BN_init() was removed in OpenSSL 1.1.0; use BN_new() instead.
 
 =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
index 8da74f80015a4f9f7e27ff10154dae9e9cbe08d7..9e0465de54731c3958d61e8985809ad21244589d 100644 (file)
@@ -46,12 +46,12 @@ more probability).
 
 =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
index 62b4317d40c7e45c6835053f593fd8aca03ea753..7ae8e625f9a48adb86ec22f816f46a7241d9a85d 100644 (file)
@@ -53,11 +53,11 @@ The error codes can be obtained by L<ERR_get_error(3)>.
 
 =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
index bb889a0ffc7af3aac3016a8d27a612e7272c92f9..af02983c8fb141494ccd629717f7ed31158fd5d6 100644 (file)
@@ -55,11 +55,11 @@ can be obtained by L<ERR_get_error(3)>.
 
 =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
index e27b639da9634a2eae6678cc28a0fc5cf6e70a27..9f77f22744c4857364f189219cd195de34615a99 100644 (file)
@@ -14,11 +14,9 @@ BN_swap - exchange BIGNUMs
 
 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
index be0674fe45597298ea0c1532f7a2a40ee21a52a3..91d48aad880862e1520046f8395c1c09574a5d70 100644 (file)
@@ -53,11 +53,11 @@ unsigned long but this value is also returned on error.
 
 =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
index 11491422106d43c9f6b4960ebd71e19204a217aa..4f02f52f6abe1e4d1b0529eb6295d971cc30e331 100644 (file)
@@ -121,8 +121,7 @@ return value of the failing module (this will always be zero or negative).
 
 =head1 SEE ALSO
 
-L<config(5)>, L<OPENSSL_config(3)>,
-L<NCONF_free(3)>
+L<config(5)>, L<OPENSSL_config(3)>
 
 =head1 COPYRIGHT
 
index ed32bb20cc62a64657a1046d7268505b03b944f8..ede5fc14ce9e0e5510cf4a25d36e026a12efe747 100644 (file)
@@ -152,7 +152,7 @@ dup_func() should return 0 for failure and 1 for success.
 
 =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
index 2f8171ebfdf27dc56bb9efff41840f2fd0c4e5a2..24b6bb9e04db028fab731e85725fb31fb5002862 100644 (file)
@@ -28,13 +28,13 @@ return 1 for success and 0 if an error occurs.
 
 =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
index 11874794b47399d4bc90bde6f9718cc998806b98..f283d8e71ec5eb96307c51f83fbf64aeb1deef83 100644 (file)
@@ -52,14 +52,14 @@ EC_METHOD_get_field_type returns an integer that identifies the type of field th
 
 =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
index a89ca2d591ade22a9e10785d4dcd3f896d65d0da..fd5f58c919c08989d7e8e9f4aac5aba63b580d96 100644 (file)
@@ -190,13 +190,13 @@ trinomial or pentanomial respectively. Alternatively in the event of an error a
 
 =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
index 5d4cc47d9397f8a31a9d692d8f3714990d83ea43..2f658dc2c3b6325c4214d3fff09e394ab0d39bdb 100644 (file)
@@ -104,13 +104,13 @@ EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROU
 
 =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
index 2e0e5940a01aee356d3284b7c282670f740461d4..4f73a1d59d04d0163579a368f598d589badad6f7 100644 (file)
@@ -40,7 +40,7 @@ EC_KEY.
 
 =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)>,
@@ -49,7 +49,7 @@ L<d2i_ECPrivateKey(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
index bb842a41aab02668cf49448fec7adf9b0d9f10c2..591529fd470cb2e83378ff0afe3006f18c525445 100644 (file)
@@ -165,7 +165,7 @@ of the buffer or 0 on error.
 
 =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)>,
@@ -173,7 +173,7 @@ 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
index 252349d15d3d0db198a17b9ac61da574f41dab2e..6f3e2308bd7b04f440e5eca1ab850074932d60d6 100644 (file)
@@ -64,13 +64,13 @@ EC_GROUP_have_precompute_mult return 1 if a precomputation has been done, or 0 i
 
 =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
index 046806cfdb6d2bf77465a2aac09e09fb75ba0159..3358a08d8b55b8272ea98af89013dacbdb64b6f5 100644 (file)
@@ -180,13 +180,13 @@ error.
 
 =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
index 19898807522658fc51bb5642e745955663386958..f0b3c8aa8da59f51b7ad11bf12e8e5039084088a 100644 (file)
@@ -162,7 +162,7 @@ The OPENSSL_cleanup() function deinitialises OpenSSL (both libcrypto
 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
@@ -235,7 +235,7 @@ and OPENSSL_INIT_free() functions were added in OpenSSL 1.1.0.
 
 =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
index 54f6a8548fb55ad8dea4b7aba262604cc5a43304..698ee271f6986718b7777ba3c44cf4206587c2af 100644 (file)
@@ -175,7 +175,7 @@ B<SCT_set_source> returns 1 on success, 0 otherwise.
 =head1 SEE ALSO
 
 L<ct(7)>,
-L<SCT_verify(3)>,
+L<SCT_validate(3)>,
 L<OBJ_nid2obj(3)>
 
 =head1 HISTORY
@@ -184,7 +184,7 @@ These functions were added in OpenSSL 1.1.0.
 
 =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
index 86d5cc3048d8d69938a2e96d7b0a163359ae894d..3eb8bbc9a0f81268ef9f53259b013afe7b130df1 100644 (file)
@@ -30,7 +30,7 @@ signed. B<*bcont> can then be passed to PKCS7_verify() with
 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:
@@ -61,14 +61,14 @@ is an error occurred. The error can be obtained from ERR_get_error(3).
 
 =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
index d818e00fc5c12a4dd3bf821bf5982aca98ddd733..afa45dc93f0956a8006c6038dfdf975a768b3cc0 100644 (file)
@@ -2,6 +2,7 @@
 
 =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 -
@@ -11,6 +12,9 @@ control Certificate Transparency policy
 
  #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,
@@ -127,12 +131,11 @@ L<ssl(7)>,
 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
index abe45aea062e90e3a73c6235ba73ee6029ca3e4c..a7d3de307303d3765905986e16911cb8172d0489 100644 (file)
@@ -31,10 +31,9 @@ format used by NSS for its B<SSLKEYLOGFILE> debugging output. To recreate that
 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
 
index ccfe94cd18a4b8c7fad2183e25b0015f1864803e..c2077bbb46accf528e71ed9ccc7a32175bf58a6f 100644 (file)
@@ -2,6 +2,7 @@
 
 =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
@@ -13,9 +14,12 @@ 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
@@ -30,7 +34,9 @@ shall be specified, the NULL pointer can be used for B<verify_callback>. In
 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.)
@@ -171,7 +177,7 @@ certificates.
 
 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)>).
 
  ...
@@ -284,11 +290,11 @@ L<SSL_CTX_load_verify_locations(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
index 58d22b63d75cbbf4ed971777ffed0cb3a4016744..bdee438c028d58bfae8e1b63de4ac17581901ae8 100644 (file)
@@ -88,7 +88,7 @@ SSL_set_bio(), SSL_set_rbio() and SSL_set_wbio() cannot fail.
 
 =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)>
 
@@ -98,7 +98,7 @@ SSL_set0_rbio() and SSL_set0_wbio() were added in OpenSSL 1.1.0.
 
 =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
index 8d4ae659a64055ff5d57953ea4480167bfaf0a2b..037e8bf10e4e699131ee5d3af6bbb83185a85b64 100644 (file)
@@ -183,7 +183,7 @@ 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
index 08fa731238f87f67839fb817d042cd128eeb3e2b..5f8dfa93b0f1021e684ccb96d97216ee05886072 100644 (file)
@@ -108,20 +108,19 @@ Note that the hash algorithm used for subject name hashing changed in OpenSSL
 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
index 267e7bd2a664995cd3ad46cb9bf3a50d3a345505..07cfda4908975e9b7733df523dd8fa499d16a0ac 100644 (file)
@@ -51,7 +51,7 @@ All functions described here return 1 for success and 0 for failure.
 
 =head1 SEE ALSO
 
-L<EVP_SHA1(3)>
+L<EVP_sha1(3)>
 
 =head1 COPYRIGHT
 
index 60cd89e67a82b8bc4809e9b47e65f6963468ddc7..30caeebcb5c0a4b3f045bbcbbb0a7455f4ef939b 100644 (file)
@@ -57,11 +57,11 @@ L<ERR_get_error(3)>.
 =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
index 119899c6dae05c458b7e38e0400f2b909e47ac5e..355204d2a632cd5dcc6d56b4cb0b939c0367396d 100644 (file)
@@ -32,9 +32,9 @@ L<CTLOG_STORE_new(3)>,
 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
@@ -43,7 +43,7 @@ This library was added in OpenSSL 1.1.0.
 
 =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
index 67e3297599fa18690e40cc0b9cf3683e52087edc..89f14b890c4e60da9336f0d32057b17d6996e366 100644 (file)
@@ -246,12 +246,11 @@ it to:
 
 =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
index 5812bc8052e3516e6a13acf219d1143bda4afce2..1ec01268ce7b3ed33d7ec67093027ebdf0ac329d 100644 (file)
@@ -496,8 +496,6 @@ in multiple SSL connections, and then duplicate it prior to initiating
 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.
@@ -829,7 +827,7 @@ OpenSSL 1.1.0.
 
 =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
index 5246cd9861adc242adb0c6d2cf004ef28386f679..06584e3ae708e1ccd9abd11a148018b2c5734b80 100644 (file)
@@ -10,7 +10,7 @@ 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
@@ -58,12 +58,12 @@ L<d2i_X509_CRL(3)>,
 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
diff --git a/util/check-doc-links.pl b/util/check-doc-links.pl
deleted file mode 100644 (file)
index 2cc4b31..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#! /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;
diff --git a/util/find-doc-nits b/util/find-doc-nits
new file mode 100755 (executable)
index 0000000..0b85515
--- /dev/null
@@ -0,0 +1,368 @@
+#! /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;
diff --git a/util/find-doc-nits.pl b/util/find-doc-nits.pl
deleted file mode 100755 (executable)
index e90b3d7..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-#! /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;