Linux Manual Pages development
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx+linux-man@kernel.org>
To: Vincent Lefevre <vincent@vinc17.net>,
	 Alejandro Colomar <alx@kernel.org>,
	Rich Felker <dalias@libc.org>,
	linux-man@vger.kernel.org,  libc-alpha@sourceware.org,
	Walter Harms <wharms@bfs.de>,
	~hallyn/shadow@lists.sr.ht,  musl@lists.openwall.com
Subject: Re: [musl] Re: [PATCH v1] man/man3/crypt.3: These functions accept many algorithms, not only DES
Date: Thu, 12 Nov 2026 13:08:12 +0100	[thread overview]
Message-ID: <avWo_yv5znRjCPvO@devuan> (raw)
In-Reply-To: <20261112114033.GA167321@cventin.lip.ens-lyon.fr>

[-- Attachment #1: Type: text/plain, Size: 3146 bytes --]

Hi Vincent,

> Date: 2026-11-12 12:40:33+0100
> From: Vincent Lefevre <vincent@vinc17.net>
>
> On 2026-11-12 11:28:20 +0100, Alejandro Colomar wrote:
> > Yeah, I think it'd be okay to document that this is an extension to
> > POSIX.  Perhaps, we could add this:
> > 
> > 	@@ -111,6 +111,9 @@ .SH ATTRIBUTES
> > 	 .BR crypt_r ()
> > 	 T}     Thread safety   MT-Safe
> > 	 .TE
> > 	+.SH VERSIONS
> > 	+While POSIX only specifies the DES algorithms for these functions,
> > 	+all systems implement several other algorithms.
> 
> No, POSIX just says: "The algorithm is implementation-defined."
> No mention of DES algorithms at all.

Oh right.

> And note that only ENOSYS is specified as a case of failure,
> which could explain why some applications do not check whether
> the returned value is a null pointer (i.e. they assume that if
> crypt() succeeds in usual cases, then an ENOSYS error is not
> possible and crypt() never fails).
> 
> But my point was that POSIX disallows the "$" character in salt:
> 
>   [...] The salt argument shall be a string of at least two bytes
>   in length not including the null character chosen from the set:
> 
>   a b c d e f g h i j k l m n o p q r s t u v w x y z
>   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
>   0 1 2 3 4 5 6 7 8 9 . /

Isn't that salt specification used exclusively by DES?
So, while POSIX doesn't specify the algorithm, it is consensus that
a call that is strictly conforming to POSIX will result in DES being
used.

> This means that when "$" is supported by some implementation,
> the interpretation of the return value may be different from
> what POSIX specifies.

Kind of.  They better don't deviate from it in non-confirming ways;
one could argue that musl's "x" return value is indeed such a
non-conforming return value, and a NULL return value would be better
(both more conforming and safer).

> Various people said that the choice of returning "*" in case of
> failure as done by musl was a violation of POSIX. But this is
> not true for 2 reasons:
>   * the use of the "$" character in salt by the application;
>   * the fact that POSIX does not give any requirement on the
>     hash (so the use of a hash that could be interpreted as
>     being invalid on the system for unsupported passwords is
>     a valid behavior).

I think that's a stretch of the undefined behavior.  Yes, in theory one
has passed an invalid salt, and then anything may happen.  But given
that POSIX specifies the return value in a way that doesn't seem
incompatible with this extension, I think it would be more appropriate
to behave in a way that conforms to this specification.

	Upon successful completion,
	crypt() shall return a pointer to the hashed password;
	the first two bytes of the returned value
	shall be those of the salt argument.
	Otherwise,
	it shall return a null pointer and set errno to indicate the error.

Given that there's no successfully hashed password, I think it'd be most
appropriate to return a null pointer.


Have a lovely day!
Alex

-- 
<https://www.alejandro-colomar.es>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2026-11-12 12:08 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-09 23:58 [PATCH v1] man/man3/crypt.3: These functions accept many algorithms, not only DES Alejandro Colomar
2026-11-10  0:01 ` Alejandro Colomar
2026-11-11 15:05   ` Serge E. Hallyn
2026-11-11 18:55     ` Alejandro Colomar
2026-11-11 21:13       ` [musl] " Rich Felker
2026-11-11 21:43         ` Alejandro Colomar
2026-11-12  1:52   ` Vincent Lefevre
2026-11-12  2:53     ` Rich Felker
2026-11-12  3:29       ` Vincent Lefevre
2026-11-12  3:37         ` [musl] " Rich Felker
2026-11-12 10:28           ` Alejandro Colomar
2026-11-12 11:40             ` Vincent Lefevre
2026-11-12 12:08               ` Alejandro Colomar [this message]
2026-11-12 13:15                 ` Vincent Lefevre
2026-11-12 13:26                   ` Alejandro Colomar
2026-11-12 12:08             ` Rich Felker
2026-11-12 12:27               ` Alejandro Colomar
2026-11-12 12:41                 ` Szabolcs Nagy
2026-11-12 13:12                   ` Alejandro Colomar
2026-11-12 13:27                     ` Vincent Lefevre
2026-11-12 13:17                 ` Vincent Lefevre
2026-11-12 13:23                   ` Alejandro Colomar
2026-11-12 13:45                     ` Vincent Lefevre
2026-11-12 13:55                       ` Rich Felker
2026-11-12 14:07                         ` Alejandro Colomar
2026-11-12 14:43                           ` Rich Felker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=avWo_yv5znRjCPvO@devuan \
    --to=alx+linux-man@kernel.org \
    --cc=alx@kernel.org \
    --cc=dalias@libc.org \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-man@vger.kernel.org \
    --cc=musl@lists.openwall.com \
    --cc=vincent@vinc17.net \
    --cc=wharms@bfs.de \
    --cc=~hallyn/shadow@lists.sr.ht \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox