190 lines
6.2 KiB
Plaintext
190 lines
6.2 KiB
Plaintext
=pod
|
|
|
|
=for openssl foreign manual errno(3)
|
|
|
|
=head1 NAME
|
|
|
|
ERR_raise, ERR_raise_data,
|
|
ERR_put_error, ERR_add_error_data, ERR_add_error_vdata,
|
|
ERR_add_error_txt, ERR_add_error_mem_bio
|
|
- record an error
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
#include <openssl/err.h>
|
|
|
|
void ERR_raise(int lib, int reason);
|
|
void ERR_raise_data(int lib, int reason, const char *fmt, ...);
|
|
|
|
void ERR_add_error_data(int num, ...);
|
|
void ERR_add_error_vdata(int num, va_list arg);
|
|
void ERR_add_error_txt(const char *sep, const char *txt);
|
|
void ERR_add_error_mem_bio(const char *sep, BIO *bio);
|
|
|
|
The following function has been deprecated since OpenSSL 3.0, and can be
|
|
hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value,
|
|
see L<openssl_user_macros(7)>:
|
|
|
|
void ERR_put_error(int lib, int func, int reason, const char *file, int line);
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
ERR_raise() adds a new error to the thread's error queue. The
|
|
error occurred in the library B<lib> for the reason given by the
|
|
B<reason> code. Furthermore, the name of the file, the line, and name
|
|
of the function where the error occurred is saved with the error
|
|
record.
|
|
|
|
ERR_raise_data() does the same thing as ERR_raise(), but also lets the
|
|
caller specify additional information as a format string B<fmt> and an
|
|
arbitrary number of values, which are processed with L<BIO_snprintf(3)>.
|
|
|
|
ERR_put_error() adds an error code to the thread's error queue. It
|
|
signals that the error of reason code B<reason> occurred in function
|
|
B<func> of library B<lib>, in line number B<line> of B<file>.
|
|
This function is usually called by a macro.
|
|
|
|
ERR_add_error_data() associates the concatenation of its B<num> string
|
|
arguments as additional data with the error code added last.
|
|
ERR_add_error_vdata() is similar except the argument is a B<va_list>.
|
|
Multiple calls to these functions append to the current top of the error queue.
|
|
The total length of the string data per error is limited to 4096 characters.
|
|
|
|
ERR_add_error_txt() appends the given text string as additional data to the
|
|
last error queue entry, after inserting the optional separator string if it is
|
|
not NULL and the top error entry does not yet have additional data.
|
|
In case the separator is at the end of the text it is not appended to the data.
|
|
The B<sep> argument may be for instance "\n" to insert a line break when needed.
|
|
If the associated data would become more than 4096 characters long
|
|
(which is the limit given above)
|
|
it is split over sufficiently many new copies of the last error queue entry.
|
|
|
|
ERR_add_error_mem_bio() is the same as ERR_add_error_txt() except that
|
|
the text string is taken from the given memory BIO.
|
|
It appends '\0' to the BIO contents if not already NUL-terminated.
|
|
|
|
L<ERR_load_strings(3)> can be used to register
|
|
error strings so that the application can a generate human-readable
|
|
error messages for the error code.
|
|
|
|
=head2 Reporting errors
|
|
|
|
=head3 OpenSSL library reports
|
|
|
|
Each OpenSSL sub-library has library code B<ERR_LIB_XXX> and has its own set
|
|
of reason codes B<XXX_R_...>. These are both passed in combination to
|
|
ERR_raise() and ERR_raise_data(), and the combination ultimately produces
|
|
the correct error text for the reported error.
|
|
|
|
All these macros and the numbers they have as values are specific to
|
|
OpenSSL's libraries. OpenSSL reason codes normally consist of textual error
|
|
descriptions. For example, the function ssl3_read_bytes() reports a
|
|
"handshake failure" as follows:
|
|
|
|
ERR_raise(ERR_LIB_SSL, SSL_R_SSL_HANDSHAKE_FAILURE);
|
|
|
|
There are two exceptions:
|
|
|
|
=over 4
|
|
|
|
=item B<ERR_LIB_SYS>
|
|
|
|
This "library code" indicates that a system error is being reported. In
|
|
this case, the reason code given to ERR_raise() and ERR_raise_data() I<must>
|
|
be L<errno(3)>.
|
|
|
|
ERR_raise(ERR_LIB_SYS, errno);
|
|
|
|
=item B<ERR_R_XXX>
|
|
|
|
This set of error codes is considered global, and may be used in combination
|
|
with any sub-library code.
|
|
|
|
ERR_raise(ERR_LIB_RSA, ERR_R_PASSED_INVALID_ARGUMENT);
|
|
|
|
=back
|
|
|
|
=head3 Other pieces of software
|
|
|
|
Other pieces of software that may want to use OpenSSL's error reporting
|
|
system, such as engines or applications, must normally get their own
|
|
numbers.
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
To get a "library" code, call L<ERR_get_next_error_library(3)>; this gives
|
|
the calling code a dynamic number, usable for the duration of the process.
|
|
|
|
=item *
|
|
|
|
Reason codes for each such "library" are determined or generated by the
|
|
authors of that code. They must be numbers in the range 1 to 524287 (in
|
|
other words, they must be nonzero unsigned 18 bit integers).
|
|
|
|
=back
|
|
|
|
The exceptions mentioned in L</OpenSSL library reports> above are valid for
|
|
other pieces of software, i.e. they may use B<ERR_LIB_SYS> to report system
|
|
errors:
|
|
|
|
ERR_raise(ERR_LIB_SYS, errno);
|
|
|
|
... and they may use B<ERR_R_XXX> macros together with their own "library"
|
|
code.
|
|
|
|
int app_lib_code = ERR_get_next_error_library();
|
|
|
|
/* ... */
|
|
|
|
ERR_raise(app_lib_code, ERR_R_PASSED_INVALID_ARGUMENT);
|
|
|
|
=begin comment
|
|
|
|
[These are OpenSSL specific recommendations]
|
|
|
|
Reason codes should consist of uppercase characters, numbers and underscores
|
|
only. The error file generation script translates the trailing section of a
|
|
reason code (after the "_R_") into lowercase with underscores changed to
|
|
spaces.
|
|
|
|
Although a library will normally report errors using its own specific
|
|
B<ERR_LIB_XXX> macro, another library's macro can be used, together with
|
|
that other library's reason codes. This is normally only done when a library
|
|
wants to include ASN1 code which must be combined with B<ERR_LIB_ASN1>
|
|
macro.
|
|
|
|
=end comment
|
|
|
|
=head1 RETURN VALUES
|
|
|
|
ERR_raise(), ERR_raise_data(), ERR_put_error(),
|
|
ERR_add_error_data(), ERR_add_error_vdata()
|
|
ERR_add_error_txt(), and ERR_add_error_mem_bio()
|
|
return no values.
|
|
|
|
=head1 NOTES
|
|
|
|
ERR_raise(), ERR_raise() and ERR_put_error() are implemented as macros.
|
|
|
|
=head1 SEE ALSO
|
|
|
|
L<ERR_load_strings(3)>, L<ERR_get_next_error_library(3)>
|
|
|
|
=head1 HISTORY
|
|
|
|
ERR_raise, ERR_raise_data, ERR_add_error_txt() and ERR_add_error_mem_bio()
|
|
were added in OpenSSL 3.0.
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
|
|
|
|
Licensed under the Apache License 2.0 (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
|
|
L<https://www.openssl.org/source/license.html>.
|
|
|
|
=cut
|