]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
print nested attributes correctly.
authorAlan T. DeKok <aland@freeradius.org>
Fri, 21 May 2021 16:21:08 +0000 (12:21 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 21 May 2021 17:37:04 +0000 (13:37 -0400)
make fr_pair_list_log() more like log_request_pair_list()

src/lib/util/pair.h
src/lib/util/pair_print.c

index 2a668b9389a914d22ef91baa7e5078c7d2a6237b..eb9fd590854622c49335e77b91040ec9d87897f8 100644 (file)
@@ -394,8 +394,8 @@ static inline size_t        fr_pair_aprint(TALLOC_CTX *ctx, char **out, fr_pair_t const
 
 void                   fr_pair_fprint(FILE *, fr_pair_t const *vp);
 
-#define                        fr_pair_list_log(_log, _list) _fr_pair_list_log(_log, 4, _list, __FILE__, __LINE__);
-void                   _fr_pair_list_log(fr_log_t const *log, int lvl, fr_pair_list_t const *list, char const *file, int line);
+#define                        fr_pair_list_log(_log, _list) _fr_pair_list_log(_log, 4, NULL, _list, __FILE__, __LINE__);
+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);
 
 void                   fr_pair_list_debug(fr_pair_list_t const *list);
 
index cd0ca5fc19b8d73dedd8c2ed84b89b035e0e8aa5..e8d3c22b806b54bd6458dea0c2dfcb26f05c3bd8 100644 (file)
@@ -159,24 +159,41 @@ void fr_pair_fprint(FILE *fp, fr_pair_t const *vp)
  *
  * @param[in] log      to output to.
  * @param[in] lvl      depth in structural attribute.
+ * @param[in] parent   parent attribute
  * @param[in] list     to print.
  * @param[in] file     where the message originated
  * @param[in] line     where the message originated
  */
-void _fr_pair_list_log(fr_log_t const *log, int lvl, fr_pair_list_t const *list, char const *file, int line)
+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)
 {
        fr_pair_t *vp;
+       fr_dict_attr_t const *parent_da = NULL;
 
-       for (vp = fr_pair_list_head(list); vp; vp = fr_pair_list_next(list, vp)) { \
+       for (vp = fr_pair_list_head(list); vp; vp = fr_pair_list_next(list, vp)) {
+               fr_sbuff_t oid_buff;
+               char buffer[512];
+
+               VP_VERIFY(vp);
+
+               fr_sbuff_init(&oid_buff, buffer, sizeof(buffer));
+
+               if (parent && (parent->da->type != FR_TYPE_GROUP)) parent_da = parent->da;
+               if (fr_dict_attr_oid_print(&oid_buff, parent_da, vp->da, false) <= 0) return;
+
+               /*
+                *      Recursively print grouped attributes.
+                */
                switch (vp->da->type) {
                case FR_TYPE_STRUCTURAL:
-                       fr_log(log, L_DBG, file, line, "%*s%s {", lvl * 2, "", vp->da->name);
-                       _fr_pair_list_log(log, lvl + 1, &vp->vp_group, file, line);
+                       fr_log(log, L_DBG, file, line, "%*s%*s {", lvl * 2, "",
+                              (int) fr_sbuff_used(&oid_buff), buffer);
+                       _fr_pair_list_log(log, lvl + 1, vp, &vp->vp_group, file, line);
                        fr_log(log, L_DBG, file, line, "%*s}", lvl * 2, "");
                        break;
 
                default:
-                       fr_log(log, L_DBG, file, line, "%*s%pP", lvl * 2, "", vp);
+                       fr_log(log, L_DBG, file, line, "%*s%*s = %pV", lvl * 2, "",
+                              (int) fr_sbuff_used(&oid_buff), buffer, &vp->data);
                }
        }
 }
@@ -186,5 +203,5 @@ void _fr_pair_list_log(fr_log_t const *log, int lvl, fr_pair_list_t const *list,
  */
 void fr_pair_list_debug(fr_pair_list_t const *list)
 {
-       _fr_pair_list_log(&default_log, 0, list, "<internal>", 0);
+       _fr_pair_list_log(&default_log, 0, NULL, list, "<internal>", 0);
 }