The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Todo List
Global dict_attr_fields_valid (fr_dict_t *dict, fr_dict_attr_t const *parent, char const *name, int *attr, fr_type_t type, fr_dict_attr_flags_t *flags)
we need to check length of none vendor attributes.
Global fr_bio_chain (fr_bio_t *first, fr_bio_t *second)
- this likely needs to be public
Global fr_bio_dedup_timer (UNUSED fr_event_list_t *el, fr_time_t now, void *uctx)
- expire items from the pending list, too
Global fr_bio_fd_socket_bind_unix (fr_bio_fd_t *my, fr_bio_fd_config_t const *cfg)
- this function only does a tiny bit of what fr_server_domain_socket_peercred() and fr_server_domain_socket_perm() do. Those functions do a lot more sanity checks.
Global fr_bio_mem_call_verify (fr_bio_t *bio, void *packet_ctx, size_t *size)
- have this as a parameter to the read routines, so that they only return complete packets?
Global fr_bio_queue_alloc (TALLOC_CTX *ctx, size_t max_saved, fr_bio_queue_saved_t saved, fr_bio_queue_callback_t sent, fr_bio_queue_callback_t cancel, fr_bio_t *next))
- we need to mark up the bio as "blocked", and then have a write_blocked() API? ugh. or just add bool blocked and bool eof to both read/write bios
Global fr_bio_unchain (fr_bio_t *bio)
- this likely needs to be public
Global fr_canonicalize_error (TALLOC_CTX *ctx, char **spaces, char **text, ssize_t slen, char const *fmt)
merge with above function (log_request_marker)
Global fr_cmd_s::help
- long / short help
Global fr_exec_fork_nowait (fr_event_list_t *el, char **argv_in, char **env_in, bool env_inherit, bool debug)
- maybe take an fr_dcursor_t instead of env_pairs? That would allow finer-grained control over the attributes to put into the environment.
Global fr_exec_fork_wait (pid_t *pid_p, int *stdin_fd, int *stdout_fd, int *stderr_fd, char **argv_in, char **env_usr, bool env_inherit, bool debug)
- maybe take an fr_dcursor_t instead of env_pairs? That would allow finer-grained control over the attributes to put into the environment.
Class fr_message_set_s
Add a flag for UDP-style protocols, where we can put the message into the ring buffer. This helps with locality of reference, and removes the need to track two separate things.
Global fr_pair_ctx_set (fr_pair_ctx_t *pair_ctx, char const *in, size_t inlen)
- allow for child contexts, so that we can parse TLVs into vp->vp_children. This change requires nested cursors, but not necessarily nested contexts. We probably want to have a fr_dlist_t of pair_ctx, and we always operate on the last one. When we change contexts to an attributes parent, we also change pair_ctx to a parent context. This is like the da stack, but with child cursors, too.
Global fr_pair_fprint (FILE *fp, fr_pair_t const *vp)
- This function should print flattened lists.
Global fr_pair_validate_debug (fr_pair_t const *failed[2])
add thread specific talloc contexts.
Global fr_regex_cmp_op (fr_token_t op, fr_value_box_t const *a, fr_value_box_t const *b)
- allow /foo/i on the RHS
Global fr_vasprintf_internal (TALLOC_CTX *ctx, char const *fmt, va_list ap, bool suppress_secrets)
Do something sensible with 'n$', though it's probably not actually used anywhere in our code base.
Global log_parse_section (CONF_SECTION *cs)
- we should probably allow for TCP sockets, too. But then those can block. So we then also need a way to buffer outbound log messages, and discard log messages if the buffer is full.
Global mod_map_proc (rlm_rcode_t *p_result, void *mod_inst, UNUSED void *proc_inst, request_t *request, fr_value_box_list_t *url, map_list_t const *maps)
For xlat expansions we need to parse the raw URL first, and then apply different escape functions to the different parts.
Global sigtran_client_link_up (sigtran_conn_t const **out, sigtran_conn_conf_t const *conf)
Return struct representing the connection
Global udp_handle_t::src_port
- not set by socket_client_tcp()
Global unlang_fixup_edit (map_t *map, void *ctx)
- this is only called for CONF_PAIR maps, not for CONF_SECTION. So when we parse nested maps, there's no validation done of the CONF_SECTION. In order to fix this, we need to have map_afrom_cs() call the validation function for the CONF_SECTION before recursing.
Global upcast_cmp [FR_TYPE_MAX+1][FR_TYPE_MAX+1]
- check this table against fr_type_promote()