Функция 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'.
Данная функциональность реализована и поддерживается в WINE@Etersoft. Задачи в данной багзилле могут касаться только ошибок сборки и упаковки программы. Но покажите $ echo "$USER" под обычным пользователем и под доменным.
(Ответ для Александр на комментарий #0) > Функция Win32 API 'GetUserName' под доменной учёткой Active Directory (sssd) > возвращает 'uid' текущего пользователя (вместо логина). ... > возвращаемые функцией 'GetUserName()', различаются в зависимости > от того, под какой учётной записью запущена программа: > - при исполнении под локальной учёткой функция отрабатывает правильно, > возвращая логин, например 'alex' > - при исполнении под доменной учёткой функция отрабатывает неверно: > ожидаемое значение, к примеру, 'alexander', а фактическое - набор из 9 цифр. Поставьте пакет i586-sssd-client
Благодарю за быструю реакцию! Пакет sssd-client был установлен. Ещё до ввода машины в домен. Другие пакеты, связанные с sssd, ad, ldap, kerberos - тоже все на месте. Команда '$ echo $USER' правильно выводит логин пользователя в обоих случаях - как под локальной учёткой, так и под доменной. Посмотрел вывод функции GetUserName() под ознакомительной версией Wine@Etersoft Local - увы, тоже uid вместо имени. P.S.: За '$echo $USER' премного благодарен. Это значение оказалось возможным получить с помощью win32 api - функцией GetEnvironmentVariable().
(Ответ для Александр на комментарий #3) > Благодарю за быструю реакцию! > > Пакет sssd-client был установлен. Ещё до ввода машины в домен. Другие > пакеты, связанные с sssd, ad, ldap, kerberos - тоже все на месте. Перечитайте ещё раз название пакета: >> Поставьте пакет >> i586-sssd-client
(Ответ для Vitaly Lipatov на комментарий #4) > Перечитайте ещё раз название пакета: > >> Поставьте пакет > >> i586-sssd-client Большое спасибо! Теперь GetUserName() работает как надо. Прошу прощения за потраченное на меня время, впредь буду внимательнее...