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
|
/**
* XML Security Library (http://www.aleksey.com/xmlsec).
*
* General functions.
*
* This is free software; see Copyright file in the source
* distribution for preciese wording.
*
* Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
*/
#include "globals.h"
#include <stdlib.h>
#include <stdio.h>
#include <libxml/tree.h>
#include <xmlsec/xmlsec.h>
#include <xmlsec/xmltree.h>
#include <xmlsec/keys.h>
#include <xmlsec/transforms.h>
#include <xmlsec/app.h>
#include <xmlsec/io.h>
#include <xmlsec/xkms.h>
#include <xmlsec/errors.h>
/**
* xmlSecInit:
*
* Initializes XML Security Library. The depended libraries
* (LibXML and LibXSLT) must be initialized before.
*
* Returns: 0 on success or a negative value otherwise.
*/
int
xmlSecInit(void) {
xmlSecErrorsInit();
xmlSecIOInit();
#ifndef XMLSEC_NO_CRYPTO_DYNAMIC_LOADING
if(xmlSecCryptoDLInit() < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
"xmlSecCryptoDLInit",
XMLSEC_ERRORS_R_XMLSEC_FAILED,
XMLSEC_ERRORS_NO_MESSAGE);
return(-1);
}
#endif /* XMLSEC_NO_CRYPTO_DYNAMIC_LOADING */
if(xmlSecKeyDataIdsInit() < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
"xmlSecKeyDataIdsInit",
XMLSEC_ERRORS_R_XMLSEC_FAILED,
XMLSEC_ERRORS_NO_MESSAGE);
return(-1);
}
if(xmlSecTransformIdsInit() < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
"xmlSecTransformIdsInit",
XMLSEC_ERRORS_R_XMLSEC_FAILED,
XMLSEC_ERRORS_NO_MESSAGE);
return(-1);
}
#ifndef XMLSEC_NO_XKMS
if(xmlSecXkmsRespondWithIdsInit() < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
"xmlSecXkmsRespondWithIdsInit",
XMLSEC_ERRORS_R_XMLSEC_FAILED,
XMLSEC_ERRORS_NO_MESSAGE);
return(-1);
}
if(xmlSecXkmsServerRequestIdsInit() < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
"xmlSecXkmsServerRequestIdsInit",
XMLSEC_ERRORS_R_XMLSEC_FAILED,
XMLSEC_ERRORS_NO_MESSAGE);
return(-1);
}
#endif /* XMLSEC_NO_XKMS */
/* we use rand() function to generate id attributes */
srand(time(NULL));
return(0);
}
/**
* xmlSecShutdown:
*
* Clean ups the XML Security Library.
*
* Returns: 0 on success or a negative value otherwise.
*/
int
xmlSecShutdown(void) {
int res = 0;
#ifndef XMLSEC_NO_XKMS
xmlSecXkmsServerRequestIdsShutdown();
xmlSecXkmsRespondWithIdsShutdown();
#endif /* XMLSEC_NO_XKMS */
xmlSecTransformIdsShutdown();
xmlSecKeyDataIdsShutdown();
#ifndef XMLSEC_NO_CRYPTO_DYNAMIC_LOADING
if(xmlSecCryptoDLShutdown() < 0) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
"xmlSecCryptoDLShutdown",
XMLSEC_ERRORS_R_XMLSEC_FAILED,
XMLSEC_ERRORS_NO_MESSAGE);
res = -1;
}
#endif /* XMLSEC_NO_CRYPTO_DYNAMIC_LOADING */
xmlSecIOShutdown();
xmlSecErrorsShutdown();
return(res);
}
/**
* xmlSecCheckVersionExt:
* @major: the major version number.
* @minor: the minor version number.
* @subminor: the subminor version number.
* @mode: the version check mode.
*
* Checks if the loaded version of xmlsec library could be used.
*
* Returns: 1 if the loaded xmlsec library version is OK to use
* 0 if it is not or a negative value if an error occurs.
*/
int
xmlSecCheckVersionExt(int major, int minor, int subminor, xmlSecCheckVersionMode mode) {
/* we always want to have a match for major version number */
if(major != XMLSEC_VERSION_MAJOR) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
NULL,
XMLSEC_ERRORS_R_XMLSEC_FAILED,
"expected major version=%d;real major version=%d",
XMLSEC_VERSION_MAJOR, major);
return(0);
}
switch(mode) {
case xmlSecCheckVersionExactMatch:
if((minor != XMLSEC_VERSION_MINOR) || (subminor != XMLSEC_VERSION_SUBMINOR)) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
NULL,
XMLSEC_ERRORS_R_XMLSEC_FAILED,
"mode=exact;expected minor version=%d;real minor version=%d;expected subminor version=%d;real subminor version=%d",
XMLSEC_VERSION_MINOR, minor,
XMLSEC_VERSION_SUBMINOR, subminor);
return(0);
}
break;
case xmlSecCheckVersionABICompatible:
if((minor > XMLSEC_VERSION_MINOR) ||
((minor == XMLSEC_VERSION_MINOR) &&
(subminor > XMLSEC_VERSION_SUBMINOR))) {
xmlSecError(XMLSEC_ERRORS_HERE,
NULL,
NULL,
XMLSEC_ERRORS_R_XMLSEC_FAILED,
"mode=abi compatible;expected minor version=%d;real minor version=%d;expected subminor version=%d;real subminor version=%d",
XMLSEC_VERSION_MINOR, minor,
XMLSEC_VERSION_SUBMINOR, subminor);
return(0);
}
break;
}
return(1);
}
|