]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
more debugging functions
authorAlan T. DeKok <aland@freeradius.org>
Thu, 21 Jul 2022 14:07:07 +0000 (10:07 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 23 Jul 2022 23:47:17 +0000 (19:47 -0400)
src/lib/util/pair.c
src/lib/util/pair.h

index 838f41476def03225c7cdb5267ffa01f0e3815e0..1635cbb70c444db0865567b20fc6da8695ea4d9b 100644 (file)
@@ -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);
+}
index 6fffb3704de78a7056ad72978f0f78ddbe777876..7b6e90fc84d6096e0fc29244f693d559f2c21a8c 100644 (file)
@@ -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
 }