return 0;
}
- return rule->func(parent, NULL, NULL, cf_pair_to_item(cp), rule);
+ return rule->on_read(parent, NULL, NULL, cf_pair_to_item(cp), rule);
}
static fr_table_ptr_sorted_t unlang_keywords[] = {
cf_parse_t func; //!< Override default parsing behaviour for the specified type with
//!< a custom parsing function.
+ cf_parse_t on_read; //!< Function to call as the item is being read, just after
+ //!< it has been allocated and initialized.
+
void const *uctx; //!< User data accessible by the #cf_parse_t func. Useful for
///< building reusable functions.
cd = cf_data_find(CF_TO_ITEM(parent), CONF_PARSER, name1);
if (cd) {
rule = cf_data_value(cd);
- if (rule->func &&
+ if (rule->on_read &&
(FR_BASE_TYPE(rule->type) == FR_TYPE_SUBSECTION) &&
((rule->type & FR_TYPE_ON_READ) != 0)) {
- if (rule->func(ctx, NULL, NULL, cf_section_to_item(cs), rule) < 0) {
+ if (rule->on_read(ctx, NULL, NULL, cf_section_to_item(cs), rule) < 0) {
talloc_free(cs);
return NULL;
}
{ FR_CONF_OFFSET_IS_SET("timestamp", FR_TYPE_BOOL, main_config_t, log_timestamp) },
{ FR_CONF_OFFSET("libdir", FR_TYPE_STRING | FR_TYPE_ON_READ, main_config_t, lib_dir), .dflt = "${prefix}/lib",
- .func = lib_dir_parse },
+ .on_read = lib_dir_parse },
CONF_PARSER_TERMINATOR
};
{ FR_CONF_OFFSET("listen", FR_TYPE_SUBSECTION | FR_TYPE_MULTI | FR_TYPE_OK_MISSING | FR_TYPE_ON_READ,
fr_virtual_server_t, listener), \
.subcs_size = sizeof(fr_virtual_listen_t), .subcs_type = "fr_virtual_listen_t",
- .func = listen_on_read },
+ .on_read = listen_on_read },
CONF_PARSER_TERMINATOR
};
{ FR_CONF_POINTER("server", FR_TYPE_SUBSECTION | FR_TYPE_MULTI | FR_TYPE_OK_MISSING | FR_TYPE_ON_READ, &virtual_servers), \
.subcs_size = sizeof(fr_virtual_server_t), .subcs_type = "fr_virtual_server_t",
.subcs = (void const *) listen_on_read_config, .ident2 = CF_IDENT_ANY,
- .func = server_on_read },
+ .on_read = server_on_read },
CONF_PARSER_TERMINATOR
};