X Tutup
Skip to content

Commit e032cbd

Browse files
committed
userdbctl: make JSON output mode details configurable like in the other tools
Let's add --json= with the same parser as in the other tools, and honour it.
1 parent 0595ff1 commit e032cbd

File tree

1 file changed

+35
-20
lines changed

1 file changed

+35
-20
lines changed

src/userdb/userdbctl.c

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ static PagerFlags arg_pager_flags = 0;
3333
static bool arg_legend = true;
3434
static char** arg_services = NULL;
3535
static UserDBFlags arg_userdb_flags = 0;
36+
static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
3637

3738
STATIC_DESTRUCTOR_REGISTER(arg_services, strv_freep);
3839

@@ -58,7 +59,7 @@ static int show_user(UserRecord *ur, Table *table) {
5859
break;
5960

6061
case OUTPUT_JSON:
61-
json_variant_dump(ur->json, JSON_FORMAT_COLOR_AUTO|JSON_FORMAT_PRETTY, NULL, 0);
62+
json_variant_dump(ur->json, arg_json_format_flags, NULL, 0);
6263
break;
6364

6465
case OUTPUT_FRIENDLY:
@@ -183,7 +184,7 @@ static int display_user(int argc, char *argv[], void *userdata) {
183184
}
184185

185186
if (table) {
186-
r = table_print(table, NULL);
187+
r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, arg_legend);
187188
if (r < 0)
188189
return table_log_print_error(r);
189190
}
@@ -216,7 +217,7 @@ static int show_group(GroupRecord *gr, Table *table) {
216217
}
217218

218219
case OUTPUT_JSON:
219-
json_variant_dump(gr->json, JSON_FORMAT_COLOR_AUTO|JSON_FORMAT_PRETTY, NULL, 0);
220+
json_variant_dump(gr->json, arg_json_format_flags, NULL, 0);
220221
break;
221222

222223
case OUTPUT_FRIENDLY:
@@ -339,7 +340,7 @@ static int display_group(int argc, char *argv[], void *userdata) {
339340
}
340341

341342
if (table) {
342-
r = table_print(table, NULL);
343+
r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, arg_legend);
343344
if (r < 0)
344345
return table_log_print_error(r);
345346
}
@@ -371,7 +372,7 @@ static int show_membership(const char *user, const char *group, Table *table) {
371372
if (r < 0)
372373
return log_error_errno(r, "Failed to build JSON object: %m");
373374

374-
json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO, NULL, NULL);
375+
json_variant_dump(v, arg_json_format_flags, NULL, NULL);
375376
break;
376377
}
377378

@@ -477,7 +478,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) {
477478
}
478479

479480
if (table) {
480-
r = table_print(table, NULL);
481+
r = table_print_with_pager(table, arg_json_format_flags, arg_pager_flags, arg_legend);
481482
if (r < 0)
482483
return table_log_print_error(r);
483484
}
@@ -545,10 +546,9 @@ static int display_services(int argc, char *argv[], void *userdata) {
545546
return 0;
546547
}
547548

548-
if (arg_output == OUTPUT_JSON)
549-
table_print_json(t, NULL, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO);
550-
else
551-
table_print(t, NULL);
549+
r = table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
550+
if (r < 0)
551+
return table_log_print_error(r);
552552

553553
return 0;
554554
}
@@ -617,6 +617,7 @@ static int help(int argc, char *argv[], void *userdata) {
617617
" --synthesize=BOOL Synthesize root/nobody user\n"
618618
" --with-dropin=BOOL Control whether to include drop-in records\n"
619619
" --with-varlink=BOOL Control whether to talk to services at all\n"
620+
" --json=pretty|short JSON output mode\n"
620621
"\nSee the %s for details.\n",
621622
program_invocation_short_name,
622623
ansi_highlight(),
@@ -637,19 +638,21 @@ static int parse_argv(int argc, char *argv[]) {
637638
ARG_WITH_DROPIN,
638639
ARG_WITH_VARLINK,
639640
ARG_SYNTHESIZE,
641+
ARG_JSON,
640642
};
641643

642644
static const struct option options[] = {
643-
{ "help", no_argument, NULL, 'h' },
644-
{ "version", no_argument, NULL, ARG_VERSION },
645-
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
646-
{ "no-legend", no_argument, NULL, ARG_NO_LEGEND },
647-
{ "output", required_argument, NULL, ARG_OUTPUT },
648-
{ "service", required_argument, NULL, 's' },
649-
{ "with-nss", required_argument, NULL, ARG_WITH_NSS },
650-
{ "with-dropin", required_argument, NULL, ARG_WITH_DROPIN },
645+
{ "help", no_argument, NULL, 'h' },
646+
{ "version", no_argument, NULL, ARG_VERSION },
647+
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
648+
{ "no-legend", no_argument, NULL, ARG_NO_LEGEND },
649+
{ "output", required_argument, NULL, ARG_OUTPUT },
650+
{ "service", required_argument, NULL, 's' },
651+
{ "with-nss", required_argument, NULL, ARG_WITH_NSS },
652+
{ "with-dropin", required_argument, NULL, ARG_WITH_DROPIN },
651653
{ "with-varlink", required_argument, NULL, ARG_WITH_VARLINK },
652-
{ "synthesize", required_argument, NULL, ARG_SYNTHESIZE },
654+
{ "synthesize", required_argument, NULL, ARG_SYNTHESIZE },
655+
{ "json", required_argument, NULL, ARG_JSON },
653656
{}
654657
};
655658

@@ -696,7 +699,9 @@ static int parse_argv(int argc, char *argv[]) {
696699
break;
697700

698701
case ARG_OUTPUT:
699-
if (streq(optarg, "classic"))
702+
if (isempty(optarg))
703+
arg_output = _OUTPUT_INVALID;
704+
else if (streq(optarg, "classic"))
700705
arg_output = OUTPUT_CLASSIC;
701706
else if (streq(optarg, "friendly"))
702707
arg_output = OUTPUT_FRIENDLY;
@@ -713,9 +718,19 @@ static int parse_argv(int argc, char *argv[]) {
713718
} else
714719
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid --output= mode: %s", optarg);
715720

721+
arg_json_format_flags = arg_output == OUTPUT_JSON ? JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO : JSON_FORMAT_OFF;
722+
break;
723+
724+
case ARG_JSON:
725+
r = parse_json_argument(optarg, &arg_json_format_flags);
726+
if (r <= 0)
727+
return r;
728+
729+
arg_output = FLAGS_SET(arg_json_format_flags, JSON_FORMAT_OFF) ? _OUTPUT_INVALID : OUTPUT_JSON;
716730
break;
717731

718732
case 'j':
733+
arg_json_format_flags = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
719734
arg_output = OUTPUT_JSON;
720735
break;
721736

0 commit comments

Comments
 (0)
X Tutup