2013-03-11 76 views
1

我有一個守護進程,需要以root用戶身份運行,並由launchd啓動。這個守護進程需要存儲一些用戶提供的憑證,所以我使用SecKeychainOpen和類似的函數將它們寫入系統鑰匙串。從守護進程中使用OSX系統密鑰鏈

我很確定,因爲這是以root身份運行的,所以我必須使用系統鑰匙串(因爲使用用戶的登錄鑰匙串不正確,因爲這不會像普通用戶那樣運行)。

我的安裝程序在安裝結束時使用launchctl將其加載到launchd中。問題是,直到重新啓動後才真正啓動。我在Perl中將OnLay設置爲true,但似乎在使用系統鑰匙串時,我需要重啓以使其工作。

我想知道是否有人知道某種方式來處理這個問題,因爲如果重新啓動沒有必要,它會是一個更好的用戶體驗。所以要清楚,我可以使用launchd在不重啓的情況下從守護進程編程訪問系統鑰匙串?

感謝您的任何建議或意見。

回答

2

由於我最終發現我的問題不是我認爲的問題,我想我應該把解決方案放在這裏。

事實證明(儘管我在幾個網站上閱讀過),使用launchd在不重新啓動的情況下通過守護程序以編程方式訪問系統鑰匙串完全可以。只需以正常的方式加載plist(當然有root權限),它都可以工作。

我的問題是我的postinstall腳本從來沒有運行,實際上甚至從未包含在我的.pkg安裝程序中,當在某些mac上構建時。顯然,如果你沒有安裝PackageMaker.app,macports仍然會爲你安裝一個安裝程序,但安裝程序是一個目錄而不是適當的單個文件,它可能缺少某些部分(比如我的postinstall腳本)。

PackageMaker.app可以在Apple Developer網站的Xcode AuxTools包中找到(然後它需要放在/ Applications或其他地方可以找到它)。