The FreeRADIUS server $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Loading...
Searching...
No Matches
Data Structures | Typedefs | Functions
pair_legacy.h File Reference

Legacy API functions - DO NOT USE IN NEW CODE. More...

#include <freeradius-devel/build.h>
#include <freeradius-devel/missing.h>
#include <freeradius-devel/util/dcursor.h>
#include <freeradius-devel/util/pair.h>
#include <freeradius-devel/util/value.h>
#include <freeradius-devel/util/token.h>
+ Include dependency graph for pair_legacy.h:

Go to the source code of this file.

Data Structures

struct  fr_pair_parse_s
 

Typedefs

typedef struct fr_pair_parse_s fr_pair_parse_t
 

Functions

int fr_pair_list_afrom_file (TALLOC_CTX *ctx, fr_dict_t const *dict, fr_pair_list_t *out, FILE *fp, bool *pfiledone)
 Read valuepairs from the fp up to End-Of-File.
 
fr_slen_t fr_pair_list_afrom_substr (fr_pair_parse_t const *root, fr_pair_parse_t *relative, fr_sbuff_t *in)
 Parse a fr_pair_list_t from a substring.
 
void fr_pair_list_move_op (fr_pair_list_t *to, fr_pair_list_t *from, fr_token_t op)
 Move pairs from source list to destination list respecting operator.
 

Detailed Description

Legacy API functions - DO NOT USE IN NEW CODE.

Definition in file pair_legacy.h.


Data Structure Documentation

◆ fr_pair_parse_s

struct fr_pair_parse_s

Definition at line 42 of file pair_legacy.h.

+ Collaboration diagram for fr_pair_parse_s:
Data Fields
bool allow_compare allow comparison operators
bool allow_crlf allow CRLF, and treat like comma
bool allow_zeros allow '\0' as end of attribute
TALLOC_CTX * ctx
fr_dict_attr_t const * da root da to start parsing from
fr_dict_t const * dict the protocol dictionary we use
bool end_of_list do we expect an end of list '}' character?
fr_dict_t const * internal a cached pointer to the internal dictionary
char last_char last character we read - ',', '
', or 0 for EOF
fr_pair_list_t * list list where output is placed
bool tainted source is tainted

Typedef Documentation

◆ fr_pair_parse_t

Function Documentation

◆ fr_pair_list_afrom_file()

int fr_pair_list_afrom_file ( TALLOC_CTX *  ctx,
fr_dict_t const *  dict,
fr_pair_list_t out,
FILE *  fp,
bool pfiledone 
)

Read valuepairs from the fp up to End-Of-File.

Parameters
[in]ctxfor talloc
[in]dictto resolve attributes in.
[in,out]outwhere the parsed fr_pair_ts will be appended.
[in]fpto read valuepairs from.
[out]pfiledonetrue if file parsing complete;
Returns
  • 0 on success
  • -1 on error

Definition at line 1137 of file pair_legacy.c.

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

◆ fr_pair_list_afrom_substr()

fr_slen_t fr_pair_list_afrom_substr ( fr_pair_parse_t const *  root,
fr_pair_parse_t relative,
fr_sbuff_t in 
)

Parse a fr_pair_list_t from a substring.

Syntax: ([raw.]|.)<name>[<.name>] op [(cast)] value...

A "raw" prefix creates a raw attribute, which allows us to encode raw data which might be invalid for the given data type. Or if a "(cast)" is given, the value is parsed as the specified data type. Note that casts can only be to a "leaf" data type, and not to a structural type such as "tlv", "group", "struct", etc. The "(cast)" syntax can only be used for "raw" attributes, and not for attributes which are known. The "name" can be either a known attribute, or a numerical OID. Either way, the final attribute which is created is marked as "raw" or "unknown", and is encoded via the "raw" rules, and not as the known data type.

If the first name begins with ".", then it is a relative name. The attribute is created in the context of the most recently created "structural" data type.

TBD - we have to determine what the heck that means...

The "name" can be one or more names from the input dictionary. The names must be known, as numerical OIDs can only be used when the "raw" prefix is used.

If there are multiple names (e.g. "foo.bar.baz"), then only the last name can be a "leaf" data type. All of the intermediate names must be "structural" data types.

Depending on the input arguments, the operator can be a comparison operator (==, <=, etc.). Or, else it can be an assignment operator (=, +=). The "=" operator is used to assign, and the "+=" operator is used to append. No other assignment operators are permitted. Note that "+=" cannot be used with relative names (i.e. where the name begins with ".")

The "value" can either be a "leaf" data type (e.g. number, IP address, etc.) or for "structural" data types it can be a sub-list. A sub-list is a set of attribute assignments which are surrounded by curly brackets "{...}". When a sub-list is specified, the contents must be either children of the parent attribute (for "tlv", "struct"), or children referenced by a "group", or internal attributes.

If an intermediate "name" is an ALIAS, then the attributes are created / used as if all intermediate names were specified. i.e. ALIAS is a short-cut for names (think "soft link), but it does not change the hierarchy for normal attributes. @iverbatim Examples -------- Name = value Leaf attributes. The value MUST be parsed as the leaf data type. Name = { children } Structural attributes. The children MUST be children of the parent. OR the children can be from the "internal" dictionary. OR for type 'group', children of the group reference (usually the dictionary root)

raw.Name = 0xabcdef Raw attributes. The value MUST be a hex string.

raw.Name = { children }

Parameters
[in]rootwhere we start parsing from
[in,out]relativewhere we left off, or where we should continue from
[in]ininput sbuff
Returns
  • <0 on error
  • 0 on no input
  • >0 on how many bytes of input we read

Definition at line 219 of file pair_legacy.c.

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

◆ fr_pair_list_move_op()

void fr_pair_list_move_op ( fr_pair_list_t to,
fr_pair_list_t from,
fr_token_t  op 
)

Move pairs from source list to destination list respecting operator.

Note
This function does some additional magic that's probably not needed in most places. Consider using radius_legacy_map_cmp() and radius_legacy_map_apply() instead.
fr_pair_list_free should be called on the head of the source list to free unmoved attributes (if they're no longer needed).
Parameters
[in,out]todestination list.
[in,out]fromsource list.
[in]opoperator for list move.

Definition at line 1222 of file pair_legacy.c.

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