blautenb    2003/02/17 03:22:39

  Modified:    c/src/tools/checksig checksig.cpp
               c/src/tools/txfmout txfmout.cpp
  Log:
  Now handle relative file URIs in references
  
  Revision  Changes    Path
  1.5       +46 -9     xml-security/c/src/tools/checksig/checksig.cpp
  
  Index: checksig.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/tools/checksig/checksig.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- checksig.cpp      12 Feb 2003 11:21:03 -0000      1.4
  +++ checksig.cpp      17 Feb 2003 11:22:39 -0000      1.5
  @@ -67,6 +67,9 @@
    * $Id$
    *
    * $Log$
  + * Revision 1.5  2003/02/17 11:22:39  blautenb
  + * Now handle relative file URIs in references
  + *
    * Revision 1.4  2003/02/12 11:21:03  blautenb
    * UNIX generic URI resolver
    *
  @@ -99,6 +102,7 @@
   #include <string.h>
   #include <iostream.h>
   #include <stdlib.h>
  +#include <direct.h>
   
   #if defined (_DEBUG) && defined (_MSC_VER)
   #include <crtdbg.h>
  @@ -111,11 +115,15 @@
   #include <xercesc/dom/DOM.hpp>
   #include <xercesc/parsers/XercesDOMParser.hpp>
   #include <xercesc/util/XMLException.hpp>
  +#include <xercesc/util/XMLUri.hpp>
  +#include <xercesc/util/Janitor.hpp>
   
   XSEC_USING_XERCES(XercesDOMParser);
   XSEC_USING_XERCES(XMLException);
   XSEC_USING_XERCES(XMLPlatformUtils);
   XSEC_USING_XERCES(DOMException);
  +XSEC_USING_XERCES(XMLUri);
  +XSEC_USING_XERCES(Janitor);
   
   #ifndef XSEC_NO_XALAN
   
  @@ -210,7 +218,8 @@
        // Create and set up the parser
   
        XercesDOMParser * parser = new XercesDOMParser;
  -     
  +     Janitor<XercesDOMParser> j_parser(parser);
  +
        parser->setDoNamespaces(true);
        parser->setCreateEntityReferenceNodes(true);
   
  @@ -269,7 +278,7 @@
        if (sigNode == 0) {
   
                cerr << "Could not find <Signature> node in " << argv[argc-1] 
<< endl;
  -             exit(2);
  +             return 2;
        }
   
        XSECProvider prov;
  @@ -294,6 +303,36 @@
   #endif
                        theResolver;
                     
  +             // Map out base path of the file
  +             char path[_MAX_PATH];
  +             char baseURI[(_MAX_PATH * 2) + 10];
  +             getcwd(path, _MAX_PATH);
  +
  +             strcpy(baseURI, "file:///");
  +             strcat(baseURI, path);
  +             strcat(baseURI, "/");
  +             strcat(baseURI, filename);
  +
  +             // Find any ':' and "\" characters
  +             int lastSlash;
  +             for (int i = 8; i < strlen(baseURI); ++i) {
  +//                   if (path[i] == ':')
  +//                           path[i] = '|';
  +                     if (baseURI[i] == '\\') {
  +                             lastSlash = i;
  +                             baseURI[i] = '/';
  +                     }
  +                     else if (baseURI[i] == '/')
  +                             lastSlash = i;
  +             }
  +
  +             // The last "\\" must prefix the filename
  +             baseURI[lastSlash + 1] = '\0';
  +
  +             XMLUri uri(MAKE_UNICODE_STRING(baseURI));
  +
  +             theResolver.setBaseURI(uri.getUriText());
  +
                sig->setURIResolver(&theResolver);
        }
   
  @@ -325,7 +364,7 @@
                << msg << endl;
                delete [] msg;
                errorsOccured = true;
  -             exit (2);
  +             return 2;
        }
        catch (XSECCryptoException &e) {
                cerr << "An error occured during signature verification\n   
Message: "
  @@ -338,7 +377,7 @@
                        BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
   
                ERR_print_errors(bio_err);
  -             exit (2);
  +             return 2;
        }
   
        int retResult;
  @@ -357,9 +396,7 @@
        }
   
        prov.releaseSignature(sig);
  -
  -     delete parser;
  -
  +     // Janitor will clean up the parser
        return retResult;
   
   }
  
  
  
  1.3       +49 -2     xml-security/c/src/tools/txfmout/txfmout.cpp
  
  Index: txfmout.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/tools/txfmout/txfmout.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- txfmout.cpp       9 Feb 2003 11:13:51 -0000       1.2
  +++ txfmout.cpp       17 Feb 2003 11:22:39 -0000      1.3
  @@ -65,9 +65,12 @@
    *
    * Author(s): Berin Lautenbach
    *
  - * $ID$
  + * $Id$
  + *
  + * $Log$
  + * Revision 1.3  2003/02/17 11:22:39  blautenb
  + * Now handle relative file URIs in references
    *
  - * $LOG$
    *
    */
   
  @@ -84,12 +87,19 @@
   #include <xsec/enc/OpenSSL/OpenSSLCryptoKeyHMAC.hpp>
   #include <xsec/utils/XSECBinTXFMInputStream.hpp>
   
  +#if defined(_WIN32)
  +#include <xsec/utils/winutils/XSECURIResolverGenericWin32.hpp>
  +#else
  +#include <xsec/utils/unixutils/XSECURIResolverGenericUnix.hpp>
  +#endif
  +
   // General
   
   #include <memory.h>
   #include <string.h>
   #include <iostream.h>
   #include <stdlib.h>
  +#include <direct.h>
   
   #include <xercesc/util/PlatformUtils.hpp>
   #include <xercesc/util/XMLString.hpp>
  @@ -98,12 +108,14 @@
   #include <xercesc/parsers/XercesDOMParser.hpp>
   #include <xercesc/util/XMLException.hpp>
   #include <xercesc/util/XMLNetAccessor.hpp>
  +#include <xercesc/util/XMLUri.hpp>
   
   XSEC_USING_XERCES(NetAccessorException);
   XSEC_USING_XERCES(DOMException);
   XSEC_USING_XERCES(XMLException);
   XSEC_USING_XERCES(XercesDOMParser);
   XSEC_USING_XERCES(XMLPlatformUtils);
  +XSEC_USING_XERCES(XMLUri);
   
   #ifndef XSEC_NO_XALAN
   
  @@ -519,6 +531,44 @@
   
        XSECProvider prov;
        DSIGSignature * sig = prov.newSignatureFromDOM(theDOM, sigNode);
  +
  +#if defined(_WIN32)
  +     XSECURIResolverGenericWin32 
  +#else
  +     XSECURIResolverGenericUnix 
  +#endif
  +             theResolver;
  +              
  +     // Map out base path of the file
  +     char path[_MAX_PATH];
  +     char baseURI[(_MAX_PATH * 2) + 10];
  +     getcwd(path, _MAX_PATH);
  +
  +     strcpy(baseURI, "file:///");
  +     strcat(baseURI, path);
  +     strcat(baseURI, "/");
  +     strcat(baseURI, filename);
  +
  +     // Find any ':' and "\" characters
  +     int lastSlash;
  +     for (int i = 8; i < strlen(baseURI); ++i) {
  +             if (baseURI[i] == '\\') {
  +                     lastSlash = i;
  +                     baseURI[i] = '/';
  +             }
  +             else if (baseURI[i] == '/')
  +                     lastSlash = i;
  +     }
  +
  +     // The last "\\" must prefix the filename
  +     baseURI[lastSlash + 1] = '\0';
  +
  +     XMLUri uri(MAKE_UNICODE_STRING(baseURI));
  +
  +     theResolver.setBaseURI(uri.getUriText());
  +
  +     sig->setURIResolver(&theResolver);
  +
   
        try {
   
  
  
  

Reply via email to