fix(utf8): закрыть lossy-границы конфигурации и API
This commit is contained in:
@@ -153,7 +153,7 @@ anycast. Отсутствие A-записи фатально при любом
|
||||
| Переменная | Требование | Значение по умолчанию |
|
||||
| --- | --- | --- |
|
||||
| `HY2XS_ADMIN_USER` | 6-32 символа из набора `a-z A-Z 0-9 !@#$%^&*()_+,-./:;<=` | `hy2xsadmin` |
|
||||
| `HY2XS_ADMIN_INITIAL_PASSWORD` | 6-64 символа Unicode **и** не более 72 байт в UTF-8; значение, загружаемое systemd из `EnvironmentFile=`; набор не ограничен, кроме `Cc` и `U+FEFF` | генерируется |
|
||||
| `HY2XS_ADMIN_INITIAL_PASSWORD` | 6-64 символа Unicode **и** не более 72 байт в UTF-8; документированный транспортный домен systemd, включая запрет U+FEFF; набор не ограничен, кроме `Cc` | генерируется |
|
||||
|
||||
Значение вне контракта **роняет установку** с явным текстом, называющим границы
|
||||
и набор. Так и должно быть: отказ, пришедший установщику, чинится одной строкой
|
||||
@@ -193,7 +193,7 @@ HY2XS_ADMIN_INITIAL_PASSWORD="пароль с пробелом на конце "
|
||||
Есть два ограничения набора символов, и они разного происхождения.
|
||||
|
||||
**Домен systemd.** Значение обязано быть загружаемым из `EnvironmentFile=`:
|
||||
валидный UTF-8 из Unicode scalar values, без NUL, без суррогатов и без
|
||||
валидный UTF-8 из Unicode scalar values, без NUL, U+FEFF, суррогатов и
|
||||
noncharacters (`U+FDD0..U+FDEF` и все `*FFFE`/`*FFFF`). Это не наше правило —
|
||||
systemd прогоняет значение через `utf8_is_valid` и отвечает `-EINVAL`, то есть
|
||||
файл окружения **не загружается** и юнит не стартует. Оркестратор проверяет
|
||||
@@ -201,9 +201,13 @@ systemd прогоняет значение через `utf8_is_valid` и отв
|
||||
или obfs-пароль сломали бы загрузку юнита ровно так же.
|
||||
|
||||
**Политика HY2XS.** Сверх этого запрещены управляющие символы Unicode
|
||||
(категория `Cc`) и `U+FEFF`. Формат их несёт, но ввести такой пароль в
|
||||
(категория `Cc`). Формат их несёт, но ввести такой пароль в
|
||||
однострочное поле формы входа всё равно нельзя.
|
||||
|
||||
Ограничение U+FEFF берётся из публичной документации systemd. В реализации
|
||||
v257.13 он случайно проходит через `unichar_is_valid` из-за маски; HY2XS не
|
||||
делает эту ошибку версии частью собственного контракта.
|
||||
|
||||
Отказ по любому из двух правил приходит **при разборе конфигурации**, то есть до
|
||||
первой необратимой операции над хостом: `preflight-install` и `install` видят
|
||||
его одинаково.
|
||||
|
||||
Reference in New Issue
Block a user