mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -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"
|
" lsvol list file system devices (volumes)\n"
|
||||||
//" list list running file system processes\n"
|
//" list list running file system processes\n"
|
||||||
//" kill kill file system process\n"
|
//" kill kill file system process\n"
|
||||||
" getsid get current SID\n"
|
|
||||||
" getuid get current POSIX UID\n"
|
" getuid get current POSIX UID\n"
|
||||||
" getgid get current POSIX GID\n"
|
" getgid get current POSIX GID\n"
|
||||||
" uidtosid get SID from POSIX UID\n"
|
" uidtosid get SID from POSIX UID\n"
|
||||||
@ -129,6 +128,102 @@ static WCHAR FspToolGetDriveLetter(PDWORD PLogicalDrives, PWSTR VolumeName)
|
|||||||
return 0;
|
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)
|
static NTSTATUS lsvol_dev(PWSTR DeviceName)
|
||||||
{
|
{
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
@ -147,7 +242,6 @@ static NTSTATUS lsvol_dev(PWSTR DeviceName)
|
|||||||
if (L'\0' == *P)
|
if (L'\0' == *P)
|
||||||
{
|
{
|
||||||
Drive[0] = FspToolGetDriveLetter(&LogicalDrives, VolumeName);
|
Drive[0] = FspToolGetDriveLetter(&LogicalDrives, VolumeName);
|
||||||
|
|
||||||
info("%-4S%S", Drive[0] ? Drive : L"", VolumeName);
|
info("%-4S%S", Drive[0] ? Drive : L"", VolumeName);
|
||||||
VolumeName = P + 1;
|
VolumeName = P + 1;
|
||||||
}
|
}
|
||||||
@ -175,19 +269,50 @@ static int lsvol(int argc, wchar_t **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int getsid(int argc, wchar_t **argv)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int getuid(int argc, wchar_t **argv)
|
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)
|
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)
|
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]))
|
if (0 == invariant_wcscmp(L"lsvol", argv[0]))
|
||||||
return lsvol(argc, argv);
|
return lsvol(argc, argv);
|
||||||
else
|
else
|
||||||
if (0 == invariant_wcscmp(L"getsid", argv[0]))
|
|
||||||
return getsid(argc, argv);
|
|
||||||
else
|
|
||||||
if (0 == invariant_wcscmp(L"getuid", argv[0]))
|
if (0 == invariant_wcscmp(L"getuid", argv[0]))
|
||||||
return getuid(argc, argv);
|
return getuid(argc, argv);
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user