* @param[in] line this fixup relates to.
* @param[in] da The group dictionary attribute.
* @param[in] ref OID string representing what the group references.
- * @param[in] ref_len Length of the reference string.
* @return
* - 0 on success.
* - -1 on out of memory.
*/
int dict_fixup_group(dict_fixup_ctx_t *fctx, char const *filename, int line,
- fr_dict_attr_t *da, char const *ref, size_t ref_len)
+ fr_dict_attr_t *da, char const *ref)
{
dict_fixup_group_t *fixup;
}
*fixup = (dict_fixup_group_t) {
.da = da,
- .ref = talloc_bstrndup(fixup, ref, ref_len)
+ .ref = talloc_strdup(fixup, ref),
};
return dict_fixup_common(filename, line, &fctx->group, &fixup->common);
da = fr_dict_attr_by_oid(NULL, fr_dict_root(*dict_def), ref);
if (da) return da;
+ invalid:
fr_strerror_printf("Invalid attribute reference '%s' at %s[%d]", ref,
fr_cwd_strip(filename), line);
return NULL;
}
+ fr_assert(ref[1] == '.');
name = ref + 2; /* already checked when we insert it */
/*
}
name = p + 1;
+
} else {
/*
* The foreign dictionary was loaded by someone
* else, try to resolve the attribute.
*/
- name += slen + 1;
+ name += slen;
if (!*name) {
/*
*dict_def = dict;
return dict->root;
}
+
+ if (*name != '.') goto invalid;
+ name++;
}
/*
fr_dict_attr_t const *parent);
int dict_fixup_group(dict_fixup_ctx_t *fctx, char const *filename, int line,
- fr_dict_attr_t *da, char const *ref, size_t ref_len);
+ fr_dict_attr_t *da, char const *ref);
int dict_fixup_clone(dict_fixup_ctx_t *fctx, char const *filename, int line,
fr_dict_attr_t *parent, fr_dict_attr_t *da,
*/
add_fixup:
if (dict_fixup_group(&ctx->fixup, CURRENT_FRAME(ctx)->filename, CURRENT_FRAME(ctx)->line,
- UNCONST(fr_dict_attr_t *, da), ref, talloc_array_length(ref) - 1) < 0) goto fail;
+ UNCONST(fr_dict_attr_t *, da), ref) < 0) goto fail;
talloc_free(ref);
return 0;