The FreeRADIUS server
$Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
|
Read the radiusd.conf file. More...
#include <freeradius-devel/server/cf_file.h>
#include <freeradius-devel/server/cf_priv.h>
#include <freeradius-devel/server/log.h>
#include <freeradius-devel/server/tmpl.h>
#include <freeradius-devel/server/util.h>
#include <freeradius-devel/server/virtual_servers.h>
#include <freeradius-devel/util/debug.h>
#include <freeradius-devel/util/file.h>
#include <freeradius-devel/util/misc.h>
#include <freeradius-devel/util/perm.h>
#include <freeradius-devel/util/md5.h>
#include <freeradius-devel/util/syserror.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <ctype.h>
#include <fcntl.h>
#include <freeradius-devel/server/main_config.h>
Go to the source code of this file.
Data Structures | |
struct | cf_file_heap_t |
struct | cf_stack_frame_t |
union | cf_stack_frame_t.__unnamed62__ |
struct | cf_stack_frame_t.__unnamed62__.__unnamed64__ |
struct | cf_stack_t |
Macros | |
#define | MAX_STACK (32) |
#define | RULES_VERIFY(_cs, _rules) if (cf_tmpl_rules_verify(_cs, _rules) < 0) return NULL |
Typedefs | |
typedef struct cf_file_heap_t | cf_file_heap_t |
typedef CONF_ITEM *(* | cf_process_func_t) (cf_stack_t *) |
typedef enum conf_property | CONF_PROPERTY |
Enumerations | |
enum | cf_stack_file_t { CF_STACK_FILE = 0 } |
enum | conf_property { CONF_PROPERTY_INVALID = 0 , CONF_PROPERTY_NAME , CONF_PROPERTY_INSTANCE } |
Functions | |
static int8_t | _inode_cmp (void const *one, void const *two) |
static int | add_pair (CONF_SECTION *parent, char const *attr, char const *value, fr_token_t name1_token, fr_token_t op_token, fr_token_t value_token, char *buff, char const *filename, int lineno) |
char const * | cf_expand_variables (char const *cf, int lineno, CONF_SECTION *outer_cs, char *output, size_t outsize, char const *input, ssize_t inlen, bool *soft_fail) |
bool | cf_file_check (CONF_PAIR *cp, bool check_perms) |
Do some checks on the file as an "input" file. More... | |
void | cf_file_check_user (uid_t uid, gid_t gid) |
Set the euid/egid used when performing file checks. More... | |
static int | cf_file_fill (cf_stack_t *stack) |
void | cf_file_free (CONF_SECTION *cs) |
static int | cf_file_include (cf_stack_t *stack) |
static int | cf_file_open (CONF_SECTION *cs, char const *filename, bool from_dir, FILE **fp_p) |
int | cf_file_read (CONF_SECTION *cs, char const *filename) |
static int | cf_get_token (CONF_SECTION *parent, char const **ptr_p, fr_token_t *token, char *buffer, size_t buflen, char const *filename, int lineno) |
static char const * | cf_local_file (char const *base, char const *filename, char *buffer, size_t bufsize) |
void | cf_md5_final (uint8_t *digest) |
void | cf_md5_init (void) |
static void | cf_md5_update (char const *p) |
static int | cf_pair_write (FILE *fp, CONF_PAIR *cp) |
CONF_ITEM * | cf_reference_item (CONF_SECTION const *parent_cs, CONF_SECTION const *outer_cs, char const *ptr) |
int | cf_section_pass2 (CONF_SECTION *cs) |
void | cf_section_set_unlang (CONF_SECTION *cs) |
int | cf_section_write (FILE *fp, CONF_SECTION *cs, int depth) |
static void | cf_stack_cleanup (cf_stack_t *stack) |
static ssize_t | cf_string_write (FILE *fp, char const *string, size_t len, fr_token_t t) |
static bool | cf_template_merge (CONF_SECTION *cs, CONF_SECTION const *template) |
static int | cf_tmpl_rules_verify (CONF_SECTION *cs, tmpl_rules_t const *rules) |
static int8_t | filename_cmp (void const *one, void const *two) |
static ssize_t | fr_skip_condition (char const *start, char const *end, bool const terminal[static UINT8_MAX+1], bool *eol) |
Skip a conditional expression. More... | |
static ssize_t | fr_skip_xlat (char const *start, char const *end) |
Skip an xlat expression. More... | |
static int | frame_readdir (cf_stack_t *stack) |
static int | parse_error (cf_stack_t *stack, char const *ptr, char const *message) |
static int | parse_input (cf_stack_t *stack) |
static int | parse_type_name (cf_stack_t *stack, char const **ptr_p, char const *type_ptr, fr_type_t *type_p) |
static CONF_ITEM * | process_catch (cf_stack_t *stack) |
static CONF_ITEM * | process_foreach (cf_stack_t *stack) |
static CONF_ITEM * | process_if (cf_stack_t *stack) |
static int | process_include (cf_stack_t *stack, CONF_SECTION *parent, char const *ptr, bool required, bool relative) |
static CONF_ITEM * | process_map (cf_stack_t *stack) |
static CONF_ITEM * | process_subrequest (cf_stack_t *stack) |
static int | process_template (cf_stack_t *stack) |
Variables | |
static fr_md5_ctx_t * | cf_md5_ctx = NULL |
bool | check_config = false |
static gid_t | conf_check_gid = (gid_t)-1 |
static uid_t | conf_check_uid = (uid_t)-1 |
static fr_table_num_sorted_t const | conf_property_name [] |
static size_t | conf_property_name_len = NUM_ELEMENTS(conf_property_name) |
static char const | parse_tabs [] = " " |
static const bool | terminal_end_line [UINT8_MAX+1] |
static const bool | terminal_end_section [UINT8_MAX+1] |
static fr_table_ptr_sorted_t | unlang_keywords [] |
static int | unlang_keywords_len = NUM_ELEMENTS(unlang_keywords) |
Read the radiusd.conf file.
Definition in file cf_file.c.
struct cf_file_heap_t |
Data Fields | ||
---|---|---|
char const * | filename | |
fr_heap_index_t | heap_id |
struct cf_stack_frame_t |
Data Fields | ||
---|---|---|
union cf_stack_frame_t | __unnamed__ | |
int | braces | |
CONF_SECTION * | current | sub-section we're reading |
char const * | filename | filename we're reading |
bool | from_dir | this file was read from $include foo/ |
int | lineno | line in that filename |
CONF_SECTION * | parent | which started this file |
cf_stack_file_t | type |
union cf_stack_frame_t.__unnamed62__ |
Data Fields | ||
---|---|---|
__unnamed62__ | __unnamed__ |
struct cf_stack_frame_t.__unnamed62__.__unnamed64__ |
struct cf_stack_t |
Data Fields | ||
---|---|---|
char ** | buff | buffers for reading / parsing |
size_t | bufsize | size of the buffers |
int | depth | stack depth |
char * | fill | where we start filling the buffer from |
cf_stack_frame_t | frame[MAX_STACK] | stack frames |
char const * | ptr | current parse pointer |
#define RULES_VERIFY | ( | _cs, | |
_rules | |||
) | if (cf_tmpl_rules_verify(_cs, _rules) < 0) return NULL |
typedef struct cf_file_heap_t cf_file_heap_t |
typedef CONF_ITEM*(* cf_process_func_t) (cf_stack_t *) |
typedef enum conf_property CONF_PROPERTY |
enum cf_stack_file_t |
enum conf_property |
|
static |
|
static |
char const* cf_expand_variables | ( | char const * | cf, |
int | lineno, | ||
CONF_SECTION * | outer_cs, | ||
char * | output, | ||
size_t | outsize, | ||
char const * | input, | ||
ssize_t | inlen, | ||
bool * | soft_fail | ||
) |
Do some checks on the file as an "input" file.
i.e. one read by a module.
cp | currently being processed. |
check_perms | If true - will return false if file is world readable, or not readable by the unprivileged user/group. |
Definition at line 656 of file cf_file.c.
void cf_file_check_user | ( | uid_t | uid, |
gid_t | gid | ||
) |
Set the euid/egid used when performing file checks.
Sets the euid, and egid used when cf_file_check is called to check permissions on conf items of type CONF_FLAG_FILE_INPUT
uid | to set, (uid_t)-1 to use current euid. |
gid | to set, (gid_t)-1 to use current egid. |
|
static |
void cf_file_free | ( | CONF_SECTION * | cs | ) |
|
static |
|
static |
int cf_file_read | ( | CONF_SECTION * | cs, |
char const * | filename | ||
) |
|
static |
|
static |
void cf_md5_final | ( | uint8_t * | digest | ) |
void cf_md5_init | ( | void | ) |
|
static |
|
static |
CONF_ITEM* cf_reference_item | ( | CONF_SECTION const * | parent_cs, |
CONF_SECTION const * | outer_cs, | ||
char const * | ptr | ||
) |
int cf_section_pass2 | ( | CONF_SECTION * | cs | ) |
void cf_section_set_unlang | ( | CONF_SECTION * | cs | ) |
int cf_section_write | ( | FILE * | fp, |
CONF_SECTION * | cs, | ||
int | depth | ||
) |
|
static |
|
static |
|
static |
|
inlinestatic |
|
static |
|
static |
Skip a conditional expression.
This is a simple "peek ahead" parser which tries to not be wrong. It may accept some things which will later parse as invalid (e.g. unknown attributes, etc.) But it also rejects all malformed expressions.
It's used as a quick hack because the full parser isn't always available.
[in] | start | start of the condition. |
[in] | end | end of the string (or NULL for zero-terminated strings) |
[in] | terminal | terminal character(s) |
[out] | eol | did the parse error happen at eol? |
Definition at line 1363 of file cf_file.c.
|
static |
Skip an xlat expression.
This is a simple "peek ahead" parser which tries to not be wrong. It may accept some things which will later parse as invalid (e.g. unknown attributes, etc.) But it also rejects all malformed expressions.
It's used as a quick hack because the full parser isn't always available.
[in] | start | start of the expression, MUST point to the "%{" or "%(" |
[in] | end | end of the string (or NULL for zero-terminated strings) |
Definition at line 1211 of file cf_file.c.
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |