The FreeRADIUS server $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
cf_file.c File Reference

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/skip.h>
#include <freeradius-devel/util/md5.h>
#include <fcntl.h>
#include <freeradius-devel/server/main_config.h>
+ Include dependency graph for cf_file.c:

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.__unnamed63__
 
struct  cf_stack_frame_t.__unnamed63__.__unnamed65__
 
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.
 
void cf_file_check_user (uid_t uid, gid_t gid)
 Set the euid/egid used when performing file checks.
 
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_ITEMcf_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 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_ITEMprocess_catch (cf_stack_t *stack)
 
static CONF_ITEMprocess_foreach (cf_stack_t *stack)
 
static CONF_ITEMprocess_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_ITEMprocess_map (cf_stack_t *stack)
 
static CONF_ITEMprocess_subrequest (cf_stack_t *stack)
 
static CONF_ITEMprocess_switch (cf_stack_t *stack)
 
static int process_template (cf_stack_t *stack)
 

Variables

static fr_md5_ctx_tcf_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 fr_table_num_sorted_t const server_unlang_section []
 
static size_t server_unlang_section_len = NUM_ELEMENTS(server_unlang_section)
 
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)
 

Detailed Description

Read the radiusd.conf file.

Id
c0de76b7af4737b611c66e3749aa188156177042
Note
Yep I should learn to use lex & yacc, or at least write a decent parser. I know how to do that, really :) mique.nosp@m.ls@c.nosp@m.istro.nosp@m.n.nl

Definition in file cf_file.c.


Data Structure Documentation

◆ cf_file_heap_t

struct cf_file_heap_t

Definition at line 879 of file cf_file.c.

Data Fields
char const * filename
fr_heap_index_t heap_id

◆ cf_stack_frame_t

struct cf_stack_frame_t

Definition at line 108 of file cf_file.c.

+ Collaboration diagram for cf_stack_frame_t:
Data Fields
union cf_stack_frame_t.__unnamed63__ __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

◆ cf_stack_frame_t.__unnamed63__

union cf_stack_frame_t.__unnamed63__

Definition at line 114 of file cf_file.c.

Data Fields
struct cf_stack_frame_t.__unnamed63__.__unnamed65__ __unnamed__

◆ cf_stack_frame_t.__unnamed63__.__unnamed65__

struct cf_stack_frame_t.__unnamed63__.__unnamed65__

Definition at line 115 of file cf_file.c.

Data Fields
FILE * fp FP we're reading.

◆ cf_stack_t

struct cf_stack_t

Definition at line 148 of file cf_file.c.

+ Collaboration diagram for 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

Macro Definition Documentation

◆ MAX_STACK

#define MAX_STACK   (32)

Definition at line 107 of file cf_file.c.

◆ RULES_VERIFY

#define RULES_VERIFY (   _cs,
  _rules 
)    if (cf_tmpl_rules_verify(_cs, _rules) < 0) return NULL

Definition at line 176 of file cf_file.c.

Typedef Documentation

◆ cf_file_heap_t

◆ cf_process_func_t

typedef CONF_ITEM *(* cf_process_func_t) (cf_stack_t *)

Definition at line 2129 of file cf_file.c.

◆ CONF_PROPERTY

Enumeration Type Documentation

◆ cf_stack_file_t

Enumerator
CF_STACK_FILE 

Definition at line 97 of file cf_file.c.

◆ conf_property

Enumerator
CONF_PROPERTY_INVALID 
CONF_PROPERTY_NAME 
CONF_PROPERTY_INSTANCE 

Definition at line 67 of file cf_file.c.

Function Documentation

◆ _inode_cmp()

static int8_t _inode_cmp ( void const *  one,
void const *  two 
)
static

Definition at line 550 of file cf_file.c.

+ Here is the caller graph for this function:

◆ add_pair()

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 
)
static

Definition at line 1969 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_expand_variables()

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 
)

Definition at line 184 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_file_check()

bool cf_file_check ( CONF_PAIR cp,
bool  check_perms 
)

Do some checks on the file as an "input" file.

i.e. one read by a module.

Note
Must be called with super user privileges.
Parameters
cpcurrently being processed.
check_permsIf true - will return false if file is world readable, or not readable by the unprivileged user/group.
Returns
  • true if permissions are OK, or the file exists.
  • false if the file does not exist or the permissions are incorrect.

Definition at line 668 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_file_check_user()

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

Note
This is probably only useful for the freeradius daemon itself.
Parameters
uidto set, (uid_t)-1 to use current euid.
gidto set, (gid_t)-1 to use current egid.

Definition at line 3308 of file cf_file.c.

◆ cf_file_fill()

static int cf_file_fill ( cf_stack_t stack)
static

Definition at line 2916 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_file_free()

void cf_file_free ( CONF_SECTION cs)

Definition at line 3293 of file cf_file.c.

+ Here is the call graph for this function:

◆ cf_file_include()

static int cf_file_include ( cf_stack_t stack)
static

Definition at line 3021 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_file_open()

static int cf_file_open ( CONF_SECTION cs,
char const *  filename,
bool  from_dir,
FILE **  fp_p 
)
static

Definition at line 559 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_file_read()

int cf_file_read ( CONF_SECTION cs,
char const *  filename 
)

Definition at line 3234 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_get_token()

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

Definition at line 830 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_local_file()

static char const * cf_local_file ( char const *  base,
char const *  filename,
char *  buffer,
size_t  bufsize 
)
static

Definition at line 801 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_md5_final()

void cf_md5_final ( uint8_t digest)

Definition at line 2904 of file cf_file.c.

+ Here is the caller graph for this function:

◆ cf_md5_init()

void cf_md5_init ( void  )

Definition at line 2891 of file cf_file.c.

+ Here is the caller graph for this function:

◆ cf_md5_update()

static void cf_md5_update ( char const *  p)
static

Definition at line 2897 of file cf_file.c.

+ Here is the caller graph for this function:

◆ cf_pair_write()

static int cf_pair_write ( FILE *  fp,
CONF_PAIR cp 
)
static

Definition at line 3349 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_reference_item()

CONF_ITEM * cf_reference_item ( CONF_SECTION const *  parent_cs,
CONF_SECTION const *  outer_cs,
char const *  ptr 
)

Definition at line 3430 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_section_pass2()

int cf_section_pass2 ( CONF_SECTION cs)

Definition at line 767 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_section_set_unlang()

void cf_section_set_unlang ( CONF_SECTION cs)

Definition at line 3663 of file cf_file.c.

+ Here is the caller graph for this function:

◆ cf_section_write()

int cf_section_write ( FILE *  fp,
CONF_SECTION cs,
int  depth 
)

Definition at line 3365 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_stack_cleanup()

static void cf_stack_cleanup ( cf_stack_t stack)
static

Definition at line 3200 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_string_write()

static ssize_t cf_string_write ( FILE *  fp,
char const *  string,
size_t  len,
fr_token_t  t 
)
static

Definition at line 3316 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_template_merge()

static bool cf_template_merge ( CONF_SECTION cs,
CONF_SECTION const *  template 
)
static

Definition at line 474 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cf_tmpl_rules_verify()

static int cf_tmpl_rules_verify ( CONF_SECTION cs,
tmpl_rules_t const *  rules 
)
inlinestatic

Definition at line 158 of file cf_file.c.

+ Here is the call graph for this function:

◆ filename_cmp()

static int8_t filename_cmp ( void const *  one,
void const *  two 
)
static

Definition at line 884 of file cf_file.c.

+ Here is the caller graph for this function:

◆ frame_readdir()

static int frame_readdir ( cf_stack_t stack)
static

Definition at line 2854 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_error()

static int parse_error ( cf_stack_t stack,
char const *  ptr,
char const *  message 
)
static

Definition at line 1713 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_input()

static int parse_input ( cf_stack_t stack)
static

Definition at line 2131 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_type_name()

static int parse_type_name ( cf_stack_t stack,
char const **  ptr_p,
char const *  type_ptr,
fr_type_t type_p 
)
static

Definition at line 1733 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ process_catch()

static CONF_ITEM * process_catch ( cf_stack_t stack)
static

Definition at line 1622 of file cf_file.c.

+ Here is the call graph for this function:

◆ process_foreach()

static CONF_ITEM * process_foreach ( cf_stack_t stack)
static

Definition at line 1784 of file cf_file.c.

+ Here is the call graph for this function:

◆ process_if()

static CONF_ITEM * process_if ( cf_stack_t stack)
static

Definition at line 1246 of file cf_file.c.

+ Here is the call graph for this function:

◆ process_include()

static int process_include ( cf_stack_t stack,
CONF_SECTION parent,
char const *  ptr,
bool  required,
bool  relative 
)
static

Definition at line 895 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ process_map()

static CONF_ITEM * process_map ( cf_stack_t stack)
static

Definition at line 1413 of file cf_file.c.

+ Here is the call graph for this function:

◆ process_subrequest()

static CONF_ITEM * process_subrequest ( cf_stack_t stack)
static

Definition at line 1501 of file cf_file.c.

+ Here is the call graph for this function:

◆ process_switch()

static CONF_ITEM * process_switch ( cf_stack_t stack)
static

Definition at line 2027 of file cf_file.c.

+ Here is the call graph for this function:

◆ process_template()

static int process_template ( cf_stack_t stack)
static

Definition at line 1173 of file cf_file.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ cf_md5_ctx

fr_md5_ctx_t* cf_md5_ctx = NULL
static

Definition at line 2889 of file cf_file.c.

◆ check_config

bool check_config = false

Definition at line 63 of file cf_file.c.

◆ conf_check_gid

gid_t conf_check_gid = (gid_t)-1
static

Definition at line 65 of file cf_file.c.

◆ conf_check_uid

uid_t conf_check_uid = (uid_t)-1
static

Definition at line 64 of file cf_file.c.

◆ conf_property_name

fr_table_num_sorted_t const conf_property_name[]
static
Initial value:
= {
{ L("instance"), CONF_PROPERTY_INSTANCE },
{ L("name"), CONF_PROPERTY_NAME }
}
#define L(_str)
Helper for initialising arrays of string literals.
Definition build.h:209
@ CONF_PROPERTY_NAME
Definition cf_file.c:69
@ CONF_PROPERTY_INSTANCE
Definition cf_file.c:70

Definition at line 73 of file cf_file.c.

◆ conf_property_name_len

size_t conf_property_name_len = NUM_ELEMENTS(conf_property_name)
static

Definition at line 77 of file cf_file.c.

◆ parse_tabs

char const parse_tabs[] = " "
static

Definition at line 3314 of file cf_file.c.

◆ server_unlang_section

fr_table_num_sorted_t const server_unlang_section[]
static
Initial value:
= {
{ L("accounting"), true },
{ L("add"), true },
{ L("authenticate"), true },
{ L("clear"), true },
{ L("deny"), true },
{ L("error"), true },
{ L("establish"), true },
{ L("finally"), true },
{ L("load"), true },
{ L("new"), true },
{ L("recv"), true },
{ L("send"), true },
{ L("store"), true },
{ L("verify"), true },
}

Definition at line 79 of file cf_file.c.

◆ server_unlang_section_len

size_t server_unlang_section_len = NUM_ELEMENTS(server_unlang_section)
static

Definition at line 95 of file cf_file.c.

◆ terminal_end_line

const bool terminal_end_line[UINT8_MAX+1]
static
Initial value:
= {
[0] = true,
['\r'] = true,
['\n'] = true,
['#'] = true,
[','] = true,
[';'] = true,
['}'] = true,
}

Definition at line 1234 of file cf_file.c.

◆ terminal_end_section

const bool terminal_end_section[UINT8_MAX+1]
static
Initial value:
= {
['{'] = true,
}

Definition at line 1230 of file cf_file.c.

◆ unlang_keywords

fr_table_ptr_sorted_t unlang_keywords[]
static
Initial value:
= {
{ L("catch"), (void *) process_catch },
{ L("elsif"), (void *) process_if },
{ L("foreach"), (void *) process_foreach },
{ L("if"), (void *) process_if },
{ L("map"), (void *) process_map },
{ L("subrequest"), (void *) process_subrequest },
{ L("switch"), (void *) process_switch }
}
static CONF_ITEM * process_map(cf_stack_t *stack)
Definition cf_file.c:1413
static CONF_ITEM * process_foreach(cf_stack_t *stack)
Definition cf_file.c:1784
static CONF_ITEM * process_subrequest(cf_stack_t *stack)
Definition cf_file.c:1501
static CONF_ITEM * process_if(cf_stack_t *stack)
Definition cf_file.c:1246
static CONF_ITEM * process_catch(cf_stack_t *stack)
Definition cf_file.c:1622
static CONF_ITEM * process_switch(cf_stack_t *stack)
Definition cf_file.c:2027

Definition at line 2118 of file cf_file.c.

◆ unlang_keywords_len

int unlang_keywords_len = NUM_ELEMENTS(unlang_keywords)
static

Definition at line 2127 of file cf_file.c.