2012-11-29 126 views
9

通過蘋果BetterAuthorizationSample,並進一步衍生品(http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/) 我試圖做一個小變化的應用和更好地瞭解整個安全& ServiceManagement框架的展望。因此我開始添加一個按鈕,通過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改變爲kSMRightModifySystemDaemons從kSMRightBlessPrivilegedHelper但是這一切都沒有嘗試改變是要顯示「添加」,而不是「安裝」

對話

將不勝感激這裏的一些援助...

+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

我以前沒有使用過這一點,但發現你的問題有趣,所以我做蘋果的文檔的一些閱讀,並且基於我不知道是否有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:參數。

我想試試。

其他想法我不得不閱讀文檔是有一個命令行工具,做的刪除,並授權命令行工具(「SomethingSomethingHelper」),這可能是對用戶不易混淆的執行(從而使用AuthorizationExecuteWithPrivilegeskAuthorizationRightExecute或其他)。

+1

AuthorizationExecuteWithPrivileges =棄用 –

+0

這是一個提示,但沒有答案IMO –

+0

@ Daij-Djan我不勺子餵養的答案相信。給予足夠的指導讓別人自己前進,他們會學到更多。我相信這個_does_可能會給出答案,我只是沒有時間去編寫測試應用程序。 – Dad