2012-08-02 61 views
1

我是Mac開發新手。 我正在使用Objective-C,我想知道如何找到登錄到Mac機器的用戶的域名和用戶SID。 在Windows中,我們提供了由Microsoft提供的APIS,它將告訴我們來自Active Directory的用戶信息。我正在爲Mac開發尋找一個類似的選項。在Objective-C代碼中的Mac用戶的活動目錄中查找用戶名和用戶SID

我想知道一件事。在Mac中,我們可以使用getuid(void)函數獲取用戶的ID。但是,對於所有的域用戶來說它是唯一的嗎?如果不是,那麼請告訴我任何候選人進行調查,以便我可以維護一個唯一的ID來區分域中的所有用戶。

注意:在這裏我正在考慮所有的Mac機器都連接到Windows Active Directory。請在此指導我。

謝謝, Tausif。

回答

0

使用membership API從BSD,您可以查詢域控制器的用戶' s 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; 
} 
0

對於用戶名,你可以使用:

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

<Foundation/Foundation.h>

對於用戶ID,只需使用:

uid_t getuid(void); 

<unistd.h>

+0

嗨,先生,請把我視爲MAC開發的初學者。我能夠找到登錄用戶的UID,但它對於一個域中的所有用戶而言是唯一的。考慮一下我的用戶數量很少,而且這個UID對於域中的所有用戶都是唯一的。在Windows中,我們有SID(安全標識符),它將是活動目錄中用戶的唯一ID。這裏我的問題的原因是,我想知道如果mac機連接到Windows活動目錄會發生什麼?請在此引導我。 – Tausif 2012-08-06 15:22:55

+0

uid僅適用於當前系統,並且可能僅適用於當前會話(例如,如果系統正在使用某種形式的動態帳戶,例如)。 – 2012-08-06 15:44:23

+0

因此,在這種情況下,您可以幫助我找出維護獨特域內所有用戶的身份。謝謝,Tausif。 – Tausif 2012-08-06 15:50:55

相關問題