Apples BetterAuthorizationSample とさらなる派生物 ( http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/ ) に目を通します。アプリケーションに小さな変更を加えて、Security & ServiceManagement フレームワーク全体の理解を深めようとしています。したがって、SMJobBless - SMJobRemove() の逆を介して、インストールされたジョブを削除するボタンを追加することにしました。ただし、AuthorizationCreate() 呼び出しは、ヘルパーをインストールし、削除しない許可を示して要求するダイアログを表示します。
それが私が得るダイアログです(を使用してkSMRightModifySystemDaemons
)。ご覧のとおり、私のアプリは新しいヘルパー ツールを追加しようとしています。アプリは実際にインストールされたヘルパー ツールを削除しようとするため、これはユーザーを混乱させます。
このダイアログが実際のアクション (ジョブの削除) を反映するようにどのように変更されるかについての知識を探しています。ダイアログを完全にカスタマイズしているように見える他のアプリもいくつかあります - 独自のカスタム ラベルとボタンを表示しています..
BOOL doRemoveSystemTool(NSString* label, NSError** error)
{
BOOL result = NO;
AuthorizationItem authItem = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights = { 1, &authItem };
AuthorizationFlags flags = kAuthorizationFlagDefaults |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize |
kAuthorizationFlagExtendRights;
AuthorizationRef authRef = NULL;
//Obtain authorization
OSStatus status = AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess)
{
NSLog(@"Failed to create AuthorizationRef, return code %ld", (long)status);
} else
{
//We have authorization so proceed with removing the Job via SMJobRemove
result = SMJobRemove(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, YES, (CFErrorRef *)error);
}
AuthorizationFree(authRef, kAuthorizationFlagDefaults);
return result;
}
authItem を kSMRightBlessPrivilegedHelper から kSMRightModifySystemDaemons に変更して実験しましたが、ダイアログを変更して「インストール」ではなく「追加」を表示するだけでした。
ここでいくつかの支援をいただければ幸いです...