Bug 57887

Summary: Проблема с кодировкой возвращаемых строк в веб-интерфейсе при добавлении области
Product: Sisyphus Reporter: Vladislav Glinkin <glinkinvd>
Component: pve-access-controlAssignee: darisishe <darisishe>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: andy, shaba, shevchenkodyu, shrek
Version: unstable   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
Как это выглядит none

Description Vladislav Glinkin 2026-02-17 12:58:35 MSK
Created attachment 20703 [details]
Как это выглядит

Версия пакета: pve-access-control-9.0.5-alt1

Проблема с кодировкой возвращаемых строк в веб-интерфейсе при добавлении области. Сервер возвращает некорректное сообщение об ошибке.

К примеру, если в CLI выполнить команду (при условии, что нода не резолвит dc.freeipa.testdomain), то получаем корректное сообщение об ошибке:
# pvesh create /access/domains --realm freeipa.testdomain --type ldap --base_dn dc=freeipa,dc=testdomain --user_attr uid --server1 dc.freeipa.testdomain --check-connection 1 --port 389 --mode ldap --comment FreeIPA
add auth server failed: Неизвестное имя или служба

В веб-интерфейсе же получаем:
add auth server failed: ÐеизвеÑÑное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ ÑлÑжба (500) 

Для решения этой проблемы помогло изменение:
--- a/usr/share/perl5/PVE/Auth/LDAP.pm
+++ b/usr/share/perl5/PVE/Auth/LDAP.pm
@@ -516,7 +516,13 @@ sub on_delete_hook {
 sub check_connection {
     my ($class, $realm, $config, %param) = @_;
 
-    $class->connect_and_bind($config, $realm, \%param);
+    eval {
+        $class->connect_and_bind($config, $realm, \%param);
+    };
+    if (my $err = $@) {
+        utf8::decode($err);
+        die $err;
+    }
 }
 
 1;

Теперь сообщение об ошибки отображается корректно, однако при выполнении ранее упомянутой команды в CLI появилось предупреждение:
Wide character in die at /usr/share/perl5/PVE/RESTHandler.pm line 1024.

Нужен более детальный анализ исходного кода и решение проблемы.
Comment 1 Vladislav Glinkin 2026-02-17 13:04:43 MSK
В качестве дополнительной информации.
Заголовки ответа:

	HTTP/1.1 200 OK
	Cache-Control: max-age=0
	Connection: close
	Connection: Keep-Alive
	Date: Tue, 17 Feb 2026 09:23:17 GMT
	Pragma: no-cache
	Server: pve-api-daemon/3.0
	Content-Length: 172
	Content-Type: application/json;charset=UTF-8
	Expires: Tue, 17 Feb 2026 09:23:17 GMT

Сам ответ:

	{"message":"add auth server failed: ÐеизвеÑÑное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ ÑлÑжба\n","data":null,"status":500,"success":0}

Локаль:
# locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=