Use json functions from libsudo_util in cvtsudoers.

This commit is contained in:
Todd C. Miller
2020-02-08 09:11:02 -07:00
parent d25ce46c56
commit c92f39ed3d
4 changed files with 241 additions and 477 deletions

View File

@@ -68,3 +68,6 @@ __dso_public bool sudo_json_close_array_v1(struct json_container *json);
__dso_public bool sudo_json_add_value_v1(struct json_container *json, const char *name, struct json_value *value); __dso_public bool sudo_json_add_value_v1(struct json_container *json, const char *name, struct json_value *value);
#define sudo_json_add_value(_a, _b, _c) sudo_json_add_value_v1((_a), (_b), (_c)) #define sudo_json_add_value(_a, _b, _c) sudo_json_add_value_v1((_a), (_b), (_c))
__dso_public bool sudo_json_add_value_as_object_v1(struct json_container *json, const char *name, struct json_value *value);
#define sudo_json_add_value_as_object(_a, _b, _c) sudo_json_add_value_as_object_v1((_a), (_b), (_c))

View File

@@ -125,9 +125,11 @@ sudo_json_open_object_v1(struct json_container *json, const char *name)
print_indent(json->fp, json->indent_level); print_indent(json->fp, json->indent_level);
json_print_string(json, name); if (name != NULL) {
putc(':', json->fp); json_print_string(json, name);
putc(' ', json->fp); putc(':', json->fp);
putc(' ', json->fp);
}
putc('{', json->fp); putc('{', json->fp);
json->indent_level += json->indent_increment; json->indent_level += json->indent_increment;
@@ -186,8 +188,8 @@ sudo_json_close_array_v1(struct json_container *json)
} }
bool bool
sudo_json_add_value_v1(struct json_container *json, const char *name, sudo_json_add_value_int(struct json_container *json, const char *name,
struct json_value *value) struct json_value *value, bool as_object)
{ {
unsigned int i; unsigned int i;
debug_decl(sudo_json_add_value, SUDO_DEBUG_UTIL); debug_decl(sudo_json_add_value, SUDO_DEBUG_UTIL);
@@ -200,10 +202,17 @@ sudo_json_add_value_v1(struct json_container *json, const char *name,
print_indent(json->fp, json->indent_level); print_indent(json->fp, json->indent_level);
if (as_object) {
putc('{', json->fp);
putc(' ', json->fp);
}
/* name */ /* name */
json_print_string(json, name); if (name != NULL) {
putc(':', json->fp); json_print_string(json, name);
putc(' ', json->fp); putc(':', json->fp);
putc(' ', json->fp);
}
/* value */ /* value */
switch (value->type) { switch (value->type) {
@@ -254,5 +263,24 @@ sudo_json_add_value_v1(struct json_container *json, const char *name,
break; break;
} }
if (as_object) {
putc(' ', json->fp);
putc('}', json->fp);
}
debug_return_bool(true); debug_return_bool(true);
} }
bool
sudo_json_add_value_v1(struct json_container *json, const char *name,
struct json_value *value)
{
return sudo_json_add_value_int(json, name, value, false);
}
bool
sudo_json_add_value_as_object_v1(struct json_container *json, const char *name,
struct json_value *value)
{
return sudo_json_add_value_int(json, name, value, true);
}

View File

@@ -3,8 +3,8 @@ sudo_conf_askpass_path_v1
sudo_conf_clear_paths_v1 sudo_conf_clear_paths_v1
sudo_conf_debug_files_v1 sudo_conf_debug_files_v1
sudo_conf_debugging_v1 sudo_conf_debugging_v1
sudo_conf_devsearch_path_v1
sudo_conf_developer_mode_v1 sudo_conf_developer_mode_v1
sudo_conf_devsearch_path_v1
sudo_conf_disable_coredump_v1 sudo_conf_disable_coredump_v1
sudo_conf_group_source_v1 sudo_conf_group_source_v1
sudo_conf_max_groups_v1 sudo_conf_max_groups_v1
@@ -32,12 +32,12 @@ sudo_debug_fork_v1
sudo_debug_get_active_instance_v1 sudo_debug_get_active_instance_v1
sudo_debug_get_fds_v1 sudo_debug_get_fds_v1
sudo_debug_get_instance_v1 sudo_debug_get_instance_v1
sudo_debug_needed_v1
sudo_debug_printf2_v1 sudo_debug_printf2_v1
sudo_debug_register_v1 sudo_debug_register_v1
sudo_debug_set_active_instance_v1 sudo_debug_set_active_instance_v1
sudo_debug_update_fd_v1 sudo_debug_update_fd_v1
sudo_debug_vprintf2_v1 sudo_debug_vprintf2_v1
sudo_debug_needed_v1
sudo_debug_write2_v1 sudo_debug_write2_v1
sudo_digest_alloc_v1 sudo_digest_alloc_v1
sudo_digest_final_v1 sudo_digest_final_v1
@@ -63,10 +63,10 @@ sudo_ev_get_timeleft_v1
sudo_ev_get_timeleft_v2 sudo_ev_get_timeleft_v2
sudo_ev_got_break_v1 sudo_ev_got_break_v1
sudo_ev_got_exit_v1 sudo_ev_got_exit_v1
sudo_ev_loop_v1
sudo_ev_loopbreak_v1 sudo_ev_loopbreak_v1
sudo_ev_loopcontinue_v1 sudo_ev_loopcontinue_v1
sudo_ev_loopexit_v1 sudo_ev_loopexit_v1
sudo_ev_loop_v1
sudo_ev_pending_v1 sudo_ev_pending_v1
sudo_ev_set_v1 sudo_ev_set_v1
sudo_fatal_callback_deregister_v1 sudo_fatal_callback_deregister_v1
@@ -77,12 +77,13 @@ sudo_gai_fatal_nodebug_v1
sudo_gai_vfatal_nodebug_v1 sudo_gai_vfatal_nodebug_v1
sudo_gai_vwarn_nodebug_v1 sudo_gai_vwarn_nodebug_v1
sudo_gai_warn_nodebug_v1 sudo_gai_warn_nodebug_v1
sudo_get_ttysize_v1
sudo_getgrouplist2_v1 sudo_getgrouplist2_v1
sudo_gethostname_v1 sudo_gethostname_v1
sudo_gettime_awake_v1 sudo_gettime_awake_v1
sudo_gettime_mono_v1 sudo_gettime_mono_v1
sudo_gettime_real_v1 sudo_gettime_real_v1
sudo_get_ttysize_v1
sudo_json_add_value_as_object_v1
sudo_json_add_value_v1 sudo_json_add_value_v1
sudo_json_close_array_v1 sudo_json_close_array_v1
sudo_json_close_object_v1 sudo_json_close_object_v1

File diff suppressed because it is too large Load Diff