2013-03-11 111 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或其他地方可以找到它)。

相关问题