2011-04-01 63 views
1

我有一個應用程序也可以配置並運行一個守護進程。我試圖給守護進程和應用程序訪問權限的鑰匙串項目。基本代碼:SecTrustedApplicationCreateFromPath太聰明瞭嗎?

 
SecKeychainItemRef item; 
// create a generic password item 
SecTrustedApplicationRef appRef[2]; 
SecAccessRef ref; 
SecTrustedApplicationCreateFromPath(NULL, &appRef[0]); 
SecTrustedApplicationCreateFromPath(DAEMON_PATH, &appRef[1]); 
CFArrayRef trustList = CFArrayCreate(NULL, (void *)appRef, sizeof(appRef)/sizeof(*appRef), NULL); 
SecAccessCreate(descriptor, trustList, &ref); 
SecKeychainItemSetAccess(item, ref); 

鑰匙串項創建,但因爲總是有訪問在鑰匙串訪問工具中列出的唯一應用程序是主要的應用。我們稱之爲FOO.app。 DAEMON_PATH指向應用程序包中的守護進程的絕對路徑 - 將其稱爲FOO.daemon

如果我手動進入Keychain Access並選擇守護程序,它會被添加到列表中。

關於如何讓SecTrustedApplicationCreateFromPath兌現完整/絕對路徑的想法?

回答

1

如果你今天需要一個答案......

我試圖取代訪問對象爲現有的鑰匙串項目沒有成功,太。所以,我決定修改現有的訪問對象而不是替換它,這種方法運行良好。

下面的僞代碼演示了這個想法。爲了清楚起見,聲明,CFRelease()和錯誤檢查被刪除。我使用SecAccessCopySelectedACLList來搜索具有適當授權標籤的ACL對象。您可能需要其他方式進行ACL過濾。

直接訪問對象的創建必須更加棘手,您需要創建與Keychain Access應用程序相同的ACL結構,而不是使用默認的SecAccessCreate()的ACL。我無法應付這種方式。

+0

我目前正面臨類似的問題。我使用了這個解決方案,並將應用程序可執行文件添加到ACL中,但是,我不能在未提示用戶的情況下訪問該對象。你解決了這個問題嗎?我的問題:http://stackoverflow.com/questions/24345870/accessing-os-x-keychain-item-from-trusted-application – 2014-06-23 18:31:41