}
static int parse_group_field(
- sd_json_variant *source_identity,
sd_json_variant **identity,
const char *field,
const char *arg) {
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid group name %s.", word);
_cleanup_(sd_json_variant_unrefp) sd_json_variant *mo =
- sd_json_variant_ref(sd_json_variant_by_key(source_identity, field));
+ sd_json_variant_ref(sd_json_variant_by_key(*identity, field));
r = sd_json_variant_strv(mo, &list);
if (r < 0)
break;
case ARG_ALIAS:
- r = parse_group_field(arg_identity_extra, &arg_identity_extra, "aliases", optarg);
+ r = parse_group_field(&arg_identity_extra, "aliases", optarg);
if (r < 0)
return r;
break;
}
case 'G':
- r = parse_group_field(arg_identity_extra,
- match_identity ?: &arg_identity_extra,
- "memberOf", optarg);
+ r = parse_group_field(match_identity ?: &arg_identity_extra, "memberOf", optarg);
if (r < 0)
return r;
break;
PASSWORD=xEhErW0ndafV4s homectl update test-user --real-name="Inline test"
inspect test-user
+ # --member-of=
+ systemd-sysusers --inline "g test-group1" "g test-group2"
+ # Single group
+ PASSWORD=xEhErW0ndafV4s homectl update test-user --member-of="test-group1"
+ [[ "$(homectl inspect -j test-user | jq -c .memberOf)" == '["test-group1"]' ]]
+ # Multiple groups
+ PASSWORD=xEhErW0ndafV4s homectl update test-user --member-of="test-group1,test-group2"
+ [[ "$(homectl inspect -j test-user | jq -c .memberOf)" == '["test-group1","test-group2"]' ]]
+ # Empty argument
+ PASSWORD=xEhErW0ndafV4s homectl update test-user --member-of=
+ [[ "$(homectl inspect -j test-user | jq -c .memberOf)" == 'null' ]]
+ # Argument shenanigans
+ # - only separators
+ (! PASSWORD=xEhErW0ndafV4s homectl update test-user --member-of=",,,,,,,,,,,,,,,,,,")
+ # - invalid group
+ (! PASSWORD=xEhErW0ndafV4s homectl update test-user --member-of="test-group1,inv@lid.group?")
+ # - separators & valid groups
+ PASSWORD=xEhErW0ndafV4s homectl update test-user --member-of=",,,,,test-group1,,,,,,,,,,,,,,test-group2,"
+ [[ "$(homectl inspect -j test-user | jq -c .memberOf)" == '["test-group1","test-group2"]' ]]
+ # - duplicate groups
+ PASSWORD=xEhErW0ndafV4s homectl update test-user --member-of="test-group2,test-group1,test-group1,test-group2"
+ [[ "$(homectl inspect -j test-user | jq -c .memberOf)" == '["test-group1","test-group2"]' ]]
+
homectl deactivate test-user
inspect test-user