0
我正在調查Mac OS X 10.8 Mountain Lion上的ACL。我已經取得了一些進展(API文檔很差),並且可以檢索給定文件或目錄的ACL條目列表。我不知道如何做的是將由acl_get_qualifier()
返回的GUID/UUID轉換爲UID或GID。我正在使用C++(真的)。這裏有一些代碼:Mac OS X中的ACL - 查找GUID
int acleid=ACL_FIRST_ENTRY;
int aclgeres;
// got an ACL in acl, loop on entries ...
if((aclgeres=acl_get_entry(acl,acleid,&ace))==0)
{
int aclgttres;
acl_tag_t tag;
void *aclgq;
acleid=ACL_NEXT_ENTRY;
if((aclgttres=acl_get_tag_type(ace,&tag))<0)
exit(errno);
else
{
switch(tag)
{
case ACL_UNDEFINED_TAG:
{
// error
break;
}
case ACL_EXTENDED_ALLOW:
{
printf(" TAG ALLOW\n");
break;
}
case ACL_EXTENDED_DENY:
{
printf(" TAG DENY\n");
break;
}
}
if(tag!=ACL_UNDEFINED_TAG)
{
if((aclgq=acl_get_qualifier(ace))==NULL)
exit(errno);
else
{
guid_t *guid=static_cast<guid_t*>(aclgq);
/**********************************************/
guid is now a 16-byte buffer containing a semi-
opaque 128-bit UUID entry. This maps into a
user ID or group ID, but I do not know how
/**********************************************/
free(aclgq);
}
}
}
}
所以問題是,我用什麼API將UUID映射到相應的用戶或組?對於組來說,實際上很簡單,因爲GUID的尾部字節給出了GID,但對於用戶來說並不那麼直接。