11

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 に変更して実験しましたが、ダイアログを変更して「インストール」ではなく「追加」を表示するだけでした。

ここでいくつかの支援をいただければ幸いです...

4

1 に答える 1

1

これを使用したことはありませんが、あなたの質問が興味深いと思ったので、Apple のドキュメントを少し読んで、それに基づいて環境を設定すると、あなたが望むことができるのでkAuthorizationEnvironmentPromptはないかと思いますか?

From AuthorizationTags.h:
  The name of the AuthorizationItem that should be passed into the environment 
when specifying a invocation specific additional text.  The value should be a 
localized UTF8 string.

これを使用して AuthorizationItem を作成してから、それを含む AuthorizationItemSet を作成し、そのセットをパラメーターのAuthorizationCreate呼び出しに渡しenvironment:ます。

私はそれを試してみます。

ドキュメントを読んでいたもう 1 つのアイデアは、コマンド ライン ツール ("SomethingSomethingHelper") の実行を削除して承認するコマンド ライン ツールを用意することAuthorizationExecuteWithPrivilegesでしkAuthorizationRightExecuteた。

于 2013-12-09T22:22:27.860 に答える