C23 complains about { NULL } being used to initialize something.
we should either use { }, or { .field = NULL }
fr_dict_autoload_t dhcpclient_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_dhcpv4, .proto = "dhcpv4" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_dhcp_message_type, .name = "Message-Type", .type = FR_TYPE_UINT8, .dict = &dict_dhcpv4},
{ .out = &attr_dhcp_dhcp_server_identifier, .name = "Server-Identifier", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_dhcpv4 },
{ .out = &attr_dhcp_your_ip_address, .name = "Your-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_dhcpv4 },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_table_num_sorted_t const request_types[] = {
fr_dict_autoload_t radclient_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_cleartext_password;
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static NEVER_RETURNS void usage(void)
fr_dict_autoload_t radclient_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_cleartext_password;
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_proxy_state, .name = "Proxy-State", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static NEVER_RETURNS void usage(void)
fr_dict_autoload_t radsniff_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t radsniff_dict_attr[];
fr_dict_attr_autoload_t radsniff_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static NEVER_RETURNS void usage(int status);
fr_dict_autoload_t radsnmp_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_extended_attribute_1;
{ .out = &attr_freeradius_snmp_type, .name = "FreeRADIUS-SNMP-Type", .type = FR_TYPE_UINT8, .dict = &dict_radius },
{ .out = &attr_message_authenticator, .name = "Message-Authenticator", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_vendor_specific, .name = "Vendor-Specific", .type = FR_TYPE_VSA, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static NEVER_RETURNS void usage(void)
fr_dict_autoload_t unit_test_module_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_autoload_t unit_test_module_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_protocol, .proto = "radius" }, /* hacked in-place with '-p protocol' */
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_protocol },
{ .out = &attr_net, .name = "Net", .type = FR_TYPE_TLV, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
extern fr_dict_attr_autoload_t curl_attr[];
fr_dict_attr_autoload_t curl_attr[] = {
{ .out = &attr_tls_certificate, .name = "TLS-Certificate", .type = FR_TYPE_TLV, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_autoload_t curl_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_table_num_sorted_t const fr_curl_sslcode_table[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
{ .out = &dict_tls, .proto = "tls" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_chbind_response_code;
{ .out = &attr_tls_min_version, .name = "Min-Version", .type = FR_TYPE_FLOAT32, .dict = &dict_tls },
{ .out = &attr_tls_max_version, .name = "Max-Version", .type = FR_TYPE_FLOAT32, .dict = &dict_tls },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
void eap_packet_to_vp(TALLOC_CTX *ctx, fr_pair_list_t *list, eap_packet_raw_t const *eap)
{ .out = &dict_radius, .proto = "radius" },
{ .out = &dict_eap_aka_sim, .base_dir = "eap/aka-sim", .proto = "eap-aka-sim" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_eap_aka_sim_ak;
{ .out = &attr_sim_op, .name = "SIM-OP", .type = FR_TYPE_OCTETS, .dict = &dict_freeradius },
{ .out = &attr_sim_opc, .name = "SIM-OPc", .type = FR_TYPE_OCTETS, .dict = &dict_freeradius },
{ .out = &attr_sim_sqn, .name = "SIM-SQN", .type = FR_TYPE_UINT64, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_value_box_t const *enum_eap_type_sim;
{ .out = &enum_kdf_prime_with_ck_prime_ik_prime, .name = "Prime-With-CK-Prime-IK-Prime", .attr = &attr_eap_aka_sim_kdf },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** SIM AT on-the-wire format attribute sizes
extern fr_dict_autoload_t log_dict[];
fr_dict_autoload_t log_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_module_failure_message;
extern fr_dict_attr_autoload_t log_dict_attr[];
fr_dict_attr_autoload_t log_dict_attr[] = {
{ .out = &attr_module_failure_message, .name = "Module-Failure-Message", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
extern fr_dict_autoload_t util_packet_dict[];
fr_dict_autoload_t util_packet_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_net;
{ .out = &attr_net_timestamp, .name = "Net.Timestamp", .type = FR_TYPE_DATE, .dict = &dict_freeradius },
{ .out = &attr_net_interface, .name = "Net.Interface", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static int inet2pairs(TALLOC_CTX *ctx, fr_pair_list_t *list,
fr_dict_autoload_t password_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern fr_dict_attr_autoload_t password_dict_attr[];
{ .out = &attr_user, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef enum {
extern fr_dict_autoload_t request_dict[];
fr_dict_autoload_t request_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *request_attr_root;
{ .out = &request_attr_control, .name = "control", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ .out = &request_attr_state, .name = "session-state", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
{ .out = &request_attr_local, .name = "local-variables", .type = FR_TYPE_GROUP, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#ifndef NDEBUG
extern fr_dict_autoload_t snmp_dict[];
fr_dict_autoload_t snmp_dict[] = {
{ .out = &dict_snmp, .proto = "snmp" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_snmp_operation;
{ .out = &attr_snmp_type, .name = "FreeRADIUS-SNMP-Type", .type = FR_TYPE_UINT8, .dict = &dict_snmp },
{ .out = &attr_snmp_failure, .name = "FreeRADIUS-SNMP-Failure", .type = FR_TYPE_UINT8, .dict = &dict_snmp },
{ .out = &attr_snmp_root, .name = "FreeRADIUS-Iso", .type = FR_TYPE_TLV, .dict = &dict_snmp },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#define FR_FREERADIUS_SNMP_TYPE_OBJECT 0
fr_dict_autoload_t tmpl_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" }, /* @todo - remove RADIUS from the server core... */
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Placeholder attribute for uses of unspecified attribute references
extern fr_dict_autoload_t trigger_dict[];
fr_dict_autoload_t trigger_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_trigger_name;
extern fr_dict_attr_autoload_t trigger_dict_attr[];
fr_dict_attr_autoload_t trigger_dict_attr[] = {
{ .out = &attr_trigger_name, .name = "Trigger-Name", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static void _trigger_last_fired_free(void *data)
extern fr_dict_autoload_t virtual_server_dict_autoload[];
fr_dict_autoload_t virtual_server_dict_autoload[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern fr_dict_attr_autoload_t virtual_server_dict_attr_autoload[];
fr_dict_attr_autoload_t virtual_server_dict_attr_autoload[] = {
{ .out = &attr_auth_type, .name = "Auth-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** List of process modules we've loaded
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_tls, .proto = "tls" },
{ .out = &dict_der, .proto = "der" },
- { NULL }
+
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_allow_session_resumption;
{ .out = &attr_der_certificate, .name = "Certificate", .type = FR_TYPE_TLV, .dict = &dict_der },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
{ .out = &enum_tls_session_resumed_stateful, .name = "stateful", .attr = &attr_tls_session_resume_type },
{ .out = &enum_tls_session_resumed_stateless, .name = "stateless", .attr = &attr_tls_session_resume_type },
- { NULL }
+
+ DICT_AUTOLOAD_TERMINATOR
};
/*
static fr_dict_autoload_t xlat_eval_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_expr_bool_enum; /* xlat_expr.c */
{ .out = &attr_cast_time_res_usec, .name = "Cast-Time-Res-Micro-Sec", .type = FR_TYPE_TIME_DELTA, .dict = &dict_freeradius },
{ .out = &attr_cast_time_res_nsec, .name = "Cast-Time-Res-Nano-Sec", .type = FR_TYPE_TIME_DELTA, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_table_num_sorted_t const xlat_action_table[] = {
char const *proto; //!< The protocol dictionary name.
} fr_dict_autoload_t;
+#define DICT_AUTOLOAD_TERMINATOR { .out = NULL }
+
+
/** Errors returned by attribute lookup functions
*
*/
}
dict_ref->load[0] = (fr_dict_autoload_t){ .proto = proto, .out = out};
- dict_ref->load[1] = (fr_dict_autoload_t){ NULL };
+ dict_ref->load[1] = (fr_dict_autoload_t) DICT_AUTOLOAD_TERMINATOR;
dict_ref->dependent = talloc_strdup(dict_ref, dependent);
if (unlikely(dict_ref->dependent == NULL)) {
talloc_free(dict_ref);
extern fr_dict_autoload_t proto_arp_dict[];
fr_dict_autoload_t proto_arp_dict[] = {
{ .out = &dict_arp, .proto = "arp" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#if 0
extern fr_dict_attr_autoload_t proto_arp_dict_attr[];
fr_dict_attr_autoload_t proto_arp_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_arp},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#endif
extern fr_dict_autoload_t proto_bfd_dict[];
fr_dict_autoload_t proto_bfd_dict[] = {
{ .out = &dict_bfd, .proto = "bfd" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_your_discriminator, .name = "Packet.your-discriminator", .type = FR_TYPE_UINT32, .dict = &dict_bfd},
{ .out = &attr_additional_data, .name = "Additional-Data", .type = FR_TYPE_GROUP, .dict = &dict_bfd},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
extern fr_dict_autoload_t proto_control_dict[];
fr_dict_autoload_t proto_control_dict[] = {
{ .out = &dict_control, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
extern fr_dict_autoload_t proto_cron_dict[];
fr_dict_autoload_t proto_cron_dict[] = {
{ .out = &dict_cron, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Translates the packet-type into a submodule name
fr_dict_autoload_t proto_detail_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_dst_ip_address;
{ .out = &attr_packet_src_ip_address, .name = "Net.Src.IP", .type = FR_TYPE_COMBO_IP_ADDR, .dict = &dict_freeradius },
{ .out = &attr_packet_src_port, .name = "Net.Src.Port", .type = FR_TYPE_UINT16, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Translates the packet-type into a submodule name
fr_dict_autoload_t proto_detail_work_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_transmit_counter;
extern fr_dict_attr_autoload_t proto_detail_work_dict_attr[];
fr_dict_attr_autoload_t proto_detail_work_dict_attr[] = {
{ .out = &attr_packet_transmit_counter, .name = "Packet-Transmit-Counter", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
extern fr_dict_autoload_t proto_dhcpv4_dict[];
fr_dict_autoload_t proto_dhcpv4_dict[] = {
{ .out = &dict_dhcpv4, .proto = "dhcpv4" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_message_type;
fr_dict_attr_autoload_t proto_dhcpv4_dict_attr[] = {
{ .out = &attr_message_type, .name = "Message-Type", .type = FR_TYPE_UINT8, .dict = &dict_dhcpv4},
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_dhcpv4},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Translates the packet-type into a submodule name
extern fr_dict_autoload_t proto_dhcpv4_udp_dict[];
fr_dict_autoload_t proto_dhcpv4_udp_dict[] = {
{ .out = &dict_dhcpv4, .proto = "dhcpv4" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_message_type;
fr_dict_attr_autoload_t proto_dhcpv4_udp_dict_attr[] = {
{ .out = &attr_message_type, .name = "Message-Type", .type = FR_TYPE_UINT8, .dict = &dict_dhcpv4},
{ .out = &attr_dhcp_server_identifier, .name = "Server-Identifier", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_dhcpv4},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#ifdef HAVE_LIBPCAP
extern fr_dict_autoload_t proto_dhcpv6_dict[];
fr_dict_autoload_t proto_dhcpv6_dict[] = {
{ .out = &dict_dhcpv6, .proto = "dhcpv6" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
fr_dict_attr_autoload_t proto_dhcpv6_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_dhcpv6},
{ .out = &attr_client_id, .name = "Client-Id", .type = FR_TYPE_STRUCT, .dict = &dict_dhcpv6},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Translates the packet-type into a submodule name
extern fr_dict_autoload_t proto_dhcpv6_udp_dict[];
fr_dict_autoload_t proto_dhcpv6_udp_dict[] = {
{ .out = &dict_dhcpv6, .proto = "dhcpv6" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_dhcpv6},
{ .out = &attr_client_id, .name = "Client-ID", .type = FR_TYPE_STRUCT, .dict = &dict_dhcpv6},
{ .out = &attr_relay_message, .name = "Relay-Message", .type = FR_TYPE_GROUP, .dict = &dict_dhcpv6 },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len,
extern fr_dict_autoload_t proto_dns_dict[];
fr_dict_autoload_t proto_dns_dict[] = {
{ .out = &dict_dns, .proto = "dns" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t proto_dns_dict_attr[];
fr_dict_attr_autoload_t proto_dns_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_dns},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Translates the packet-type into a submodule name
extern fr_dict_autoload_t proto_dns_udp_dict[];
fr_dict_autoload_t proto_dns_udp_dict[] = {
{ .out = &dict_dns, .proto = "dns" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
fr_dict_attr_autoload_t proto_dns_udp_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_dns},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time_p, uint8_t *buffer, size_t buffer_len,
extern fr_dict_autoload_t proto_ldap_sync_dict[];
fr_dict_autoload_t proto_ldap_sync_dict[] = {
{ .out = &dict_ldap_sync, .proto = "ldap" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_ldap_sync_packet_id;
{ .out = &attr_ldap_sync_scope, .name = "LDAP-Sync.Scope", .type = FR_TYPE_UINT32, .dict = &dict_ldap_sync },
{ .out = &attr_ldap_sync_filter, .name = "LDAP-Sync.Filter", .type = FR_TYPE_STRING, .dict = &dict_ldap_sync },
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_ldap_sync },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Check if an attribute is in the config list and add if not present
fr_dict_autoload_t proto_ldap_sync_ldap_dict[] = {
{ .out = &dict_ldap_sync, .proto = "ldap" },
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_ldap_sync_packet_id;
{ .out = &attr_ldap_sync_root_dn, .name = "LDAP-Sync.Directory-Root-DN", .type = FR_TYPE_STRING, .dict = &dict_ldap_sync },
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_ldap_sync },
{ .out = &attr_ldap_sync_base_dn, .name = "LDAP-Sync-Base-DN", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern global_lib_autoinst_t const *proto_ldap_sync_ldap_lib[];
extern fr_dict_autoload_t proto_radius_dict[];
fr_dict_autoload_t proto_radius_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_eap_message, .name = "EAP-Message", .type = FR_TYPE_OCTETS, .dict = &dict_radius},
{ .out = &attr_packet_id, .name = "Packet.Id", .type = FR_TYPE_UINT8, .dict = &dict_radius},
{ .out = &attr_packet_authenticator, .name = "Packet.Authenticator", .type = FR_TYPE_OCTETS, .dict = &dict_radius},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Translates the packet-type into a submodule name
extern fr_dict_autoload_t proto_tacacs_dict[];
fr_dict_autoload_t proto_tacacs_dict[] = {
{ .out = &dict_tacacs, .proto = "tacacs" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_autoload_t proto_tacacs_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_tacacs},
{ .out = &attr_tacacs_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_tacacs },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static int transport_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
extern fr_dict_autoload_t proto_vmps_dict[];
fr_dict_autoload_t proto_vmps_dict[] = {
{ .out = &dict_vmps, .proto = "vmps" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t proto_vmps_dict_attr[];
fr_dict_attr_autoload_t proto_vmps_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_vmps},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Translates the packet-type into a submodule name
fr_dict_autoload_t rlm_attr_filter_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_stripped_user_name;
{ .out = &attr_relax_filter, .name = "Relax-Filter", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
{ .out = &attr_vendor_specific, .name = "Vendor-Specific", .type = FR_TYPE_VSA, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static const call_env_method_t attr_filter_env = {
extern fr_dict_autoload_t rlm_cache_redis_dict[];
fr_dict_autoload_t rlm_cache_redis_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_cache_created;
fr_dict_attr_autoload_t rlm_cache_redis_dict_attr[] = {
{ .out = &attr_cache_created, .name = "Cache-Created", .type = FR_TYPE_DATE, .dict = &dict_freeradius },
{ .out = &attr_cache_expires, .name = "Cache-Expires", .type = FR_TYPE_DATE, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Create a new rlm_cache_redis instance
extern fr_dict_autoload_t rlm_cache_dict[];
fr_dict_autoload_t rlm_cache_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_cache_merge_new;
{ .out = &attr_cache_allow_insert, .name = "Cache-Allow-Insert", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
{ .out = &attr_cache_ttl, .name = "Cache-TTL", .type = FR_TYPE_INT32, .dict = &dict_freeradius },
{ .out = &attr_cache_entry_hits, .name = "Cache-Entry-Hits", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
int submodule_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule)
extern fr_dict_autoload_t rlm_chap_dict[];
fr_dict_autoload_t rlm_chap_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_auth_type, .name = "Auth-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
{ .out = &attr_cleartext_password, .name = "Password.Cleartext", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static xlat_arg_parser_t const xlat_func_chap_password_args[] = {
extern fr_dict_autoload_t rlm_crl_dict[];
fr_dict_autoload_t rlm_crl_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_crl_data;
fr_dict_attr_autoload_t rlm_crl_dict_attr[] = {
{ .out = &attr_crl_data, .name = "CRL.Data", .type = FR_TYPE_OCTETS, .dict = &dict_freeradius },
{ .out = &attr_crl_cdp_url, .name = "CRL.CDP-URL", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
fr_dict_autoload_t rlm_detail_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_net;
{ .out = &attr_net_src_address, .name = "Net.Src.IP", .type = FR_TYPE_COMBO_IP_ADDR, .dict = &dict_freeradius },
{ .out = &attr_net_src_port, .name = "Net.Src.Port", .type = FR_TYPE_UINT16, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Print one attribute and value to FP
fr_dict_autoload_t rlm_dhcpv4_dict[] = {
{ .out = &dict_dhcpv4, .proto = "dhcpv4" },
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_transaction_id;
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_dhcpv4 },
{ .out = &attr_net_dst_ip, .name = "Net.Dst.IP", .type = FR_TYPE_COMBO_IP_ADDR, .dict = &dict_freeradius },
{ .out = &attr_net_dst_port, .name = "Net.Dst.Port", .type = FR_TYPE_UINT16, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_autoload_t rlm_digest_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static const fr_dict_attr_t *attr_auth_type;
{ .out = &attr_digest_uri, .name = "Digest-Attributes.Uri", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_digest_user_name, .name = "Digest-Attributes.User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static unlang_action_t CC_HINT(nonnull) mod_authorize(unlang_result_t *p_result, module_ctx_t const *mctx, request_t *request)
extern fr_dict_autoload_t rlm_dpsk_dict[];
fr_dict_autoload_t rlm_dpsk_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
fr_dict_attr_autoload_t rlm_dpsk_dict_attr[] = {
{ .out = &attr_auth_type, .name = "Auth-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static const conf_parser_t module_config[] = {
fr_dict_autoload_t rlm_eap_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_state, .name = "State", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static unlang_action_t mod_authenticate(unlang_result_t *p_result, module_ctx_t const *mctx, request_t *request) CC_HINT(nonnull);
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
{ .out = &dict_eap_fast, .base_dir = "eap/fast", .proto = "eap-fast" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_eap_emsk;
{ .out = &attr_eap_fast_result, .name = "Result", .type = FR_TYPE_UINT16, .dict = &dict_eap_fast },
{ .out = &attr_eap_fast_vendor_specific, .name = "Vendor-Specific", .type = FR_TYPE_OCTETS, .dict = &dict_eap_fast },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#define RANDFILL(x) do { fr_assert(sizeof(x) % sizeof(uint32_t) == 0); for (size_t i = 0; i < sizeof(x); i += sizeof(uint32_t)) *((uint32_t *)&x[i]) = fr_rand(); } while(0)
fr_dict_autoload_t rlm_eap_gtc_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
fr_dict_attr_autoload_t rlm_eap_gtc_dict_attr[] = {
{ .out = &attr_auth_type, .name = "Auth-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static unlang_action_t mod_session_init(unlang_result_t *p_result, module_ctx_t const *mctx, request_t *request);
extern fr_dict_autoload_t rlm_eap_md5_dict[];
fr_dict_autoload_t rlm_eap_md5_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_cleartext_password;
extern fr_dict_attr_autoload_t rlm_eap_md5_dict_attr[];
fr_dict_attr_autoload_t rlm_eap_md5_dict_attr[] = {
{ .out = &attr_cleartext_password, .name = "Password.Cleartext", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
fr_dict_autoload_t rlm_eap_mschapv2_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_ms_mppe_recv_key, .name = "Vendor-Specific.Microsoft.MPPE-Recv-Key", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_state, .name = "State", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static void mppe_keys_store(request_t *request, mschapv2_opaque_t *data)
fr_dict_autoload_t rlm_eap_peap_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_eap_message, .name = "EAP-Message", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_autoload_t rlm_eap_pwd_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_cleartext_password;
{ .out = &attr_framed_mtu, .name = "Framed-MTU", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_ms_mppe_send_key, .name = "Vendor-Specific.Microsoft.MPPE-Send-Key", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_ms_mppe_recv_key, .name = "Vendor-Specific.Microsoft.MPPE-Recv-Key", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static int send_pwd_request(request_t *request, pwd_session_t *session, eap_round_t *eap_round)
extern fr_dict_autoload_t rlm_eap_tls_dict[];
fr_dict_autoload_t rlm_eap_tls_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_eap_tls_require_client_cert;
extern fr_dict_attr_autoload_t rlm_eap_tls_dict_attr[];
fr_dict_attr_autoload_t rlm_eap_tls_dict_attr[] = {
{ .out = &attr_eap_tls_require_client_cert, .name = "EAP-TLS-Require-Client-Cert", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static unlang_action_t mod_handshake_done(unlang_result_t *p_result, UNUSED module_ctx_t const *mctx,
fr_dict_autoload_t rlm_eap_ttls_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_eap_tls_require_client_cert;
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_vendor_specific, .name = "Vendor-Specific", .type = FR_TYPE_VSA, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern fr_dict_autoload_t rlm_files_dict[];
fr_dict_autoload_t rlm_files_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_fall_through;
{ .out = &attr_fall_through, .name = "Fall-Through", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
{ .out = &attr_next_shortest_prefix, .name = "Next-Shortest-Prefix", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static const conf_parser_t module_config[] = {
extern fr_dict_autoload_t rlm_imap_dict[];
fr_dict_autoload_t rlm_imap_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern fr_dict_attr_autoload_t rlm_imap_dict_attr[];
fr_dict_attr_autoload_t rlm_imap_dict_attr[] = {
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL },
+ DICT_AUTOLOAD_TERMINATOR,
};
extern global_lib_autoinst_t const * const rlm_imap_lib[];
extern fr_dict_autoload_t rlm_isc_dhcp_dict[];
fr_dict_autoload_t rlm_isc_dhcp_dict[] = {
{ .out = &dict_dhcpv4, .proto = "dhcpv4" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_client_hardware_address;
{ .out = &attr_server_ip_address, .name = "Server-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_dhcpv4},
{ .out = &attr_server_identifier, .name = "Server-Identifier", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_dhcpv4},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct rlm_isc_dhcp_info_s rlm_isc_dhcp_info_t;
extern fr_dict_autoload_t rlm_ldap_dict[];
fr_dict_autoload_t rlm_ldap_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_password;
{ .out = &attr_password_with_header, .name = "Password.With-Header", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_expr_bool_enum, .name = "Expr-Bool-Enum", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern global_lib_autoinst_t const *rlm_ldap_lib[];
extern fr_dict_autoload_t rlm_logtee_dict[];
fr_dict_autoload_t rlm_logtee_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_log_level;
{ .out = &attr_log_level, .name = "Log-Level", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
{ .out = &attr_log_message, .name = "Log-Message", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_log_type, .name = "Log-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static void logtee_fd_idle(rlm_logtee_thread_t *t);
fr_dict_autoload_t rlm_mschap_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_smb_account_ctrl_text, .name = "SMB-Account-Ctrl-Text", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_smb_account_ctrl, .name = "SMB-Account-Ctrl", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_pair_t *mschap_identity_find(request_t *request, fr_dict_attr_t const *attr_user_name)
fr_dict_autoload_t rlm_opendirectory_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_auth_type, .name = "Auth-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
fr_dict_autoload_t rlm_pam_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_pam_auth;
{ .out = &attr_pam_auth, .name = "Pam-Auth", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static int mod_instantiate(module_inst_ctx_t const *mctx)
static fr_dict_autoload_t rlm_pap_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_auth_type, .name = "Auth-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
{ .out = &attr_root, .name = "Password", .type = FR_TYPE_TLV, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#ifdef HAVE_OPENSSL_EVP_H
extern fr_dict_autoload_t rlm_passwd_dict[];
fr_dict_autoload_t rlm_passwd_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#ifdef TEST
extern fr_dict_autoload_t rlm_radius_dict[];
fr_dict_autoload_t rlm_radius_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_chap_challenge;
{ .out = &attr_response_length, .name = "Extended-Attribute-1.Response-Length", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#include "bio.c"
extern fr_dict_autoload_t rlm_rediswho_dict[];
fr_dict_autoload_t rlm_rediswho_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_acct_status_type;
extern fr_dict_attr_autoload_t rlm_rediswho_dict_attr[];
fr_dict_attr_autoload_t rlm_rediswho_dict_attr[] = {
{ .out = &attr_acct_status_type, .name = "Acct-Status-Type", .type = FR_TYPE_UINT32, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
extern fr_dict_autoload_t rlm_rest_dict[];
fr_dict_autoload_t rlm_rest_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_rest_http_body;
{ .out = &attr_rest_http_body, .name = "REST-HTTP-Body", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_rest_http_header, .name = "REST-HTTP-Header", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_rest_http_status_code, .name = "REST-HTTP-Status-Code", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern global_lib_autoinst_t const * const rlm_rest_lib[];
extern fr_dict_autoload_t mem_dict[];
fr_dict_autoload_t mem_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_prompt;
{ .out = &attr_state, .name = "State", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static SD_CHAR empty_pin[] = "";
extern fr_dict_autoload_t rlm_sigtran_dict[];
fr_dict_autoload_t rlm_sigtran_dict[] = {
{ .out = &dict_eap_aka_sim, .base_dir = "eap/aka-sim", .proto = "eap-aka-sim" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_eap_aka_sim_sres, .name = "SRES", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka_sim },
{ .out = &attr_eap_aka_sim_xres, .name = "XRES", .type = FR_TYPE_OCTETS, .dict = &dict_eap_aka_sim },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static unlang_action_t CC_HINT(nonnull) mod_authorize(unlang_result_t *p_result, module_ctx_t const *mctx, request_t *request)
extern fr_dict_autoload_t rlm_smtp_dict[];
fr_dict_autoload_t rlm_smtp_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius"},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_smtp_header;
fr_dict_attr_autoload_t rlm_smtp_dict_attr[] = {
{ .out = &attr_smtp_header, .name = "SMTP-Mail-Header", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_smtp_body, .name = "SMTP-Mail-Body", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL },
+ DICT_AUTOLOAD_TERMINATOR,
};
extern global_lib_autoinst_t const * const rlm_smtp_lib[];
extern fr_dict_autoload_t rlm_sql_dict[];
fr_dict_autoload_t rlm_sql_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_fall_through;
{ .out = &attr_sql_user_name, .name = "SQL-User-Name", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_user_profile, .name = "User-Profile", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_expr_bool_enum, .name = "Expr-Bool-Enum", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
extern fr_dict_autoload_t rlm_sqlcounter_dict[];
fr_dict_autoload_t rlm_sqlcounter_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static int find_next_reset(rlm_sqlcounter_t *inst, fr_time_t now)
extern fr_dict_autoload_t rlm_stats_dict[];
fr_dict_autoload_t rlm_stats_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_freeradius_stats4_ipv4_address;
{ .out = &attr_freeradius_stats4_ipv6_address, .name = "Vendor-Specific.FreeRADIUS.Stats4.IPv6-Address", .type = FR_TYPE_IPV6_ADDR, .dict = &dict_radius },
{ .out = &attr_freeradius_stats4_type, .name = "Vendor-Specific.FreeRADIUS.Stats4.Type", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_freeradius_stats4_packet_counters, .name = "Vendor-Specific.FreeRADIUS.Stats4.Packet-Counters", .type = FR_TYPE_TLV, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static void coalesce(uint64_t final_stats[FR_RADIUS_CODE_MAX], rlm_stats_thread_t *t,
extern fr_dict_autoload_t rlm_tacacs_dict[];
fr_dict_autoload_t rlm_tacacs_dict[] = {
{ .out = &dict_tacacs, .proto = "tacacs" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t rlm_tacacs_dict_attr[];
fr_dict_attr_autoload_t rlm_tacacs_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_tacacs },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Set which types of packets we can parse
extern fr_dict_autoload_t rlm_tacacs_tcp_dict[];
fr_dict_autoload_t rlm_tacacs_tcp_dict[] = {
{ .out = &dict_tacacs, .proto = "tacacs" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_tacacs },
{ .out = &attr_packet_hdr, .name = "Packet", .type = FR_TYPE_STRUCT, .dict = &dict_tacacs },
{ .out = &attr_session_id, .name = "Packet.Session-ID", .type = FR_TYPE_UINT32, .dict = &dict_tacacs },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Clear out any connection specific resources from a tcp request
extern fr_dict_autoload_t rlm_test_dict[];
fr_dict_autoload_t rlm_test_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_user_name;
extern fr_dict_attr_autoload_t rlm_test_dict_attr[];
fr_dict_attr_autoload_t rlm_test_dict_attr[] = {
{ .out = &attr_user_name, .name = "User-Name", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
fr_dict_autoload_t rlm_unix_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_acct_status_type, .name = "Acct-Status-Type", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_acct_delay_time, .name = "Acct-Delay-Time", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_expr_bool_enum, .name = "Expr-Bool-Enum", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/** Check if the user is in the given group
fr_dict_autoload_t rlm_wimax_dict[] = {
{ .out = &dict_radius, .proto = "radius" },
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_eap_emsk;
{ .out = &attr_ms_mppe_send_key, .name = "Vendor-Specific.Microsoft.MPPE-Send-Key", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_ms_mppe_recv_key, .name = "Vendor-Specific.Microsoft.MPPE-Recv-Key", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
extern fr_dict_autoload_t rlm_winbind_dict[];
fr_dict_autoload_t rlm_winbind_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
fr_dict_attr_autoload_t rlm_winbind_dict_attr[] = {
{ .out = &attr_auth_type, .name = "Auth-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
{ .out = &attr_expr_bool_enum, .name = "Expr-Bool-Enum", .type = FR_TYPE_BOOL, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
fr_dict_autoload_t rlm_yubikey_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_yubikey_timestamp, .name = "Vendor-Specific.Yubico.Yubikey-Timestamp", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_yubikey_random, .name = "Vendor-Specific.Yubico.Yubikey-Random", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_yubikey_otp, .name = "Vendor-Specific.Yubico.Yubikey-OTP", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static char const modhextab[] = "cbdefghijklnrtuv";
extern fr_dict_autoload_t process_arp_dict[];
fr_dict_autoload_t process_arp_dict[] = {
{ .out = &dict_arp, .proto = "arp" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t process_arp_dict_attr[];
fr_dict_attr_autoload_t process_arp_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_arp},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
extern fr_dict_autoload_t process_bfd_dict[];
fr_dict_autoload_t process_bfd_dict[] = {
{ .out = &dict_bfd, .proto = "bfd" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_bfd_packet, .name = "Packet", .type = FR_TYPE_STRUCT, .dict = &dict_bfd},
{ .out = &attr_bfd_state, .name = "Packet.state", .type = FR_TYPE_UINT8, .dict = &dict_bfd},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#define SECTION(_x) \
extern fr_dict_autoload_t process_control_dict[];
fr_dict_autoload_t process_control_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_module_failure_message;
{ .out = &attr_module_failure_message, .name = "Module-Failure-Message", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
{ .out = &attr_module_success_message, .name = "Module-Success-Message", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static unlang_action_t mod_process(unlang_result_t *p_result, UNUSED module_ctx_t const *mctx, UNUSED request_t *request)
extern fr_dict_autoload_t process_dhcpv4_dict[];
fr_dict_autoload_t process_dhcpv4_dict[] = {
{ .out = &dict_dhcpv4, .proto = "dhcpv4" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_message_type;
{ .out = &attr_yiaddr, .name = "Your-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_dhcpv4},
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_dhcpv4},
{ .out = &attr_dhcp_option_82, .name = "Relay-Agent-Information", .type = FR_TYPE_TLV, .dict = &dict_dhcpv4 },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
fr_dict_autoload_t process_dhcpv6_dict[] = {
{ .out = &dict_dhcpv6, .proto = "dhcpv6" },
{ .out = &dict_freeradius, .proto = "freeradius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_client_id;
{ .out = &attr_transaction_id, .name = "Transaction-Id", .type = FR_TYPE_OCTETS, .dict = &dict_dhcpv6 },
{ .out = &attr_module_failure_message, .name = "Module-Failure-Message", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_value_box_t const *enum_status_code_success;
{ .out = &enum_status_code_unspec_fail, .name = "UnspecFail", .attr = &attr_status_code_value },
{ .out = &enum_status_code_not_on_link, .name = "NotOnLink", .attr = &attr_status_code_value },
{ .out = &enum_status_code_no_binding, .name = "NoBinding", .attr = &attr_status_code_value },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
#define FR_DHCPV6_PROCESS_CODE_VALID(_x) (FR_DHCPV6_PACKET_CODE_VALID(_x) || (_x == FR_DHCPV6_DO_NOT_RESPOND))
extern fr_dict_autoload_t process_dns_dict[];
fr_dict_autoload_t process_dns_dict[] = {
{ .out = &dict_dns, .proto = "dns" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_response_bit, .name = "Header.Query", .type = FR_TYPE_BOOL, .dict = &dict_dns},
{ .out = &attr_rcode, .name = "Header.Rcode", .type = FR_TYPE_UINT8, .dict = &dict_dns},
{ .out = &attr_authoritative_bit, .name = "Header.Authoritative", .type = FR_TYPE_BOOL, .dict = &dict_dns},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_value_box_t const *enum_rcode_no_error;
{ .out = &enum_rcode_server_failure, .name = "Server-Failure", .attr = &attr_rcode }, /* fail */
{ .out = &enum_rcode_name_error, .name = "Name-Error", .attr = &attr_rcode }, /* notfound */
{ .out = &enum_rcode_refused, .name = "Refused", .attr = &attr_rcode }, /* reject */
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
extern fr_dict_autoload_t process_ldap_sync_dict[];
fr_dict_autoload_t process_ldap_sync_dict[] = {
{ .out = &dict_ldap_sync, .proto = "ldap" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
fr_dict_attr_autoload_t process_ldap_sync_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type= FR_TYPE_UINT32, .dict = &dict_ldap_sync },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static char const *ldap_sync_message_types[FR_LDAP_SYNC_CODE_MAX] = {
fr_dict_autoload_t process_radius_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_event_timestamp, .name = "Event-Timestamp", .type = FR_TYPE_DATE, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_value_box_t const *enum_auth_type_accept;
fr_dict_enum_autoload_t process_radius_dict_enum[] = {
{ .out = &enum_auth_type_accept, .name = "Accept", .attr = &attr_auth_type },
{ .out = &enum_auth_type_reject, .name = "Reject", .attr = &attr_auth_type },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
fr_dict_autoload_t process_tacacs_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_tacacs, .proto = "tacacs" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_tacacs },
{ .out = &attr_chap_password, .name = "CHAP-Password", .type = FR_TYPE_OCTETS, .dict = &dict_tacacs },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_value_box_t const *enum_auth_type_accept;
{ .out = &enum_auth_type_reject, .name = "Reject", .attr = &attr_auth_type },
{ .out = &enum_auth_flags_noecho, .name = "No-Echo", .attr = &attr_tacacs_authentication_flags },
{ .out = &enum_tacacs_auth_type_ascii, .name = "ASCII", .attr = &attr_tacacs_authentication_type },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
extern fr_dict_autoload_t process_test_dict[];
fr_dict_autoload_t process_test_dict[] = {
{ .out = &dict_test, .proto = "test" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t process_test_dict_attr[];
fr_dict_attr_autoload_t process_test_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_test},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
extern fr_dict_autoload_t process_tls_dict[];
fr_dict_autoload_t process_tls_dict[] = {
{ .out = &dict_tls, .proto = "tls" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t process_tls_dict_attr[];
fr_dict_attr_autoload_t process_tls_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_tls},
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
fr_dict_autoload_t process_ttls_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_auth_type;
{ .out = &attr_original_packet_code, .name = "Extended-Attribute-1.Original-Packet-Code", .type = FR_TYPE_UINT32, .dict = &dict_radius },
{ .out = &attr_error_cause, .name = "Error-Cause", .type = FR_TYPE_UINT32, .dict = &dict_radius },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_value_box_t const *enum_auth_type_accept;
fr_dict_enum_autoload_t process_ttls_dict_enum[] = {
{ .out = &enum_auth_type_accept, .name = "Accept", .attr = &attr_auth_type },
{ .out = &enum_auth_type_reject, .name = "Reject", .attr = &attr_auth_type },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
extern fr_dict_autoload_t process_vmps_dict[];
fr_dict_autoload_t process_vmps_dict[] = {
{ .out = &dict_vmps, .proto = "vmps" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_dict_attr_t const *attr_packet_type;
extern fr_dict_attr_autoload_t process_vmps_dict_attr[];
fr_dict_attr_autoload_t process_vmps_dict_attr[] = {
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_vmps },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
typedef struct {
extern fr_dict_autoload_t libfreeradius_arp_dict[];
fr_dict_autoload_t libfreeradius_arp_dict[] = {
{ .out = &dict_arp, .proto = "arp" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_arp_packet;
extern fr_dict_attr_autoload_t libfreeradius_arp_dict_attr[];
fr_dict_attr_autoload_t libfreeradius_arp_dict_attr[] = {
{ .out = &attr_arp_packet, .name = "arp", .type = FR_TYPE_STRUCT, .dict = &dict_arp },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_autoload_t libfreeradius_bfd_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_bfd, .proto = "bfd" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_bfd_packet, .name = "Packet", .type = FR_TYPE_STRUCT, .dict = &dict_bfd },
{ .out = &attr_bfd_additional_data, .name = "Additional-Data", .type = FR_TYPE_GROUP, .dict = &dict_bfd },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
char const *fr_bfd_packet_names[FR_BFD_CODE_MAX] = {
//fr_dict_attr_t const *attr_oid_tree;
extern fr_dict_autoload_t libfreeradius_der_dict[];
-fr_dict_autoload_t libfreeradius_der_dict[] = { { .out = &dict_der, .proto = "der" }, { NULL } };
+fr_dict_autoload_t libfreeradius_der_dict[] = {
+ { .out = &dict_der, .proto = "der" },
+
+ DICT_AUTOLOAD_TERMINATOR
+};
extern fr_dict_attr_autoload_t libfreeradius_der_dict_attr[];
fr_dict_attr_autoload_t libfreeradius_der_dict_attr[] = {
// { .out = &attr_oid_tree, .name = "OID-Tree", .type = FR_TYPE_TLV, .dict = &dict_der },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
static fr_table_num_sorted_t const tag_name_to_number[] = {
extern fr_dict_autoload_t dhcpv4_dict[];
fr_dict_autoload_t dhcpv4_dict[] = {
{ .out = &dict_dhcpv4, .proto = "dhcpv4" },
- { NULL }
+
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_dhcp_boot_filename;
{ .out = &attr_dhcp_subnet_selection_option, .name = "Subnet-Selection-Option", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_dhcpv4 },
{ .out = &attr_dhcp_network_subnet, .name = "Network-Subnet", .type = FR_TYPE_IPV4_PREFIX, .dict = &dict_dhcpv4 },
{ .out = &attr_dhcp_option_82, .name = "Relay-Agent-Information", .type = FR_TYPE_TLV, .dict = &dict_dhcpv4 },
- { NULL }
+
+ DICT_AUTOLOAD_TERMINATOR
};
/*
extern fr_dict_autoload_t libfreeradius_dhcpv6_dict[];
fr_dict_autoload_t libfreeradius_dhcpv6_dict[] = {
{ .out = &dict_dhcpv6, .proto = "dhcpv6" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_relay_peer_address, .name = "Relay-Peer-Address", .type = FR_TYPE_IPV6_ADDR, .dict = &dict_dhcpv6 },
{ .out = &attr_relay_message, .name = "Relay-Message", .type = FR_TYPE_GROUP, .dict = &dict_dhcpv6 },
{ .out = &attr_option_request, .name = "Option-Request", .type = FR_TYPE_ATTR, .dict = &dict_dhcpv6 },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
/*
extern fr_dict_autoload_t dns_dict[];
fr_dict_autoload_t dns_dict[] = {
{ .out = &dict_dns, .proto = "dns" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
//fr_dict_attr_t const *attr_dns_packet_type;
{ .out = &attr_dns_rr, .name = "Resource-Record", .type = FR_TYPE_STRUCT, .dict = &dict_dns },
{ .out = &attr_dns_ns, .name = "Name-Server", .type = FR_TYPE_STRUCT, .dict = &dict_dns },
{ .out = &attr_dns_ar, .name = "Additional-Record", .type = FR_TYPE_STRUCT, .dict = &dict_dns },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
char const *fr_dns_packet_names[FR_DNS_CODE_MAX] = {
fr_dict_autoload_t libfreeradius_radius_dict[] = {
{ .out = &dict_freeradius, .proto = "freeradius" },
{ .out = &dict_radius, .proto = "radius" },
- { NULL }
+
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_packet_type;
{ .out = &attr_state, .name = "State", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
{ .out = &attr_vendor_specific, .name = "Vendor-Specific", .type = FR_TYPE_VSA, .dict = &dict_radius },
{ .out = &attr_nas_filter_rule, .name = "NAS-Filter-Rule", .type = FR_TYPE_STRING, .dict = &dict_radius },
- { NULL }
+
+ DICT_AUTOLOAD_TERMINATOR
};
/*
fr_dict_autoload_t libfreeradius_tacacs_dict[] = {
{ .out = &dict_tacacs, .proto = "tacacs" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_tacacs_accounting_flags;
{ .out = &attr_tacacs_mschap_response, .name = "MS-CHAP-Response", .type = FR_TYPE_OCTETS, .dict = &dict_tacacs },
{ .out = &attr_tacacs_mschap2_response, .name = "MS-CHAP2-Response", .type = FR_TYPE_OCTETS, .dict = &dict_tacacs },
{ .out = &attr_tacacs_mschap_challenge, .name = "MS-CHAP-Challenge", .type = FR_TYPE_OCTETS, .dict = &dict_tacacs },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
char const *fr_tacacs_packet_names[FR_TACACS_CODE_MAX] = {
extern fr_dict_autoload_t libfreeradius_tftp[];
fr_dict_autoload_t libfreeradius_tftp[] = {
{ .out = &dict_tftp, .proto = "tftp" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_tftp_block;
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_tftp },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
char const *fr_tftp_codes[FR_TFTP_MAX_CODE] = {
extern fr_dict_autoload_t libfreeradius_vmps[];
fr_dict_autoload_t libfreeradius_vmps[] = {
{ .out = &dict_vmps, .proto = "vmps" },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};
fr_dict_attr_t const *attr_error_code;
{ .out = &attr_error_code, .name = "Error-Code", .type = FR_TYPE_UINT8, .dict = &dict_vmps },
{ .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_vmps },
{ .out = &attr_sequence_number, .name = "Sequence-Number", .type = FR_TYPE_UINT32, .dict = &dict_vmps },
- { NULL }
+ DICT_AUTOLOAD_TERMINATOR
};