mirror of
https://github.com/RGBCube/serenity
synced 2025-05-30 12:35:13 +00:00
groupadd: Add -U
option for adding members to a new group
This commit is contained in:
parent
464e428e94
commit
09787dbf27
2 changed files with 35 additions and 1 deletions
|
@ -17,6 +17,7 @@ This program must be run as root.
|
||||||
## Options
|
## Options
|
||||||
|
|
||||||
* `-g`, `--gid` _gid_: The group identifier for the new group. If not specified, an unused GID above `100` will be auto-generated.
|
* `-g`, `--gid` _gid_: The group identifier for the new group. If not specified, an unused GID above `100` will be auto-generated.
|
||||||
|
* `-U`, `--users` user-list: A comma-separated list of usernames to add as members of the new group
|
||||||
|
|
||||||
## Exit Values
|
## Exit Values
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,13 @@
|
||||||
* Copyright (c) 2021, Brandon Pruitt <brapru@pm.me>
|
* Copyright (c) 2021, Brandon Pruitt <brapru@pm.me>
|
||||||
* Copyright (c) 2021, Maxime Friess <M4x1me@pm.me>
|
* Copyright (c) 2021, Maxime Friess <M4x1me@pm.me>
|
||||||
* Copyright (c) 2022, Kenneth Myhra <kennethmyhra@serenityos.org>
|
* Copyright (c) 2022, Kenneth Myhra <kennethmyhra@serenityos.org>
|
||||||
|
* Copyright (c) 2023, Tim Ledbetter <timledbetter@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <AK/HashTable.h>
|
||||||
|
#include <LibCore/Account.h>
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/Group.h>
|
#include <LibCore/Group.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
|
@ -18,13 +21,43 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
|
|
||||||
gid_t gid = 0;
|
gid_t gid = 0;
|
||||||
StringView group_name;
|
StringView group_name;
|
||||||
|
Vector<DeprecatedString> group_members;
|
||||||
|
|
||||||
Core::ArgsParser args_parser;
|
Core::ArgsParser args_parser;
|
||||||
args_parser.add_option(gid, "Group ID (gid) for the new group", "gid", 'g', "gid");
|
args_parser.add_option(gid, "Group ID (gid) for the new group", "gid", 'g', "gid");
|
||||||
|
args_parser.add_option(Core::ArgsParser::Option {
|
||||||
|
.argument_mode = Core::ArgsParser::OptionArgumentMode::Required,
|
||||||
|
.help_string = "A comma-separated list of usernames to add as members of the new group",
|
||||||
|
.long_name = "users",
|
||||||
|
.short_name = 'U',
|
||||||
|
.value_name = "user-list",
|
||||||
|
.accept_value = [&group_members](StringView comma_separated_users) {
|
||||||
|
auto accounts_or_error = Core::Account::all(Core::Account::Read::PasswdOnly);
|
||||||
|
if (accounts_or_error.is_error())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
OrderedHashTable<DeprecatedString> unique_group_members;
|
||||||
|
auto accounts = accounts_or_error.release_value();
|
||||||
|
for (auto const& username : comma_separated_users.split_view(',')) {
|
||||||
|
auto matching_account = accounts.first_matching([&](auto const& account) { return username == account.username(); });
|
||||||
|
if (!matching_account.has_value()) {
|
||||||
|
warnln("Invalid member username: '{}'", username);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_group_members.set(matching_account->username());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto const& member : unique_group_members)
|
||||||
|
group_members.append(member);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
});
|
||||||
args_parser.add_positional_argument(group_name, "Name of the group (groupname)", "group");
|
args_parser.add_positional_argument(group_name, "Name of the group (groupname)", "group");
|
||||||
args_parser.parse(arguments);
|
args_parser.parse(arguments);
|
||||||
|
|
||||||
auto group = Core::Group { group_name, gid };
|
Core::Group group { group_name, gid, group_members };
|
||||||
TRY(Core::Group::add_group(group));
|
TRY(Core::Group::add_group(group));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue