Merge pull request #4324 from FernetMenta/wasapi
[vuplus_xbmc] / lib / UnrarXLib / uowners.cpp
1
2
3 void ExtractUnixOwner(Archive &Arc,char *FileName)
4 {
5   if (Arc.HeaderCRC!=Arc.UOHead.HeadCRC)
6   {
7     Log(Arc.FileName,St(MOwnersBroken),FileName);
8     ErrHandler.SetErrorCode(CRC_ERROR);
9     return;
10   }
11
12   struct passwd *pw;
13   if ((pw=getpwnam(Arc.UOHead.OwnerName))==NULL)
14   {
15     Log(Arc.FileName,St(MErrGetOwnerID),Arc.UOHead.OwnerName);
16     ErrHandler.SetErrorCode(WARNING);
17     return;
18   }
19   uid_t OwnerID=pw->pw_uid;
20
21   struct group *gr;
22   if ((gr=getgrnam(Arc.UOHead.GroupName))==NULL)
23   {
24     Log(Arc.FileName,St(MErrGetGroupID),Arc.UOHead.GroupName);
25     ErrHandler.SetErrorCode(CRC_ERROR);
26     return;
27   }
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)
32 #else
33   if (chown(FileName,OwnerID,GroupID)!=0)
34 #endif
35   {
36     Log(Arc.FileName,St(MSetOwnersError),FileName);
37     ErrHandler.SetErrorCode(CRC_ERROR);
38   }
39   SetFileAttr(FileName,NULL,Attr);
40 }
41
42
43 void ExtractUnixOwnerNew(Archive &Arc,char *FileName)
44 {
45   char *OwnerName=(char *)&Arc.SubHead.SubData[0];
46   int OwnerSize=strlen(OwnerName)+1;
47   int GroupSize=Arc.SubHead.SubData.Size()-OwnerSize;
48   char GroupName[NM];
49   strncpy(GroupName,(char *)&Arc.SubHead.SubData[OwnerSize],GroupSize);
50   GroupName[GroupSize]=0;
51
52   struct passwd *pw;
53   if ((pw=getpwnam(OwnerName))==NULL)
54   {
55     Log(Arc.FileName,St(MErrGetOwnerID),OwnerName);
56     ErrHandler.SetErrorCode(WARNING);
57     return;
58   }
59   uid_t OwnerID=pw->pw_uid;
60
61   struct group *gr;
62   if ((gr=getgrnam(GroupName))==NULL)
63   {
64     Log(Arc.FileName,St(MErrGetGroupID),GroupName);
65     ErrHandler.SetErrorCode(CRC_ERROR);
66     return;
67   }
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)
72 #else
73   if (chown(FileName,OwnerID,GroupID)!=0)
74 #endif
75   {
76     Log(Arc.FileName,St(MSetOwnersError),FileName);
77     ErrHandler.SetErrorCode(CRC_ERROR);
78   }
79   SetFileAttr(FileName,NULL,Attr);
80 }