win32mem.patch
text/x-diff
Filename: win32mem.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: context
| File | + | − |
|---|---|---|
| src/port/exec.c | 27 | 0 |
*** a/src/port/exec.c
--- b/src/port/exec.c
***************
*** 56,62 **** static int resolve_symlinks(char *path);
static char *pipe_read_line(char *cmd, char *line, int maxsize);
#ifdef WIN32
! static BOOL GetUserSid(PSID *ppSidUser, HANDLE hToken);
#endif
/*
--- 56,62 ----
static char *pipe_read_line(char *cmd, char *line, int maxsize);
#ifdef WIN32
! static BOOL GetTokenUser(HANDLE hToken, PTOKEN_USER *ppTokenUser);
#endif
/*
***************
*** 697,703 **** AddUserToDacl(HANDLE hProcess)
DWORD dwTokenInfoLength = 0;
HANDLE hToken = NULL;
PACL pacl = NULL;
! PSID psidUser = NULL;
TOKEN_DEFAULT_DACL tddNew;
TOKEN_DEFAULT_DACL *ptdd = NULL;
TOKEN_INFORMATION_CLASS tic = TokenDefaultDacl;
--- 697,703 ----
DWORD dwTokenInfoLength = 0;
HANDLE hToken = NULL;
PACL pacl = NULL;
! PTOKEN_USER pTokenUser = NULL;
TOKEN_DEFAULT_DACL tddNew;
TOKEN_DEFAULT_DACL *ptdd = NULL;
TOKEN_INFORMATION_CLASS tic = TokenDefaultDacl;
***************
*** 744,758 **** AddUserToDacl(HANDLE hProcess)
goto cleanup;
}
! /* Get the SID for the current user. We need to add this to the ACL. */
! if (!GetUserSid(&psidUser, hToken))
{
! log_error("could not get user SID: %lu", GetLastError());
goto cleanup;
}
/* Figure out the size of the new ACL */
! dwNewAclSize = asi.AclBytesInUse + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(psidUser) -sizeof(DWORD);
/* Allocate the ACL buffer & initialize it */
pacl = (PACL) LocalAlloc(LPTR, dwNewAclSize);
--- 744,762 ----
goto cleanup;
}
! /*
! * Get the user token for the current user, which provides us with the
! * SID that is needed for creating the ACL.
! */
! if (!GetTokenUser(hToken, &pTokenUser))
{
! log_error("could not get user token: %lu", GetLastError());
goto cleanup;
}
/* Figure out the size of the new ACL */
! dwNewAclSize = asi.AclBytesInUse + sizeof(ACCESS_ALLOWED_ACE) +
! GetLengthSid(pTokenUser->User.Sid) -sizeof(DWORD);
/* Allocate the ACL buffer & initialize it */
pacl = (PACL) LocalAlloc(LPTR, dwNewAclSize);
***************
*** 785,791 **** AddUserToDacl(HANDLE hProcess)
}
/* Add the new ACE for the current user */
! if (!AddAccessAllowedAce(pacl, ACL_REVISION, GENERIC_ALL, psidUser))
{
log_error("could not add access allowed ACE: %lu", GetLastError());
goto cleanup;
--- 789,795 ----
}
/* Add the new ACE for the current user */
! if (!AddAccessAllowedAce(pacl, ACL_REVISION, GENERIC_ALL, pTokenUser->User.Sid))
{
log_error("could not add access allowed ACE: %lu", GetLastError());
goto cleanup;
***************
*** 803,810 **** AddUserToDacl(HANDLE hProcess)
ret = TRUE;
cleanup:
! if (psidUser)
! FreeSid(psidUser);
if (pacl)
LocalFree((HLOCAL) pacl);
--- 807,814 ----
ret = TRUE;
cleanup:
! if (pTokenUser)
! LocalFree((HLOCAL) pTokenUser);
if (pacl)
LocalFree((HLOCAL) pacl);
***************
*** 819,846 **** cleanup:
}
/*
! * GetUserSid*PSID *ppSidUser, HANDLE hToken)
*
! * Get the SID for the current user
*/
static BOOL
! GetUserSid(PSID *ppSidUser, HANDLE hToken)
{
DWORD dwLength;
- PTOKEN_USER pTokenUser = NULL;
if (!GetTokenInformation(hToken,
TokenUser,
! pTokenUser,
0,
&dwLength))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
! pTokenUser = (PTOKEN_USER) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwLength);
! if (pTokenUser == NULL)
{
log_error("could not allocate %lu bytes of memory", dwLength);
return FALSE;
--- 823,853 ----
}
/*
! * GetTokenUser(HANDLE hToken, PTOKEN_USER *ppTokenUser)
! *
! * Get the users token information from a process token.
*
! * The caller of this function is responsible for calling LocalFree() on the
! * returned TOKEN_USER memory.
*/
static BOOL
! GetTokenUser(HANDLE hToken, PTOKEN_USER *ppTokenUser)
{
DWORD dwLength;
+ *ppTokenUser = NULL;
if (!GetTokenInformation(hToken,
TokenUser,
! NULL,
0,
&dwLength))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
! *ppTokenUser = (PTOKEN_USER) LocalAlloc(LPTR, dwLength);
! if (*ppTokenUser == NULL)
{
log_error("could not allocate %lu bytes of memory", dwLength);
return FALSE;
***************
*** 855,872 **** GetUserSid(PSID *ppSidUser, HANDLE hToken)
if (!GetTokenInformation(hToken,
TokenUser,
! pTokenUser,
dwLength,
&dwLength))
{
! HeapFree(GetProcessHeap(), 0, pTokenUser);
! pTokenUser = NULL;
log_error("could not get token information: %lu", GetLastError());
return FALSE;
}
! *ppSidUser = pTokenUser->User.Sid;
return TRUE;
}
--- 862,879 ----
if (!GetTokenInformation(hToken,
TokenUser,
! *ppTokenUser,
dwLength,
&dwLength))
{
! LocalFree(*ppTokenUser);
! *ppTokenUser = NULL;
log_error("could not get token information: %lu", GetLastError());
return FALSE;
}
! /* Memory in *ppTokenUser is LocalFree():d by the caller */
return TRUE;
}