C ++. Войдите в систему под именем пользователя от Linux daemon - PullRequest
1 голос
/ 15 апреля 2020

есть ли способ войти в систему под именем пользователя от демона linux? Я попытался

seteuid(1000);
std::string userName = getlogin();

, но кажется, что этот вызов не удается, и мое приложение завершается после. Общая ситуация следующая: какой-то скрипт, который запускает мой процесс-демон. Внутри этого демона я запускаю другой процесс пользовательского интерфейса (назовем его A). Затем в процессе А я пытаюсь войти в систему с именем пользователя способом, описанным ранее. И мой процесс A завершается после getlogin вызова. Есть ли надежный способ войти в систему под именем пользователя из процесса A?

1 Ответ

3 голосов
/ 15 апреля 2020

getlogin() считывает информацию для входа из файла utmp, поэтому он не будет работать, если процесс не связан с терминалом.

Я предполагаю, что из вызова seteuid в вашем Например, процесс A выполняется с эффективным идентификатором пользователя исходного пользователя.

Если у вас нет терминала, но есть идентификатор пользователя, вам необходимо использовать базу данных «passwd» (часто, но не всегда, при поддержке файла /etc/passwd):

struct passwd *pw = getpwuid(geteuid());
string userName = pw->name;
...