On Thu, 2022-07-21 at 17:40 +0200, Daniel Stenberg wrote:
> On Thu, 21 Jul 2022, David Woodhouse wrote:
> 
> > > I'm not following. In what aspect does curl care about non-ASCII content 
> > > or
> > > character sets at all?
> > 
> > Passwords and passphrases, input on the command line or '-d @postdata'?
> 
> Yeah, I suppose you could say that it *should* care about character sets in 
> some of those cases but it doesn't and it never did. It presumes the user 
> passes on exactly what it wants to pass on.

For the data to be passed over the wire, that's a tolerable assumption
as long as we *also* pass a suitable Content-Type: header with a
charset identifying the charset of the user's locale in which the data
are presumed to be encoded.

Which we don't.

 $ LANG=cs_CZ.ISO8859-2 curl http://twosheds.infradead.org/cgi-bin/foo.cgi -d 
naïve=true -v
*   Trying 2001:8b0:10b:1:21d:7dff:fe04:dbe2:80...
* TCP_NODELAY set
* Connected to twosheds.infradead.org (2001:8b0:10b:1:21d:7dff:fe04:dbe2) port 
80 (#0)
> POST /cgi-bin/foo.cgi HTTP/1.1
> Host: twosheds.infradead.org
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 11
> Content-Type: application/x-www-form-urlencoded

But I was steering clear of that one, as it's at least slightly
subjective. On the other hand, when we're given a password on the
command line (in the locale charset) and we *fail* to convert that
properly to a UCS2 BMPString to open a certificate file, that's just
buggy. We don't get to hide behind "user should have passed on exactly
what it wants to pass on" in that case. That's the example I used.

> > And ew, I still have to *tell* curl that the file it is looking at is a 
> > PKCS#12 file, because it doesn't work that out for itself :(
> 
> Correct. Nobody taught it how to do that.
> 

The problem there is that all crypto libraries hate users, and hate
programmers. And it takes literally *thousands* of lines of code just
to conform to the basic "common sense" usability guidelines that I've
written up at 
http://david.woodhou.se/draft-woodhouse-cert-best-practice.html

I'm half tempted to split that part out of OpenConnect, which solves it
at least for OpenSSL and GnuTLS as an SSL client, and make it available
as a library for other software to use. You then get full support for
PKCS#11, TPMv1.2, TPMv2.0, all sensible file types, and some of the
system stores like Windows and Mac OS keychain, all mostly for free.

If there were someone who actively wanted to *use* that, and perhaps
make something like curl use it, then it might motivate me to actually
work on splitting it out into a standalone library...

Attachment: smime.p7s
Description: S/MIME cryptographic signature

-- 
Unsubscribe: https://lists.haxx.se/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to