/** * xmlSecX509DataGetNodeContent: * @node: the pointer to <dsig:X509Data/> node. * @deleteChildren: the flag that indicates whether to remove node children after reading. * @keyInfoCtx: the pointer to <dsig:KeyInfo/> node processing context. * * Reads the contents of <dsig:X509Data/> node and returns it as * a bits mask. * * Returns the bit mask representing the <dsig:X509Data/> node content * or a negative value if an error occurs. */ EXPORT_C int xmlSecX509DataGetNodeContent (xmlNodePtr node, int deleteChildren, xmlSecKeyInfoCtxPtr keyInfoCtx) { xmlNodePtr cur, next; int deleteCurNode; int content = 0; xmlSecAssert2(node != NULL, 0); xmlSecAssert2(keyInfoCtx != NULL, -1); /* determine the current node content */ cur = xmlSecGetNextElementNode(node->children); while(cur != NULL) { deleteCurNode = 0; if(xmlSecCheckNodeName(cur, xmlSecNodeX509Certificate, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_CERTIFICATE_NODE; deleteCurNode = 1; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509SubjectName, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_SUBJECTNAME_NODE; deleteCurNode = 1; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509IssuerSerial, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_ISSUERSERIAL_NODE; deleteCurNode = 1; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509SKI, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_SKI_NODE; deleteCurNode = 1; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509CRL, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_CRL_NODE; deleteCurNode = 1; } } else { } next = xmlSecGetNextElementNode(cur->next); if((deleteCurNode != 0) && (deleteChildren != 0)) { /* remove "template" nodes */ xmlUnlinkNode(cur); xmlFreeNode(cur); } cur = next; } return (content); }
/** * xmlSecX509DataGetNodeContent: * @node: the pointer to <dsig:X509Data/> node. * @keyInfoCtx: the pointer to <dsig:KeyInfo/> node processing context. * * Reads the contents of <dsig:X509Data/> node and returns it as * a bits mask. * * Returns: the bit mask representing the <dsig:X509Data/> node content * or a negative value if an error occurs. */ int xmlSecX509DataGetNodeContent (xmlNodePtr node, xmlSecKeyInfoCtxPtr keyInfoCtx) { xmlNodePtr cur; int content = 0; xmlSecAssert2(node != NULL, 0); xmlSecAssert2(keyInfoCtx != NULL, -1); /* determine the current node content */ cur = xmlSecGetNextElementNode(node->children); while(cur != NULL) { if(xmlSecCheckNodeName(cur, xmlSecNodeX509Certificate, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_CERTIFICATE_NODE; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509SubjectName, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_SUBJECTNAME_NODE; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509IssuerSerial, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_ISSUERSERIAL_NODE; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509SKI, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_SKI_NODE; } } else if(xmlSecCheckNodeName(cur, xmlSecNodeX509CRL, xmlSecDSigNs)) { if(xmlSecIsEmptyNode(cur) == 1) { content |= XMLSEC_X509DATA_CRL_NODE; } } else { /* todo: fail on unknown child node? */ } cur = xmlSecGetNextElementNode(cur->next); } return (content); }