使用核心服务和 Objective-C 在 MacOS Catalina 上创建本地组
Creating local group on MacOS Catalina using Core Services and Objective-C
如何使用 Core Services. 创建本地群组?核心服务的文档说 "The Core Services Identity Reference allows developers to support user and group creation.." 但没有关于如何做到这一点的示例。
更新。这是我到目前为止的代码,但它不起作用并且 ErrorCode return -2,错误描述为空。真的很难找到任何解释如何做的文档。还有 0 个关于错误代码的信息。
CFStringRef realName = CFStringCreateWithCString(NULL, "newGroupTest",
kCFStringEncodingMacRoman);
CFStringRef posixName = CFStringCreateWithCString(NULL, "newgrptst1",
kCFStringEncodingMacRoman);
AuthorizationRef auth;
OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
kAuthorizationFlagDefaults,
&auth);
CSIdentityAuthorityRef authority = CSGetDefaultIdentityAuthority();
CSIdentityRef identity = CSIdentityCreate(NULL, kCSIdentityClassGroup, realName,
posixName, kCSIdentityFlagNone, authority);
CFErrorRef error;
BOOL success = CSIdentityCommit(Identity, auth, &error);
if(!success)
{
CFIndex index = CFErrorGetCode(error);
CFStringRef desc = CFErrorCopyDescription(error);
const char* cDesc = CFStringGetCStringPtr(desc, CFStringGetSystemEncoding());
}
找到问题所在。我没有使用正确的身份权限。要创建一个本地组,您需要使用 CSGetLocaldentityAuthority()
来获取本地身份授权,该授权存储系统本地的身份,而不是
CSGetDefaultIdentityAuthority()
代表网络权限。
如何使用 Core Services. 创建本地群组?核心服务的文档说 "The Core Services Identity Reference allows developers to support user and group creation.." 但没有关于如何做到这一点的示例。
更新。这是我到目前为止的代码,但它不起作用并且 ErrorCode return -2,错误描述为空。真的很难找到任何解释如何做的文档。还有 0 个关于错误代码的信息。
CFStringRef realName = CFStringCreateWithCString(NULL, "newGroupTest",
kCFStringEncodingMacRoman);
CFStringRef posixName = CFStringCreateWithCString(NULL, "newgrptst1",
kCFStringEncodingMacRoman);
AuthorizationRef auth;
OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
kAuthorizationFlagDefaults,
&auth);
CSIdentityAuthorityRef authority = CSGetDefaultIdentityAuthority();
CSIdentityRef identity = CSIdentityCreate(NULL, kCSIdentityClassGroup, realName,
posixName, kCSIdentityFlagNone, authority);
CFErrorRef error;
BOOL success = CSIdentityCommit(Identity, auth, &error);
if(!success)
{
CFIndex index = CFErrorGetCode(error);
CFStringRef desc = CFErrorCopyDescription(error);
const char* cDesc = CFStringGetCStringPtr(desc, CFStringGetSystemEncoding());
}
找到问题所在。我没有使用正确的身份权限。要创建一个本地组,您需要使用 CSGetLocaldentityAuthority()
来获取本地身份授权,该授权存储系统本地的身份,而不是
CSGetDefaultIdentityAuthority()
代表网络权限。