浏览 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 但这所做的只是将对话框更改为显示“添加”而不是“安装”
非常感谢这里的一些帮助......