<div dir="ltr"><div><div><div><div><div><div><div><div>Hi,<br><br></div>I have a need to sign and verify thousands of files using xmldsig.<br></div>Unfortunately, I can't  archive them and sign the archive.<br></div><br></div>This is my setup:<br></div>* 2000 files (file1, file2, ..., file2000)<br></div>* a signature template that references all of the 2000 files (i.e. 2000 file references)<br><Signature><br>  <SignedInfo><br>    <CanonicalizationMethod Algorithm="<a href="http://www.w3.org/2006/12/xml-c14n11">http://www.w3.org/2006/12/xml-c14n11</a>"/><br>    <SignatureMethod Algorithm="<a href="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256">http://www.w3.org/2001/04/xmldsig-more#rsa-sha256</a>"/><br>    <Reference URI="file1"><br>      <DigestMethod Algorithm="<a href="http://www.w3.org/2001/04/xmlenc#sha256">http://www.w3.org/2001/04/xmlenc#sha256</a>"/><br>      <DigestValue/><br>    </Reference><br></div><div>    ... 1998 more references ...<br></div><div>    <Reference URI="file2000"><br>      <DigestMethod Algorithm="<a href="http://www.w3.org/2001/04/xmlenc#sha256">http://www.w3.org/2001/04/xmlenc#sha256</a>"/><br>      <DigestValue/><br>    </Reference><br>  </SignedInfo><br>  <SignatureValue/><br>  <KeyInfo><X509Data><X509Certificate/></X509Data></KeyInfo><br></Signature><br></div><div><br></div>Running xmlsec1 --sign fails with the error "Too many open files". The reason is that libxmlsec opens all 2000 files, and leaves them open, until the end of the life of the entire operation.<br><br>I don't have the option to adjust the open files limit (ulimit).<br><br></div><div>I am able to fix/workaround the "too many open files" problem by closing the input files as soon as we are finished reading from them. This is the gist of my change:<br><br>diff --git a/src/transforms.c b/src/transforms.c<br>index 8a2ded2..fa5b885 100644<br>--- a/src/transforms.c<br>+++ b/src/transforms.c<br>@@ -1195,6 +1195,7 @@ xmlSecTransformCtxUriExecute(xmlSecTransformCtxPtr ctx, const xmlChar* uri) {<br>         return(-1);<br>     }<br> <br>+    xmlSecTransformInputURIFinalize(uriTransform);<br>     ctx->status = xmlSecTransformStatusFinished;<br>     return(0);<br> }<br><br></div><div>Could you please comment on whether my change makes sense and is correct?<br></div><div><br></div><div>Regards,<br></div><div>Dimitrios Siganos<br></div><div><br></div></div>