From: Alan T. DeKok Date: Fri, 20 Jan 2017 17:23:34 +0000 (-0500) Subject: use new fr_dict_attr_add_by_name() function. Addresses #1883 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bcf50ab89dd4a40f91e896f48d687491e4009180;p=thirdparty%2Ffreeradius-server.git use new fr_dict_attr_add_by_name() function. Addresses #1883 --- diff --git a/src/lib/dict.c b/src/lib/dict.c index 4bafc70d498..1bf3de630ad 100644 --- a/src/lib/dict.c +++ b/src/lib/dict.c @@ -2811,12 +2811,30 @@ fr_dict_attr_t const *fr_dict_unknown_add(fr_dict_t *dict, fr_dict_attr_t const if (old->type == PW_TYPE_VENDOR) if (fr_dict_vendor_add(dict, old->name, old->attr) < 0) return NULL; /* - * Add the unknown by NAME. e.g. if the admin does "Attr-26", we want - * to return "Attr-26", and NOT "Vendor-Specific". The rest of the server - * is responsible for converting "Attr-26 = 0x..." to an actual attribute, - * if it so desires. + * Look up the attribute by number. If it doesn't exist, + * add it both by name and by number. If it does exist, + * add it only by name. */ - return fr_dict_attr_add_by_name(dict, old->parent, old->name, old->attr, old->type, flags); + da = fr_dict_attr_child_by_num(parent, old->attr); + if (da) { + /* + * Add the unknown by NAME. e.g. if the admin does "Attr-26", we want + * to return "Attr-26", and NOT "Vendor-Specific". The rest of the server + * is responsible for converting "Attr-26 = 0x..." to an actual attribute, + * if it so desires. + */ + return fr_dict_attr_add_by_name(dict, old->parent, old->name, old->attr, old->type, flags); + } + + /* + * Add the attribute by bioth name and number. + */ + if (fr_dict_attr_add(dict, old->parent, old->name, old->attr, old->type, flags) < 0) return NULL; + + /* + * For paranoia, return it by name. + */ + return fr_dict_attr_by_name(dict, old->name); } /** Free dynamically allocated (unknown attributes)