2012-01-12 9 views
2

起動時にroot特権を持つヘルパー・ツールが、メイン・プログラムへのNSConnectionの確立に失敗しました。launchd:マッハ・サービス・ルックアップに失敗しました

HelperToolをsudoで手動で起動すると接続が正常に機能していることがわかり、launchdの問題が発生します。

ログは、次のとおりです。

12.01.12 12:41:07 Debou[8247] [CaptureQueue startCaptureQueueThread] Launched NSConnection service Debou-CaptureQueueThread - (** NSConnection 0x100522090 receivePort <NSMachPort: 0x1005511d0> sendPort <NSMachPort: 0x1005511d0> refCount 1 **) 
12.01.12 12:41:10 com.apple.launchd[1] System: Looking up service Debou-CaptureQueueThread 
12.01.12 12:41:10 com.apple.launchd[1] (com.Debou.PacketTool[8260]) Mach service lookup failed: Debou-CaptureQueueThread 

launchdのが私販売さNSConnectionを見ることができないだろう、なぜ?

答えて

3

AIUIこれはMach名前空間階層に起因します。メインプログラムはNSConnectionをユーザーセッション名前空間に登録しますが、LaunchDaemonはグローバルコンテキストで実行されるため、セッション名前空間は認識されません。 sudoでヘルパーを実行すると、rootとして実行されているにもかかわらず、セッションコンテキストで実行されることに注意してください。 tn2083、特に「実行コンテキスト」と「デーモンIPCの推奨事項」を参照してください。

セッションの名前空間がグローバル名前空間から継承されているため、LaunchDaemonから接続を確立してメインプログラムから接続できるかもしれませんが、別の機構に切り替えるほうが良いでしょう。 Quinnとして "エスキモー!" this messageで指摘されているように、セキュリティドメイン間の分散オブジェクト(ユーザープログラムやデーモンがrootとして実行されているなど)を使用すると、適切な入力検証が難しくなり、セキュリティバグが発生する可能性があります。

関連する問題