From: Alan T. DeKok Date: Tue, 21 May 2019 15:07:04 +0000 (-0400) Subject: print date precision, too X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf438af2e624929c92c28dc40d918cece5b2de12;p=thirdparty%2Ffreeradius-server.git print date precision, too --- diff --git a/src/bin/radict.c b/src/bin/radict.c index 01e131c535c..3476db5ca58 100644 --- a/src/bin/radict.c +++ b/src/bin/radict.c @@ -139,7 +139,7 @@ static void da_print_info_td(fr_dict_t const *dict, fr_dict_attr_t const *da) (void)fr_dict_print_attr_oid(oid_str, sizeof(oid_str), NULL, da); - fr_dict_snprint_flags(flags, sizeof(flags), &da->flags); + fr_dict_snprint_flags(flags, sizeof(flags), da->type, &da->flags); /* Protocol Name Type */ printf("%s\t%s\t%s\t%s\t%s\n", fr_dict_root(dict)->name, oid_str, da->name, @@ -153,7 +153,7 @@ static void _fr_dict_export(uint64_t *count, uintptr_t *low, uintptr_t *high, fr fr_dict_attr_t const *p; char flags[256]; - fr_dict_snprint_flags(flags, sizeof(flags), &da->flags); + fr_dict_snprint_flags(flags, sizeof(flags), da->type, &da->flags); /* * Root attributes are allocated outside of the pool diff --git a/src/lib/util/dict.c b/src/lib/util/dict.c index 7a20d5bb9bd..1d09cd4ffba 100644 --- a/src/lib/util/dict.c +++ b/src/lib/util/dict.c @@ -2441,7 +2441,7 @@ fr_dict_attr_t const *fr_dict_attr_known(fr_dict_t *dict, fr_dict_attr_t const * return NULL; } -ssize_t fr_dict_snprint_flags(char *out, size_t outlen, fr_dict_attr_flags_t const *flags) +ssize_t fr_dict_snprint_flags(char *out, size_t outlen, fr_type_t type, fr_dict_attr_flags_t const *flags) { char *p = out, *end = p + outlen; size_t len; @@ -2477,6 +2477,16 @@ do { \ if (p >= end) return -1; } + /* + * Print out the date precision. + */ + if (type == FR_TYPE_DATE) { + char const *precision = fr_int2str(date_precision_table, flags->type_size, "?"); + + p += strlcpy(p, precision, end - p); + if (p >= end) return -1; + } + if (!out[0]) return -1; /* @@ -2494,7 +2504,7 @@ void fr_dict_print(fr_dict_attr_t const *da, int depth) unsigned int i; char const *name; - fr_dict_snprint_flags(buff, sizeof(buff), &da->flags); + fr_dict_snprint_flags(buff, sizeof(buff), da->type, &da->flags); switch (da->type) { case FR_TYPE_VSA: @@ -5581,7 +5591,7 @@ static void _fr_dict_dump(fr_dict_attr_t const *da, unsigned int lvl) fr_dict_attr_t const *p; char flags[256]; - fr_dict_snprint_flags(flags, sizeof(flags), &da->flags); + fr_dict_snprint_flags(flags, sizeof(flags), da->type, &da->flags); printf("[%02i] 0x%016" PRIxPTR "%*s %s(%u) %s %s\n", lvl, (unsigned long)da, lvl * 2, " ", da->name, da->attr, fr_int2str(fr_value_box_type_table, da->type, ""), flags); diff --git a/src/lib/util/dict.h b/src/lib/util/dict.h index ded81b694a9..183e8a46c53 100644 --- a/src/lib/util/dict.h +++ b/src/lib/util/dict.h @@ -254,7 +254,7 @@ fr_dict_attr_t const *fr_dict_attr_known(fr_dict_t *dict, fr_dict_attr_t const * * * @{ */ -ssize_t fr_dict_snprint_flags(char *out, size_t outlen, fr_dict_attr_flags_t const *flags); +ssize_t fr_dict_snprint_flags(char *out, size_t outlen, fr_type_t type, fr_dict_attr_flags_t const *flags); void fr_dict_print(fr_dict_attr_t const *da, int depth);