Macos:使用objective-c确定用户帐户是不是是Active Directory用户与本地用户

Posted

技术标签:

【中文标题】Macos:使用objective-c确定用户帐户是不是是Active Directory用户与本地用户【英文标题】:Mac OSX: Determing whether user account is an Active Directory user vs. local user using objective-cMacos:使用objective-c确定用户帐户是否是Active Directory用户与本地用户 【发布时间】:2013-02-15 22:55:07 【问题描述】:

使用 dsconfigad -show 可以解析输出并确定计算机是否绑定到 Active Directory 域。

问题是即使用户以本地用户帐户登录,也会返回 Active Directory 域。

注意:理想情况下,我需要一个同样适用于 10.5 的解决方案。

不回答问题的类似帖子:

How can I get the domain name for a user logged into a Mac via Active Directory

【问题讨论】:

【参考方案1】:

我正在寻找如何检测用户是否拥有本地帐户或任何网络目录帐户(ActiveDir 或 OpenDir)。所以我使用 Open Directory 框架所做的事情是这样的:

    获取默认 ODSession 会话 获取本地节点——kODNodeTypeLocalNodes(我不想一直向服务器发送查询) kODAttributeTypeNFSHomeDirectory 的查询节点,查询值设置为当前用户的主目录 如果找到,则表示用户是本地的,如果不是(因为我们只查询本地节点)——用户有网络帐户

所以是这样的:

static BOOL  isLocalUser = NO;
static BOOL shouldKeepRunning = YES;        // global

-(BOOL)isLocalUser

    isLocalUser = NO;   // set default to NO here
    NSError* err;
    ODSession *mySession = [ODSession defaultSession];
    ODNode *myNode = [ODNode nodeWithSession:mySession type:kODNodeTypeLocalNodes error:&err];
    ODQuery *myQuery = [ODQuery  queryWithNode: myNode
                                forRecordTypes: kODRecordTypeUsers
                                     attribute: kODAttributeTypeNFSHomeDirectory
                                     matchType: kODMatchEqualTo
                                   queryValues: NSHomeDirectory()
                              returnAttributes: kODAttributeTypeStandardOnly
                                maximumResults: 0
                                         error: &err];

    [myQuery retain];
    [myQuery setDelegate: self];
    [myQuery scheduleInRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

    NSRunLoop *theRunLoop = [NSRunLoop currentRunLoop];
    while (shouldKeepRunning && [theRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

    return isLocalUser;


- (void)query:(ODQuery *)inSearch foundResults:(NSArray *)inResults error:(NSError *)inError


     if (!inResults && !inError)
     
        [inSearch removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [inSearch release];
        shouldKeepRunning = NO;  // end of search
     

     ...
     // check what you found here
     // if found any nodes, user is local so
     isLocalUser = YES;

另一个想法是使用身份服务:

    获取当前用户的身份(CSIdentityQueryCreateForCurrentUser) 从中获取权限 (CSIdentityGetAuthority) 看看是不是本地授权(CSGetLocalIdentityAuthority)

希望这会有所帮助。

【讨论】:

以上是关于Macos:使用objective-c确定用户帐户是不是是Active Directory用户与本地用户的主要内容,如果未能解决你的问题,请参考以下文章

重设 macOS 用户帐户的密码,你们会吗?

如何在 macOS 上为 Qt 窗口使用 Objective-C 变量和方法?

CloudKit 使用的云账号

OS X (macOS) 和低级 C(Objective-C 替代方案)中的 Applescript

有没有办法确定用户是通过自定义 Firebase 帐户还是通过 Flutter 中的 Google 帐户登录的?

Objective-C中的开源Macos停靠动画[关闭]