/etc/hosts を更新するアプリケーションに取り組んでいます。このため、特権を評価する好ましい方法は、SMJobBless を介してヘルパー ツールをインストールすることであることがわかりました。次のコードの種類は機能します。
BOOL result = NO;
AuthorizationItem authItem = { kSMRightBlessPrivilegedHelper, 0, NULL, 0 };
AuthorizationRights authRights = { 1, &authItem };
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
AuthorizationRef authRef = NULL;
CFErrorRef error = NULL;
OSStatus status = AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status == errAuthorizationSuccess) {
result = SMJobBless(kSMDomainSystemLaunchd, (CFStringRef)@"com.fictitiousnonsense.MeddoHelper", authRef, &error);
} else {
NSLog(@"Failed to authorize");
}
if (error != NULL) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"I think it worked");
}
ドキュメントによると、私のヘルパー ツール com.fictitiousnonsense.MeddoHelper は /Library/PrivilegedHelperTools/com.fictitiousnonsense.MeddoHelper にインストールされ、その plist ファイルは /Library/LaunchDaemons にインストールされます。問題は、これがコンソールに表示されることです:
9/24/12 11:04:41.237 PM launchdadd[9082]: Could not open /Library/PrivilegedHelperTools/com.fictitiousnonsense.MeddoHelper (open() error 2: No such file or directory)
9/24/12 11:04:41.237 PM launchdadd[9082]: FAILURE: The path /Library/PrivilegedHelperTools/com.fictitiousnonsense.MeddoHelper does not exist on-disk.
ターミナルからヘルパーを手動で実行でき、動作します。なぜlaunchdはそれを実行しないのですか? Apple が提供する SMJobBlessApp サンプル アプリを実行しましたが、問題なく動作します。
参考までに、コード全体はhttps://github.com/varikin/meddoにあります。