[xmlsec] RE: Handling CID: moniker to sign attachments

Robert Fox robertf at softshare.com
Fri Oct 22 14:53:49 PDT 2004


Hello, I wanted to follow up on this and post my solution. In the end,
it turned out to be pretty easy. The stumbling block I ran into was that
by default, libxml adds 3 I/O handlers, the 3rd being a file handler,
which is the default match due to:
 
int
xmlFileMatch (const char *filename ATTRIBUTE_UNUSED) {
    return(1);
}
 
adding my custom handler never got hit, because it is added to the
callback list AFTER the defaults, so it never gets hit...
 
solution was to remove them all and then add them back in the order I
wanted. So the following snippet of code adds in my CID handler:
 
 xmlSecIOCleanupCallbacks();
#ifdef LIBXML_HTTP_ENABLED
 res = xmlSecIORegisterCallbacks(xmlIOHTTPMatch, xmlIOHTTPOpen,
                       xmlIOHTTPRead, xmlIOHTTPClose);
#endif
#ifdef LIBXML_FTP_ENABLED
 res = xmlSecIORegisterCallbacks(xmlIOFTPMatch, xmlIOFTPOpen,
                       xmlIOFTPRead, xmlIOFTPClose);
#endif
 res = xmlSecIORegisterCallbacks(xmlIOCIDMatch, xmlIOCIDOpen,
                        xmlIOCIDRead, xmlIOCIDClose);
 res = xmlSecIORegisterCallbacks(xmlFileMatch, xmlFileOpen,
                       xmlFileRead, xmlFileClose);
 
Notice my CID handler now gets into the callback pointer list prior to
the file handler.
 
The other way to go would be to simply replace the xmlFileXXXX handler
with a custom one that knows how to resolved cid: to the correct
resource.
 
~R
 

	-----Original Message-----
	From: Robert Fox 
	Sent: Friday, October 22, 2004 9:22 AM
	To: 'xmlsec at aleksey.com'
	Subject: Handling CID: moniker to sign attachments
	
	
	 
	I am new to libxml and xmlsec, and having a hard time figuring
out how to wedge in a protocol handler to take care of resolving cid
references. I looked at the links below, and just am not sure how this
would work for selectively handling cid, but letting everything else
(http, ftp, etc) pass through... I have looked through the
documentation, and traced the source... 
	 
	my real question is this: By now, I assume that many of you have
had to implement handling the signing of attachments, I am just looking
for a good starting point of how you implemented this. I assume I have
to somehow tap into the xmlSecTransformCtxUriExecute function and do my
own file reading... but can't seem to figure out how..
	 
	any tips/suggestions would be greatly appreciated.
	 
	I saw a thread in the mail list regarding this, the original
answer is posted at the bottom of this email, I have read the links, and
still am unsure how to proceed on this.
	 
	~Rob
	 
	>> Well, probably the best option for you would be option #2:
use special URL protocol
	>> in URI attributes like "cid:<attachment id>" and create
custom protocol handlers
	>> for "cid". Take a look at LibXML2 IO tutorial:
	>>
	>>     http://xmlsoft.org/xmlio.html
	>>
	>>and xmlsec API reference:
	>>
	>>     http://www.aleksey.com/xmlsec/api/xmlsec-io.html
	>>
	>>And do not forget to register your protocol handlers in both
xmlsec and libxml2.
	>>
	>>Aleksey

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.aleksey.com/pipermail/xmlsec/attachments/20041022/ac480be1/attachment-0002.htm


More information about the xmlsec mailing list