|
16 | 16 |
|
17 | 17 | #include <pythread.h>
|
18 | 18 |
|
| 19 | +#include <stdio.h> |
| 20 | + |
19 | 21 | // default error class
|
20 | 22 | PyObject* PyXmlSec_Error;
|
21 | 23 | PyObject* PyXmlSec_InternalError;
|
22 | 24 | PyObject* PyXmlSec_VerificationError;
|
23 | 25 |
|
24 | 26 | static int PyXmlSec_LastErrorKey = 0;
|
25 | 27 |
|
| 28 | +static int PyXmlSec_PrintErrorMessage = 0; |
| 29 | + |
26 | 30 | typedef struct {
|
27 | 31 | const xmlChar* file;
|
28 | 32 | const xmlChar* func;
|
@@ -83,8 +87,27 @@ static void PyXmlSec_ErrorCallback(const char* file, int line, const char* func,
|
83 | 87 | // TODO do not allocate error object each time.
|
84 | 88 | PyXmlSec_ErrorHolderFree(PyXmlSec_ExchangeLastError(PyXmlSec_ErrorHolderCreate(file, line, func, object, subject, reason, msg)));
|
85 | 89 |
|
86 |
| - // also call default callback |
87 |
| - xmlSecErrorsDefaultCallback(file, line, func, object, subject, reason, msg); |
| 90 | + if (PyXmlSec_PrintErrorMessage) { |
| 91 | + const char* error_msg = NULL; |
| 92 | + xmlSecSize i; |
| 93 | + for (i = 0; (i < XMLSEC_ERRORS_MAX_NUMBER) && (xmlSecErrorsGetMsg(i) != NULL); ++i) { |
| 94 | + if(xmlSecErrorsGetCode(i) == reason) { |
| 95 | + error_msg = xmlSecErrorsGetMsg(i); |
| 96 | + break; |
| 97 | + } |
| 98 | + } |
| 99 | + |
| 100 | + fprintf(stderr, |
| 101 | + "func=%s:file=%s:line=%d:obj=%s:subj=%s:error=%d:%s:%s\n", |
| 102 | + (func != NULL) ? func : "unknown", |
| 103 | + (file != NULL) ? file : "unknown", |
| 104 | + line, |
| 105 | + (object != NULL) ? object : "unknown", |
| 106 | + (subject != NULL) ? subject : "unknown", |
| 107 | + reason, |
| 108 | + (error_msg != NULL) ? error_msg : "", |
| 109 | + (msg != NULL) ? msg : ""); |
| 110 | + } |
88 | 111 | }
|
89 | 112 |
|
90 | 113 | // pops the last error which was occurred in current thread
|
@@ -133,6 +156,10 @@ void PyXmlSec_ClearError(void) {
|
133 | 156 | PyXmlSec_ErrorHolderFree(PyXmlSec_ExchangeLastError(NULL));
|
134 | 157 | }
|
135 | 158 |
|
| 159 | +void PyXmlSecEnableDebugTrace(int v) { |
| 160 | + PyXmlSec_PrintErrorMessage = v; |
| 161 | +} |
| 162 | + |
136 | 163 | // initializes errors module
|
137 | 164 | int PyXmlSec_ExceptionsModule_Init(PyObject* package) {
|
138 | 165 | PyXmlSec_Error = NULL;
|
|
0 commit comments