我非常了解 Privileged Helper 工具以及部署它们的目的和技术。我还成功地创建并安装了它们——但我找不到一个示例来说明如何简单地将文件复制到需要特殊权限的位置。我认为 FSPathCopyObjectSync 将允许我实现这一点,尽管我发现该方法已被弃用,以及似乎是 Mac OSX 上的每个文件操作。
这是我到目前为止发现的:
• BetterAuthorizationSample(已弃用)
• SMJobBless(基本上什么都不做)
• Privileged Helper 示例(不安装下面的命令行工具)
这是上面示例中的方法:
if (pFilename)
{
// Base command minus cert name and file namem is 76 characters, 1 for NULL
char* valCodeSignCmd = 0;
// asprintf allocates & never overflows
if (asprintf(&valCodeSignCmd, "codesign -v -R=\"certificate leaf[subject.CN] = \\\"%s\\\" and anchor apple generic\" \"%s\"", kSigningCertCommonName, pFilename) != -1)
{
if (system(valCodeSignCmd) == 0)
{
// Passed codesign validation
// OK to copy now - overwrite if present
OSStatus fsret = FSPathCopyObjectSync(pFilename, "/usr/local/bin", toolName, NULL, kFSFileOperationOverwrite);
if (fsret != noErr)
success = false;
}
// Clean up
free(valCodeSignCmd);
}
else
success = false;
}
以史蒂夫乔布斯的名义,这里发生了什么?