You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by bl...@apache.org on 2004/01/18 11:57:18 UTC

cvs commit: xml-security/c/src/tools/templatesign templatesign.cpp

blautenb    2004/01/18 02:57:18

  Modified:    c/src/tools/templatesign templatesign.cpp
  Log:
  Integrated XSECUri resolver into templatesign
  
  Revision  Changes    Path
  1.16      +74 -2     xml-security/c/src/tools/templatesign/templatesign.cpp
  
  Index: templatesign.cpp
  ===================================================================
  RCS file: /home/cvs/xml-security/c/src/tools/templatesign/templatesign.cpp,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- templatesign.cpp	12 Oct 2003 06:32:03 -0000	1.15
  +++ templatesign.cpp	18 Jan 2004 10:57:18 -0000	1.16
  @@ -79,6 +79,12 @@
   #include <xsec/framework/XSECException.hpp>
   #include <xsec/utils/XSECDOMUtils.hpp>
   
  +#if defined(_WIN32)
  +#	include <xsec/utils/winutils/XSECURIResolverGenericWin32.hpp>
  +#else
  +#	include <xsec/utils/unixutils/XSECURIResolverGenericUnix.hpp>
  +#endif
  +
   #if defined (HAVE_OPENSSL)
   #	include <xsec/enc/OpenSSL/OpenSSLCryptoKeyDSA.hpp>
   #	include <xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.hpp>
  @@ -104,12 +110,24 @@
   #include <iostream>
   #include <stdlib.h>
   
  +#if defined(HAVE_UNISTD_H)
  +# include <unistd.h>
  +# define _MAX_PATH PATH_MAX
  +#else
  +# if defined(HAVE_DIRECT_H)
  +#  include <direct.h>
  +# endif
  +#endif
  +
   #include <xercesc/util/PlatformUtils.hpp>
   #include <xercesc/util/XMLString.hpp>
   
   #include <xercesc/dom/DOM.hpp>
   #include <xercesc/parsers/XercesDOMParser.hpp>
   #include <xercesc/util/XMLException.hpp>
  +#include <xercesc/util/XMLUniDefs.hpp>
  +#include <xercesc/util/XMLNetAccessor.hpp>
  +#include <xercesc/util/XMLUri.hpp>
   
   #ifndef XSEC_NO_XALAN
   
  @@ -1137,6 +1155,54 @@
   	XSECProvider prov;
   	DSIGSignature * sig = prov.newSignatureFromDOM(theDOM, sigNode);
   
  +	// Use the internal URI resolver
  +#if defined(_WIN32)
  +	XSECURIResolverGenericWin32 
  +#else
  +	XSECURIResolverGenericUnix 
  +#endif
  +			theResolver;
  +
  +     
  +	// Map out base path of the file
  +	char * filename=argv[argc-1];
  +	char path[_MAX_PATH];
  +	char baseURI[(_MAX_PATH * 2) + 10];
  +	getcwd(path, _MAX_PATH);
  +
  +	strcpy(baseURI, "file:///");		
  +
  +	// Ugly and nasty but quick
  +	if (filename[0] != '\\' && filename[0] != '/' && filename[1] != ':') {
  +		strcat(baseURI, path);
  +		strcat(baseURI, "/");
  +	} else if (path[1] == ':') {
  +		path[2] = '\0';
  +		strcat(baseURI, path);
  +	}
  +
  +	strcat(baseURI, filename);
  +
  +	// Find any ':' and "\" characters
  +	int lastSlash = 0;
  +	for (unsigned 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 = new XMLUri (MAKE_UNICODE_STRING(baseURI));
  +
  +	theResolver.setBaseURI(uri->getUriText());
  +	delete uri;
  +	sig->setURIResolver(&theResolver);
  +
   	try {
   		sig->load();
   		if (clearKeyInfo == true)
  @@ -1225,11 +1291,17 @@
   
   	catch (XSECException &e) {
   		char * m = XMLString::transcode(e.getMsg());
  -		cerr << "An error occured during signature verification\n   Message: "
  +		cerr << "An error occured during signing operation\n   Message: "
   		<< m << endl;
   		delete m;
   		errorsOccured = true;
   		exit (1);
  +	}
  +
  +	catch (NetAccessorException) {
  +		cerr << "A network error occurred during signing operation\n" << endl;
  +		errorsOccured = true;
  +		exit(1);
   	}
   
   	// Print out the result