Запуск скрипта sh через AuthorizationExecuteWithPrivileges - PullRequest
3 голосов
/ 22 июля 2009

Я запускаю скрипт удаления через приложение какао и заметил, что команда launchctl не выполняется.

Это часть кода, которая вызывает скрипт (который содержит команду sudo launchctl unload "name of the daemon")

//pFileName is the name of the File

NSString* pPath = [pCurrentBundle pathForResource:pFileName ofType:@"sh"];
char* const ppArgs[] = {const_cast<char*>([pPath fileSystemRepresentation]), NULL};

OSStatus status =  AuthorizationExecuteWithPrivileges(m_AuthorizationRef, "/bin/sh", kAuthorizationFlagDefaults, ppArgs, NULL); 

Поскольку все остальные команды скрипта выполняются правильно (и в терминале нормально выгружается), я предполагаю, что у меня нет той же привилегии, что и у root (и EUID, и RUID равны 0), как указано в TN2083.

1 Ответ

0 голосов
/ 22 июля 2009

Во-первых, вы не должны использовать sudo внутри скрипта, который уже запущен от имени пользователя root. При настройке Mac по умолчанию это не должно вызывать проблем, но это зависит от того, как пользователь настроил sudoers. Это все еще было бы моим самым большим подозрением о том, что ломается.

Далее, вы получаете какие-либо сообщения об ошибках на консоль, когда это выполняется? Вы упомянули, что другие вещи работают; они до или после этого? Вы проверяете результат ошибки Unix из этой строки скрипта?

Полагаю, вы прочитали Создание запускаемых демонов и агентов .

Вы говорите, что скрипт запущен, поэтому я предполагаю, что он на самом деле имеет расширение .sh и что pFileName не включает ".sh".

TN2083 не ссылается на AuthorizationExecuteWithPrivileges. Что вы подразумеваете под "как говорится в TN2083?"

Полагаю, в сценарии не установлены биты setuid, верно? Это доставит вам неприятности с AuthorizationExecuteWithPrivileges.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...