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

Read the radiusd.conf file. More...

#include <sys/errno.h>
#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.__unnamed62__
 
struct  cf_stack_frame_t.__unnamed62__.__unnamed64__
 
struct  cf_stack_t
 

Macros

#define MAX_STACK   (32)
 

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)
 
static int cf_expand_file (char const *cf, int lineno, char name[static PATH_MAX], char **p_p, char const **ptr_p, char *output, size_t outsize, bool raw)
 
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 soft_fail_env)
 
cf_file_check_err_t cf_file_check (CONF_PAIR *cp, bool check_perms)
 Do some checks on the file as an "input" file.
 
cf_file_check_err_t cf_file_check_effective (char const *filename, cf_file_check_err_t(*cb)(char const *filename, void *uctx), void *uctx)
 Perform an operation with the effect/group set to conf_check_gid and conf_check_uid.
 
cf_file_check_err_t cf_file_check_open_read (char const *filename, void *uctx)
 Callback for cf_file_check to open a file and check permissions.
 
void cf_file_check_set_uid_gid (uid_t uid, gid_t gid)
 Set the euid/egid used when performing file checks.
 
cf_file_check_err_t cf_file_check_unix_connect (char const *filename, UNUSED void *uctx)
 Check if we can connect to a unix socket.
 
cf_file_check_err_t cf_file_check_unix_perm (char const *filename, UNUSED void *uctx)
 Check if file exists, and is a socket.
 
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, bool root)
 
int cf_file_read_buffer (CONF_SECTION *cs, char const *buffer, size_t buflen, char const *filename)
 Bootstrap a configuration section from an in-memory buffer.
 
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)
 
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)
 
int cf_section_write_children (FILE *fp, CONF_SECTION *cs, int depth)
 Emit the children of a section at depth without an enclosing { ... }.
 
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 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
 
static const bool cf_name_char1 [SBUFF_CHAR_CLASS]
 Convert tokens back to a quoting character.
 
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 [SBUFF_CHAR_CLASS]
 
static const bool terminal_end_section [SBUFF_CHAR_CLASS]
 
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
024dd68b013e511162487ccf31ed9ca14a93e569
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 1243 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 106 of file cf_file.c.

+ Collaboration diagram for cf_stack_frame_t:
Data Fields
union cf_stack_frame_t.__unnamed62__ __unnamed__
CONF_SECTION * at_reference was this thing an @foo ?
int at_reference_braces braces when we found this thing
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.__unnamed62__

union cf_stack_frame_t.__unnamed62__

Definition at line 112 of file cf_file.c.

Data Fields
struct cf_stack_frame_t.__unnamed62__.__unnamed64__ __unnamed__

◆ cf_stack_frame_t.__unnamed62__.__unnamed64__

struct cf_stack_frame_t.__unnamed62__.__unnamed64__

Definition at line 113 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 105 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 2482 of file cf_file.c.

◆ CONF_PROPERTY

Enumeration Type Documentation

◆ cf_stack_file_t

Enumerator
CF_STACK_FILE 

Definition at line 95 of file cf_file.c.

◆ conf_property

Enumerator
CONF_PROPERTY_INVALID 
CONF_PROPERTY_NAME 
CONF_PROPERTY_INSTANCE 

Definition at line 65 of file cf_file.c.

Function Documentation

◆ _inode_cmp()

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

Definition at line 704 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 2320 of file cf_file.c.

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

◆ cf_expand_file()

static int cf_expand_file ( char const *  cf,
int  lineno,
char  name[static PATH_MAX],
char **  p_p,
char const **  ptr_p,
char *  output,
size_t  outsize,
bool  raw 
)
static

Definition at line 160 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,
bool  soft_fail_env 
)

Definition at line 297 of file cf_file.c.

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

◆ cf_file_check()

cf_file_check_err_t 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 error if file is world readable, or not readable by the unprivileged user/group.
Returns
  • CF_FILE_OK if the socket exists and is a socket.
  • CF_FILE_NO_EXIST if the file doesn't exist.
  • CF_FILE_NO_PERMISSION if the file exists but is not accessible.
  • CF_FILE_OTHER_ERROR any other error.

Definition at line 1068 of file cf_file.c.

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

◆ cf_file_check_effective()

cf_file_check_err_t cf_file_check_effective ( char const *  filename,
cf_file_check_err_t(*)(char const *filename, void *uctx)  cb,
void *  uctx 
)

Perform an operation with the effect/group set to conf_check_gid and conf_check_uid.

Parameters
filenameCONF_PAIR for the file being checked
cbcallback function to perform the check
uctxuser context for the callback
Returns
  • CF_FILE_OTHER_ERROR if there was a problem modifying permissions
  • The return value from the callback

Definition at line 839 of file cf_file.c.

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

◆ cf_file_check_open_read()

cf_file_check_err_t cf_file_check_open_read ( char const *  filename,
void *  uctx 
)

Callback for cf_file_check to open a file and check permissions.

This is used to check if a file exists, and is readable by the unprivileged user/group.

Parameters
filenamecurrently being processed.
uctxuser context, which is a pointer to cf_file_t
Returns
  • CF_FILE_OK if the file exists and is readable.
  • CF_FILE_NO_EXIST if the file does not exist.
  • CF_FILE_NO_PERMISSION if the file exists but is not accessible.
  • CF_FILE_OTHER_ERROR if there was any other error.

Definition at line 1018 of file cf_file.c.

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

◆ cf_file_check_set_uid_gid()

void cf_file_check_set_uid_gid ( 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_READABLE

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 824 of file cf_file.c.

◆ cf_file_check_unix_connect()

cf_file_check_err_t cf_file_check_unix_connect ( char const *  filename,
UNUSED void *  uctx 
)

Check if we can connect to a unix socket.

Parameters
[in]filenameCONF_PAIR for the unix socket path
[in]uctxuser context, not used
Returns
  • CF_FILE_OK if the socket exists and is a socket.
  • CF_FILE_NO_EXIST if the file doesn't exist.
  • CF_FILE_NO_PERMISSION if the file exists but is not accessible.
  • CF_FILE_NO_UNIX_SOCKET if the file exists but is not a socket.
  • CF_FILE_OTHER_ERROR any other error.

Definition at line 899 of file cf_file.c.

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

◆ cf_file_check_unix_perm()

cf_file_check_err_t cf_file_check_unix_perm ( char const *  filename,
UNUSED void *  uctx 
)

Check if file exists, and is a socket.

Parameters
[in]filenameCONF_PAIR for the unix socket path
[in]uctxuser context, not used
Returns
  • CF_FILE_OK if the socket exists and is a socket.
  • CF_FILE_NO_EXIST if the file doesn't exist.
  • CF_FILE_NO_PERMISSION if the file exists but is not accessible.
  • CF_FILE_NO_UNIX_SOCKET if the file exists but is not a socket.
  • CF_FILE_OTHER_ERROR any other error.

Definition at line 972 of file cf_file.c.

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

◆ cf_file_fill()

static int cf_file_fill ( cf_stack_t stack)
static

Definition at line 3509 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 4039 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 3650 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 713 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,
bool  root 
)

Definition at line 3866 of file cf_file.c.

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

◆ cf_file_read_buffer()

int cf_file_read_buffer ( CONF_SECTION cs,
char const *  buffer,
size_t  buflen,
char const *  filename 
)

Bootstrap a configuration section from an in-memory buffer.

Mirrors cf_file_read(), but reads the configuration text from a buffer via fmemopen() instead of from a file on disk. The buffer is treated as if it were the contents of "filename", which is used in error messages and stored as the section's source filename.

$INCLUDE / $-INCLUDEs are taken relative to the directory portion of "filename", as with cf_file_read().

Unlike cf_file_read(), this function never sets the "raddbdir" / "confdir" CONF_PAIRs (the buffer has no canonical install path) and never inserts "filename" into the dedup tree.

Parameters
[in]csTop-level configuration section to populate.
[in]bufferThe configuration text. The caller retains ownership and may free the buffer after this call returns.
[in]buflenLength of buffer in bytes (excluding any trailing NUL).
[in]filenameVirtual filename for error reporting. May be a placeholder like "<inline>" if there is no real file.
Returns
0 on success, -1 on failure.

Definition at line 3967 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 1194 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 1165 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 3497 of file cf_file.c.

+ Here is the caller graph for this function:

◆ cf_md5_init()

void cf_md5_init ( void  )

Definition at line 3484 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 3490 of file cf_file.c.

+ Here is the caller graph for this function:

◆ cf_pair_write()

int cf_pair_write ( FILE *  fp,
CONF_PAIR cp 
)

Definition at line 4079 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 4211 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 1130 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 4449 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 4095 of file cf_file.c.

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

◆ cf_section_write_children()

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

Emit the children of a section at depth without an enclosing { ... }.

cf_section_write wraps a section in name { ... }; this helper writes only the children at the requested indent, which is what tools like radjson2conf -r need: rendering a synthetic-root section as a file-scope fragment ready to be $INCLUDEd at any depth.

Blank lines in the source come back through as NULL-text CONF_ITEM_COMMENT markers, so the writer doesn't have to synthesise its own separators - just emit what's there. Consecutive blank markers collapse to a single blank line on output so artifacts from upstream tooling (deletes that left their preceding blank behind, splits that introduced extra spacers) don't accumulate as visible whitespace.

Definition at line 4150 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 3832 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 4046 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 628 of file cf_file.c.

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

◆ filename_cmp()

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

Definition at line 1248 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 3447 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 2064 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 2506 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 2084 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 1972 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 2135 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 1612 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 1259 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 1763 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 1851 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 2379 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 1539 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 3482 of file cf_file.c.

◆ cf_name_char1

const bool cf_name_char1[SBUFF_CHAR_CLASS]
static
Initial value:
= {
[ '0' ... '9' ] = true,
[ 'A' ... 'Z' ] = true,
[ 'a' ... 'z' ] = true,
[ '%' ] = true,
[ '@' ] = true,
[ '-' ] = true,
[ '&' ] = true,
}

Convert tokens back to a quoting character.

Non-string types convert to '?' to screw ups can be identified easily

Definition at line 2495 of file cf_file.c.

◆ check_config

bool check_config = false

Definition at line 61 of file cf_file.c.

◆ conf_check_gid

gid_t conf_check_gid = (gid_t)-1
static

Definition at line 63 of file cf_file.c.

◆ conf_check_uid

uid_t conf_check_uid = (uid_t)-1
static

Definition at line 62 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:228
@ CONF_PROPERTY_NAME
Definition cf_file.c:67
@ CONF_PROPERTY_INSTANCE
Definition cf_file.c:68

Definition at line 71 of file cf_file.c.

◆ conf_property_name_len

size_t conf_property_name_len = NUM_ELEMENTS(conf_property_name)
static

Definition at line 75 of file cf_file.c.

◆ parse_tabs

char const parse_tabs[] = " "
static

Definition at line 4044 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 77 of file cf_file.c.

◆ server_unlang_section_len

size_t server_unlang_section_len = NUM_ELEMENTS(server_unlang_section)
static

Definition at line 93 of file cf_file.c.

◆ terminal_end_line

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

Definition at line 1600 of file cf_file.c.

◆ terminal_end_section

const bool terminal_end_section[SBUFF_CHAR_CLASS]
static
Initial value:
= {
['{'] = true,
}

Definition at line 1596 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:1763
static CONF_ITEM * process_foreach(cf_stack_t *stack)
Definition cf_file.c:2135
static CONF_ITEM * process_subrequest(cf_stack_t *stack)
Definition cf_file.c:1851
static CONF_ITEM * process_if(cf_stack_t *stack)
Definition cf_file.c:1612
static CONF_ITEM * process_catch(cf_stack_t *stack)
Definition cf_file.c:1972
static CONF_ITEM * process_switch(cf_stack_t *stack)
Definition cf_file.c:2379

Definition at line 2471 of file cf_file.c.

◆ unlang_keywords_len

int unlang_keywords_len = NUM_ELEMENTS(unlang_keywords)
static

Definition at line 2480 of file cf_file.c.