Zac*_*los 5 security macos cocoa authorization swift
这是我第一次写Swift,Cocoa(有Cocoa Touch的经验)和使用授权,所以老实说我不知道我是否在正确的轨道上.我试图做一个修改hosts文件,这需要用户身份验证,但无论是AuthorizationCreate和AuthorizationExecuteWithPrivileges方法是给错误.
var authorizationRef:AuthorizationRef
var status:OSStatus
status = AuthorizationCreate(nil, environment:kAuthorizationEmptyEnvironment, flags:kAuthorizationFlagDefaults, authorization:&authorizationRef)
let overwrite_hosts = "echo \(hostsContents) > /private/etc/hosts"
let args = [overwrite_hosts.cStringUsingEncoding(NSUTF8StringEncoding)]
status = AuthorizationExecuteWithPrivileges(authorizationRef, pathToTool:"/bin/sh", options:kAuthorizationFlagDefaults, arguments:args, communicationsPipe:nil)
Run Code Online (Sandbox Code Playgroud)
我的调用AuthorizationCreate是抛出"类型'()'不符合协议'AuthorizationRef'"而我的调用AuthorizationExecuteWithPrivileges是"无法找到接受提供的参数的'__conversion'的重载"
有任何想法吗?我接近这个错误吗?
谢谢你的帮助!
我能够弄清楚如何通过 AppleScript 来做到这一点,但是您应该能够使用我之前尝试过的授权方法来做到这一点,因此让这个问题悬而未决。任何寻求快速解决方案(未实施错误检查)的人都可以使用我在下面写的内容:
func doScriptWithAdmin(inScript:String) -> String{
let script = "do shell script \"\(inScript)\" with administrator privileges"
var appleScript = NSAppleScript(source: script)
var eventResult = appleScript.executeAndReturnError(nil)
if !eventResult {
return "ERROR"
}else{
return eventResult.stringValue
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1938 次 |
| 最近记录: |