Написание привилегированного вспомогательного инструмента с помощью SMJobBless ()

Несмотря на то, что API был открыт со времен Mac OS X Leopard, существует удивительно и, к сожалению, очень мало документации о том, как правильно использовать SMJobBless () для создания привилегированных вспомогательных инструментов. Есть много подводных камней, даже при копировании кода непосредственно из демонстрационного проекта Apple. К счастью, я нашел способ обойти это и получил основу для работы моего вспомогательного инструмента.

Однако может показаться, что SMJobBless () только благословляет инструмент и копирует его, но не запускает. Я включил код в функцию main () моего вспомогательного инструмента, которая должна запускаться, но не работает (поскольку NSLog () по необъяснимым причинам не работает - согласно крошечной информации, которую я нашел - я пробовал syslog () ввести строки типа «Hello world», но на системной консоли ничего не отображается). Нет никаких указаний на то, что вспомогательный инструмент вообще запущен.
Документация по большей части бесполезна. Он просто говорит, что после вызова SMJobBless () вспомогательный инструмент «готов», без указания даже того, что означает «готов».

Более того, образец Apple не включает код межпроцессного взаимодействия и не объясняет, как предполагается взаимодействовать со вспомогательным инструментом.Вы используете распределенные объекты? Порты маха? Кто знает? Официальной информации о том, как это сделать, нет.

Итак, есть ли у кого-нибудь информация о том, как это сделать? Я подтвердил, что вспомогательный инструмент установлен и аутентификация работает, но я просто не могу понять, как запустить вспомогательный инструмент и связаться с ним - в документации просто такой пробел, что это пока загадка. Это очень расстраивает; Я не могу быть единственным тем, у кого есть эта проблема (но о ней мало упоминается где-нибудь ), а SMJobBless () очевидно работает как-то , поскольку это то, что использует Apple.

(Пожалуйста, не упоминайте AuthorizationExecuteWithPrivileges () . Я не использую его: он устарел, обязательно исчезнет и представляет собой серьезную дыру в безопасности. Нет, спасибо.)

25
задан Itai Ferber 3 February 2012 в 20:09
поделиться