1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_xmlsecurity.hxx"
26 
27 /*
28  * Implementation of the I/O interfaces based on stream and URI binding
29  */
30 #include "errorcallback.hxx"
31 
32 #include <sal/types.h>
33 //For reasons that escape me, this is what xmlsec does when size_t is not 4
34 #if SAL_TYPES_SIZEOFPOINTER != 4
35 #    define XMLSEC_NO_SIZE_T
36 #endif
37 #include "xmlsec/xmlsec.h"
38 #include "xmlsec/errors.h"
39 
40 using namespace ::com::sun::star::xml::crypto;
41 
42 // ::com::sun::star::uno::Reference< XXMLSecurityTemplate > g_xErrorRecorder;
43 // bool g_bErrorRecorded;
44 
45 // SecurityOperationStatus getOperationStatus(int reason)
46 // {
47 // 	switch (reason)
48 // 	{
49 // 	case XMLSEC_ERRORS_R_XMLSEC_FAILED:
50 // 		return SecurityOperationStatus_ENGINE_FAILED;
51 // 	case XMLSEC_ERRORS_R_MALLOC_FAILED:
52 // 		return SecurityOperationStatus_MALLOC_FAILED;
53 // 	case XMLSEC_ERRORS_R_STRDUP_FAILED:
54 // 		return SecurityOperationStatus_STRDUP_FAILED;
55 // 	case XMLSEC_ERRORS_R_CRYPTO_FAILED:
56 // 		return SecurityOperationStatus_CRYPTO_FAILED;
57 // 	case XMLSEC_ERRORS_R_XML_FAILED:
58 // 		return SecurityOperationStatus_XML_FAILED;
59 // 	case XMLSEC_ERRORS_R_XSLT_FAILED:
60 // 		return SecurityOperationStatus_XSLT_FAILED;
61 // 	case XMLSEC_ERRORS_R_IO_FAILED:
62 // 		return SecurityOperationStatus_IO_FAILED;
63 // 	case XMLSEC_ERRORS_R_DISABLED:
64 // 		return SecurityOperationStatus_DISABLED;
65 // 	case XMLSEC_ERRORS_R_NOT_IMPLEMENTED:
66 // 		return SecurityOperationStatus_NOT_IMPLEMENTED;
67 // 	case XMLSEC_ERRORS_R_INVALID_SIZE:
68 // 		return SecurityOperationStatus_INVALID_SIZE;
69 // 	case XMLSEC_ERRORS_R_INVALID_DATA:
70 // 		return SecurityOperationStatus_INVALID_DATA;
71 // 	case XMLSEC_ERRORS_R_INVALID_RESULT:
72 // 		return SecurityOperationStatus_INVALID_RESULT;
73 // 	case XMLSEC_ERRORS_R_INVALID_TYPE:
74 // 		return SecurityOperationStatus_INVALID_TYPE;
75 // 	case XMLSEC_ERRORS_R_INVALID_OPERATION:
76 // 		return SecurityOperationStatus_INVALID_OPERATION;
77 // 	case XMLSEC_ERRORS_R_INVALID_STATUS:
78 // 		return SecurityOperationStatus_INVALID_STATUS;
79 // 	case XMLSEC_ERRORS_R_INVALID_FORMAT:
80 // 		return SecurityOperationStatus_INVALID_FORMAT;
81 // 	case XMLSEC_ERRORS_R_DATA_NOT_MATCH:
82 // 		return SecurityOperationStatus_DATA_NOT_MATCH;
83 // 	case XMLSEC_ERRORS_R_INVALID_NODE:
84 // 		return SecurityOperationStatus_INVALID_NODE;
85 // 	case XMLSEC_ERRORS_R_INVALID_NODE_CONTENT:
86 // 		return SecurityOperationStatus_INVALID_NODE_CONTENT;
87 // 	case XMLSEC_ERRORS_R_INVALID_NODE_ATTRIBUTE:
88 // 		return SecurityOperationStatus_INVALID_NODE_ATTRIBUTE;
89 // 	case XMLSEC_ERRORS_R_MISSING_NODE_ATTRIBUTE:
90 // 		return SecurityOperationStatus_MISSING_NODE_ATTRIBUTE;
91 // 	case XMLSEC_ERRORS_R_NODE_ALREADY_PRESENT:
92 // 		return SecurityOperationStatus_NODE_ALREADY_PRESENT;
93 // 	case XMLSEC_ERRORS_R_UNEXPECTED_NODE:
94 // 		return SecurityOperationStatus_UNEXPECTED_NODE;
95 // 	case XMLSEC_ERRORS_R_NODE_NOT_FOUND:
96 // 		return SecurityOperationStatus_NODE_NOT_FOUND;
97 // 	case XMLSEC_ERRORS_R_INVALID_TRANSFORM:
98 // 		return SecurityOperationStatus_INVALID_TRANSFORM;
99 // 	case XMLSEC_ERRORS_R_INVALID_TRANSFORM_KEY:
100 // 		return SecurityOperationStatus_INVALID_TRANSFORM_KEY;
101 // 	case XMLSEC_ERRORS_R_INVALID_URI_TYPE:
102 // 		return SecurityOperationStatus_INVALID_URI_TYPE;
103 // 	case XMLSEC_ERRORS_R_TRANSFORM_SAME_DOCUMENT_REQUIRED:
104 // 		return SecurityOperationStatus_TRANSFORM_SAME_DOCUMENT_REQUIRED;
105 // 	case XMLSEC_ERRORS_R_TRANSFORM_DISABLED:
106 // 		return SecurityOperationStatus_TRANSFORM_DISABLED;
107 // 	case XMLSEC_ERRORS_R_INVALID_KEY_DATA:
108 // 		return SecurityOperationStatus_INVALID_KEY_DATA;
109 // 	case XMLSEC_ERRORS_R_KEY_DATA_NOT_FOUND:
110 // 		return SecurityOperationStatus_KEY_DATA_NOT_FOUND;
111 // 	case XMLSEC_ERRORS_R_KEY_DATA_ALREADY_EXIST:
112 // 		return SecurityOperationStatus_KEY_DATA_ALREADY_EXIST;
113 // 	case XMLSEC_ERRORS_R_INVALID_KEY_DATA_SIZE:
114 // 		return SecurityOperationStatus_INVALID_KEY_DATA_SIZE;
115 // 	case XMLSEC_ERRORS_R_KEY_NOT_FOUND:
116 // 		return SecurityOperationStatus_KEY_NOT_FOUND;
117 // 	case XMLSEC_ERRORS_R_KEYDATA_DISABLED:
118 // 		return SecurityOperationStatus_KEYDATA_DISABLED;
119 // 	case XMLSEC_ERRORS_R_MAX_RETRIEVALS_LEVEL:
120 // 		return SecurityOperationStatus_MAX_RETRIEVALS_LEVEL;
121 // 	case XMLSEC_ERRORS_R_MAX_RETRIEVAL_TYPE_MISMATCH:
122 // 		return SecurityOperationStatus_MAX_RETRIEVAL_TYPE_MISMATCH;
123 // 	case XMLSEC_ERRORS_R_MAX_ENCKEY_LEVEL:
124 // 		return SecurityOperationStatus_MAX_ENCKEY_LEVEL;
125 // 	case XMLSEC_ERRORS_R_CERT_VERIFY_FAILED:
126 // 		return SecurityOperationStatus_CERT_VERIFY_FAILED;
127 // 	case XMLSEC_ERRORS_R_CERT_NOT_FOUND:
128 // 		return SecurityOperationStatus_CERT_NOT_FOUND;
129 // 	case XMLSEC_ERRORS_R_CERT_REVOKED:
130 // 		return SecurityOperationStatus_CERT_REVOKED;
131 // 	case XMLSEC_ERRORS_R_CERT_ISSUER_FAILED:
132 // 		return SecurityOperationStatus_CERT_ISSUER_FAILED;
133 // 	case XMLSEC_ERRORS_R_CERT_NOT_YET_VALID:
134 // 		return SecurityOperationStatus_CERT_NOT_YET_VALID;
135 // 	case XMLSEC_ERRORS_R_CERT_HAS_EXPIRED:
136 // 		return SecurityOperationStatus_CERT_HAS_EXPIRED;
137 // 	case XMLSEC_ERRORS_R_DSIG_NO_REFERENCES:
138 // 		return SecurityOperationStatus_DSIG_NO_REFERENCES;
139 // 	case XMLSEC_ERRORS_R_DSIG_INVALID_REFERENCE:
140 // 		return SecurityOperationStatus_DSIG_INVALID_REFERENCE;
141 // 	case XMLSEC_ERRORS_R_ASSERTION:
142 // 		return SecurityOperationStatus_ASSERTION;
143 // 	default:
144 // 		return SecurityOperationStatus_RUNTIMEERROR_FAILED;
145 // 	}
146 // }
147 
148 
149 extern "C"
errorCallback(const char *,int,const char *,const char *,const char *,int,const char *)150 void errorCallback(const char * /*file*/,
151                    int /*line*/,
152                    const char * /*func*/,
153                    const char * /*errorObject*/,
154                    const char * /*errorSubject*/,
155                    int /*reason*/,
156                    const char  * /*msg*/)
157 {
158 #if OSL_DEBUG_LEVEL > 1
159 //     const char * afunc = func ? func : "";
160 //     const char * errObj = errorObject ? errorObject : "";
161 //     const char * errSub = errorSubject ? errorSubject : "";
162 //     const char * amsg = msg ? msg : "";
163 // 	fprintf(stdout, "xmlsec error: %s, %s,  %s, %i %s  \n", afunc, errObj, errSub, reason, amsg);
164 #endif
165     //ToDo write log message
166 // 	if (g_xErrorRecorder.is() && !g_bErrorRecorded)
167 // 	{
168 // 		g_xErrorRecorder->setStatus(getOperationStatus(reason));
169 
170 // 		if ( reason != XMLSEC_ERRORS_R_ASSERTION && reason!=XMLSEC_ERRORS_R_XMLSEC_FAILED)
171 // 		{
172 //             g_bErrorRecorded = true;
173 // 		}
174 // 	}
175 }
176 
177 // void setErrorRecorder(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityTemplate >& xTemplate)
178 // {
179 // 	g_xErrorRecorder = xTemplate;
180 // 	g_xErrorRecorder->setStatus(SecurityOperationStatus_OPERATION_SUCCEEDED);
181 // 	g_bErrorRecorded = false;
182 // 	xmlSecErrorsSetCallback(errorCallback);
183 // }
184 
185 //void setErrorRecorder(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSignatureTemplate >& xTemplate)
186 
setErrorRecorder()187 void setErrorRecorder()
188 {
189 // 	::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityTemplate >
190 // 		xSecurityTemplate(xTemplate, ::com::sun::star::uno::UNO_QUERY);
191 // 	setErrorRecorder( xSecurityTemplate );
192     xmlSecErrorsSetCallback(errorCallback);
193 }
194 
195 // void setErrorRecorder(const ::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLEncryptionTemplate >& xTemplate)
196 // {
197 // 	::com::sun::star::uno::Reference< ::com::sun::star::xml::crypto::XXMLSecurityTemplate >
198 // 		xSecurityTemplate(xTemplate, ::com::sun::star::uno::UNO_QUERY);
199 // 	setErrorRecorder( xSecurityTemplate );
200 // }
201 
clearErrorRecorder()202 void clearErrorRecorder()
203 {
204 	xmlSecErrorsSetCallback(NULL);
205 //	g_xErrorRecorder = NULL;
206 }
207 
208