|
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