在Objective-c Code中为Mac用户在Active Directory中查找用户名和用户SID

时间:2012-08-02 10:55:32

标签: objective-c

我是Mac开发的新手。 我正在使用Objective-C,我想知道如何找到登录到Mac机器的用户的域名和用户SID。 在Windows中,我们提供由Microsoft提供的APIS,它将告诉我们来自Active Directory的用户信息。我正在为Mac开发寻找类似的选项。

我想再知道一件事。在Mac中,我们可以使用getuid(void)函数获取用户的ID。但它对所有域用户都是独一无二的吗?如果不是,那么请告诉我任何有关的问题,以便我可以维护一个唯一的ID来区分域中的所有用户。

注意:我在考虑所有Mac机都连接到Windows Active Directory。请指导我。

谢谢, Tausif。

2 个答案:

答案 0 :(得分:0)

对于用户名,您可以使用:

NSString * NSUserName( void );
NSString * NSFullUserName( void );

来自<Foundation/Foundation.h>

对于用户ID,只需使用:

uid_t getuid( void );

来自<unistd.h>

答案 1 :(得分:0)

使用BSD的membership API,您可以在域控制器中查询用户的SID

- (NSText*)getSidForUser:(NSText*)user
{
    uuid_t uuid;

    // change the type (ID_TYPE_USERNAME) for different types of data, such as Group
    if(mbr_identifier_to_uuid(ID_TYPE_USERNAME, [user UTF8String], [user length], uuid) != 0)
    {
        // handle error
        return nil;
    }

    nt_sid_t ntSid;
    if(mbr_uuid_to_sid(uuid, &ntSid) != 0)
    {
        // handle error
        return nil;
    }        

    char buffer[200] = {0};
    if(mbr_sid_to_string(&ntSid, buffer) != 0)
    {   
        // handle error     
        return nil;
    }

    NSString* sid = [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];

    return sid;
}