From: Alan T. DeKok Date: Thu, 21 Jul 2022 14:07:07 +0000 (-0400) Subject: more debugging functions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10d212a2862f762e33eaf1bbdf15ecfb04ad7e84;p=thirdparty%2Ffreeradius-server.git more debugging functions --- diff --git a/src/lib/util/pair.c b/src/lib/util/pair.c index 838f41476de..1635cbb70c4 100644 --- a/src/lib/util/pair.c +++ b/src/lib/util/pair.c @@ -2985,3 +2985,40 @@ void fr_pair_list_afrom_box(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_dict_t cons */ fr_pair_list_tainted(out); } + +/* + * print.c doesn't include pair.h, and doing so causes too many knock-on effects. + */ +void fr_fprintf_pair(FILE *fp, char const *msg, fr_pair_t const *vp) +{ + if (msg) fputs(msg, fp); + + fr_fprintf(fp, "%s = %pV\n", vp->da->name, &vp->data); +} + +static const char spaces[] = " "; + +static void fprintf_pair_list(FILE *fp, fr_pair_list_t const *list, int depth) +{ + fr_pair_t *vp; + + for (vp = fr_pair_list_head(list); + vp != NULL; + vp = fr_pair_list_next(list, vp)) { + fprintf(fp, "%.*s", depth, spaces); + + if (fr_type_is_leaf(vp->da->type)) { + fr_fprintf(fp, "%s = %pV\n", vp->da->name, &vp->data); + continue; + } + + fprintf(fp, "%s = {\n", vp->da->name); + fprintf_pair_list(fp, &vp->vp_group, depth + 1); + fprintf(fp, "%.*s}\n", depth, spaces); + } +} + +void fr_fprintf_pair_list(FILE *fp, fr_pair_list_t const *list) +{ + fprintf_pair_list(fp, list, 0); +} diff --git a/src/lib/util/pair.h b/src/lib/util/pair.h index 6fffb3704de..7b6e90fc84d 100644 --- a/src/lib/util/pair.h +++ b/src/lib/util/pair.h @@ -715,6 +715,9 @@ typedef struct { ssize_t fr_pair_ctx_afrom_str(fr_pair_ctx_t *pair_ctx, char const *in, size_t inlen) CC_HINT(nonnull); void fr_pair_ctx_reset(fr_pair_ctx_t *pair_ctx, fr_dict_t const *dict) CC_HINT(nonnull); +void fr_fprintf_pair(FILE *fp, char const *msg, fr_pair_t const *vp); +void fr_fprintf_pair_list(FILE *fp, fr_pair_list_t const *list); + #undef _CONST #ifdef __cplusplus }