| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | =pod | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | =head1 NAME | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:13:52 +08:00
										 |  |  | ERR_raise, ERR_raise_data, | 
					
						
							| 
									
										
										
										
											2019-07-24 19:25:56 +08:00
										 |  |  | ERR_put_error, ERR_add_error_data, ERR_add_error_vdata | 
					
						
							|  |  |  | - record an error | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SYNOPSIS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  #include <openssl/err.h> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:13:52 +08:00
										 |  |  |  void ERR_raise(int lib, int reason); | 
					
						
							|  |  |  |  void ERR_raise_data(int lib, int reason, const char *fmt, ...); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  |  void ERR_add_error_data(int num, ...); | 
					
						
							| 
									
										
										
										
											2017-01-20 07:43:48 +08:00
										 |  |  |  void ERR_add_error_vdata(int num, va_list arg); | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:25:56 +08:00
										 |  |  | Deprecated since OpenSSL 3.0: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  void ERR_put_error(int lib, int func, int reason, const char *file, int line); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | =head1 DESCRIPTION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:13:52 +08:00
										 |  |  | ERR_raise() adds a new error to the thread's error queue.  The | 
					
						
							|  |  |  | error occured 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 occured 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)>.   | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | 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 with the error code added last. | 
					
						
							| 
									
										
										
										
											2016-06-21 19:03:34 +08:00
										 |  |  | ERR_add_error_vdata() is similar except the argument is a B<va_list>. | 
					
						
							| 
									
										
										
										
											2019-06-19 00:06:17 +08:00
										 |  |  | Multiple calls to these functions append to the current top of the error queue. | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-18 03:21:33 +08:00
										 |  |  | L<ERR_load_strings(3)> can be used to register | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | error strings so that the application can a generate human-readable | 
					
						
							|  |  |  | error messages for the error code. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 04:39:19 +08:00
										 |  |  | =head2 Reporting errors | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:25:56 +08:00
										 |  |  | =for comment TODO(3.0) should this be internal documentation? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 04:39:19 +08:00
										 |  |  | Each sub-library has a specific macro XXXerr() that is used to report | 
					
						
							|  |  |  | errors. Its first argument is a function code B<XXX_F_...>, the second | 
					
						
							|  |  |  | argument is a reason code B<XXX_R_...>. Function codes are derived | 
					
						
							|  |  |  | from the function names; reason codes consist of textual error | 
					
						
							|  |  |  | descriptions. For example, the function ssl3_read_bytes() reports a | 
					
						
							|  |  |  | "handshake failure" as follows: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-28 01:17:09 +08:00
										 |  |  | Function and reason codes should consist of uppercase characters, | 
					
						
							| 
									
										
										
										
											2016-06-10 04:39:19 +08:00
										 |  |  | numbers and underscores only. The error file generation script translates | 
					
						
							|  |  |  | function codes into function names by looking in the header files | 
					
						
							|  |  |  | for an appropriate function name, if none is found it just uses | 
					
						
							|  |  |  | the capitalized form such as "SSL3_READ_BYTES" in the above example. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The trailing section of a reason code (after the "_R_") is translated | 
					
						
							| 
									
										
										
										
											2019-09-28 01:17:09 +08:00
										 |  |  | into lowercase and underscores changed to spaces. | 
					
						
							| 
									
										
										
										
											2016-06-10 04:39:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Although a library will normally report errors using its own specific | 
					
						
							|  |  |  | XXXerr macro, another library's macro can be used. This is normally | 
					
						
							|  |  |  | only done when a library wants to include ASN1 code which must use | 
					
						
							|  |  |  | the ASN1err() macro. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | =head1 RETURN VALUES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:25:56 +08:00
										 |  |  | ERR_raise(), ERR_put_error(), ERR_add_error_data() and | 
					
						
							|  |  |  | ERR_add_error_vdata() return no values. | 
					
						
							| 
									
										
										
										
											2019-07-24 19:13:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 NOTES | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:25:56 +08:00
										 |  |  | ERR_raise() and ERR_put_error() are implemented as macros. | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | =head1 SEE ALSO | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-02 23:07:21 +08:00
										 |  |  | L<ERR_load_strings(3)> | 
					
						
							| 
									
										
										
										
											2000-02-01 09:37:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | =head1 COPYRIGHT | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-24 19:13:52 +08:00
										 |  |  | Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-06 21:04:44 +08:00
										 |  |  | Licensed under the Apache License 2.0 (the "License").  You may not use | 
					
						
							| 
									
										
										
										
											2016-05-18 23:44:05 +08:00
										 |  |  | 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 |