AcceptEnv LANG LC_* vs available locales
Philipp Marek
philipp at marek.priv.at
Thu Apr 28 19:23:24 AEST 2022
>> (As in, *let* the client send his settings, then have the shell's
>> startup phase run a helper application that edits the env vars as
>> necessary to achieve compatibility with the server's capabilities.)
That sounds the most sane way to me.
> And if the client says they want "zh_CN.UTF-16" but the server only
> knowns how to do "C" and "en_US.UTF-8", then what are you going to do,
> as just one example among a host of tricky combinations? In fact,
> the only safe option in such a situation is to reject the connection.
Yeah, that might be one option.
> And even if a safe setting existed in every case, which it does not,
> it would be a complex and open-ended task to figure out what that
> setting
> is on a given machine to be compatible with an arbitrary locale name
> received over the wire, since POSIX explicitly says that the meaning
> of locale names (apart from "C" and "POSIX") is implementation-defined.
Possibly.
Still, a 99.99% working solution should be easy enough --
and if your policy is stricter, than rejecting incompatible connections
(if even falling back to "C" doesn't work??) is possible.
> So for every operating system and every possible subset of locales that
> might be installed on a server, OpenSSH maintainers would have to
> maintain
No.
Not the OpenSSH maintainers, but the packagers -
they know at least what their target machine understands.
> Sure, any magic scheme you might devise to achieve the above would
> likely work in many cases, so users would get trained into an utterly
> unsafe attitude of "locales just work with SSH" and stop thinking
> about it. If the beast would then suddenly bite, it would bite all
> the deeper.
That's as it is right now, anyway.
Such a script would get _better_ compatibility than now.
> In conclusion, i think it is better to take a firm stand and say:
>
> It is purely the responsibility of the user to make sure that
> the server locale and the client locale are compatible *before
> connecting*. Otherwise, all bets are off.
Well, how do I find out what's available without connecting?
If the server falls back to "C" (and tells me loudly upon connecting!!)
I at least have a chance to diagnose.
> Ideally, use UTF-8
> on both sides *and* make sure your xterm(1) runs in UTF-8 mode.
Yeah, that's the easy way.
More information about the openssh-unix-dev
mailing list