[xmlsec] signing thousands of files - too many open files
Aleksey Sanin
aleksey at aleksey.com
Mon Mar 2 08:53:19 PST 2015
I would start from editing /etc/security/limits.conf or
/etc/sysctl.conf to increase the limit :)
I need to think about this change. It looks safe but
somewhat breaks the abstraction level. I wonder if there
is a better way to do it.
Thanks!
Aleksey
On 3/2/15 3:36 AM, Dimitrios Siganos wrote:
> Hi,
>
> I have a need to sign and verify thousands of files using xmldsig.
> Unfortunately, I can't archive them and sign the archive.
>
> This is my setup:
> * 2000 files (file1, file2, ..., file2000)
> * a signature template that references all of the 2000 files (i.e. 2000
> file references)
> <Signature>
> <SignedInfo>
> <CanonicalizationMethod
> Algorithm="http://www.w3.org/2006/12/xml-c14n11"/>
> <SignatureMethod
> Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
> <Reference URI="file1">
> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
> <DigestValue/>
> </Reference>
> ... 1998 more references ...
> <Reference URI="file2000">
> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
> <DigestValue/>
> </Reference>
> </SignedInfo>
> <SignatureValue/>
> <KeyInfo><X509Data><X509Certificate/></X509Data></KeyInfo>
> </Signature>
>
> 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.
>
> I don't have the option to adjust the open files limit (ulimit).
>
> 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:
>
> diff --git a/src/transforms.c b/src/transforms.c
> index 8a2ded2..fa5b885 100644
> --- a/src/transforms.c
> +++ b/src/transforms.c
> @@ -1195,6 +1195,7 @@ xmlSecTransformCtxUriExecute(xmlSecTransformCtxPtr
> ctx, const xmlChar* uri) {
> return(-1);
> }
>
> + xmlSecTransformInputURIFinalize(uriTransform);
> ctx->status = xmlSecTransformStatusFinished;
> return(0);
> }
>
> Could you please comment on whether my change makes sense and is correct?
>
> Regards,
> Dimitrios Siganos
>
>
>
> _______________________________________________
> xmlsec mailing list
> xmlsec at aleksey.com
> http://www.aleksey.com/mailman/listinfo/xmlsec
>
More information about the xmlsec
mailing list