summaryrefslogtreecommitdiff
path: root/xmlsecurity/source/xmlsec/errorcallback.cxx
blob: 7a1795ee35e9a0f0300de2a1b80c630d9f1304fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2008 by Sun Microsystems, Inc.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * $RCSfile: errorcallback.cxx,v $
 * $Revision: 1.10 $
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/

// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_xmlsecurity.hxx"

/*
 * Implementation of the I/O interfaces based on stream and URI binding
 */
#include "errorcallback.hxx"

#include <sal/types.h>
//For reasons that escape me, this is what xmlsec does when size_t is not 4
#if SAL_TYPES_SIZEOFPOINTER != 4
#    define XMLSEC_NO_SIZE_T
#endif
#include "xmlsec/xmlsec.h"
#include "xmlsec/errors.h"

using namespace ::com::sun::star::xml::crypto;

// ::com::sun::star::uno::Reference< XXMLSecurityTemplate > g_xErrorRecorder;
// bool g_bErrorRecorded;

// SecurityOperationStatus getOperationStatus(int reason)
// {
//  switch (reason)
//  {
//  case XMLSEC_ERRORS_R_XMLSEC_FAILED:
//      return SecurityOperationStatus_ENGINE_FAILED;
//  case XMLSEC_ERRORS_R_MALLOC_FAILED:
//      return SecurityOperationStatus_MALLOC_FAILED;
//  case XMLSEC_ERRORS_R_STRDUP_FAILED:
//      return SecurityOperationStatus_STRDUP_FAILED;
//  case XMLSEC_ERRORS_R_CRYPTO_FAILED:
//      return SecurityOperationStatus_CRYPTO_FAILED;
//  case XMLSEC_ERRORS_R_XML_FAILED:
//      return SecurityOperationStatus_XML_FAILED;
//  case XMLSEC_ERRORS_R_XSLT_FAILED:
//      return SecurityOperationStatus_XSLT_FAILED;
//  case XMLSEC_ERRORS_R_IO_FAILED:
//      return SecurityOperationStatus_IO_FAILED;
//  case XMLSEC_ERRORS_R_DISABLED:
//      return SecurityOperationStatus_DISABLED;
//  case XMLSEC_ERRORS_R_NOT_IMPLEMENTED:
//      return SecurityOperationStatus_NOT_IMPLEMENTED;
//  case XMLSEC_ERRORS_R_INVALID_SIZE:
//      return SecurityOperationStatus_INVALID_SIZE;
//  case XMLSEC_ERRORS_R_INVALID_DATA:
//      return SecurityOperationStatus_INVALID_DATA;
//  case XMLSEC_ERRORS_R_INVALID_RESULT:
//      return SecurityOperationStatus_INVALID_RESULT;
//  case XMLSEC_ERRORS_R_INVALID_TYPE:
//      return SecurityOperationStatus_INVALID_TYPE;
//  case XMLSEC_ERRORS_R_INVALID_OPERATION:
//      return SecurityOperationStatus_INVALID_OPERATION;
//  case XMLSEC_ERRORS_R_INVALID_STATUS:
//      return SecurityOperationStatus_INVALID_STATUS;
//  case XMLSEC_ERRORS_R_INVALID_FORMAT:
//      return SecurityOperationStatus_INVALID_FORMAT;
//  case XMLSEC_ERRORS_R_DATA_NOT_MATCH:
//      return SecurityOperationStatus_DATA_NOT_MATCH;
//  case XMLSEC_ERRORS_R_INVALID_NODE:
//      return SecurityOperationStatus_INVALID_NODE;
//  case XMLSEC_ERRORS_R_INVALID_NODE_CONTENT:
//      return SecurityOperationStatus_INVALID_NODE_CONTENT;
//  case XMLSEC_ERRORS_R_INVALID_NODE_ATTRIBUTE:
//      return SecurityOperationStatus_INVALID_NODE_ATTRIBUTE;
//  case XMLSEC_ERRORS_R_MISSING_NODE_ATTRIBUTE:
//      return SecurityOperationStatus_MISSING_NODE_ATTRIBUTE;
//  case XMLSEC_ERRORS_R_NODE_ALREADY_PRESENT:
//      return SecurityOperationStatus_NODE_ALREADY_PRESENT;
//  case XMLSEC_ERRORS_R_UNEXPECTED_NODE:
//      return SecurityOperationStatus_UNEXPECTED_NODE;
//  case XMLSEC_ERRORS_R_NODE_NOT_FOUND:
//      return SecurityOperationStatus_NODE_NOT_FOUND;
//  case XMLSEC_ERRORS_R_INVALID_TRANSFORM:
//      return SecurityOperationStatus_INVALID_TRANSFORM;
//  case XMLSEC_ERRORS_R_INVALID_TRANSFORM_KEY:
//      return SecurityOperationStatus_INVALID_TRANSFORM_KEY;
//  case XMLSEC_ERRORS_R_INVALID_URI_TYPE:
//      return SecurityOperationStatus_INVALID_URI_TYPE;
//  case XMLSEC_ERRORS_R_TRANSFORM_SAME_DOCUMENT_REQUIRED:
//      return SecurityOperationStatus_TRANSFORM_SAME_DOCUMENT_REQUIRED;
//  case XMLSEC_ERRORS_R_TRANSFORM_DISABLED:
//      return SecurityOperationStatus_TRANSFORM_DISABLED;
//  case XMLSEC_ERRORS_R_INVALID_KEY_DATA:
//      return SecurityOperationStatus_INVALID_KEY_DATA;
//  case XMLSEC_ERRORS_R_KEY_DATA_NOT_FOUND:
//      return SecurityOperationStatus_KEY_DATA_NOT_FOUND;
//  case XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST:
//      return SecurityOperationStatus_KEY_DATA_ALREADY_EXIST;
//  case XMLSEC_ERRORS_R_INVALID_KEY_DATA_SIZE:
//      return SecurityOperationStatus_INVALID_KEY_DATA_SIZE;
//  case XMLSEC_ERRORS_R_KEY_NOT_FOUND:
//      return SecurityOperationStatus_KEY_NOT_FOUND;
//  case XMLSEC_ERRORS_R_KEYDATA_DISABLED:
//      return SecurityOperationStatus_KEYDATA_DISABLED;
//  case XMLSEC_ERRORS_R_MAX_RETRIEVALS_LEVEL:
//      return SecurityOperationStatus_MAX_RETRIEVALS_LEVEL;
//  case XMLSEC_ERRORS_R_MAX_RETRIEVAL_TYPE_MISMATCH:
//      return SecurityOperationStatus_MAX_RETRIEVAL_TYPE_MISMATCH;
//  case XMLSEC_ERRORS_R_MAX_ENCKEY_LEVEL:
//      return SecurityOperationStatus_MAX_ENCKEY_LEVEL;
//  case XMLSEC_ERRORS_R_CERT_VERIFY_FAILED:
//      return SecurityOperationStatus_CERT_VERIFY_FAILED;
//  case XMLSEC_ERRORS_R_CERT_NOT_FOUND:
//      return SecurityOperationStatus_CERT_NOT_FOUND;
//  case XMLSEC_ERRORS_R_CERT_REVOKED:
//      return SecurityOperationStatus_CERT_REVOKED;
//  case XMLSEC_ERRORS_R_CERT_ISSUER_FAILED:
//      return SecurityOperationStatus_CERT_ISSUER_FAILED;
//  case XMLSEC_ERRORS_R_CERT_NOT_YET_VALID:
//      return SecurityOperationStatus_CERT_NOT_YET_VALID;
//  case XMLSEC_ERRORS_R_CERT_HAS_EXPIRED:
//      return SecurityOperationStatus_CERT_HAS_EXPIRED;
//  case XMLSEC_ERRORS_R_DSIG_NO_REFERENCES:
//      return SecurityOperationStatus_DSIG_NO_REFERENCES;
//  case XMLSEC_ERRORS_R_DSIG_INVALID_REFERENCE:
//      return SecurityOperationStatus_DSIG_INVALID_REFERENCE;
//  case XMLSEC_ERRORS_R_ASSERTION:
//      return SecurityOperationStatus_ASSERTION;
//  default:
//      return SecurityOperationStatus_RUNTIMEERROR_FAILED;
//  }
// }


extern "C"
void errorCallback(const char * /*file*/,
                   int /*line*/,
                   const char * /*func*/,
                   const char * /*errorObject*/,
                   const char * /*errorSubject*/,
                   int /*reason*/,
                   const char  * /*msg*/)
{
#if OSL_DEBUG_LEVEL > 1
//     const char * afunc = func ? func : "";
//     const char * errObj = errorObject ? errorObject : "";
//     const char * errSub = errorSubject ? errorSubject : "";
//     const char * amsg = msg ? msg : "";
//  fprintf(stdout, "xmlsec error: %s, %s,  %s, %i %s  \n", afunc, errObj, errSub, reason, amsg);
#endif
    //ToDo write log message
//  if (g_xErrorRecorder.is() && !g_bErrorRecorded)
//  {
//      g_xErrorRecorder->setStatus(getOperationStatus(reason));

//      if ( reason != XMLSEC_ERRORS_R_ASSERTION && reason!=XMLSEC_ERRORS_R_XMLSEC_FAILED)
//      {
//             g_bErrorRecorded = true;
//      }
//  }
}

// void setErrorRecorder(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityTemplate >& xTemplate)
// {
//  g_xErrorRecorder = xTemplate;
//  g_xErrorRecorder->setStatus(SecurityOperationStatus_OPERATION_SUCCEEDED);
//  g_bErrorRecorded = false;
//  xmlSecErrorsSetCallback(errorCallback);
// }

//void setErrorRecorder(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSignatureTemplate >& xTemplate)

void setErrorRecorder()
{
//  ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityTemplate >
//      xSecurityTemplate(xTemplate, ::com::sun::star::uno::UNO_QUERY);
//  setErrorRecorder( xSecurityTemplate );
    xmlSecErrorsSetCallback(errorCallback);
}

// void setErrorRecorder(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLEncryptionTemplate >& xTemplate)
// {
//  ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityTemplate >
//      xSecurityTemplate(xTemplate, ::com::sun::star::uno::UNO_QUERY);
//  setErrorRecorder( xSecurityTemplate );
// }

void clearErrorRecorder()
{
    xmlSecErrorsSetCallback(NULL);
//  g_xErrorRecorder = NULL;
}