2012-11-29 18 views
9

私は、アプリケーションに小さな変更を加えると全体のセキュリティ&た。servicemanagementフレームワークのより良い理解を得るためにしようとしていますリンゴBetterAuthorizationSample、さらにデリバティブ(http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/) てみると...そこで私はに進んでSMJobBless - SMJobRemove()の逆を介してインストールされたJobを削除するボタンを追加してください。ただし、AuthorizationCreate()コールでは、ヘルパーをインストールして削除する権限がないことを示すダイアログが表示されます。変更の許可ダイアログ)

これは私が(kSMRightModifySystemDaemonsを使用して)取得するダイアログです。ご覧のとおり、私のアプリは新しいヘルパーツールを追加しようとしています。これは、アプリケーションが実際にインストールされたヘルパーツールを削除しようとするため、ユーザーを混乱させます。自分のカスタムを示す - 私は、このダイアログは、私の実際のアクション(ジョブの削除)を反映するように変更された方法についての知識を見つけるために求めてい

enter image description here

、完全にダイアログをカスタマイズするように見えるいくつかの他のアプリもあります。ラベルとボタン..

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への変更を試してきたが、これはすべてやった「追加」を表示するために対話を変更して代わりに

を「インストール」の

が大幅ので、私はAppleのドキュメントの少し読書をしたとkAuthorizationEnvironmentPromptで環境をセットアップする場合、私は疑問に思うことに基づいて、私は前にこれを使用しますが、あなたの質問が面白い発見していない...ここ

+1

解決方法AuthorizationRightSet()を使用して、最後のパラメータ(localeTableName)がデフォルトプロンプトを指定する新しい右セットを作成します。まだデフォルトボタンテキストを取得するにはどのくらい正確に取得できますか?ラベルを簡単に変更することができます – DavidMIRV

+0

私は 'AuthorizationRightSet()'を使ってどのようにダイアログをより意味をなさせることができるのかを喜んで褒賞に与えます;-) –

+0

Appleはここに例を示します:https://developer.apple.com /library/mac/technotes/tn2095/_index.html#//apple_ref/doc/uid/DTS10003110-CH1-SECTION7。正しいプログラムによる追加 "非NULLのdescriptionKeyを使用してAuthorizationRightSetを呼び出すと、バンドル内のすべてのローカライゼーションが反復されます。各ローカリゼーションでは、適切なローカライゼーションテーブルファイルが検索され、そのテーブルの説明キーが検索されます。 " – markhunte

答えて

0

をいくつかの支援をお願い申し上げますあなたが望むことをするだろうか?

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を作成していること、およびその後、environment:パラメータにAuthorizationCreate呼び出しにセットを渡すを含むAuthorizationItemSetと思います。

私はそれを試みます。

私がドキュメントを読んでいたもう1つのアイデアは、コマンドラインツール(「SomethingSomethingHelper」)の実行を許可してユーザーに混乱させないようにするコマンドラインツールを使用することでした(AuthorizationExecuteWithPrivilegesまたはkAuthorizationRightExecuteなど)。

+1

AuthorizationExecuteWithPrivileges = deprecated –

+0

これはヒントですが回答がありませんIMO –

+0

@ Daij-Djan私はスプーンフィードの回答を信じていません。誰かが自分自身で前進するための十分な方向性を与え、より多くを学ぶでしょう。私はこれが潜在的に答えを与えると信じています、私はちょうどテストアプリを書く時間がありませんでした。 – Dad

関連する問題