Sorry -- I wish my mua would warn me when it sees the word "attached"
but there's no attachment! Both files attached now.
Ferrell

-----Original Message-----
From: Aleksey Sanin [mailto:[EMAIL PROTECTED]] 
Sent: Thursday, December 19, 2002 11:57 AM
To: Moultrie, Ferrell (ISSAtlanta)
Cc: [EMAIL PROTECTED]
Subject: Re: [xmlsec] enhancement to xmlsec


Thanks a lot! I just know that any non trivial knowledge (like "starting

from slash...")
might be lost other the time :) The only problem I have is that I don't 
see attachment :)
Can you resend it, please?

Thanks,
Aleksey



Moultrie, Ferrell (ISSAtlanta) wrote:

>Aleksey:
>  Done. I didn't think the overload was particularly troublesome since
>the XPath syntax was clearly different from a node-name but the
approach
>you suggested is cleaner and without ambiguity. I'm attaching diffs
>against 0.0.10 as before plus an additional diff (-b) which is smaller
>and removes some (possibly gratuitous) white-space editing I'd done
>while implementing the code. Your choice as to which to check-in.
>Ferrell
>  
>


167a168,170
>       "  --node-xpath <XPath expression>\n"
>     "                        set the operation start point to the first node \n"
>     "                        selected by the specified XPath expression\n"
306a310
> char *nodeXPath = NULL;
377c381
<           if((nodeName != NULL) || (nodeId != NULL)){
---
>           if((nodeName != NULL) || (nodeId != NULL) || (nodeXPath != NULL)){
382a387,393
>       } else if((strcmp(argv[pos], "--node-xpath") == 0) && (pos + 1 < argc))  {
>               if((nodeName != NULL) || (nodeId != NULL) || (nodeXPath != NULL)){
>                       fprintf(stderr, "Error: another node selection option 
>present\n");
>                       ret = -1;
>               } else {
>                       nodeXPath = argv[++pos];
>           }
384c395
<           if((nodeName != NULL) || (nodeId != NULL)){
---
>           if((nodeName != NULL) || (nodeId != NULL) || (nodeXPath != NULL)){
1245a1257,1287
> 
> /* Function to find base node for operation as specified by user using either
>  * DTD Id, XPath abs expression, NodeName, or default to root node */
> xmlNodePtr findBaseNode(xmlDocPtr doc) {
>       xmlNodePtr cur = NULL;
>       if(nodeId != NULL) {
>           xmlAttrPtr attr;
>           attr = xmlGetID(doc, BAD_CAST nodeId);
>           cur = (attr != NULL) ? attr->parent : NULL;
>       } else if(nodeXPath != NULL) {
>               xmlNodeSetPtr pNodeList = NULL;
>               xmlXPathContextPtr pCtx = NULL;
>               xmlXPathObjectPtr pXPathObj = NULL;
>               pCtx = xmlXPathNewContext(doc);
>               pXPathObj = xmlXPathEval(BAD_CAST nodeXPath, pCtx);
>               if (pXPathObj != NULL) {
>                       pNodeList = pXPathObj->nodesetval;
>               }
>               if (pNodeList != NULL && pNodeList->nodeNr > 0) { 
>                       cur = pNodeList->nodeTab[0];
>               }
>               xmlXPathFreeContext(pCtx);
>               xmlXPathFreeObject(pXPathObj);
>       } else if(nodeName != NULL) {
>               cur = xmlSecFindNode(xmlDocGetRootElement(doc), BAD_CAST nodeName, 
>BAD_CAST nodeNs);
>       } else {
>           cur = xmlDocGetRootElement(doc);
>       }
>       return cur; /* can be NULL .. caller must check */
> } /* of findBaseNode() */
> 
1248a1291
>       xmlNodePtr cur;
1255,1256c1298,1307
<     signNode = xmlSecFindNode(xmlDocGetRootElement(doc), 
<                             BAD_CAST "Signature", xmlSecDSigNs);
---
> 
>       /**
>        * What do we want to sign?
>        */    
>       cur = findBaseNode(doc);
>       if (cur == NULL) { 
>               fprintf(stderr,"Error: failed to find specified node\n");
>               return(-1);
>       }
>       signNode = xmlSecFindNode(cur, BAD_CAST "Signature", xmlSecDSigNs);
1310a1362
>       xmlNodePtr cur;
1314,1315c1366,1374
<     signNode = xmlSecFindNode(xmlDocGetRootElement(doc), 
<                             BAD_CAST "Signature", xmlSecDSigNs);
---
>       /**
>        * What do we want to verify?
>        */    
>       cur = findBaseNode(doc);
>       if (cur == NULL) { 
>               fprintf(stderr,"Error: failed to find specified node\n");
>               return(-1);
>       }
>       signNode = xmlSecFindNode(cur, BAD_CAST "Signature", xmlSecDSigNs);
1414,1415c1473
<       if(nodeId != NULL) {
<           xmlAttrPtr attr;
---
>       cur = findBaseNode(doc);
1417,1424d1474
<           attr = xmlGetID(doc, BAD_CAST nodeId);
<           cur = (attr != NULL) ? attr->parent : NULL;
<       } else if(nodeName != NULL) {
<           cur = xmlSecFindNode(xmlDocGetRootElement(doc), BAD_CAST nodeName, 
BAD_CAST nodeNs);
<       } else {
<           cur = xmlDocGetRootElement(doc);
<       }
<       
1498c1548,1553
<     cur = xmlSecFindNode(xmlDocGetRootElement(doc), BAD_CAST "EncryptedData", 
xmlSecEncNs);
---
>       cur = findBaseNode(doc);
>       if (cur == NULL) { 
>               fprintf(stderr,"Error: failed to find specified node\n");
>               return(-1);
>       }
>     cur = xmlSecFindNode(cur, BAD_CAST "EncryptedData", xmlSecEncNs);

167a168,170
>       "  --node-xpath <XPath expression>\n"
>     "                        set the operation start point to the first node \n"
>     "                        selected by the specified XPath expression\n"
306a310
> char *nodeXPath = NULL;
377c381
<           if((nodeName != NULL) || (nodeId != NULL)){
---
>           if((nodeName != NULL) || (nodeId != NULL) || (nodeXPath != NULL)){
382a387,393
>       } else if((strcmp(argv[pos], "--node-xpath") == 0) && (pos + 1 < argc))  {
>               if((nodeName != NULL) || (nodeId != NULL) || (nodeXPath != NULL)){
>                       fprintf(stderr, "Error: another node selection option 
>present\n");
>                       ret = -1;
>               } else {
>                       nodeXPath = argv[++pos];
>           }
384c395
<           if((nodeName != NULL) || (nodeId != NULL)){
---
>           if((nodeName != NULL) || (nodeId != NULL) || (nodeXPath != NULL)){
388,395c399,406
<               nodeName = strrchr(argv[++pos], ':');
<               if(nodeName != NULL) {
<                   *(nodeName++) = '\0';
<                   nodeNs = argv[pos];
<               } else {
<                   nodeName = argv[pos];
<                   nodeNs = NULL;
<               }
---
>                       nodeName = strrchr(argv[++pos], ':');
>                       if(nodeName != NULL) {
>                           *(nodeName++) = '\0';
>                           nodeNs = argv[pos];
>                       } else {
>                           nodeName = argv[pos];
>                           nodeNs = NULL;
>                       }
1245a1257,1287
> 
> /* Function to find base node for operation as specified by user using either
>  * DTD Id, XPath abs expression, NodeName, or default to root node */
> xmlNodePtr findBaseNode(xmlDocPtr doc) {
>       xmlNodePtr cur = NULL;
>       if(nodeId != NULL) {
>           xmlAttrPtr attr;
>           attr = xmlGetID(doc, BAD_CAST nodeId);
>           cur = (attr != NULL) ? attr->parent : NULL;
>       } else if(nodeXPath != NULL) {
>               xmlNodeSetPtr pNodeList = NULL;
>               xmlXPathContextPtr pCtx = NULL;
>               xmlXPathObjectPtr pXPathObj = NULL;
>               pCtx = xmlXPathNewContext(doc);
>               pXPathObj = xmlXPathEval(BAD_CAST nodeXPath, pCtx);
>               if (pXPathObj != NULL) {
>                       pNodeList = pXPathObj->nodesetval;
>               }
>               if (pNodeList != NULL && pNodeList->nodeNr > 0) { 
>                       cur = pNodeList->nodeTab[0];
>               }
>               xmlXPathFreeContext(pCtx);
>               xmlXPathFreeObject(pXPathObj);
>       } else if(nodeName != NULL) {
>               cur = xmlSecFindNode(xmlDocGetRootElement(doc), BAD_CAST nodeName, 
>BAD_CAST nodeNs);
>       } else {
>           cur = xmlDocGetRootElement(doc);
>       }
>       return cur; /* can be NULL .. caller must check */
> } /* of findBaseNode() */
> 
1248a1291
>       xmlNodePtr cur;
1255,1256c1298,1307
<     signNode = xmlSecFindNode(xmlDocGetRootElement(doc), 
<                             BAD_CAST "Signature", xmlSecDSigNs);
---
> 
>       /**
>        * What do we want to sign?
>        */    
>       cur = findBaseNode(doc);
>       if (cur == NULL) { 
>               fprintf(stderr,"Error: failed to find specified node\n");
>               return(-1);
>       }
>       signNode = xmlSecFindNode(cur, BAD_CAST "Signature", xmlSecDSigNs);
1258,1259c1309,1310
<         fprintf(stderr,"Error: failed to find Signature node\n");
<       return(-1);
---
>               fprintf(stderr,"Error: failed to find Signature node\n");
>               return(-1);
1310a1362
>       xmlNodePtr cur;
1313,1315c1365,1374
<           
<     signNode = xmlSecFindNode(xmlDocGetRootElement(doc), 
<                             BAD_CAST "Signature", xmlSecDSigNs);
---
> 
>       /**
>        * What do we want to verify?
>        */    
>       cur = findBaseNode(doc);
>       if (cur == NULL) { 
>               fprintf(stderr,"Error: failed to find specified node\n");
>               return(-1);
>       }
>       signNode = xmlSecFindNode(cur, BAD_CAST "Signature", xmlSecDSigNs);
1317,1318c1376,1377
<         fprintf(stderr,"Error: failed to find Signature node\n");
<       return(-1);
---
>               fprintf(stderr,"Error: failed to find Signature node\n");
>               return(-1);
1414,1424c1473,1474
<       if(nodeId != NULL) {
<           xmlAttrPtr attr;
<           
<           attr = xmlGetID(doc, BAD_CAST nodeId);
<           cur = (attr != NULL) ? attr->parent : NULL;
<       } else if(nodeName != NULL) {
<           cur = xmlSecFindNode(xmlDocGetRootElement(doc), BAD_CAST nodeName, 
BAD_CAST nodeNs);
<       } else {
<           cur = xmlDocGetRootElement(doc);
<       }
<       
---
>       cur = findBaseNode(doc);
> 
1498c1548,1553
<     cur = xmlSecFindNode(xmlDocGetRootElement(doc), BAD_CAST "EncryptedData", 
xmlSecEncNs);
---
>       cur = findBaseNode(doc);
>       if (cur == NULL) { 
>               fprintf(stderr,"Error: failed to find specified node\n");
>               return(-1);
>       }
>     cur = xmlSecFindNode(cur, BAD_CAST "EncryptedData", xmlSecEncNs);


Reply via email to