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 上为 Qt 窗口使用 Objective-C 变量和方法?
OS X (macOS) 和低级 C(Objective-C 替代方案)中的 Applescript