3 void ExtractUnixOwner(Archive &Arc,char *FileName)
5 if (Arc.HeaderCRC!=Arc.UOHead.HeadCRC)
7 Log(Arc.FileName,St(MOwnersBroken),FileName);
8 ErrHandler.SetErrorCode(CRC_ERROR);
13 if ((pw=getpwnam(Arc.UOHead.OwnerName))==NULL)
15 Log(Arc.FileName,St(MErrGetOwnerID),Arc.UOHead.OwnerName);
16 ErrHandler.SetErrorCode(WARNING);
19 uid_t OwnerID=pw->pw_uid;
22 if ((gr=getgrnam(Arc.UOHead.GroupName))==NULL)
24 Log(Arc.FileName,St(MErrGetGroupID),Arc.UOHead.GroupName);
25 ErrHandler.SetErrorCode(CRC_ERROR);
28 uint Attr=GetFileAttr(FileName,NULL);
29 gid_t GroupID=gr->gr_gid;
30 #if defined(SAVE_LINKS) && !defined(_APPLE)
31 if (lchown(FileName,OwnerID,GroupID)!=0)
33 if (chown(FileName,OwnerID,GroupID)!=0)
36 Log(Arc.FileName,St(MSetOwnersError),FileName);
37 ErrHandler.SetErrorCode(CRC_ERROR);
39 SetFileAttr(FileName,NULL,Attr);
43 void ExtractUnixOwnerNew(Archive &Arc,char *FileName)
45 char *OwnerName=(char *)&Arc.SubHead.SubData[0];
46 int OwnerSize=strlen(OwnerName)+1;
47 int GroupSize=Arc.SubHead.SubData.Size()-OwnerSize;
49 strncpy(GroupName,(char *)&Arc.SubHead.SubData[OwnerSize],GroupSize);
50 GroupName[GroupSize]=0;
53 if ((pw=getpwnam(OwnerName))==NULL)
55 Log(Arc.FileName,St(MErrGetOwnerID),OwnerName);
56 ErrHandler.SetErrorCode(WARNING);
59 uid_t OwnerID=pw->pw_uid;
62 if ((gr=getgrnam(GroupName))==NULL)
64 Log(Arc.FileName,St(MErrGetGroupID),GroupName);
65 ErrHandler.SetErrorCode(CRC_ERROR);
68 uint Attr=GetFileAttr(FileName,NULL);
69 gid_t GroupID=gr->gr_gid;
70 #if defined(SAVE_LINKS) && !defined(_APPLE)
71 if (lchown(FileName,OwnerID,GroupID)!=0)
73 if (chown(FileName,OwnerID,GroupID)!=0)
76 Log(Arc.FileName,St(MSetOwnersError),FileName);
77 ErrHandler.SetErrorCode(CRC_ERROR);
79 SetFileAttr(FileName,NULL,Attr);