return 1;
}
- if (fr_dict_read(dict_freeradius, raddb_dir, FR_DICTIONARY_FILE) == -1) {
+ if (fr_dict_read(fr_dict_coerce(dict_freeradius), raddb_dir, FR_DICTIONARY_FILE) == -1) {
fr_log_perror(&default_log, L_ERR, __FILE__, __LINE__, "Failed to initialize the dictionaries");
return 1;
}
goto finish;
}
- if (fr_dict_read(dict_freeradius, raddb_dir, FR_DICTIONARY_FILE) == -1) {
+ if (fr_dict_read(fr_dict_coerce(dict_freeradius), raddb_dir, FR_DICTIONARY_FILE) == -1) {
fr_perror("radsniff");
ret = 64;
goto finish;
char *secret; //!< Shared secret.
} radsnmp_conf_t;
-static fr_dict_t *dict_freeradius;
-static fr_dict_t *dict_radius;
+static fr_dict_t const *dict_freeradius;
+static fr_dict_t const *dict_radius;
extern fr_dict_autoload_t radsnmp_dict[];
fr_dict_autoload_t radsnmp_dict[] = {
exit(EXIT_FAILURE);
}
- if (fr_dict_read(dict_freeradius, conf->raddb_dir, FR_DICTIONARY_FILE) == -1) {
+ if (fr_dict_read(fr_dict_coerce(dict_freeradius), conf->raddb_dir, FR_DICTIONARY_FILE) == -1) {
fr_perror("radsnmp");
exit(EXIT_FAILURE);
}
int fr_dict_global_init(TALLOC_CTX *ctx, char const *dict_dir);
int fr_dict_dir_set(char const *dict_dir);
+
+fr_dict_t *fr_dict_coerce(fr_dict_t const *dict);
/** @} */
/** @name Dictionary testing and validation
fr_dict_autoload_t const *p;
for (p = to_free; p->out; p++) {
- dict = p->out;
+ memcpy(&dict, &p->out, sizeof(dict)); /* const issues */
if (!*dict) continue;
fr_dict_free(dict);
return NULL;
}
+/** Coerce to non-const
+ *
+ */
+fr_dict_t *fr_dict_coerce(fr_dict_t const *dict)
+{
+ fr_dict_t *mutable;
+
+ memcpy(&mutable, &dict, sizeof(dict));
+ return mutable;
+}
exit(EXIT_FAILURE);
}
- if (fr_dict_read(dict_freeradius, raddb_dir, FR_DICTIONARY_FILE) == -1) {
+ if (fr_dict_read(fr_dict_coerce(dict_freeradius), raddb_dir, FR_DICTIONARY_FILE) == -1) {
fr_perror("dhcpclient");
exit(EXIT_FAILURE);
}
* name/code checks above. But doing so allows us to
* have better error messages.
*/
- rcode = fr_dict_attr_add(dict_dhcpv4, root, name, box.vb_uint32, type, &flags);
+ rcode = fr_dict_attr_add(fr_dict_coerce(dict_dhcpv4), root, name, box.vb_uint32, type, &flags);
talloc_free(name);
if (rcode < 0) return rcode;
fr_dict_attr_flags_t flags;
memset(&flags, 0, sizeof(flags));
- if (fr_dict_attr_add(dict_freeradius, fr_dict_root(dict_freeradius),
+ if (fr_dict_attr_add(fr_dict_coerce(dict_freeradius), fr_dict_root(dict_freeradius),
inst->cache_attribute, -1, FR_TYPE_STRING, &flags) < 0) {
PERROR("Error creating cache attribute");
error:
rad_assert(inst->limit_attr);
memset(&flags, 0, sizeof(flags));
- if (tmpl_define_undefined_attr(dict_freeradius, inst->paircmp_attr, FR_TYPE_UINT64, &flags) < 0) {
+ if (tmpl_define_undefined_attr(fr_dict_coerce(dict_freeradius), inst->paircmp_attr, FR_TYPE_UINT64, &flags) < 0) {
cf_log_perr(conf, "Failed defining counter attribute");
return -1;
}
- if (tmpl_define_undefined_attr(dict_freeradius, inst->limit_attr, FR_TYPE_UINT64, &flags) < 0) {
+ if (tmpl_define_undefined_attr(fr_dict_coerce(dict_freeradius), inst->limit_attr, FR_TYPE_UINT64, &flags) < 0) {
cf_log_perr(conf, "Failed defining check attribute");
return -1;
}