mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-08 04:52:10 -05:00
fsptool: id
This commit is contained in:
parent
3f90d60dc4
commit
c7a779fa98
@ -204,6 +204,37 @@ NTSTATUS FspToolGetNameFromSid(PSID Sid, PWSTR *PName)
|
|||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NTSTATUS FspToolGetSidFromName(PWSTR Name, PSID *PSid)
|
||||||
|
{
|
||||||
|
PSID Sid;
|
||||||
|
WCHAR Domn[256];
|
||||||
|
DWORD SidSize, DomnSize;
|
||||||
|
SID_NAME_USE Use;
|
||||||
|
|
||||||
|
SidSize = 0;
|
||||||
|
DomnSize = sizeof Domn / sizeof Domn[0];
|
||||||
|
if (LookupAccountNameW(0, Name, 0, &SidSize, Domn, &DomnSize, &Use))
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
|
||||||
|
return FspNtStatusFromWin32(GetLastError());
|
||||||
|
|
||||||
|
Sid = MemAlloc(SidSize);
|
||||||
|
if (0 == Sid)
|
||||||
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
|
||||||
|
DomnSize = sizeof Domn / sizeof Domn[0];
|
||||||
|
if (!LookupAccountNameW(0, Name, Sid, &SidSize, Domn, &DomnSize, &Use))
|
||||||
|
{
|
||||||
|
MemFree(Sid);
|
||||||
|
return FspNtStatusFromWin32(GetLastError());
|
||||||
|
}
|
||||||
|
|
||||||
|
*PSid = Sid;
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static NTSTATUS lsvol_dev(PWSTR DeviceName)
|
static NTSTATUS lsvol_dev(PWSTR DeviceName)
|
||||||
{
|
{
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
@ -283,17 +314,60 @@ exit:
|
|||||||
|
|
||||||
static NTSTATUS id_name(PWSTR Name)
|
static NTSTATUS id_name(PWSTR Name)
|
||||||
{
|
{
|
||||||
|
PSID Sid = 0;
|
||||||
|
NTSTATUS Result;
|
||||||
|
|
||||||
|
Result = FspToolGetSidFromName(Name, &Sid);
|
||||||
|
if (!NT_SUCCESS(Result))
|
||||||
|
return Result;
|
||||||
|
|
||||||
|
id_print_sid("%S(%S) (uid=%u)", Sid);
|
||||||
|
|
||||||
|
MemFree(Sid);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NTSTATUS id_sid(PWSTR SidStr)
|
||||||
|
{
|
||||||
|
PSID Sid = 0;
|
||||||
|
|
||||||
|
if (!ConvertStringSidToSid(SidStr, &Sid))
|
||||||
|
return FspNtStatusFromWin32(GetLastError());
|
||||||
|
|
||||||
|
id_print_sid("%S(%S) (uid=%u)", Sid);
|
||||||
|
|
||||||
|
LocalFree(Sid);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NTSTATUS id_uid(PWSTR UidStr)
|
||||||
|
{
|
||||||
|
PSID Sid = 0;
|
||||||
|
UINT32 Uid;
|
||||||
|
NTSTATUS Result;
|
||||||
|
|
||||||
|
Uid = 0;
|
||||||
|
for (PWSTR P = UidStr; *P; P++)
|
||||||
|
{
|
||||||
|
int C = *P;
|
||||||
|
|
||||||
|
if ('0' <= C && C <= '9')
|
||||||
|
Uid = 10 * Uid + (C - '0');
|
||||||
|
else
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS id_sid(PWSTR Name)
|
Result = FspPosixMapUidToSid(Uid, &Sid);
|
||||||
{
|
if (!NT_SUCCESS(Result))
|
||||||
return STATUS_INVALID_PARAMETER;
|
return Result;
|
||||||
}
|
|
||||||
|
|
||||||
static NTSTATUS id_uid(PWSTR Name)
|
id_print_sid("%S(%S) (uid=%u)", Sid);
|
||||||
{
|
|
||||||
return STATUS_INVALID_PARAMETER;
|
FspDeleteSid(Sid, FspPosixMapUidToSid);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS id_user(void)
|
static NTSTATUS id_user(void)
|
||||||
@ -348,18 +422,14 @@ static int id(int argc, wchar_t **argv)
|
|||||||
|
|
||||||
if (2 == argc)
|
if (2 == argc)
|
||||||
{
|
{
|
||||||
PWSTR P;
|
if (L'S' == argv[1][0] && L'-' == argv[1][1] && L'1' == argv[1][2] && L'-' == argv[1][3])
|
||||||
|
|
||||||
for (P = argv[1]; *P; P++)
|
|
||||||
if (L'\\' == *P)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (L'\\' == *P)
|
|
||||||
Result = id_name(argv[1]);
|
|
||||||
else if (L'S' == argv[1][0] || L's' == argv[1][0])
|
|
||||||
Result = id_sid(argv[1]);
|
Result = id_sid(argv[1]);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
Result = id_uid(argv[1]);
|
Result = id_uid(argv[1]);
|
||||||
|
if (STATUS_INVALID_PARAMETER == Result)
|
||||||
|
Result = id_name(argv[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Result = id_user();
|
Result = id_user();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user