mirror of
https://github.com/RGBCube/serenity
synced 2025-05-14 12:35:00 +00:00
Utilities: Use Core::Account for id
This commit is contained in:
parent
16983dbe8e
commit
538cc9d99a
1 changed files with 41 additions and 58 deletions
|
@ -4,6 +4,7 @@
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <LibCore/Account.h>
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
|
@ -11,7 +12,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
static int print_id_objects();
|
static int print_id_objects(Core::Account const&);
|
||||||
|
|
||||||
static bool flag_print_uid = false;
|
static bool flag_print_uid = false;
|
||||||
static bool flag_print_gid = false;
|
static bool flag_print_gid = false;
|
||||||
|
@ -57,100 +58,82 @@ int main(int argc, char** argv)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int status = print_id_objects();
|
auto account = Core::Account::self(Core::Account::Read::PasswdOnly);
|
||||||
return status;
|
return print_id_objects(account);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool print_uid_object(uid_t uid)
|
static bool print_uid_object(Core::Account const& account)
|
||||||
{
|
{
|
||||||
if (flag_print_name) {
|
if (flag_print_name)
|
||||||
struct passwd* pw = getpwuid(uid);
|
out("{}", account.username());
|
||||||
out("{}", pw ? pw->pw_name : "n/a");
|
else
|
||||||
} else
|
out("{}", account.uid());
|
||||||
out("{}", uid);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool print_gid_object(gid_t gid)
|
static bool print_gid_object(Core::Account const& account)
|
||||||
{
|
{
|
||||||
if (flag_print_name) {
|
if (flag_print_name) {
|
||||||
struct group* gr = getgrgid(gid);
|
struct group* gr = getgrgid(account.gid());
|
||||||
out("{}", gr ? gr->gr_name : "n/a");
|
out("{}", gr ? gr->gr_name : "n/a");
|
||||||
} else
|
} else
|
||||||
out("{}", gid);
|
out("{}", account.gid());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool print_gid_list()
|
static bool print_gid_list(Core::Account const& account)
|
||||||
{
|
{
|
||||||
int extra_gid_count = getgroups(0, nullptr);
|
auto& extra_gids = account.extra_gids();
|
||||||
if (extra_gid_count) {
|
auto extra_gid_count = extra_gids.size();
|
||||||
auto* extra_gids = (gid_t*)alloca(extra_gid_count * sizeof(gid_t));
|
for (size_t g = 0; g < extra_gid_count; ++g) {
|
||||||
int rc = getgroups(extra_gid_count, extra_gids);
|
auto gid = extra_gids[g];
|
||||||
|
auto* gr = getgrgid(gid);
|
||||||
if (rc < 0) {
|
if (flag_print_name && gr)
|
||||||
perror("\ngetgroups");
|
out("{}", gr->gr_name);
|
||||||
return false;
|
else
|
||||||
}
|
out("{}", gid);
|
||||||
|
if (g != extra_gid_count - 1)
|
||||||
for (int g = 0; g < extra_gid_count; ++g) {
|
out(" ");
|
||||||
auto* gr = getgrgid(extra_gids[g]);
|
|
||||||
if (flag_print_name && gr)
|
|
||||||
out("{}", gr->gr_name);
|
|
||||||
else
|
|
||||||
out("{}", extra_gids[g]);
|
|
||||||
if (g != extra_gid_count - 1)
|
|
||||||
out(" ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool print_full_id_list()
|
static bool print_full_id_list(Core::Account const& account)
|
||||||
{
|
{
|
||||||
uid_t uid = getuid();
|
auto uid = account.uid();
|
||||||
gid_t gid = getgid();
|
auto gid = account.gid();
|
||||||
struct passwd* pw = getpwuid(uid);
|
struct passwd* pw = getpwuid(uid);
|
||||||
struct group* gr = getgrgid(gid);
|
struct group* gr = getgrgid(gid);
|
||||||
|
|
||||||
out("uid={}({}) gid={}({})", uid, pw ? pw->pw_name : "n/a", gid, gr ? gr->gr_name : "n/a");
|
out("uid={}({}) gid={}({})", uid, pw ? pw->pw_name : "n/a", gid, gr ? gr->gr_name : "n/a");
|
||||||
|
|
||||||
int extra_gid_count = getgroups(0, nullptr);
|
for (auto extra_gid : account.extra_gids()) {
|
||||||
if (extra_gid_count) {
|
auto* gr = getgrgid(gid);
|
||||||
auto* extra_gids = (gid_t*)alloca(extra_gid_count * sizeof(gid_t));
|
if (gr)
|
||||||
int rc = getgroups(extra_gid_count, extra_gids);
|
out(" {}({})", extra_gid, gr->gr_name);
|
||||||
if (rc < 0) {
|
else
|
||||||
perror("\ngetgroups");
|
out(" {}", extra_gid);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
out(" groups=");
|
|
||||||
for (int g = 0; g < extra_gid_count; ++g) {
|
|
||||||
auto* gr = getgrgid(extra_gids[g]);
|
|
||||||
if (gr)
|
|
||||||
out("{}({})", extra_gids[g], gr->gr_name);
|
|
||||||
else
|
|
||||||
out("{}", extra_gids[g]);
|
|
||||||
if (g != extra_gid_count - 1)
|
|
||||||
out(",");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_id_objects()
|
static int print_id_objects(Core::Account const& account)
|
||||||
{
|
{
|
||||||
if (flag_print_uid) {
|
if (flag_print_uid) {
|
||||||
if (!print_uid_object(getuid()))
|
if (!print_uid_object(account))
|
||||||
return 1;
|
return 1;
|
||||||
} else if (flag_print_gid) {
|
} else if (flag_print_gid) {
|
||||||
if (!print_gid_object(getgid()))
|
if (!print_gid_object(account))
|
||||||
return 1;
|
return 1;
|
||||||
} else if (flag_print_gid_all) {
|
} else if (flag_print_gid_all) {
|
||||||
if (!print_gid_list())
|
if (!print_gid_list(account))
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
if (!print_full_id_list())
|
if (!print_full_id_list(account))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue