考虑到OS X中用户的名称,可以使用BSD membership functions查询其Active Directory SID。
但是,如果在不是目录成员的计算机上提供本地用户名,则还会返回SID。
提供了用于检查本地登录用户是否为域帐户的解决方案here,但这假设有问题的用户是当前会话的用户,可能不是这种情况。此外,如果用户是移动帐户(漫游),则会找到主目录并且返回错误。
那么,如何检查给定的用户名是本地用户还是域用户,用户名可以是任何名称,包括用于本地进程的名称?
答案 0 :(得分:0)
使用 OpenDirectory API我设法完成了类似的任务,以下是适合您查询的修改后的解决方案:
bool isDomainUser(std::string currentUser)
{
NSString *queryVal = [NSString stringWithUTF8String:currentUser.c_str()];
ODSession *session = [ODSession defaultSession];
ODNode *node = [ODNode nodeWithSession:session
type:kODNodeTypeAuthentication error:NULL];
ODQuery *query = [ODQuery queryWithNode:node forRecordTypes:kODRecordTypeUsers
attribute:kODAttributeTypeRecordName
matchType:kODMatchEqualTo
queryValues:queryVal
returnAttributes:kODAttributeTypeStandardOnly
maximumResults:0 error:NULL];
NSArray *records = [query resultsAllowingPartial:NO error:NULL];
for (ODRecord *record in records)
{
ODAttributeType type = @"dsAttrTypeStandard:OriginalAuthenticationAuthority";
NSArray *lines = [record valuesForAttribute:type error:nil];
if (lines)
{
for(NSString *line in lines)
{
if ([line hasPrefix:@"NetLogon"])
{
return true;
}
}
}
}
return false;
}