fsptool: id

This commit is contained in:
Bill Zissimopoulos 2017-07-19 20:17:25 -07:00
parent f73cbc0e37
commit 3f90d60dc4

View File

@ -59,7 +59,7 @@ 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"
" id get current user/group SID\n" " id get user id\n"
" uidtosid get SID from POSIX UID\n" " uidtosid get SID from POSIX UID\n"
" sidtouid get POSIX UID from SID\n" " sidtouid get POSIX UID from SID\n"
" permtosd get security descriptor from POSIX permissions\n" " permtosd get security descriptor from POSIX permissions\n"
@ -249,7 +249,7 @@ static int lsvol(int argc, wchar_t **argv)
return 0; return 0;
} }
static NTSTATUS id_sid(const char *format, PSID Sid) static NTSTATUS id_print_sid(const char *format, PSID Sid)
{ {
PWSTR Str = 0; PWSTR Str = 0;
PWSTR Name = 0; PWSTR Name = 0;
@ -281,49 +281,52 @@ exit:
return Result; return Result;
} }
static int id(int argc, wchar_t **argv) static NTSTATUS id_name(PWSTR Name)
{ {
if (1 != argc) return STATUS_INVALID_PARAMETER;
usage(); }
static NTSTATUS id_sid(PWSTR Name)
{
return STATUS_INVALID_PARAMETER;
}
static NTSTATUS id_uid(PWSTR Name)
{
return STATUS_INVALID_PARAMETER;
}
static NTSTATUS id_user(void)
{
HANDLE Token = 0; HANDLE Token = 0;
TOKEN_USER *Uinfo = 0; TOKEN_USER *Uinfo = 0;
TOKEN_OWNER *Oinfo = 0; TOKEN_OWNER *Oinfo = 0;
TOKEN_PRIMARY_GROUP *Ginfo = 0; TOKEN_PRIMARY_GROUP *Ginfo = 0;
NTSTATUS Result; NTSTATUS Result;
int ErrorCode;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &Token)) if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &Token))
{ {
ErrorCode = GetLastError(); Result = FspNtStatusFromWin32(GetLastError());
goto exit; goto exit;
} }
Result = FspToolGetTokenInfo(Token, TokenUser, &Uinfo); Result = FspToolGetTokenInfo(Token, TokenUser, &Uinfo);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
{
ErrorCode = FspWin32FromNtStatus(Result);
goto exit; goto exit;
}
Result = FspToolGetTokenInfo(Token, TokenOwner, &Oinfo); Result = FspToolGetTokenInfo(Token, TokenOwner, &Oinfo);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
{
ErrorCode = FspWin32FromNtStatus(Result);
goto exit; goto exit;
}
Result = FspToolGetTokenInfo(Token, TokenPrimaryGroup, &Ginfo); Result = FspToolGetTokenInfo(Token, TokenPrimaryGroup, &Ginfo);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
{
ErrorCode = FspWin32FromNtStatus(Result);
goto exit; goto exit;
}
id_sid("User=%S(%S) (uid=%u)", Uinfo->User.Sid); id_print_sid("User=%S(%S) (uid=%u)", Uinfo->User.Sid);
id_sid("Owner=%S(%S) (uid=%u)", Oinfo->Owner); id_print_sid("Owner=%S(%S) (uid=%u)", Oinfo->Owner);
id_sid("Group=%S(%S) (gid=%u)", Ginfo->PrimaryGroup); id_print_sid("Group=%S(%S) (gid=%u)", Ginfo->PrimaryGroup);
ErrorCode = 0;
Result = STATUS_SUCCESS;
exit: exit:
MemFree(Ginfo); MemFree(Ginfo);
@ -333,7 +336,35 @@ exit:
if (0 != Token) if (0 != Token)
CloseHandle(Token); CloseHandle(Token);
return ErrorCode; return Result;
}
static int id(int argc, wchar_t **argv)
{
if (2 < argc)
usage();
NTSTATUS Result;
if (2 == argc)
{
PWSTR P;
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]);
else
Result = id_uid(argv[1]);
}
else
Result = id_user();
return FspWin32FromNtStatus(Result);
} }
static int uidtosid(int argc, wchar_t **argv) static int uidtosid(int argc, wchar_t **argv)