Dav*_*IRV 9 security macos cocoa objective-c
翻翻苹果BetterAuthorizationSample,并进一步衍生品(http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/)我我正在尝试对应用程序进行一些小改动,并更好地了解整个Security&ServiceManagement框架.因此,我继续添加一个按钮,通过SMJobBless - SMJobRemove()的反向删除已安装的Job.然而,直接向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;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试从kSMRightBlessPrivilegedHelper更改为kSMRightModifySystemDaemons的authItem,但所有这一切都改变了对话框以显示'Add'而不是'Install'
非常感谢这里的一些帮助......
我以前没有使用过这个,但发现你的问题很有趣,所以我读了一点苹果的文档,基于此我想知道用 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.
Run Code Online (Sandbox Code Playgroud)
您可以使用它创建一个 AuthorizationItem,然后创建一个包含它的 AuthorizationItemSet,然后将该集合传递到参数AuthorizationCreate的调用中environment:。
我会尝试一下。
我阅读文档的另一个想法是拥有一个命令行工具,可以删除并授权执行命令行工具(“SomethingSomethingHelper”),这可能不会让用户感到困惑(因此使用AuthorizationExecuteWithPrivileges或kAuthorizationRightExecute其他)。
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |