mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
fsptool: getuid, getgid
This commit is contained in:
parent
fcae6ce018
commit
6b2dcaef96
@ -58,7 +58,6 @@ static void usage(void)
|
||||
" lsvol list file system devices (volumes)\n"
|
||||
//" list list running file system processes\n"
|
||||
//" kill kill file system process\n"
|
||||
" getsid get current SID\n"
|
||||
" getuid get current POSIX UID\n"
|
||||
" getgid get current POSIX GID\n"
|
||||
" uidtosid get SID from POSIX UID\n"
|
||||
@ -129,6 +128,102 @@ static WCHAR FspToolGetDriveLetter(PDWORD PLogicalDrives, PWSTR VolumeName)
|
||||
return 0;
|
||||
}
|
||||
|
||||
NTSTATUS FspToolGetUid(HANDLE Token, PUINT32 PUid)
|
||||
{
|
||||
UINT32 Uid;
|
||||
union
|
||||
{
|
||||
TOKEN_USER V;
|
||||
UINT8 B[128];
|
||||
} UserInfoBuf;
|
||||
PTOKEN_USER UserInfo = &UserInfoBuf.V;
|
||||
DWORD Size;
|
||||
NTSTATUS Result;
|
||||
|
||||
if (!GetTokenInformation(Token, TokenUser, UserInfo, sizeof UserInfoBuf, &Size))
|
||||
{
|
||||
if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
|
||||
{
|
||||
Result = FspNtStatusFromWin32(GetLastError());
|
||||
goto exit;
|
||||
}
|
||||
|
||||
UserInfo = MemAlloc(Size);
|
||||
if (0 == UserInfo)
|
||||
{
|
||||
Result = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!GetTokenInformation(Token, TokenUser, UserInfo, Size, &Size))
|
||||
{
|
||||
Result = FspNtStatusFromWin32(GetLastError());
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
Result = FspPosixMapSidToUid(UserInfo->User.Sid, &Uid);
|
||||
if (!NT_SUCCESS(Result))
|
||||
goto exit;
|
||||
|
||||
*PUid = Uid;
|
||||
Result = STATUS_SUCCESS;
|
||||
|
||||
exit:
|
||||
if (UserInfo != &UserInfoBuf.V)
|
||||
MemFree(UserInfo);
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
NTSTATUS FspToolGetGid(HANDLE Token, PUINT32 PGid)
|
||||
{
|
||||
UINT32 Gid;
|
||||
union
|
||||
{
|
||||
TOKEN_PRIMARY_GROUP V;
|
||||
UINT8 B[128];
|
||||
} GroupInfoBuf;
|
||||
PTOKEN_PRIMARY_GROUP GroupInfo = &GroupInfoBuf.V;
|
||||
DWORD Size;
|
||||
NTSTATUS Result;
|
||||
|
||||
if (!GetTokenInformation(Token, TokenPrimaryGroup, GroupInfo, sizeof GroupInfoBuf, &Size))
|
||||
{
|
||||
if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
|
||||
{
|
||||
Result = FspNtStatusFromWin32(GetLastError());
|
||||
goto exit;
|
||||
}
|
||||
|
||||
GroupInfo = MemAlloc(Size);
|
||||
if (0 == GroupInfo)
|
||||
{
|
||||
Result = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!GetTokenInformation(Token, TokenPrimaryGroup, GroupInfo, Size, &Size))
|
||||
{
|
||||
Result = FspNtStatusFromWin32(GetLastError());
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
Result = FspPosixMapSidToUid(GroupInfo->PrimaryGroup, &Gid);
|
||||
if (!NT_SUCCESS(Result))
|
||||
goto exit;
|
||||
|
||||
*PGid = Gid;
|
||||
Result = STATUS_SUCCESS;
|
||||
|
||||
exit:
|
||||
if (GroupInfo != &GroupInfoBuf.V)
|
||||
MemFree(GroupInfo);
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
static NTSTATUS lsvol_dev(PWSTR DeviceName)
|
||||
{
|
||||
NTSTATUS Result;
|
||||
@ -147,7 +242,6 @@ static NTSTATUS lsvol_dev(PWSTR DeviceName)
|
||||
if (L'\0' == *P)
|
||||
{
|
||||
Drive[0] = FspToolGetDriveLetter(&LogicalDrives, VolumeName);
|
||||
|
||||
info("%-4S%S", Drive[0] ? Drive : L"", VolumeName);
|
||||
VolumeName = P + 1;
|
||||
}
|
||||
@ -175,19 +269,50 @@ static int lsvol(int argc, wchar_t **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int getsid(int argc, wchar_t **argv)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int getuid(int argc, wchar_t **argv)
|
||||
{
|
||||
return 1;
|
||||
if (1 != argc)
|
||||
usage();
|
||||
|
||||
HANDLE Token;
|
||||
UINT32 Uid;
|
||||
NTSTATUS Result;
|
||||
|
||||
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &Token))
|
||||
return GetLastError();
|
||||
|
||||
Result = FspToolGetUid(Token, &Uid);
|
||||
if (!NT_SUCCESS(Result))
|
||||
return FspWin32FromNtStatus(Result);
|
||||
|
||||
CloseHandle(Token);
|
||||
|
||||
info("%u", Uid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int getgid(int argc, wchar_t **argv)
|
||||
{
|
||||
return 1;
|
||||
if (1 != argc)
|
||||
usage();
|
||||
|
||||
HANDLE Token;
|
||||
UINT32 Gid;
|
||||
NTSTATUS Result;
|
||||
|
||||
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &Token))
|
||||
return GetLastError();
|
||||
|
||||
Result = FspToolGetGid(Token, &Gid);
|
||||
if (!NT_SUCCESS(Result))
|
||||
return FspWin32FromNtStatus(Result);
|
||||
|
||||
CloseHandle(Token);
|
||||
|
||||
info("%u", Gid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int uidtosid(int argc, wchar_t **argv)
|
||||
@ -221,9 +346,6 @@ int wmain(int argc, wchar_t **argv)
|
||||
if (0 == invariant_wcscmp(L"lsvol", argv[0]))
|
||||
return lsvol(argc, argv);
|
||||
else
|
||||
if (0 == invariant_wcscmp(L"getsid", argv[0]))
|
||||
return getsid(argc, argv);
|
||||
else
|
||||
if (0 == invariant_wcscmp(L"getuid", argv[0]))
|
||||
return getuid(argc, argv);
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user