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);
}
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);
#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: '[EMAIL PROTECTED]'
Subject: Handling CID: moniker to sign attachmentsI 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
_______________________________________________ xmlsec mailing list [EMAIL PROTECTED] http://www.aleksey.com/mailman/listinfo/xmlsec
