1 static void SetPrivileges();
3 static bool ReadSacl=false;
8 void ExtractACL(Archive &Arc,char *FileName,wchar *FileNameW)
10 #if defined(_XBOX) || defined (_LINUX)
18 if (Arc.HeaderCRC!=Arc.EAHead.HeadCRC)
20 Log(Arc.FileName,St(MACLBroken),FileName);
21 ErrHandler.SetErrorCode(CRC_ERROR);
25 if (Arc.EAHead.Method<0x31 || Arc.EAHead.Method>0x35 || Arc.EAHead.UnpVer>PACK_VER)
27 Log(Arc.FileName,St(MACLUnknown),FileName);
28 ErrHandler.SetErrorCode(WARNING);
33 Unpack Unpack(&DataIO);
36 Array<unsigned char> UnpData(Arc.EAHead.UnpSize);
37 DataIO.SetUnpackToMemory(&UnpData[0],Arc.EAHead.UnpSize);
38 DataIO.SetPackedSizeToRead(Arc.EAHead.DataSize);
39 DataIO.EnableShowProgress(false);
40 DataIO.SetFiles(&Arc,NULL);
41 Unpack.SetDestSize(Arc.EAHead.UnpSize);
42 Unpack.DoUnpack(Arc.EAHead.UnpVer,false);
44 if (Arc.EAHead.EACRC!=~DataIO.UnpFileCRC)
46 Log(Arc.FileName,St(MACLBroken),FileName);
47 ErrHandler.SetErrorCode(CRC_ERROR);
51 SECURITY_INFORMATION si=OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|
52 DACL_SECURITY_INFORMATION;
54 si|=SACL_SECURITY_INFORMATION;
55 SECURITY_DESCRIPTOR *sd=(SECURITY_DESCRIPTOR *)&UnpData[0];
59 SetCode=SetFileSecurityW(FileNameW,si,sd);
61 SetCode=SetFileSecurity(FileName,si,sd);
65 Log(Arc.FileName,St(MACLSetError),FileName);
66 ErrHandler.SysErrMsg();
67 ErrHandler.SetErrorCode(WARNING);
74 void ExtractACLNew(Archive &Arc,char *FileName,wchar *FileNameW)
76 #if defined(_XBOX) || defined(_LINUX)
83 if (!Arc.ReadSubData(&SubData,NULL))
88 SECURITY_INFORMATION si=OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|
89 DACL_SECURITY_INFORMATION;
91 si|=SACL_SECURITY_INFORMATION;
92 SECURITY_DESCRIPTOR *sd=(SECURITY_DESCRIPTOR *)&SubData[0];
96 SetCode=SetFileSecurityW(FileNameW,si,sd);
98 SetCode=SetFileSecurity(FileName,si,sd);
102 Log(Arc.FileName,St(MACLSetError),FileName);
103 ErrHandler.SysErrMsg();
104 ErrHandler.SetErrorCode(WARNING);
112 #if defined(_XBOX) || defined(_LINUX)
115 static bool InitDone=false;
122 if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
126 tp.PrivilegeCount = 1;
127 tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
129 if (LookupPrivilegeValue(NULL,SE_SECURITY_NAME,&tp.Privileges[0].Luid))
130 if (AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) &&
131 GetLastError() == ERROR_SUCCESS)
134 if (LookupPrivilegeValue(NULL,SE_RESTORE_NAME,&tp.Privileges[0].Luid))
135 AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);