代码之家  ›  专栏  ›  技术社区  ›  Redwood

如何获取通过Active Directory登录Mac的用户的域名

  •  7
  • Redwood  · 技术社区  · 16 年前

    在我的Cocoa应用程序中,当当前用户通过Active Directory登录时,如何获取其域?

    我需要确定两件事:

    1. 如果为1,则为用户的域。

    我找到了关于 Directory Services Open Directory Programming Guide 但后者仅为10.6(我必须支持10.5+),我找不到任何关于前者的例子,让我知道我需要做什么。

    3 回复  |  直到 16 年前
        1
  •  3
  •   speeds images    16 年前

    dsconfigad-show

        2
  •  1
  •   Community Mohan Dere    9 年前

    Mac OSX: Determing whether user account is an Active Directory user vs. local user using objective-c

    您只需查找网络或身份验证节点(它是kODNodeTypeAuthentication类型),并在其中查询kODAttributeTypeRecordName,查询值设置为当前用户名。然后看看搜索结果,你会发现很多有趣的东西:)

        3
  •  0
  •   IdoT    8 年前

    您可以使用这段代码,但请注意,我假设您指的是运行当前应用程序的用户,如果您以root用户身份运行,那么它将无法工作。 如果以root用户身份运行,只需更改 在查询中,选择要查询的所需用户。

    std::string getDomainForCurrentUser()
    {
        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:NSUserName() returnAttributes:kODAttributeTypeStandardOnly maximumResults:0 error:NULL];
        NSArray *records = [query resultsAllowingPartial:NO error:NULL];
    
        for (ODRecord *record in records)
        {
            NSArray *recordLines = [record valuesForAttribute:kODAttributeTypePrimaryNTDomain error:nil];
    
            if (recordLines)
            {
                NSString *domain = [recordLines firstObject];
                std::string([domain UTF8String]);
    
            }
        }
    
        return "";
    }