From: James Jones Date: Fri, 31 Jan 2025 19:56:05 +0000 (-0600) Subject: Adopt a standard naming convention and signture for debug functions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44b264feecdb6fd5faffa20854efc96a81b375cf;p=thirdparty%2Ffreeradius-server.git Adopt a standard naming convention and signture for debug functions To get the "dd" debugger command to work without having to create an wxplicit mapping from type to function either by hand or by runtime inspection (the latter preventing setting up the command at debugger startup), the debug functions that dd calls should have a type of the form foo_debug(FILE *fp, foo_t const *) We add the qualifier becausen * some support functions with extra parameters are meant to be called by these functions, which pass the additional parameters; the functions we do call can pass fp along, or in the case of src/lib/util/dict_print.c, add fp to the context * fe_dict_attr_t * has three debug functions * fr_pair_validate_debug() takes a pointer to an array, and thus can't follow the convention * virtual_server_{listen, process}_debug() and module_rlm_list_debug() have *no* parameters --- diff --git a/debugger/dd.py b/debugger/dd.py index 9c184271e2..527e5858ab 100644 --- a/debugger/dd.py +++ b/debugger/dd.py @@ -3,9 +3,9 @@ # # Syntax: dd # -# where the variable named either has one of the types -# shown in the _howTo list or whose address has one of the -# types shown in the _howTo list. +# where has a type foo * or foo for which +# there is a function foo_debug(FILE *, foo_t *) that presumably +# displays values of type foo_t in a useful, legible format. # # When the command is run, it calls the appropriate FreeRADIUS # function to display the value the variable points at (or @@ -42,29 +42,25 @@ # we're running under gdb or lldb, we can have a single Python # source that can do the right thing for the debugger it's running # under. +# +# NOTE: this function cheerfully assumes such functions exist, but +# will report if the call fails (modulo an issue with lldb and +# fr_value_box_t being defined twice--see below). The idea is that +# these reports will point out where an appropriate foo_debug() +# function needs to exist or to be modified to fit the signature. import sys -_howTo = { - 'fr_value_box_t *' : ('fr_value_box_debug', True), - 'fr_value_box_list_t *' : ('fr_value_box_list_debug', True), - 'tmpl_t *' : ('tmpl_debug', True), - 'CONF_ITEM *' : ('_cf_debug', True), - 'dl_loader_t *' : ('dl_loader_debug', False), - 'fr_dict_gctx_t * ' : ('fr_dict_global_ctx_debug', True), - 'fr_pair_t *' : ('fr_pair_debug', True), - 'fr_pair_list_t *' : ('fr_pair_list_debug', True), - 'fr_sbuff_term_t *' : ('fr_sbuff_terminal_debug', True), - 'fr_sbuff_parse_rules_t *' : ('fr_sbuff_parse_rules_debug', True), - 'fr_sbuff_unescape_rules_t *': ('fr_sbuff_unescape_debug', True), - 'tmpl_attr_list_head_t *' : ('tmpl_attr_ref_list_debug', True), - 'tmpl_attr_rules_t *' : ('tmpl_attr_rules_debug', True), - 'fr_dlist_head_t *' : ('tmpl_extents_debug', False), - 'tmpl_request_list_head_t *' : ('tmpl_request_ref_list_debug', True), - 'tmpl_rules_t *' : ('tmpl_rules_debug', True), - 'lua_State *' : ('_util_log_debug', False), - 'xlat_exp_t *' : ('xlat_debug', True) -} +def debug_function(ptr_foo_name): + # ditch trailng ' *' (will always be there) + ptr_foo_name = ptr_foo_name[:-2] + # ditch trailing ' const' + if ptr_foo_name.endswith(' const'): + ptr_foo_name = ptr_foo_name[:-6] + # ditch trailing '_t' (again should always be there) + if ptr_foo_name.endswith('_t'): + ptr_foo_name = ptr_foo_name[:-2] + return f'{ptr_foo_name}_debug' try: import gdb # Attempt to import GDB module @@ -85,17 +81,13 @@ if dbg == "lldb": if not sb_var.IsValid(): sb_var = target.FindFirstGlobalVariable(command) if not sb_var.IsValid(): - result.SetError('{} is not a variable'.format(command)) + result.SetError(f'{command} is not a variable') return arg = sb_var if sb_var.type.is_pointer else sb_var.address_of type = arg.GetDisplayTypeName() - if not (type in _howTo): - result.SetError('unsupported type "{}"'.format(type)) - return - function, const = _howTo[type] - cast = '({} const *)'.format(type[0:-2]) if const else '' - argName = arg.GetName() - cmd = 'expr {0}({1}({2}))'.format(function, cast, argName) + function = debug_function(type) + cast = f'({type[:-2]} const *)' + cmd = f'expr {function}(stderr, {cast}({arg.GetName()}))' interpreter = debugger.GetCommandInterpreter() if not interpreter.IsValid(): result.SetError("can't set up SBCommandInterpreter") @@ -106,7 +98,7 @@ if dbg == "lldb": for i in range(2): if (cmdStatus := interpreter.HandleCommand(cmd, result)) == lldb.eReturnStatusSuccessFinishResult: return - result.SetError("command {} failed, status {}".format(cmd, cmdStatus)) + result.SetError(f'command "{cmd}" failed, status {cmdStatus}') # And then some boilerplate to set up the command and announce its availability. # I'm guessing that the -f option is ., @@ -138,12 +130,9 @@ else: argMod = '&' var = var.address varType = str(var.type) - if not (varType in _howTo): - print('unsupported type "{}"'.format(varType)) - return - function, const = _howTo[varType] - cast = '({} const *)'.format(varType[0:-2]) if const else '' - command = 'call {0}({1}{2}({3}))'.format(function, cast, argMod, arg) + function = debug_function(varType) + cast = f'({varType[0:-2]} const *)' + command = f'call {function}(stderr, {cast}{argMod}({arg}))' try: gdb.execute(command) except: diff --git a/src/bin/fuzzer.c b/src/bin/fuzzer.c index 03353ac432..a36eca7dd1 100644 --- a/src/bin/fuzzer.c +++ b/src/bin/fuzzer.c @@ -270,7 +270,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) } tp->func(ctx, &vps, buf, len, decode_ctx); - if (fr_debug_lvl > 3) fr_pair_list_debug(&vps); + if (fr_debug_lvl > 3) fr_pair_list_debug(stderr, &vps); talloc_free(decode_ctx); talloc_free(ctx); diff --git a/src/bin/unit_test_attribute.c b/src/bin/unit_test_attribute.c index a44aef542d..95d8dcf0d0 100644 --- a/src/bin/unit_test_attribute.c +++ b/src/bin/unit_test_attribute.c @@ -1046,6 +1046,7 @@ static int dictionary_load_common(command_result_t *result, command_file_ctx_t * */ if (fr_debug_lvl > 5) fr_dict_debug(fr_log_fp, cc->tmpl_rules.attr.dict_def); + RETURN_OK(0); } @@ -1155,7 +1156,7 @@ static void command_print(void) void *walk_ctx = NULL; printf("Command hierarchy --------"); - fr_command_debug(stdout, command_head); + fr_cmd_debug(stdout, command_head); printf("Command list --------"); while (fr_command_walk(command_head, &walk_ctx, NULL, command_walk) == 1) { diff --git a/src/lib/io/atomic_queue.c b/src/lib/io/atomic_queue.c index 4c9b7eac8a..7bf0bcdaf1 100644 --- a/src/lib/io/atomic_queue.c +++ b/src/lib/io/atomic_queue.c @@ -169,7 +169,7 @@ bool fr_atomic_queue_push(fr_atomic_queue_t *aq, void *data) */ if (diff < 0) { #if 0 - fr_atomic_queue_debug(aq, stderr); + fr_atomic_queue_debug(stderr, aq); #endif return false; } @@ -298,7 +298,7 @@ typedef struct { * @param[in] aq The atomic queue to debug. * @param[in] fp where the debugging information will be printed. */ -void fr_atomic_queue_debug(fr_atomic_queue_t *aq, FILE *fp) +void fr_atomic_queue_debug(FILE * fp, fr_atomic_queue_t *aq) { size_t i; int64_t head, tail; diff --git a/src/lib/io/atomic_queue.h b/src/lib/io/atomic_queue.h index fb096dd9a6..015e143b73 100644 --- a/src/lib/io/atomic_queue.h +++ b/src/lib/io/atomic_queue.h @@ -64,7 +64,7 @@ void fr_atomic_queue_verify(fr_atomic_queue_t *aq); #endif #ifndef NDEBUG -void fr_atomic_queue_debug(fr_atomic_queue_t *aq, FILE *fp); +void fr_atomic_queue_debug(FILE *fp, fr_atomic_queue_t *aq); #endif diff --git a/src/lib/io/message.c b/src/lib/io/message.c index 986864d4ac..e3e729be21 100644 --- a/src/lib/io/message.c +++ b/src/lib/io/message.c @@ -1259,7 +1259,7 @@ void fr_message_set_gc(fr_message_set_t *ms) * @param[in] ms the message set * @param[in] fp the FILE where the messages are printed. */ -void fr_message_set_debug(fr_message_set_t *ms, FILE *fp) +void fr_message_set_debug(FILE *fp, fr_message_set_t *ms) { int i; diff --git a/src/lib/io/message.h b/src/lib/io/message.h index 7206e00849..6d4182f00d 100644 --- a/src/lib/io/message.h +++ b/src/lib/io/message.h @@ -64,7 +64,7 @@ fr_message_t *fr_message_localize(TALLOC_CTX *ctx, fr_message_t *m, size_t messa int fr_message_set_messages_used(fr_message_set_t *ms) CC_HINT(nonnull); void fr_message_set_gc(fr_message_set_t *ms) CC_HINT(nonnull); -void fr_message_set_debug(fr_message_set_t *ms, FILE *fp) CC_HINT(nonnull); +void fr_message_set_debug(FILE *fp, fr_message_set_t *ms) CC_HINT(nonnull); #ifdef __cplusplus } diff --git a/src/lib/io/queue.c b/src/lib/io/queue.c index d548ba35be..37eb67c7cc 100644 --- a/src/lib/io/queue.c +++ b/src/lib/io/queue.c @@ -252,10 +252,10 @@ int fr_queue_localize_atomic(fr_queue_t *fq, fr_atomic_queue_t *aq) #ifndef NDEBUG /** Dump a queue. * - * @param[in] fq the queue * @param[in] fp where the debugging information will be printed. + * @param[in] fq the queue */ -void fr_queue_debug(fr_queue_t *fq, FILE *fp) +void fr_queue_debug(FILE *fp, fr_queue_t *fq) { int i; diff --git a/src/lib/io/queue.h b/src/lib/io/queue.h index 12e9e6d7e7..c6d7b53610 100644 --- a/src/lib/io/queue.h +++ b/src/lib/io/queue.h @@ -47,7 +47,7 @@ int fr_queue_num_elements(fr_queue_t *fq) CC_HINT(nonnull); int fr_queue_localize_atomic(fr_queue_t *fq, fr_atomic_queue_t *aq) CC_HINT(nonnull); #ifndef NDEBUG -void fr_queue_debug(fr_queue_t *fq, FILE *fp) CC_HINT(nonnull); +void fr_queue_debug(FILE *fp, fr_queue_t *fq) CC_HINT(nonnull); #endif diff --git a/src/lib/io/ring_buffer.c b/src/lib/io/ring_buffer.c index 3589c946da..8495779e4b 100644 --- a/src/lib/io/ring_buffer.c +++ b/src/lib/io/ring_buffer.c @@ -482,7 +482,7 @@ int fr_ring_buffer_start(fr_ring_buffer_t *rb, uint8_t **p_start, size_t *p_size * @param[in] rb the ring buffer * @param[in] fp the FILE where the messages are printed. */ -void fr_ring_buffer_debug(fr_ring_buffer_t *rb, FILE *fp) +void fr_ring_buffer_debug(FILE *fp, fr_ring_buffer_t *rb) { fprintf(fp, "Buffer %p, write_offset %zu, data_start %zu, data_end %zu\n", rb->buffer, rb->write_offset, rb->data_start, rb->data_end); diff --git a/src/lib/io/ring_buffer.h b/src/lib/io/ring_buffer.h index d8f3088307..2ea27b52a6 100644 --- a/src/lib/io/ring_buffer.h +++ b/src/lib/io/ring_buffer.h @@ -52,7 +52,7 @@ size_t fr_ring_buffer_size(fr_ring_buffer_t *rb) CC_HINT(nonnull); size_t fr_ring_buffer_used(fr_ring_buffer_t *rb) CC_HINT(nonnull); -void fr_ring_buffer_debug(fr_ring_buffer_t *rb, FILE *fp) CC_HINT(nonnull); +void fr_ring_buffer_debug(FILE *fp, fr_ring_buffer_t *rb) CC_HINT(nonnull); #ifdef __cplusplus } diff --git a/src/lib/server/command.c b/src/lib/server/command.c index b6a0c541f0..8a6973c351 100644 --- a/src/lib/server/command.c +++ b/src/lib/server/command.c @@ -1607,7 +1607,7 @@ static void fr_command_debug_internal(FILE *fp, fr_cmd_t *head, int depth) } } -void fr_command_debug(FILE *fp, fr_cmd_t *head) +void fr_cmd_debug(FILE *fp, fr_cmd_t *head) { fr_command_debug_internal(fp, head, 0); } diff --git a/src/lib/server/command.h b/src/lib/server/command.h index 3cdf8eb3ff..0ab457f3a9 100644 --- a/src/lib/server/command.h +++ b/src/lib/server/command.h @@ -79,7 +79,7 @@ int fr_command_walk(fr_cmd_t *head, void **walk_ctx, void *ctx, fr_cmd_walk_t ca int fr_command_tab_expand(TALLOC_CTX *ctx, fr_cmd_t *head, fr_cmd_info_t *info, int max_expansions, char const **expansions); char const *fr_command_help(fr_cmd_t *head, int argc, char *argv[]); int fr_command_run(FILE *fp, FILE *fp_err, fr_cmd_info_t *info, bool read_only); -void fr_command_debug(FILE *fp, fr_cmd_t *head); +void fr_cmd_debug(FILE *fp, fr_cmd_t *head); int fr_command_str_to_argv(fr_cmd_t *head, fr_cmd_info_t *info, char const *str); int fr_command_clear(int new_argc, fr_cmd_info_t *info) CC_HINT(nonnull); diff --git a/src/lib/server/tmpl.h b/src/lib/server/tmpl.h index 6f1bba1ca2..843f1d7b8d 100644 --- a/src/lib/server/tmpl.h +++ b/src/lib/server/tmpl.h @@ -1071,7 +1071,7 @@ typedef enum { #define tmpl_aexpand_type(_ctx, _out, _type, _request, _vpt) \ _tmpl_to_atype(_ctx, (void *)(_out), _request, _vpt, NULL, NULL, _type) -void tmpl_debug(tmpl_t const *vpt) CC_HINT(nonnull); +void tmpl_debug(FILE *fp, tmpl_t const *vpt) CC_HINT(nonnull); fr_pair_list_t *tmpl_list_head(request_t *request, fr_dict_attr_t const *list); @@ -1169,11 +1169,11 @@ void tmpl_set_xlat(tmpl_t *vpt, xlat_exp_head_t *xlat) CC_HINT(nonnull); int tmpl_afrom_value_box(TALLOC_CTX *ctx, tmpl_t **out, fr_value_box_t *data, bool steal) CC_HINT(nonnull); -void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int idx) CC_HINT(nonnull); +void tmpl_attr_ref_debug(FILE *fp, const tmpl_attr_t *ar, int idx) CC_HINT(nonnull); -void tmpl_attr_ref_list_debug(FR_DLIST_HEAD(tmpl_attr_list) const *ar_head) CC_HINT(nonnull); +void tmpl_attr_ref_list_debug(FILE *fp, FR_DLIST_HEAD(tmpl_attr_list) const *ar_head) CC_HINT(nonnull); -void tmpl_attr_debug(tmpl_t const *vpt) CC_HINT(nonnull); +void tmpl_attr_debug(FILE *fp, tmpl_t const *vpt) CC_HINT(nonnull); int tmpl_attr_copy(tmpl_t *dst, tmpl_t const *src) CC_HINT(nonnull); @@ -1313,7 +1313,7 @@ int tmpl_extents_find(TALLOC_CTX *ctx, int tmpl_extents_build_to_leaf_parent(fr_dlist_head_t *leaf, fr_dlist_head_t *interior, tmpl_t const *vpt) CC_HINT(nonnull); -void tmpl_extents_debug(fr_dlist_head_t *head) CC_HINT(nonnull); +void tmpl_extents_debug(FILE *fp, fr_dlist_head_t *head) CC_HINT(nonnull); int tmpl_eval_pair(TALLOC_CTX *ctx, fr_value_box_list_t *out, request_t *request, tmpl_t const *vpt); diff --git a/src/lib/server/tmpl_dcursor.c b/src/lib/server/tmpl_dcursor.c index 34926a83ef..8b6f141071 100644 --- a/src/lib/server/tmpl_dcursor.c +++ b/src/lib/server/tmpl_dcursor.c @@ -761,7 +761,7 @@ int tmpl_extents_build_to_leaf_parent(fr_dlist_head_t *existing, fr_dlist_head_t return 0; } -void tmpl_extents_debug(fr_dlist_head_t *head) +void tmpl_extents_debug(FILE *fp, fr_dlist_head_t *head) { tmpl_attr_extent_t const *extent = NULL; fr_pair_t *vp = NULL; @@ -773,25 +773,25 @@ void tmpl_extents_debug(fr_dlist_head_t *head) char const *ctx_name; if (ar) { - FR_FAULT_LOG("extent-interior-attr"); - tmpl_attr_ref_debug(extent->ar, 0); + fprintf(fp, "extent-interior-attr\n"); + tmpl_attr_ref_debug(fp, extent->ar, 0); } else { - FR_FAULT_LOG("extent-leaf"); + fprintf(fp, "extent-leaf\n"); } ctx_name = talloc_get_name(extent->list_ctx); if (strcmp(ctx_name, "fr_pair_t") == 0) { - FR_FAULT_LOG("list_ctx : %p (%s, %s)", extent->list_ctx, ctx_name, + fprintf(fp, "list_ctx : %p (%s, %s)\n", extent->list_ctx, ctx_name, ((fr_pair_t *)extent->list_ctx)->da->name); } else { - FR_FAULT_LOG("list_ctx : %p (%s)", extent->list_ctx, ctx_name); + fprintf(fp, "list_ctx : %p (%s)\n", extent->list_ctx, ctx_name); } - FR_FAULT_LOG("list : %p", extent->list); + fprintf(fp, "list : %p", extent->list); if (fr_pair_list_empty(extent->list)) { - FR_FAULT_LOG("list (first) : none (%p)", extent->list); + fprintf(fp, "list (first) : none (%p)\n", extent->list); } else { vp = fr_pair_list_head(extent->list); - FR_FAULT_LOG("list (first) : %s (%p)", vp->da->name, extent->list); + fprintf(fp, "list (first) : %s (%p)\n", vp->da->name, extent->list); } } diff --git a/src/lib/server/tmpl_tokenize.c b/src/lib/server/tmpl_tokenize.c index d02682cb3b..81b3c490bf 100644 --- a/src/lib/server/tmpl_tokenize.c +++ b/src/lib/server/tmpl_tokenize.c @@ -193,7 +193,7 @@ static inline bool CC_HINT(always_inline) tmpl_substr_terminal_check(fr_sbuff_t return ret; } -void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int i) +void tmpl_attr_ref_debug(FILE *fp, const tmpl_attr_t *ar, int i) { char buffer[sizeof(STRINGIFY(INT16_MAX)) + 1]; @@ -204,29 +204,29 @@ void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int i) case TMPL_ATTR_TYPE_UNSPEC: case TMPL_ATTR_TYPE_UNKNOWN: if (!ar->da) { - FR_FAULT_LOG("\t[%u] %s null%s%s%s", - i, - fr_table_str_by_value(attr_table, ar->type, ""), - ar->ar_num != NUM_UNSPEC ? "[" : "", - ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", - ar->ar_num != NUM_UNSPEC ? "]" : ""); + fprintf(fp, "\t[%u] %s null%s%s%s\n", + i, + fr_table_str_by_value(attr_table, ar->type, ""), + ar->ar_num != NUM_UNSPEC ? "[" : "", + ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", + ar->ar_num != NUM_UNSPEC ? "]" : ""); return; } - FR_FAULT_LOG("\t[%u] %s %s %s%s%s%s (%p) attr %u", - i, - fr_table_str_by_value(attr_table, ar->type, ""), - fr_type_to_str(ar->da->type), - ar->da->name, - ar->ar_num != NUM_UNSPEC ? "[" : "", - ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", - ar->ar_num != NUM_UNSPEC ? "]" : "", - ar->da, - ar->da->attr + fprintf(fp, "\t[%u] %s %s %s%s%s%s (%p) attr %u\n ", + i, + fr_table_str_by_value(attr_table, ar->type, ""), + fr_type_to_str(ar->da->type), + ar->da->name, + ar->ar_num != NUM_UNSPEC ? "[" : "", + ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", + ar->ar_num != NUM_UNSPEC ? "]" : "", + ar->da, + ar->da->attr ); - FR_FAULT_LOG("\t is_raw : %s", ar_is_raw(ar) ? "yes" : "no"); - FR_FAULT_LOG("\t is_unknown : %s", ar_is_unknown(ar) ? "yes" : "no"); - if (ar->ar_parent) FR_FAULT_LOG("\t parent : %s (%p)", ar->ar_parent->name, ar->ar_parent); + fprintf(fp, "\t is_raw : %s\n", ar_is_raw(ar) ? "yes" : "no"); + fprintf(fp, "\t is_unknown : %s", ar_is_unknown(ar) ? "yes" : "no"); + if (ar->ar_parent) fprintf(fp, "\t parent : %s (%p)", ar->ar_parent->name, ar->ar_parent); break; @@ -235,40 +235,40 @@ void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int i) * Type reveals unresolved status * so we don't need to add it explicitly */ - FR_FAULT_LOG("\t[%u] %s %s%s%s%s", - i, - fr_table_str_by_value(attr_table, ar->type, ""), - ar->ar_unresolved, - ar->ar_num != NUM_UNSPEC ? "[" : "", - ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", - ar->ar_num != NUM_UNSPEC ? "]" : ""); - if (ar->ar_parent) FR_FAULT_LOG("\t parent : %s", ar->ar_parent->name); - if (ar->ar_unresolved_namespace) FR_FAULT_LOG("\t namespace : %s", ar->ar_unresolved_namespace->name); + fprintf(fp, "\t[%u] %s %s%s%s%s\n", + i, + fr_table_str_by_value(attr_table, ar->type, ""), + ar->ar_unresolved, + ar->ar_num != NUM_UNSPEC ? "[" : "", + ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", + ar->ar_num != NUM_UNSPEC ? "]" : ""); + if (ar->ar_parent) fprintf(fp, "\t parent : %s", ar->ar_parent->name); + if (ar->ar_unresolved_namespace) fprintf(fp, "\t namespace : %s", ar->ar_unresolved_namespace->name); break; default: - FR_FAULT_LOG("\t[%u] Bad type %s(%u)", + fprintf(fp, "\t[%u] Bad type %s(%u)", i, fr_table_str_by_value(attr_table, ar->type, ""), ar->type); break; } } -void tmpl_attr_ref_list_debug(FR_DLIST_HEAD(tmpl_attr_list) const *ar_head) +void tmpl_attr_ref_list_debug(FILE *fp, FR_DLIST_HEAD(tmpl_attr_list) const *ar_head) { tmpl_attr_t *ar = NULL; unsigned int i = 0; - FR_FAULT_LOG("attribute references:"); + fprintf(fp, "attribute references:\n"); /* * Print all the attribute references */ while ((ar = tmpl_attr_list_next(ar_head, ar))) { - tmpl_attr_ref_debug(ar, i); + tmpl_attr_ref_debug(fp, ar, i); i++; } } -void tmpl_attr_debug(tmpl_t const *vpt) +void tmpl_attr_debug(FILE *fp, tmpl_t const *vpt) { tmpl_request_t *rr = NULL; unsigned int i = 0; @@ -279,61 +279,61 @@ void tmpl_attr_debug(tmpl_t const *vpt) break; default: - FR_FAULT_LOG("%s can't print tmpls of type %s", __FUNCTION__, - tmpl_type_to_str(vpt->type)); + fprintf(fp, "%s can't print tmpls of type %s\n", __FUNCTION__, + tmpl_type_to_str(vpt->type)); return; } - FR_FAULT_LOG("tmpl_t %s (%.8x) \"%pV\" (%p)", - tmpl_type_to_str(vpt->type), - vpt->type, - fr_box_strvalue_len(vpt->name, vpt->len), vpt); + fprintf(fp, "tmpl_t %s (%.8x) \"%pV\" (%p)\n", + tmpl_type_to_str(vpt->type), + vpt->type, + fr_box_strvalue_len(vpt->name, vpt->len), vpt); - FR_FAULT_LOG("\tcast : %s", fr_type_to_str(tmpl_rules_cast(vpt))); - FR_FAULT_LOG("\tquote : %s", fr_table_str_by_value(fr_token_quotes_table, vpt->quote, "")); + fprintf(fp, "\tcast : %s\n", fr_type_to_str(tmpl_rules_cast(vpt))); + fprintf(fp, "\tquote : %s\n", fr_table_str_by_value(fr_token_quotes_table, vpt->quote, "")); - FR_FAULT_LOG("request references:"); + fprintf(fp, "request references:"); /* * Print all the request references */ while ((rr = tmpl_request_list_next(&vpt->data.attribute.rr, rr))) { - FR_FAULT_LOG("\t[%u] %s (%u)", i, + fprintf(fp, "\t[%u] %s (%u)\n", i, fr_table_str_by_value(tmpl_request_ref_table, rr->request, ""), rr->request); i++; } - FR_FAULT_LOG("list: %s", tmpl_list_name(tmpl_list(vpt), "")); - tmpl_attr_ref_list_debug(tmpl_attr(vpt)); + fprintf(fp, "list: %s\n", tmpl_list_name(tmpl_list(vpt), "")); + tmpl_attr_ref_list_debug(fp, tmpl_attr(vpt)); } -void tmpl_debug(tmpl_t const *vpt) +void tmpl_debug(FILE *fp, tmpl_t const *vpt) { switch (vpt->type) { case TMPL_TYPE_ATTR: case TMPL_TYPE_ATTR_UNRESOLVED: - tmpl_attr_debug(vpt); + tmpl_attr_debug(fp, vpt); return; default: break; } - FR_FAULT_LOG("tmpl_t %s (%.8x) \"%s\" (%p)", - tmpl_type_to_str(vpt->type), - vpt->type, - vpt->name, vpt); + fprintf(fp, "tmpl_t %s (%.8x) \"%pR\" (%p)\n", + tmpl_type_to_str(vpt->type), + vpt->type, + vpt->name, vpt); - FR_FAULT_LOG("\tcast : %s", fr_type_to_str(tmpl_rules_cast(vpt))); - FR_FAULT_LOG("\tquote : %s", fr_table_str_by_value(fr_token_quotes_table, vpt->quote, "")); + fprintf(fp, "\tcast : %s\n", fr_type_to_str(tmpl_rules_cast(vpt))); + fprintf(fp, "\tquote : %s\n", fr_table_str_by_value(fr_token_quotes_table, vpt->quote, "")); switch (vpt->type) { case TMPL_TYPE_DATA: - FR_FAULT_LOG("\ttype : %s", fr_type_to_str(tmpl_value_type(vpt))); - FR_FAULT_LOG("\tlen : %zu", tmpl_value_length(vpt)); - FR_FAULT_LOG("\tvalue : %pV", tmpl_value(vpt)); + fprintf(fp, "\ttype : %s\n", fr_type_to_str(tmpl_value_type(vpt))); + fprintf(fp, "\tlen : %zu\n", tmpl_value_length(vpt)); + fprintf(fp, "\tvalue : %pV\n", tmpl_value(vpt)); - if (tmpl_value_enumv(vpt)) FR_FAULT_LOG("\tenumv : %s (%p)", - tmpl_value_enumv(vpt)->name, tmpl_value_enumv(vpt)); + if (tmpl_value_enumv(vpt)) fprintf(fp, "\tenumv : %s (%p)", + tmpl_value_enumv(vpt)->name, tmpl_value_enumv(vpt)); return; case TMPL_TYPE_XLAT: @@ -344,7 +344,7 @@ void tmpl_debug(tmpl_t const *vpt) xlat_aprint(NULL, &str, tmpl_xlat(vpt), NULL); - FR_FAULT_LOG("\texpansion : %s", str); + fprintf(fp, "\texpansion : %s\n", str); talloc_free(str); } @@ -352,21 +352,21 @@ void tmpl_debug(tmpl_t const *vpt) case TMPL_TYPE_REGEX: { - FR_FAULT_LOG("\tpattern : %s", vpt->name); + fprintf(fp, "\tpattern : %s\n", vpt->name); } break; default: if (tmpl_needs_resolving(vpt)) { if (tmpl_is_data_unresolved(vpt)) { - FR_FAULT_LOG("\tunescaped : %s", vpt->data.unescaped); - FR_FAULT_LOG("\tlen : %zu", talloc_array_length(vpt->data.unescaped) - 1); + fprintf(fp, "\tunescaped : %s\n", vpt->data.unescaped); + fprintf(fp, "\tlen : %zu\n", talloc_array_length(vpt->data.unescaped) - 1); } else { - FR_FAULT_LOG("\tunresolved : %s", vpt->name); - FR_FAULT_LOG("\tlen : %zu", vpt->len); + fprintf(fp, "\tunresolved : %s\n", vpt->name); + fprintf(fp, "\tlen : %zu\n", vpt->len); } } else { - FR_FAULT_LOG("debug nyi"); + fprintf(fp, "debug nyi\n"); } break; } @@ -5023,7 +5023,7 @@ void tmpl_attr_verify(char const *file, int line, tmpl_t const *vpt) switch (ar->type) { case TMPL_ATTR_TYPE_NORMAL: if (seen_unknown) { - tmpl_attr_debug(vpt); + tmpl_attr_debug(stderr, vpt); fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: " "TMPL_TYPE_ATTR known attribute \"%s\" " "occurred after unknown attribute %s " @@ -5033,7 +5033,7 @@ void tmpl_attr_verify(char const *file, int line, tmpl_t const *vpt) ar->unknown.da->name); } if (seen_unresolved) { - tmpl_attr_debug(vpt); + tmpl_attr_debug(stderr, vpt); fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: " "TMPL_TYPE_ATTR known attribute \"%s\" " "occurred after unresolved attribute \"%s\"" @@ -5049,7 +5049,7 @@ void tmpl_attr_verify(char const *file, int line, tmpl_t const *vpt) case TMPL_ATTR_TYPE_UNSPEC: if (seen_unknown) { - tmpl_attr_debug(vpt); + tmpl_attr_debug(stderr, vpt); fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: " "TMPL_TYPE_ATTR unspecified attribute " "occurred after unknown attribute %s " @@ -5058,7 +5058,7 @@ void tmpl_attr_verify(char const *file, int line, tmpl_t const *vpt) ar->unknown.da->name); } if (seen_unresolved) { - tmpl_attr_debug(vpt); + tmpl_attr_debug(stderr, vpt); fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: " "TMPL_TYPE_ATTR unspecified attribute " "occurred after unresolved attribute \"%s\"" @@ -5078,7 +5078,7 @@ void tmpl_attr_verify(char const *file, int line, tmpl_t const *vpt) case TMPL_ATTR_TYPE_UNKNOWN: seen_unknown = ar; if (seen_unresolved) { - tmpl_attr_debug(vpt); + tmpl_attr_debug(stderr, vpt); fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: " "TMPL_TYPE_ATTR unknown attribute \"%s\" " "occurred after unresolved attribute %s " @@ -5189,7 +5189,7 @@ void tmpl_verify(char const *file, int line, tmpl_t const *vpt) if ((tmpl_attr_list_num_elements(tmpl_attr(vpt)) > 0) && ((tmpl_attr_t *)tmpl_attr_list_tail(tmpl_attr(vpt)))->da) { #ifndef NDEBUG - tmpl_attr_debug(vpt); + tmpl_attr_debug(stderr, vpt); #endif fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: TMPL_TYPE_ATTR_UNRESOLVED contains %u " "references", file, line, tmpl_attr_list_num_elements(tmpl_attr(vpt))); diff --git a/src/lib/unlang/edit.c b/src/lib/unlang/edit.c index 1f2b0eaccc..4b400b6c4f 100644 --- a/src/lib/unlang/edit.c +++ b/src/lib/unlang/edit.c @@ -174,7 +174,7 @@ static int tmpl_to_values(TALLOC_CTX *ctx, edit_result_t *out, request_t *reques * The other tmpl types MUST have already been * converted to the "realized" types. */ - tmpl_debug(vpt); + tmpl_debug(stderr, vpt); fr_assert(0); break; } diff --git a/src/lib/unlang/xlat_builtin.c b/src/lib/unlang/xlat_builtin.c index 98ba109544..15b17a4679 100644 --- a/src/lib/unlang/xlat_builtin.c +++ b/src/lib/unlang/xlat_builtin.c @@ -2724,7 +2724,7 @@ static xlat_action_t xlat_func_range(TALLOC_CTX *ctx, fr_dcursor_t *out, } else { start = 0; - fr_value_box_debug(start_vb); + fr_value_box_debug(fr_log_fp, start_vb); end = fr_value_box_list_head(&start_vb->vb_group)->vb_uint64; step = 1; } diff --git a/src/lib/unlang/xlat_eval.c b/src/lib/unlang/xlat_eval.c index 92185c153e..05123d007b 100644 --- a/src/lib/unlang/xlat_eval.c +++ b/src/lib/unlang/xlat_eval.c @@ -539,7 +539,7 @@ check_non_leaf: } if (!fr_value_box_is_safe_for(vb, FR_VALUE_BOX_SAFE_FOR_ANY)) { - fr_value_box_debug(vb); + fr_value_box_debug(fr_log_fp, vb); REDEBUG("Refusing to reference attribute from unsafe data"); return XLAT_ACTION_FAIL; } diff --git a/src/lib/unlang/xlat_expr.c b/src/lib/unlang/xlat_expr.c index b9a5cf1396..aee8bbead5 100644 --- a/src/lib/unlang/xlat_expr.c +++ b/src/lib/unlang/xlat_expr.c @@ -2645,7 +2645,7 @@ static fr_slen_t tokenize_field(xlat_exp_head_t *head, xlat_exp_t **out, fr_sbuf /* * Regex? Or something else weird? */ - tmpl_debug(vpt); + tmpl_debug(stderr, vpt); fr_assert(0); } } diff --git a/src/lib/util/dict.h b/src/lib/util/dict.h index 4d30d529d0..096121c3db 100644 --- a/src/lib/util/dict.h +++ b/src/lib/util/dict.h @@ -911,7 +911,7 @@ int fr_dict_global_ctx_dir_set(char const *dict_dir); void fr_dict_global_ctx_read_only(void); -void fr_dict_global_ctx_debug(fr_dict_gctx_t const *gctx); +void fr_dict_gctx_debug(FILE *fp, fr_dict_gctx_t const *gctx); char const *fr_dict_global_ctx_dir(void); diff --git a/src/lib/util/dict_print.c b/src/lib/util/dict_print.c index 8fc03ce903..b8e207f524 100644 --- a/src/lib/util/dict_print.c +++ b/src/lib/util/dict_print.c @@ -208,7 +208,7 @@ static int dict_attr_debug(fr_dict_attr_t const *da, void *uctx) da->attr, fr_type_to_str(da->type), ctx->flags); - + dict_attr_ext_debug(ctx->prefix, da); /* Print all the extension debug info */ ext = fr_dict_attr_ext(da, FR_DICT_ATTR_EXT_ENUMV); @@ -218,7 +218,7 @@ static int dict_attr_debug(fr_dict_attr_t const *da, void *uctx) enumv; enumv = fr_hash_table_iter_next(ext->name_by_value, &iter)) { char *value = fr_asprintf(NULL, "%pV", enumv->value); - + fprintf(ctx->fp, "%s %s -> %s\n", ctx->prefix, enumv->name, @@ -348,4 +348,3 @@ void fr_dict_alias_export(FILE *fp, fr_dict_attr_t const *parent) fprintf(fp, "%-40s\t%s\n", da->name, buffer); } } - diff --git a/src/lib/util/dict_util.c b/src/lib/util/dict_util.c index f3d3ca9aa5..729826c0a1 100644 --- a/src/lib/util/dict_util.c +++ b/src/lib/util/dict_util.c @@ -4406,7 +4406,7 @@ static int _dict_global_free(fr_dict_gctx_t *gctx) if (still_loaded) { #ifndef NDEBUG - fr_dict_global_ctx_debug(gctx); + fr_dict_gctx_debug(stderr, gctx); #endif return -1; } @@ -4571,7 +4571,7 @@ void fr_dict_global_ctx_read_only(void) * * Intended to be called from a debugger */ -void fr_dict_global_ctx_debug(fr_dict_gctx_t const *gctx) +void fr_dict_gctx_debug(FILE *fp, fr_dict_gctx_t const *gctx) { fr_hash_iter_t dict_iter; fr_dict_t *dict; @@ -4581,18 +4581,19 @@ void fr_dict_global_ctx_debug(fr_dict_gctx_t const *gctx) if (gctx == NULL) gctx = dict_gctx; if (!gctx) { - FR_FAULT_LOG("gctx not initialised"); + fprintf(fp, "gctx not initialised\n"); return; } - FR_FAULT_LOG("gctx %p report", dict_gctx); + fprintf(fp, "gctx %p report\n", dict_gctx); for (dict = fr_hash_table_iter_init(gctx->protocol_by_num, &dict_iter); dict; dict = fr_hash_table_iter_next(gctx->protocol_by_num, &dict_iter)) { for (dep = fr_rb_iter_init_inorder(&dep_iter, dict->dependents); dep; dep = fr_rb_iter_next_inorder(&dep_iter)) { - FR_FAULT_LOG("\t%s is referenced from %s count (%d)", dict->root->name, dep->dependent, dep->count); + fprintf(fp, "\t%s is referenced from %s count (%d)\n", + dict->root->name, dep->dependent, dep->count); } } @@ -4600,7 +4601,8 @@ void fr_dict_global_ctx_debug(fr_dict_gctx_t const *gctx) for (dep = fr_rb_iter_init_inorder(&dep_iter, gctx->internal->dependents); dep; dep = fr_rb_iter_next_inorder(&dep_iter)) { - FR_FAULT_LOG("\t%s is referenced from %s count (%d)", gctx->internal->root->name, dep->dependent, dep->count); + fprintf(fp, "\t%s is referenced from %s count (%d)\n", + gctx->internal->root->name, dep->dependent, dep->count); } } } diff --git a/src/lib/util/dl.c b/src/lib/util/dl.c index 37717f9f82..8f3c6af8b8 100644 --- a/src/lib/util/dl.c +++ b/src/lib/util/dl.c @@ -959,26 +959,26 @@ bool dl_loader_set_static(dl_loader_t *dl_loader, bool do_static) /** Called from a debugger to print information about a dl_loader * */ -void dl_loader_debug(dl_loader_t *dl) +void dl_loader_debug(FILE *fp, dl_loader_t *dl) { - FR_FAULT_LOG("dl_loader %p", dl); - FR_FAULT_LOG("lib_dir : %s", dl->lib_dir); - FR_FAULT_LOG("do_dlclose : %s", dl->do_dlclose ? "yes" : "no"); - FR_FAULT_LOG("uctx : %p", dl->uctx); - FR_FAULT_LOG("uctx_free : %s", dl->do_dlclose ? "yes" : "no"); - FR_FAULT_LOG("defer_symbol_init : %s", dl->defer_symbol_init ? "yes" : "no"); + fprintf(fp, "dl_loader %p", dl); + fprintf(fp, "lib_dir : %s\n", dl->lib_dir); + fprintf(fp, "do_dlclose : %s\n", dl->do_dlclose ? "yes" : "no"); + fprintf(fp, "uctx : %p\n", dl->uctx); + fprintf(fp, "uctx_free : %s\n", dl->do_dlclose ? "yes" : "no"); + fprintf(fp, "defer_symbol_init : %s\n", dl->defer_symbol_init ? "yes" : "no"); fr_dlist_foreach(&dl->sym_init, dl_symbol_init_t, sym) { - FR_FAULT_LOG("symbol_init %s", sym->symbol ? sym->symbol : ""); - FR_FAULT_LOG("\tpriority : %u", sym->priority); - FR_FAULT_LOG("\tfunc : %p", sym->func); - FR_FAULT_LOG("\tuctx : %p", sym->uctx); + fprintf(fp, "symbol_init %s\n", sym->symbol ? sym->symbol : ""); + fprintf(fp, "\tpriority : %u\n", sym->priority); + fprintf(fp, "\tfunc : %p\n", sym->func); + fprintf(fp, "\tuctx : %p\n", sym->uctx); } fr_dlist_foreach(&dl->sym_free, dl_symbol_free_t, sym) { - FR_FAULT_LOG("symbol_free %s", sym->symbol ? sym->symbol : ""); - FR_FAULT_LOG("\tpriority : %u", sym->priority); - FR_FAULT_LOG("\tfunc : %p", sym->func); - FR_FAULT_LOG("\tuctx : %p", sym->uctx); + fprintf(fp, "symbol_free %s\n", sym->symbol ? sym->symbol : ""); + fprintf(fp, "\tpriority : %u\n", sym->priority); + fprintf(fp, "\tfunc : %p\n", sym->func); + fprintf(fp, "\tuctx : %p\n", sym->uctx); } } diff --git a/src/lib/util/dl.h b/src/lib/util/dl.h index 7ab8dc5798..a6f32d8e7f 100644 --- a/src/lib/util/dl.h +++ b/src/lib/util/dl.h @@ -129,7 +129,7 @@ dl_loader_t *dl_loader_init(TALLOC_CTX *ctx, void *uctx, bool uctx_free, bool d bool dl_loader_set_static(dl_loader_t *dl_loader, bool do_static) CC_HINT(nonnull); -void dl_loader_debug(dl_loader_t *dl); +void dl_loader_debug(FILE *fp, dl_loader_t *dl) CC_HINT(nonnull); #ifdef __cplusplus } #endif diff --git a/src/lib/util/pair.h b/src/lib/util/pair.h index 9b5db0ee74..600a70cf60 100644 --- a/src/lib/util/pair.h +++ b/src/lib/util/pair.h @@ -848,8 +848,10 @@ static inline fr_slen_t CC_HINT(nonnull(2,4)) void _fr_pair_list_log(fr_log_t const *log, int lvl, fr_pair_t *parent, fr_pair_list_t const *list, char const *file, int line) CC_HINT(nonnull(1,4)); -void fr_pair_list_debug(fr_pair_list_t const *list) CC_HINT(nonnull); -void fr_pair_debug(fr_pair_t const *pair) CC_HINT(nonnull); +void fr_pair_list_debug(FILE *fp, fr_pair_list_t const *list) CC_HINT(nonnull); +void _fr_pair_list_debug(FILE *fp, int lvl, fr_pair_t *parent, fr_pair_list_t const *list) + CC_HINT(nonnull(1, 4)); +void fr_pair_debug(FILE *fp, fr_pair_t const *pair) CC_HINT(nonnull); /** @} */ diff --git a/src/lib/util/pair_print.c b/src/lib/util/pair_print.c index b95db80a54..d68b0c605b 100644 --- a/src/lib/util/pair_print.c +++ b/src/lib/util/pair_print.c @@ -322,19 +322,69 @@ void _fr_pair_list_log(fr_log_t const *log, int lvl, fr_pair_t *parent, fr_pair_ fr_pair_list_log_sbuff(log, lvl, parent, list, file, line, &sbuff); } +static void fr_pair_list_debug_sbuff(FILE *fp, int lvl, fr_pair_t *parent, fr_pair_list_t const *list, fr_sbuff_t *sbuff) +{ + fr_dict_attr_t const *parent_da = NULL; + + fr_pair_list_foreach(list, vp) { + PAIR_VERIFY_WITH_LIST(list, vp); + + fr_sbuff_set_to_start(sbuff); + + if (vp->vp_raw) (void) fr_sbuff_in_strcpy(sbuff, "raw."); + + if (parent && (parent->vp_type != FR_TYPE_GROUP)) parent_da = parent->da; + if (fr_dict_attr_oid_print(sbuff, parent_da, vp->da, false) <= 0) return; + + /* + * Recursively print grouped attributes. + */ + switch (vp->vp_type) { + case FR_TYPE_STRUCTURAL: + fprintf(fp, "%*s%*s {\n", lvl * 2, "", (int) fr_sbuff_used(sbuff), fr_sbuff_start(sbuff)); + _fr_pair_list_debug(fp, lvl + 1, vp, &vp->vp_group); + fprintf(fp, "%*s}\n", lvl * 2, ""); + break; + + default: + (void) fr_sbuff_in_strcpy(sbuff, " = "); + if (fr_value_box_print_quoted(sbuff, &vp->data, T_DOUBLE_QUOTED_STRING)< 0) break; + + fprintf(fp, "%*s%*s\n", lvl * 2, "", (int) fr_sbuff_used(sbuff), fr_sbuff_start(sbuff)); + } + } +} + +/** Print a list of attributes and enumv + * + * @param[in] fp to output to. + * @param[in] lvl depth in structural attribute. + * @param[in] parent parent attribute + * @param[in] list to print. + */ +void _fr_pair_list_debug(FILE *fp, int lvl, fr_pair_t *parent, fr_pair_list_t const *list) +{ + fr_sbuff_t sbuff; + char buffer[1024]; + + fr_sbuff_init_out(&sbuff, buffer, sizeof(buffer)); + + fr_pair_list_debug_sbuff(fp, lvl, parent, list, &sbuff); +} + /** Dumps a list to the default logging destination - Useful for calling from debuggers * */ -void fr_pair_list_debug(fr_pair_list_t const *list) +void fr_pair_list_debug(FILE *fp, fr_pair_list_t const *list) { - _fr_pair_list_log(&default_log, 0, NULL, list, "", 0); + _fr_pair_list_debug(fp, 0, NULL, list); } /** Dumps a pair to the default logging destination - Useful for calling from debuggers * */ -void fr_pair_debug(fr_pair_t const *pair) +void fr_pair_debug(FILE *fp, fr_pair_t const *pair) { fr_sbuff_t sbuff; char buffer[1024]; @@ -347,6 +397,5 @@ void fr_pair_debug(fr_pair_t const *pair) (void) fr_pair_print(&sbuff, NULL, pair); - fr_log(&default_log, L_DBG, __FILE__, __LINE__, "%pV", - fr_box_strvalue_len(fr_sbuff_start(&sbuff), fr_sbuff_used(&sbuff))); + fprintf(fp, "%pV\n", fr_box_strvalue_len(fr_sbuff_start(&sbuff), fr_sbuff_used(&sbuff))); } diff --git a/src/lib/util/sbuff.c b/src/lib/util/sbuff.c index 8e303e9992..df4483811a 100644 --- a/src/lib/util/sbuff.c +++ b/src/lib/util/sbuff.c @@ -2261,51 +2261,51 @@ static char const *sbuff_print_char(char c) } } -void fr_sbuff_unescape_debug(fr_sbuff_unescape_rules_t const *escapes) +void fr_sbuff_unescape_debug(FILE *fp, fr_sbuff_unescape_rules_t const *escapes) { uint8_t i; - FR_FAULT_LOG("Escape rules %s (%p)", escapes->name, escapes); - FR_FAULT_LOG("chr : %c", escapes->chr ? escapes->chr : ' '); - FR_FAULT_LOG("do_hex : %s", escapes->do_hex ? "yes" : "no"); - FR_FAULT_LOG("do_oct : %s", escapes->do_oct ? "yes" : "no"); + fprintf(fp, "Escape rules %s (%p)\n", escapes->name, escapes); + fprintf(fp, "chr : %c\n", escapes->chr ? escapes->chr : ' '); + fprintf(fp, "do_hex : %s\n", escapes->do_hex ? "yes" : "no"); + fprintf(fp, "do_oct : %s\n", escapes->do_oct ? "yes" : "no"); - FR_FAULT_LOG("substitutions:"); + fprintf(fp, "substitutions:\n"); for (i = 0; i < UINT8_MAX; i++) { - if (escapes->subs[i]) FR_FAULT_LOG("\t%s -> %s", + if (escapes->subs[i]) FR_FAULT_LOG("\t%s -> %s\n", sbuff_print_char((char)i), sbuff_print_char((char)escapes->subs[i])); } - FR_FAULT_LOG("skipes:"); + fprintf(fp, "skipes:\n"); for (i = 0; i < UINT8_MAX; i++) { - if (escapes->skip[i]) FR_FAULT_LOG("\t%s", sbuff_print_char((char)i)); + if (escapes->skip[i]) fprintf(fp, "\t%s\n", sbuff_print_char((char)i)); } } -void fr_sbuff_terminal_debug(fr_sbuff_term_t const *tt) +void fr_sbuff_terminal_debug(FILE *fp, fr_sbuff_term_t const *tt) { size_t i; - FR_FAULT_LOG("Terminal count %zu", tt->len); + fprintf(fp, "Terminal count %zu\n", tt->len); - for (i = 0; i < tt->len; i++) FR_FAULT_LOG("\t\"%s\" (%zu)", tt->elem[i].str, tt->elem[i].len); + for (i = 0; i < tt->len; i++) fprintf(fp, "\t\"%s\" (%zu)\n", tt->elem[i].str, tt->elem[i].len); } -void fr_sbuff_parse_rules_debug(fr_sbuff_parse_rules_t const *p_rules) +void fr_sbuff_parse_rules_debug(FILE *fp, fr_sbuff_parse_rules_t const *p_rules) { - FR_FAULT_LOG("Parse rules %p", p_rules); + fprintf(fp, "Parse rules %p\n", p_rules); FR_FAULT_LOG("Escapes - "); if (p_rules->escapes) { - fr_sbuff_unescape_debug(p_rules->escapes); + fr_sbuff_unescape_debug(fp, p_rules->escapes); } else { - FR_FAULT_LOG(""); + fprintf(fp, "\n"); } FR_FAULT_LOG("Terminals - "); if (p_rules->terminals) { - fr_sbuff_terminal_debug(p_rules->terminals); + fr_sbuff_terminal_debug(fp, p_rules->terminals); } else { - FR_FAULT_LOG(""); + fprintf(fp, "\n"); } } diff --git a/src/lib/util/sbuff.h b/src/lib/util/sbuff.h index 2c3fbc9bc7..981dc4583e 100644 --- a/src/lib/util/sbuff.h +++ b/src/lib/util/sbuff.h @@ -1828,11 +1828,11 @@ SBUFF_IS_FUNC(hex, isxdigit((uint8_t) *p)) /** @} */ -void fr_sbuff_unescape_debug(fr_sbuff_unescape_rules_t const *escapes); +void fr_sbuff_unescape_debug(FILE *fp, fr_sbuff_unescape_rules_t const *escapes); -void fr_sbuff_terminal_debug(fr_sbuff_term_t const *tt); +void fr_sbuff_terminal_debug(FILE *fp, fr_sbuff_term_t const *tt); -void fr_sbuff_parse_rules_debug(fr_sbuff_parse_rules_t const *p_rules); +void fr_sbuff_parse_rules_debug(FILE *fp, fr_sbuff_parse_rules_t const *p_rules); /* * ...printf("foo %.*s", fr_sbuff_as_percent_s(&sbuff)); diff --git a/src/lib/util/value.c b/src/lib/util/value.c index da75212f80..6f3d168bb0 100644 --- a/src/lib/util/value.c +++ b/src/lib/util/value.c @@ -6831,15 +6831,15 @@ bool fr_value_box_is_truthy(fr_value_box_t const *in) } } -#define INFO_INDENT(_fmt, ...) FR_FAULT_LOG("%*s"_fmt, depth * 2, " ", ## __VA_ARGS__) +#define INFO_INDENT(_fmt, ...) fprintf(fp, "%*s" _fmt "\n", depth * 2, " ", ## __VA_ARGS__) -static void _fr_value_box_debug(fr_value_box_t const *vb, int depth, int idx); -static void _fr_value_box_list_debug(fr_value_box_list_t const *head, int depth) +static void _fr_value_box_debug(FILE *fp, fr_value_box_t const *vb, int depth, int idx); +static void _fr_value_box_list_debug(FILE *fp, fr_value_box_list_t const *head, int depth) { int i = 0; INFO_INDENT("{"); - fr_value_box_list_foreach(head, vb) _fr_value_box_debug(vb, depth + 1, i++); + fr_value_box_list_foreach(head, vb) _fr_value_box_debug(fp, vb, depth + 1, i++); INFO_INDENT("}"); } @@ -6847,18 +6847,18 @@ static void _fr_value_box_list_debug(fr_value_box_list_t const *head, int depth) * * @note Call directly from the debugger */ -void fr_value_box_list_debug(fr_value_box_list_t const *head) +void fr_value_box_list_debug(FILE *fp, fr_value_box_list_t const *head) { - _fr_value_box_list_debug(head, 0); + _fr_value_box_list_debug(fp, head, 0); } -static void _fr_value_box_debug(fr_value_box_t const *vb, int depth, int idx) +static void _fr_value_box_debug(FILE *fp, fr_value_box_t const *vb, int depth, int idx) { char *value; char buffer[64]; if (fr_type_is_structural(vb->type)) { - _fr_value_box_list_debug(&vb->vb_group, depth + 1); + _fr_value_box_list_debug(fp, &vb->vb_group, depth + 1); return; } @@ -6894,7 +6894,7 @@ static void _fr_value_box_debug(fr_value_box_t const *vb, int depth, int idx) * * @note Call directly from the debugger */ -void fr_value_box_debug(fr_value_box_t const *vb) +void fr_value_box_debug(FILE *fp, fr_value_box_t const *vb) { - _fr_value_box_debug(vb, 0, -1); + _fr_value_box_debug(fp, vb, 0, -1); } diff --git a/src/lib/util/value.h b/src/lib/util/value.h index be22948ca8..3dfdbf28eb 100644 --- a/src/lib/util/value.h +++ b/src/lib/util/value.h @@ -1328,8 +1328,8 @@ void fr_value_box_list_verify(char const *file, int line, fr_value_box_list_t c * * @{ */ -void fr_value_box_list_debug(fr_value_box_list_t const *head); -void fr_value_box_debug(fr_value_box_t const *vb); +void fr_value_box_list_debug(FILE *fp, fr_value_box_list_t const *head); +void fr_value_box_debug(FILE *fp, fr_value_box_t const *vb); /** @} */ #undef _CONST diff --git a/src/protocols/dns/encode.c b/src/protocols/dns/encode.c index eab30c4c1c..18d7f6a4ca 100644 --- a/src/protocols/dns/encode.c +++ b/src/protocols/dns/encode.c @@ -465,7 +465,7 @@ ssize_t fr_dns_encode(fr_dbuff_t *dbuff, fr_pair_list_t *vps, fr_dns_ctx_t *pack */ vp = fr_pair_dcursor_by_da_init(&cursor, vps, attr_dns_packet); if (!vp) { - fr_pair_list_debug(vps); + fr_pair_list_log(&default_log, 0, vps); fr_strerror_const("attribute list does not include DNS packet header"); return -1; diff --git a/src/tests/util/atomic_queue_test.c b/src/tests/util/atomic_queue_test.c index 3884f1b2cd..abeb02d13d 100644 --- a/src/tests/util/atomic_queue_test.c +++ b/src/tests/util/atomic_queue_test.c @@ -91,7 +91,7 @@ int main(int argc, char *argv[]) #ifndef NDEBUG if (debug_lvl) { printf("Start\n"); - fr_atomic_queue_debug(aq, stdout); + fr_atomic_queue_debug(stdout, aq); if (debug_lvl > 1) printf("Filling with %d\n", size); } @@ -111,7 +111,7 @@ int main(int argc, char *argv[]) #ifndef NDEBUG if (debug_lvl > 1) { printf("iteration %d\n", i); - fr_atomic_queue_debug(aq, stdout); + fr_atomic_queue_debug(stdout, aq); } #endif } @@ -130,7 +130,7 @@ int main(int argc, char *argv[]) #ifndef NDEBUG if (debug_lvl) { printf("Full\n"); - fr_atomic_queue_debug(aq, stdout); + fr_atomic_queue_debug(stdout, aq); if (debug_lvl > 1) printf("Emptying\n"); } @@ -155,7 +155,7 @@ int main(int argc, char *argv[]) #ifndef NDEBUG if (debug_lvl > 1) { printf("iteration %d\n", i); - fr_atomic_queue_debug(aq, stdout); + fr_atomic_queue_debug(stdout, aq); } #endif } @@ -171,7 +171,7 @@ int main(int argc, char *argv[]) #ifndef NDEBUG if (debug_lvl) { printf("Empty\n"); - fr_atomic_queue_debug(aq, stdout); + fr_atomic_queue_debug(stdout, aq); } #endif diff --git a/src/tests/util/channel_test.c b/src/tests/util/channel_test.c index d322ff20be..aedf40e0ea 100644 --- a/src/tests/util/channel_test.c +++ b/src/tests/util/channel_test.c @@ -291,7 +291,7 @@ check_close: MPRINT2("GC\n"); fr_message_set_gc(ms); - if (debug_lvl > 1) fr_message_set_debug(ms, stdout); + if (debug_lvl > 1) fr_message_set_debug(stdout, ms); /* * After the garbage collection, all messages marked "done" MUST also be marked "free". @@ -466,7 +466,7 @@ static void *channel_worker(void *arg) MPRINT2("Worker GC\n"); fr_message_set_gc(ms); - if (debug_lvl > 1) fr_message_set_debug(ms, stdout); + if (debug_lvl > 1) fr_message_set_debug(stdout, ms); /* * After the garbage collection, all messages marked "done" MUST also be marked "free". diff --git a/src/tests/util/message_set_test.c b/src/tests/util/message_set_test.c index ad2272f781..c24680aeae 100644 --- a/src/tests/util/message_set_test.c +++ b/src/tests/util/message_set_test.c @@ -248,7 +248,7 @@ int main(int argc, char *argv[]) MPRINT1("TEST 1 used %d (%zu)\n", fr_message_set_messages_used(ms), used); - if (debug_lvl) fr_message_set_debug(ms, stdout); + if (debug_lvl) fr_message_set_debug(stdout, ms); /* * Double the size of the allocations @@ -270,7 +270,7 @@ int main(int argc, char *argv[]) MPRINT1("TEST 2 used %d\n", fr_message_set_messages_used(ms)); - if (debug_lvl) fr_message_set_debug(ms, stdout); + if (debug_lvl) fr_message_set_debug(stdout, ms); /* * Double the size of the allocations */ @@ -299,7 +299,7 @@ int main(int argc, char *argv[]) MPRINT1("TEST 3 used %d\n", fr_message_set_messages_used(ms)); - if (debug_lvl) fr_message_set_debug(ms, stdout); + if (debug_lvl) fr_message_set_debug(stdout, ms); /* * Do another 1000 rounds of alloc / free. @@ -313,7 +313,7 @@ int main(int argc, char *argv[]) MPRINT1("TEST 4 used %d\n", fr_message_set_messages_used(ms)); - if (debug_lvl) fr_message_set_debug(ms, stdout); + if (debug_lvl) fr_message_set_debug(stdout, ms); #if 0 @@ -335,7 +335,7 @@ int main(int argc, char *argv[]) MPRINT1("TEST 5 used %d\n", fr_message_set_messages_used(ms)); - if (debug_lvl) fr_message_set_debug(ms, stdout); + if (debug_lvl) fr_message_set_debug(stdout, ms); /* * Double the number of the allocations again, @@ -355,7 +355,7 @@ int main(int argc, char *argv[]) MPRINT1("TEST 6 used %d\n", fr_message_set_messages_used(ms)); - if (debug_lvl) fr_message_set_debug(ms, stdout); + if (debug_lvl) fr_message_set_debug(stdout, ms); #endif my_alloc_size = end - start; @@ -396,7 +396,7 @@ int main(int argc, char *argv[]) MPRINT1("GC\n"); fr_message_set_gc(ms); - if (debug_lvl) fr_message_set_debug(ms, stdout); + if (debug_lvl) fr_message_set_debug(stdout, ms); /* * After the garbage collection, all messages marked "done" MUST also be marked "free". diff --git a/src/tests/util/radius1_test.c b/src/tests/util/radius1_test.c index d258a271a8..2210cea192 100644 --- a/src/tests/util/radius1_test.c +++ b/src/tests/util/radius1_test.c @@ -502,7 +502,7 @@ static void master_process(TALLOC_CTX *ctx) MPRINT2("GC\n"); fr_message_set_gc(ms); - if (debug_lvl > 1) fr_message_set_debug(ms, stdout); + if (debug_lvl > 1) fr_message_set_debug(stdout, ms); /* * After the garbage collection, all messages marked "done" MUST also be marked "free". diff --git a/src/tests/util/worker_test.c b/src/tests/util/worker_test.c index 633609de8a..278b2032ea 100644 --- a/src/tests/util/worker_test.c +++ b/src/tests/util/worker_test.c @@ -455,7 +455,7 @@ check_close: MPRINT2("GC\n"); fr_message_set_gc(ms); - if (debug_lvl > 1) fr_message_set_debug(ms, stdout); + if (debug_lvl > 1) fr_message_set_debug(stdout, ms); /* * After the garbage collection, all messages marked "done" MUST also be marked "free".