检查用户是本地帐户还是域帐户

Check if a user is a local or domain account

本文关键字:用户 检查      更新时间:2023-10-16

给定OS X中用户的名称,就可以使用BSD成员函数查询其Active Directory SID。

但是,当在不是目录成员的计算机上提供本地用户名时,还会返回SID。

这里提供了一个检查本地登录用户是否是域帐户的解决方案,但这假设有问题的用户是当前会话的用户,但事实可能并非如此。此外,如果用户是移动帐户(漫游),则会找到主目录,并且返回错误。

那么,如何检查给定的用户名是本地用户还是域用户,其中用户名可以是任何名称,包括用于本地进程的名称?

使用OpenDirectoryAPI我已经成功完成了类似的任务,下面是适合您查询的修改解决方案:

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;
}