3

AuthorizationExecuteWithPrivilegesを介してアンインストーラー(AppleScriptで記述)を実行しようとしています。次のように空の認証参照を作成した後、権限を設定しています。

    char *tool = "/usr/bin/osascript";
    AuthorizationItem items = {kAuthorizationRightExecute, strlen(tool), tool, 0};
    AuthorizationRights rights = {sizeof(items)/sizeof(AuthorizationItem), &items};
    AuthorizationFlags flags = kAuthorizationFlagDefaults |
                               kAuthorizationFlagExtendRights |
                               kAuthorizationFlagPreAuthorize |
                               kAuthorizationFlagInteractionAllowed;
    status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL);

後で私は電話します:

    status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, (char *const *)args, NULL);

Snow Leopardではこれは正常に機能しますが、Leopardではsyslog.logに次のように表示されます。

Apr 19 15:30:09 hostname /usr/bin/osascript[39226]: OpenScripting.framework - 'gdut' event blocked in process with mixed credentials (issetugid=0 uid=501 euid=0 gid=20 egid=20)
Apr 19 15:30:12: --- last message repeated 1 time ---
...
Apr 19 15:30:12 hostname [0x0-0x2e92e9].com.example.uninstaller[39219]: /var/folders/vm/vmkIi0nYG8mHMrllaXaTgk+++TI/-Tmp-/TestApp_tmpfiles/Uninstall.scpt: 
Apr 19 15:30:12 hostname [0x0-0x2e92e9].com.example.uninstaller[39219]: execution error: «constant afdmasup» doesn’t understand the «event earsffdr» message. (-1708)

これを数時間調査した後、私の最初の推測では、Leopardは、それがsetuidの状況にあることを知っており、AppleScript内のユーザー固有のことについて尋ねる呼び出しをブロックするため、私がしていることをどういうわけかやりたくないと思います。

私はこれについてすべて間違っていますか?「sudo/usr / bin/osascript...」に相当するものを実行したいだけです。

編集:

FWIW、「実行エラー」の原因となる最初の行は次のとおりです。

set userAppSupportPath to (POSIX path of (path to application support folder from user domain))

ただし、空のスクリプト(実行argv、終了実行、それだけ)を使用しても、「gdut」メッセージが表示されます。

4

1 に答える 1

2

このスレッドによると。http://forums.macosxhints.com/showthread.php?t=90952&page=3 OS Xにセキュリティ更新が行われ、setuidルートスクリプトがAppleScriptを介してアクセスされるのをブロックしているようです。

このメカニズムがあなたのコードもブロックしているのではないかと思います。

残念ながら、これは「設計上」機能していないことを意味していると思います。

于 2010-06-11T21:01:40.540 に答える