При запуске корневого процесса, как войти в систему, используя C ++? Linux / Mac - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть программа, работающая от имени пользователя root, и я вызываю другую программу для запуска (A).

Я хочу, чтобы A запускался как пользователь, вошедший в систему.Я использовал команду: su - 'username' -c A,

или в Главной функции, я вызвал: setuid(current_uid_logged).

Но я не знаю, как получить пользователь-имя вошло в систему или uid в корневом процессе.

Любые попытки, которые я пробовал: getenv("USERNAME") или getlogin() всегда возвращают root учетную запись.Я перепутал с getlogin(), моя программа работает при запуске ядра и ожидает входа пользователя в систему (у меня есть поток, чтобы дождаться запуска процесса Finder (Mac OSX) для обнаружения входа пользователя), подождать 10 секунд и вызвать getlogin() но иногда он возвращает root, но может вернуть логин пользователя.Я думаю, что процесс Finder работает, когда пользователь вошел в систему.Но когда я вызываю приложение для запуска с помощью команды sudo, getlogin() всегда возвращает текущего пользователя, вошедшего в систему.

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

getlogin(3) возвращает имя пользователя, которому принадлежит управляющий терминал процесса. не имеет ничего общего с именем пользователя, который может войти в GUI операционной системы.Вместо этого getlogin(3) и getuid(2) будут только когда-либо возвращать имя / uid учетной записи пользователя, которая запустила программу - они имеют больше общего с историей процесса, чем с любым пользователем, сидящим передкомпьютер.

Существуют похожие истории с переменными среды USER и LOGNAME - если какой-либо из них был задан в процессе, это был процесс выше в дереве вызовов процесса.На него тоже не может повлиять тот пользователь, который в конечном итоге сядет перед компьютером.

Я уверен, что - это какой-то механизм для обнаружения вошедшего в систему пользователя на компьютере с OS X, но это не будет традиционный Unix API, который предоставляет его вам.

0 голосов
/ 17 ноября 2011
...