Bug 38968 - GetUserName() в домене ActiveDirectory
Summary: GetUserName() в домене ActiveDirectory
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: wine (show other bugs)
Version: unstable
Hardware: all Linux
: P5 normal
Assignee: Vitaly Lipatov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-09-19 15:59 MSK by Александр
Modified: 2020-09-22 22:24 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Александр 2020-09-19 15:59:07 MSK
Функция Win32 API 'GetUserName' под доменной учёткой Active Directory (sssd) возвращает 'uid' текущего пользователя (вместо логина).

Если поподробнее, то имеется:
- машина с Alt Linux 9.1 Workstation (x86_64), включённая в домен Active Directory
- установленный Wine 5.0.2 (x86_64-i586)  // apt-get install i586-wine
- приложение Win32, исполняемое в среде Wine и вызывающее функцию Win32 API 'GetUserName'

Результаты, возвращаемые функцией 'GetUserName()', различаются в зависимости от того, под какой учётной записью запущена программа:
- при исполнении под локальной учёткой функция отрабатывает правильно, возвращая логин, например 'alex'
- при исполнении под доменной учёткой функция отрабатывает неверно: ожидаемое значение, к примеру, 'alexander', а фактическое - набор из 9 цифр.

Выполнение консольной команды 'id' показало, что под доменной учёткой функция 'GetUserName' возвращает строковое представление в 10-чной системе счисления для 'uid' текущего (доменного?) пользователя на данной машине.

P.S.:
Самое позднее, с середины 2000-х для wine известен баг - невозможность подключения к MS SQL Server с использованием авторизации на основе текущей доменной учётки. Кстати, ошибка до сих пор не исправлена.
Подозреваю, что у этих ошибок может быть нечто общее. Впрочем, давайте начнём с 'GetUserName'.
Comment 1 Vitaly Lipatov 2020-09-19 17:35:51 MSK
Данная функциональность реализована и поддерживается в WINE@Etersoft.

Задачи в данной багзилле могут касаться только ошибок сборки и упаковки программы.

Но покажите
$ echo "$USER"
под обычным пользователем и под доменным.
Comment 2 Vitaly Lipatov 2020-09-19 17:48:25 MSK
(Ответ для Александр на комментарий #0)
> Функция Win32 API 'GetUserName' под доменной учёткой Active Directory (sssd)
> возвращает 'uid' текущего пользователя (вместо логина).
...
> возвращаемые функцией 'GetUserName()', различаются в зависимости
> от того, под какой учётной записью запущена программа:
> - при исполнении под локальной учёткой функция отрабатывает правильно,
> возвращая логин, например 'alex'
> - при исполнении под доменной учёткой функция отрабатывает неверно:
> ожидаемое значение, к примеру, 'alexander', а фактическое - набор из 9 цифр.
Поставьте пакет
i586-sssd-client
Comment 3 Александр 2020-09-21 19:41:30 MSK
Благодарю за быструю реакцию!

Пакет sssd-client был установлен. Ещё до ввода машины в домен. Другие пакеты, связанные с sssd, ad, ldap, kerberos - тоже все на месте.

Команда '$ echo $USER' правильно выводит логин пользователя в обоих случаях - как под локальной учёткой, так и под доменной.

Посмотрел вывод функции GetUserName() под ознакомительной версией Wine@Etersoft Local - увы, тоже uid вместо имени.

P.S.:
За '$echo $USER' премного благодарен.
Это значение оказалось возможным получить с помощью win32 api - функцией GetEnvironmentVariable().
Comment 4 Vitaly Lipatov 2020-09-21 21:39:22 MSK
(Ответ для Александр на комментарий #3)
> Благодарю за быструю реакцию!
> 
> Пакет sssd-client был установлен. Ещё до ввода машины в домен. Другие
> пакеты, связанные с sssd, ad, ldap, kerberos - тоже все на месте.
Перечитайте ещё раз название пакета:
>> Поставьте пакет
>> i586-sssd-client
Comment 5 Александр 2020-09-22 22:24:19 MSK
(Ответ для Vitaly Lipatov на комментарий #4)
> Перечитайте ещё раз название пакета:
> >> Поставьте пакет
> >> i586-sssd-client

Большое спасибо!
Теперь GetUserName() работает как надо.

Прошу прощения за потраченное на меня время, впредь буду внимательнее...