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 <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)
 
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
2e9ca9832629d30e85cf5027ed30764f1832db64
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 1099 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 2338 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 560 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 2176 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 163 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 924 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 695 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 874 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 680 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 755 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 828 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 3365 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 3895 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 3506 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 569 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 3722 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 3823 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 1050 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 1021 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 3353 of file cf_file.c.

+ Here is the caller graph for this function:

◆ cf_md5_init()

void cf_md5_init ( void  )

Definition at line 3340 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 3346 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 3935 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 4067 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 986 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 4305 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 3951 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 4006 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 3688 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 3902 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 484 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 1104 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 3303 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 1920 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 2362 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 1940 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 1828 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 1991 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 1468 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 1115 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 1619 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 1707 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 2235 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 1395 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 3338 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 2351 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 3900 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 1456 of file cf_file.c.

◆ terminal_end_section

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

Definition at line 1452 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:1619
static CONF_ITEM * process_foreach(cf_stack_t *stack)
Definition cf_file.c:1991
static CONF_ITEM * process_subrequest(cf_stack_t *stack)
Definition cf_file.c:1707
static CONF_ITEM * process_if(cf_stack_t *stack)
Definition cf_file.c:1468
static CONF_ITEM * process_catch(cf_stack_t *stack)
Definition cf_file.c:1828
static CONF_ITEM * process_switch(cf_stack_t *stack)
Definition cf_file.c:2235

Definition at line 2327 of file cf_file.c.

◆ unlang_keywords_len

int unlang_keywords_len = NUM_ELEMENTS(unlang_keywords)
static

Definition at line 2336 of file cf_file.c.