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 9c184271e2a..527e5858abe 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 03353ac4323..a36eca7dd1d 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 a44aef542d1..95d8dcf0d06 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 4c9b7eac8ae..7bf0bcdaf1d 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 fb096dd9a62..015e143b73f 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 986864d4ac3..e3e729be210 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 7206e008492..6d4182f00de 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 d548ba35be7..37eb67c7cc0 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 12e9e6d7e79..c6d7b536104 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 3589c946da2..8495779e4ba 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 d8f3088307a..2ea27b52a67 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 b6a0c541f01..8a6973c3519 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 3cdf8eb3ff2..0ab457f3a93 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 6f1bba1ca27..843f1d7b8dd 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 34926a83ef6..8b6f1410715 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 d02682cb3b2..81b3c490bfb 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 1f2b0eaccc2..4b400b6c4f5 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 98ba109544e..15b17a46794 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 92185c153e6..05123d007b9 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 b9a5cf13963..aee8bbead51 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 4d30d529d08..096121c3db5 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 8fc03ce9033..b8e207f524e 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 f3d3ca9aa54..729826c0a1d 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 37717f9f82c..8f3c6af8b8f 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 7ab8dc5798d..a6f32d8e7f3 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 9b5db0ee740..600a70cf60e 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 b95db80a540..d68b0c605b9 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 8e303e99928..df4483811a6 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 2c3fbc9bc7c..981dc4583e2 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 da75212f804..6f3d168bb01 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 be22948ca8c..3dfdbf28ebb 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 eab30c4c1cf..18d7f6a4cad 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 3884f1b2cdc..abeb02d13d4 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 d322ff20be7..aedf40e0eaa 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 ad2272f781d..c24680aeae8 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 d258a271a83..2210cea192c 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 633609de8a5..278b2032eab 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".