11

浏览 Apples BetterAuthorizationSample 和其他衍生产品(http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/)我我正在尝试对应用程序进行小改动,并更好地了解整个安全和服务管理框架。因此,我继续添加一个按钮,该按钮通过 SMJobBless - SMJobRemove() 的反面删除已安装的作业。然而,AuthorizationCreate() 调用直接显示一个对话框,声明并请求安装帮助程序而不是删除它的权限。

这就是我得到的对话框(通过使用kSMRightModifySystemDaemons)。如您所见,它说我的应用程序试图添加一个新的帮助工具。这会让我的用户感到困惑,因为该应用程序实际上试图删除已安装的帮助工具。

在此处输入图像描述

我正在寻找有关如何更改此对话框以反映我的实际操作(作业删除)的知识,还有其他几个似乎完全自定义对话框的应用程序 - 显示他们自己的自定义标签和按钮..

BOOL doRemoveSystemTool(NSString* label, NSError** error)
{
BOOL result = NO;

AuthorizationItem authItem      = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights  = { 1, &authItem };
AuthorizationFlags flags        =   kAuthorizationFlagDefaults              |
kAuthorizationFlagInteractionAllowed    |
kAuthorizationFlagPreAuthorize          |
kAuthorizationFlagExtendRights;

AuthorizationRef authRef = NULL;
//Obtain authorization
OSStatus status = AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef);
if (status != errAuthorizationSuccess)
{
    NSLog(@"Failed to create AuthorizationRef, return code %ld", (long)status);
} else
{
    //We have authorization so proceed with removing the Job via SMJobRemove
    result = SMJobRemove(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, YES, (CFErrorRef *)error);
}
AuthorizationFree(authRef, kAuthorizationFlagDefaults);
return result;
}

我已经尝试将 authItem 从 kSMRightBlessPrivilegedHelper 更改为 kSMRightModifySystemDaemons 但这所做的只是将对话框更改为显示“添加”而不是“安装”

非常感谢这里的一些帮助......

4

1 回答 1

1

我以前没有用过这个,但发现你的问题很有趣,所以我读了一点苹果的文档,基于此,我想知道用 a 设置环境是否能满足kAuthorizationEnvironmentPrompt你的要求?

From AuthorizationTags.h:
  The name of the AuthorizationItem that should be passed into the environment 
when specifying a invocation specific additional text.  The value should be a 
localized UTF8 string.

您将使用 this 创建一个 AuthorizationItem,然后创建一个包含它的 AuthorizationItemSet,然后将该集合传递给参数的AuthorizationCreate调用。environment:

我会试试的。

我阅读文档的另一个想法是拥有一个命令行工具,它可以删除并授权执行命令行工具(“SomethingSomethingHelper”),这可能不会让用户感到困惑(所以使用AuthorizationExecuteWithPrivilegeskAuthorizationRightExecute其他)。

于 2013-12-09T22:22:27.860 回答