Coverage Report

Created: 2026-05-11 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/freeradius-server/src/freeradius-devel/util/dict.h
Line
Count
Source
1
#pragma once
2
/*
3
 *  This program is free software; you can redistribute it and/or modify
4
 *  it under the terms of the GNU General Public License as published by
5
 *  the Free Software Foundation; either version 2 of the License, or
6
 *  (at your option) any later version.
7
 *
8
 *  This program is distributed in the hope that it will be useful,
9
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 *  GNU General Public License for more details.
12
 *
13
 *  You should have received a copy of the GNU General Public License
14
 *  along with this program; if not, write to the Free Software
15
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16
 */
17
18
/** Multi-protocol AVP dictionary API
19
 *
20
 * @file src/lib/util/dict.h
21
 *
22
 * @copyright 2015 The FreeRADIUS server project
23
 */
24
25
RCSIDH(dict_h, "$Id: 72ca2ba1a9a6f6a8a29d028b93fcc7e9d40058b8 $")
26
27
#ifdef __cplusplus
28
extern "C" {
29
#endif
30
31
#include <freeradius-devel/build.h>
32
#include <freeradius-devel/missing.h>
33
#include <freeradius-devel/util/dl.h>
34
#include <freeradius-devel/util/ext.h>
35
#include <freeradius-devel/util/hash.h>
36
#include <freeradius-devel/util/rb.h>
37
#include <freeradius-devel/util/sbuff.h>
38
#include <freeradius-devel/util/table.h>
39
#include <freeradius-devel/util/talloc.h>
40
#include <freeradius-devel/util/types.h>
41
42
43
/*
44
 *  Avoid circular type references.
45
 */
46
typedef struct dict_attr_s fr_dict_attr_t;
47
typedef struct fr_dict_s fr_dict_t;
48
49
typedef struct value_box_s fr_value_box_t;
50
51
/*
52
 *  Allow public and private versions of the same structures
53
 */
54
#ifdef _CONST
55
#  error _CONST can only be defined in the local header
56
#endif
57
#ifndef _DICT_PRIVATE
58
#  define _CONST const
59
#else
60
#  define _CONST
61
#endif
62
63
#ifdef WITH_VERIFY_PTR
64
7.46M
#  define DA_VERIFY(_x)   fr_dict_attr_verify(__FILE__, __LINE__, _x)
65
#else
66
#  define DA_VERIFY(_x)   fr_cond_assert(_x)
67
#endif
68
69
typedef struct dict_tokenize_ctx_s dict_tokenize_ctx_t;
70
typedef struct fr_dict_autoload_talloc_s fr_dict_autoload_talloc_t;
71
72
/** Values of the encryption flags
73
 */
74
typedef struct {
75
  unsigned int    is_root : 1;      //!< Is root of a dictionary.
76
77
  unsigned int    is_unknown : 1;     //!< This dictionary attribute is ephemeral
78
                ///< and not part of the main dictionary.
79
80
  unsigned int    is_raw : 1;     //!< This dictionary attribute was constructed
81
                ///< from a known attribute to allow the user
82
                ///< to assign octets values directly.
83
                ///< See .is_unknown to determine if it is
84
                ///< ephemeral.
85
  unsigned int    is_alias : 1;     //!< This isn't a real attribute, it's a reference to
86
                ///< to one.
87
  unsigned int    has_alias : 1;      //!< this attribute has an alias.
88
  unsigned int    internal : 1;     //!< Internal attribute, should not be received
89
                ///< in protocol packets, should not be encoded.
90
  unsigned int    array : 1;      //!< Pack multiples into 1 attr.
91
92
  unsigned int    is_known_width : 1;   //!< is treated as if it has a known width for structs
93
94
  unsigned int    has_value : 1;      //!< Has a value.
95
96
  unsigned int    is_unsigned : 1;          //!< hackity hack for dates and time deltas
97
98
  unsigned int    counter : 1;          //!< integer attribute is actually an impulse / counter
99
100
  unsigned int    name_only : 1;      //!< this attribute should always be referred to by name.
101
                ///< A number will be allocated, but the allocation scheme
102
                ///< will depend on the parent, and definition type, and
103
                ///< may not be stable in all instances.
104
105
  unsigned int    secret : 1;     //!< this attribute should be omitted in debug mode
106
107
  unsigned int    unsafe : 1;           //!< e.g. Cleartext-Password
108
109
  unsigned int    is_ref_target : 1;    //!< is the target of a ref, and cannot be moved.
110
111
  /*
112
   *  @todo - if we want to clean these fields up, make
113
   *  "subtype" and "type_size" both 4-bit bitfields.  That
114
   *  gives us an extra 8 bits for adding new flags, and we
115
   *  can likely get rid of "extra", in order to save one
116
   *  more bit.
117
   */
118
  unsigned int    extra : 1;      //!< really "subtype is used by dict, not by protocol"
119
120
  unsigned int    local : 1;          //!< is a local variable
121
122
  unsigned int    allow_flat : 1;     //!< only for FR_TYPE_GROUP, can contain "flat" lists.
123
124
  unsigned int    has_fixup : 1;      //! needs a fixup during dictionary parsing
125
126
  /*
127
   *  main: extra is set, then this field is is key, bit, or a uint16 length field.
128
   *  radius: is one of 9 options for flags
129
   *  dhcp v4/v6: DNS label, or partial DNS label
130
   */
131
  uint8_t     subtype;      //!< protocol-specific values, OR key fields
132
133
  /*
134
   *  TLVs: Number of bytes in the "type" field for TLVs (typically 1, 2, or 4)
135
   *
136
   *  da_is_bit_field(da): offset in the byte where this bit
137
   *    field ends.  This is only used as a caching mechanism
138
   *    during parsing of the dictionaries.
139
   *
140
   *  time/time_delta: fr_time_res_t, which has 4 possible values.
141
   *
142
   *  otherwise: unused.
143
   */
144
  uint8_t     type_size;      //!< Type size for TLVs
145
146
  /*
147
   *  da_is_bit_field(da): Length of the field in bits.
148
   *
149
   *  TLV: Number of bytes in the "length" field
150
   *
151
   *  otherwise: Length in bytes
152
   */
153
  uint16_t          length;       //!< length of the attribute
154
} fr_dict_attr_flags_t;
155
156
31.0k
#define flag_time_res type_size
157
980
#define flag_byte_offset type_size
158
159
/** subtype values for the dictionary when extra=1
160
 *
161
 */
162
enum {
163
  FLAG_EXTRA_NONE = 0,        //!< no extra meaning, should be invalid
164
  FLAG_KEY_FIELD,         //!< this is a key field for a subsequent struct
165
  FLAG_BIT_FIELD,               //!< bit field inside of a struct
166
  FLAG_LENGTH_UINT8,        //!< string / octets type is prefixed by uint8 of length
167
  FLAG_LENGTH_UINT16,       //!< string / octets type is prefixed by uint16 of length
168
};
169
170
263k
#define fr_dict_attr_is_key_field(_da) ((_da)->flags.extra && ((_da)->flags.subtype == FLAG_KEY_FIELD))
171
315k
#define da_is_bit_field(_da) ((_da)->flags.extra && ((_da)->flags.subtype == FLAG_BIT_FIELD))
172
87.1k
#define da_is_length_field(_da) ((_da)->flags.extra && (((_da)->flags.subtype == FLAG_LENGTH_UINT8) || ((_da)->flags.subtype == FLAG_LENGTH_UINT16)))
173
1.95M
#define da_is_length_field8(_da) ((_da)->flags.extra && ((_da)->flags.subtype == FLAG_LENGTH_UINT8))
174
1.94M
#define da_is_length_field16(_da) ((_da)->flags.extra && ((_da)->flags.subtype == FLAG_LENGTH_UINT16))
175
14.1k
#define da_length_offset(_da) ((_da)->flags.type_size)
176
177
/** Extension identifier
178
 *
179
 * @note New extension structures should also be added to the to the appropriate table in dict_ext.c
180
 */
181
typedef enum {
182
  FR_DICT_ATTR_EXT_NAME = 0,        //!< Name of the attribute.
183
  FR_DICT_ATTR_EXT_CHILDREN,        //!< Attribute has children.
184
  FR_DICT_ATTR_EXT_REF,         //!< Attribute references another
185
                ///< attribute and/or dictionary.
186
  FR_DICT_ATTR_EXT_KEY,         //!< UNION attribute references a key
187
  FR_DICT_ATTR_EXT_VENDOR,        //!< Cached vendor pointer.
188
  FR_DICT_ATTR_EXT_ENUMV,         //!< Enumeration values.
189
  FR_DICT_ATTR_EXT_NAMESPACE,       //!< Attribute has its own namespace.
190
  FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC,     //!< Protocol specific extensions
191
  FR_DICT_ATTR_EXT_MAX
192
} fr_dict_attr_ext_t;
193
194
/** Dictionary attribute
195
 */
196
struct dict_attr_s {
197
  fr_dict_t _CONST* _CONST dict;        //!< Dict attribute belongs to.
198
199
  char const    *name;        //!< Attribute name.
200
  size_t      name_len;     //!< Length of the name.
201
202
  unsigned int    attr;       //!< Attribute number.
203
  unsigned int    depth;        //!< Depth of nesting for this attribute.
204
205
  unsigned int    last_child_attr;    //!< highest value of last child attribute.
206
207
  fr_type_t   type;       //!< Value type.
208
209
  fr_dict_attr_t const  *parent;      //!< Immediate parent of this attribute.
210
  fr_dict_attr_t const  *next;        //!< Next child in bin.
211
212
  fr_dict_attr_flags_t  flags;        //!< Flags.
213
214
  struct {
215
    bool      attr_set : 1;   //!< Attribute number has been set.
216
                //!< We need the full range of values 0-UINT32_MAX
217
                ///< so we can't use any attr values to indicate
218
                ///< "unsetness".
219
220
    bool      finalised : 1;    //!< Attribute definition is complete and modifications
221
                ///< that would change the address of the memory chunk
222
                ///< of the attribute are no longer permitted.
223
  } state;
224
225
  char const    *filename;      //!< Where the attribute was defined.
226
                ///< this buffer's lifetime is bound to the
227
                ///< fr_dict_t.
228
  int     line;       //!< Line number where the attribute was defined.
229
230
  uint8_t     ext[FR_DICT_ATTR_EXT_MAX];  //!< Extensions to the dictionary attribute.
231
} CC_HINT(aligned(FR_EXT_ALIGNMENT));
232
233
/** Extension identifier
234
 *
235
 * @note New extension structures should also be added to the appropriate table in dict_ext.c
236
 */
237
typedef enum {
238
  FR_DICT_ENUM_EXT_ATTR_REF = 0,        //!< Reference to a child attribute associated with this key value
239
  FR_DICT_ENUM_EXT_MAX
240
} fr_dict_enum_ext_t;
241
242
/** Enum extension - Sub-struct or union pointer
243
 *
244
 */
245
typedef struct {
246
  fr_dict_attr_t const  *da;        //!< the child structure referenced by this value of key
247
} fr_dict_enum_ext_attr_ref_t;
248
249
/** Value of an enumerated attribute
250
 *
251
 * Maps one of more string values to integers and vice versa.
252
 */
253
typedef struct {
254
  char const    *name;        //!< Enum name.
255
  size_t      name_len;     //!< Allows for efficient name lookups when operating
256
                ///< on partial buffers.
257
  fr_value_box_t const  *value;       //!< Enum value (what name maps to).
258
259
  uint8_t     ext[FR_DICT_ENUM_EXT_MAX];  //!< Extensions to the dictionary attribute.
260
} fr_dict_enum_value_t CC_HINT(aligned(FR_EXT_ALIGNMENT));
261
262
/** Private enterprise
263
 *
264
 * Represents an IANA private enterprise allocation.
265
 *
266
 * The width of the private enterprise number must be the same for all protocols
267
 * so we can represent a vendor with a single struct.
268
 */
269
typedef struct {
270
  uint32_t    pen;        //!< Private enterprise number.
271
  bool      continuation;     //!< we only have one flag for now, for WiMAX
272
  size_t      type;         //!< Length of type data
273
  size_t      length;       //!< Length of length data
274
  char const    *name;        //!< Vendor name.
275
} fr_dict_vendor_t;
276
277
/** Specifies a value which must be present for the module to function
278
 *
279
 */
280
typedef struct {
281
  fr_value_box_t const  **out;        //!< Enumeration value.
282
  fr_dict_attr_t const  **attr;       //!< The protocol dictionary the attribute should
283
                ///< be resolved in. ** so it's a compile time
284
                ///< constant.
285
  char const    *name;        //!< of the attribute.
286
} fr_dict_enum_autoload_t;
287
288
/** Specifies an attribute which must be present for the module to function
289
 *
290
 */
291
typedef struct {
292
  fr_dict_attr_t const  **out;        //!< Where to write a pointer to the resolved
293
                //!< #fr_dict_attr_t.
294
  fr_dict_t const   **dict;       //!< The protocol dictionary the attribute should
295
                ///< be resolved in. ** so it's a compile time
296
                ///< constant.
297
  char const    *name;        //!< of the attribute.
298
  fr_type_t   type;       //!< of the attribute.  Mismatch is a fatal error.
299
} fr_dict_attr_autoload_t;
300
301
/** Specifies a dictionary which must be loaded/loadable for the module to function
302
 *
303
 */
304
typedef struct {
305
  fr_dict_t const   **out;        //!< Where to write a pointer to the loaded/resolved
306
                //!< #fr_dict_t.
307
  char const    *base_dir;      //!< Directory structure beneath share.
308
  char const    *proto;       //!< The protocol dictionary name.
309
} fr_dict_autoload_t;
310
311
0
#define DICT_AUTOLOAD_TERMINATOR { .out = NULL }
312
313
314
/** Errors returned by attribute lookup functions
315
 *
316
 */
317
typedef enum {
318
  FR_DICT_ATTR_OK     = 0,      //!< No error.
319
  FR_DICT_ATTR_NOTFOUND   = -1,     //!< Attribute couldn't be found.
320
  FR_DICT_ATTR_PROTOCOL_NOTFOUND  = -2,     //!< Protocol couldn't be found.
321
  FR_DICT_ATTR_PARSE_ERROR  = -3,     //!< Attribute string couldn't be parsed
322
  FR_DICT_ATTR_INTERNAL_ERROR = -4,     //!< Internal error occurred.
323
  FR_DICT_ATTR_OOM    = -5,     //!< Memory allocation error.
324
  FR_DICT_ATTR_NOT_DESCENDENT = -6,     //!< Attribute is not a descendent of the parent
325
                ///< attribute.
326
  FR_DICT_ATTR_NOT_ANCESTOR = -7,     //!< Attribute is not an ancestor of the child
327
                ///< attribute.
328
  FR_DICT_ATTR_NO_CHILDREN  = -8,     //!< Child lookup in attribute with no children.
329
  FR_DICT_ATTR_EINVAL   = -9      //!< Invalid arguments.
330
331
} fr_dict_attr_err_t;
332
333
typedef bool (*fr_dict_attr_valid_func_t)(fr_dict_attr_t *da);
334
typedef bool (*fr_dict_attr_type_parse_t)(fr_type_t *type, fr_dict_attr_t **da_p, char const *name);
335
336
/*
337
 *  Forward declarations to avoid circular references.
338
 */
339
typedef struct pair_list_s fr_pair_list_t;
340
typedef struct fr_dbuff_s fr_dbuff_t;
341
342
/** A generic interface for decoding packets to fr_pair_ts
343
 *
344
 * A decoding function should decode a single top level packet from wire format.
345
 *
346
 * Note that unlike #fr_tp_proto_decode_t, this function is NOT passed an encode_ctx.  That is because when we
347
 * do cross-protocol encoding, the "outer" protocol has no information it can share with the "inner" protocol.
348
 *
349
 * @param[in] ctx   to allocate new pairs in.
350
 * @param[in] vps   where new VPs will be added
351
 * @param[in] data    to decode.
352
 * @param[in] data_len    The length of the incoming data.
353
 * @return
354
 *  - <= 0 on error.  May be the offset (as a negative value) where the error occurred.
355
 *  - > 0 on success.  How many bytes were decoded.
356
 */
357
typedef ssize_t (*fr_dict_attr_decode_func_t)(TALLOC_CTX *ctx, fr_pair_list_t *vps,
358
                uint8_t const *data, size_t data_len);
359
360
/** A generic interface for encoding fr_pair_ts to packets
361
 *
362
 * An encoding function should encode multiple VPs to a wire format packet
363
 *
364
 * Note that unlike #fr_tp_proto_encode_t, this function is NOT passed an encode_ctx.  That is because when we
365
 * do cross-protocol encoding, the "outer" protocol has no information it can share with the "inner" protocol.
366
 *
367
 * @param[in] vps   vps to encode
368
 * @param[in] dbuff   buffer where data can be written
369
 * @return
370
 *  - <= 0 on error.  May be the offset (as a negative value) where the error occurred.
371
 *  - > 0 on success.  How many bytes were encoded
372
 */
373
typedef ssize_t(*fr_dict_attr_encode_func_t)(fr_dbuff_t *dbuff, fr_pair_list_t const *vps);
374
375
/** Init / free callbacks
376
 *
377
 *  Only for "autoref" usage.
378
 */
379
typedef int (*fr_dict_protocol_init_t)(void);
380
typedef void (*fr_dict_protocol_free_t)(void);
381
382
typedef struct fr_dict_flag_parser_rule_s fr_dict_flag_parser_rule_t;
383
384
/** Custom protocol-specific flag parsing function
385
 *
386
 * @note This function should be used to implement table based flag parsing.
387
 *
388
 * @param[in] da_p  we're currently populating
389
 * @param[in] value flag value to parse.
390
 * @param[in] rule  How to parse the flag.
391
 */
392
typedef int (*fr_dict_flag_parse_func_t)(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rule);
393
394
struct fr_dict_flag_parser_rule_s {
395
  fr_dict_flag_parse_func_t func;       //!< Custom parsing function to convert a flag value string to a C type value.
396
  void        *uctx;        //!< Use context to pass to the custom parsing function.
397
  bool        needs_value;      //!< This parsing flag must have a value.  Else we error.
398
};
399
400
/** Copy custom flags from one attribute to another
401
 *
402
 * @param[out] da_to    attribute to copy to.  Use for the talloc_ctx for any heap allocated flag values.
403
 * @param[out] flags_to   protocol specific flags struct to copy to.
404
 * @param[in] flags_from  protocol specific flags struct to copy from.
405
 * @return
406
 *  - 0 on success.
407
 *  - -1 on error.
408
 */
409
typedef int (*fr_dict_flags_copy_func_t)(fr_dict_attr_t *da_to, void *flags_to, void *flags_from);
410
411
/** Compare the protocol specific flags struct from two attributes
412
 *
413
 * @param[in] da_a  first attribute to compare.
414
 * @param[in] da_b  second attribute to compare.
415
 * @return
416
 *  - 0 if the flags are equal.
417
 *  - < 0 if da_a < da_b.
418
 *  - > 0 if da_a > da_b.
419
 */
420
 typedef int (*fr_dict_flags_cmp_func_t)(fr_dict_attr_t const *da_a, fr_dict_attr_t const *da_b);
421
422
/** Protocol specific custom flag definitnion
423
 *
424
 */
425
typedef struct  {
426
  fr_table_elem_name_t    name;       //!< Name of the flag
427
  fr_dict_flag_parser_rule_t  value;        //!< Function and context to parse the flag.
428
} fr_dict_flag_parser_t;
429
430
/** Define a flag setting function, which sets one bit in a fr_dict_attr_flags_t
431
 *
432
 * This is here, because AFAIK there's no completely portable way to get the bit
433
 * offset of a bit field in a structure.
434
 */
435
#define FR_DICT_ATTR_FLAG_FUNC(_struct, _name) \
436
236
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
236
{ \
438
236
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
236
  flags->_name = 1; \
440
236
  return 0; \
441
236
}
base.c:dict_flag_dns_label
Line
Count
Source
436
96
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
96
{ \
438
96
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
96
  flags->_name = 1; \
440
96
  return 0; \
441
96
}
base.c:dict_flag_partial_dns_label
Line
Count
Source
436
2
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
2
{ \
438
2
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
2
  flags->_name = 1; \
440
2
  return 0; \
441
2
}
base.c:dict_flag_exists
Line
Count
Source
436
24
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
24
{ \
438
24
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
24
  flags->_name = 1; \
440
24
  return 0; \
441
24
}
Unexecuted instantiation: base.c:dict_flag_dns_label_uncompressed
base.c:dict_flag_abinary
Line
Count
Source
436
10
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
10
{ \
438
10
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
10
  flags->_name = 1; \
440
10
  return 0; \
441
10
}
base.c:dict_flag_concat
Line
Count
Source
436
8
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
8
{ \
438
8
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
8
  flags->_name = 1; \
440
8
  return 0; \
441
8
}
base.c:dict_flag_extended
Line
Count
Source
436
8
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
8
{ \
438
8
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
8
  flags->_name = 1; \
440
8
  return 0; \
441
8
}
base.c:dict_flag_has_tag
Line
Count
Source
436
84
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
84
{ \
438
84
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
84
  flags->_name = 1; \
440
84
  return 0; \
441
84
}
base.c:dict_flag_long_extended
Line
Count
Source
436
4
static int dict_flag_##_name(fr_dict_attr_t **da_p, UNUSED char const *value, UNUSED fr_dict_flag_parser_rule_t const *rules)\
437
4
{ \
438
4
  _struct *flags = fr_dict_attr_ext(*da_p, FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC); \
439
4
  flags->_name = 1; \
440
4
  return 0; \
441
4
}
442
443
/** conf_parser_t which parses a single CONF_PAIR, writing the result to a field in a struct
444
 *
445
 * @param[in] _struct   containing the field to write the result to.
446
 * @param[in] _field    to write the flag to
447
 */
448
#  define FR_DICT_PROTOCOL_FLAG(_struct, _field)  \
449
  .type = FR_CTYPE_TO_TYPE((((_struct *)NULL)->_field)), \
450
  .offset = offsetof(_struct, _field)
451
452
/** Protocol-specific callbacks in libfreeradius-PROTOCOL
453
 *
454
 */
455
typedef struct {
456
  char const      *name;        //!< name of this protocol
457
458
  int       default_type_size;    //!< how many octets are in "type" field
459
  int       default_type_length;    //!< how many octets are in "length" field
460
461
  struct {
462
          /** Custom flags for this protocol
463
     */
464
    struct {
465
      fr_dict_flag_parser_t const *table;     //!< Flags for this protocol, an array of fr_dict_flag_parser_t
466
      size_t        table_len;    //!< Length of protocol_flags table.
467
468
      size_t        len;      //!< Length of the protocol specific flags structure.
469
                    ///< This is used to allocate a FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC
470
                    ///< extension of the specified length.
471
472
      fr_dict_flags_copy_func_t copy;     //!< Copy protocol-specific flags from one attribute to another.
473
                    ///< Called when copying attributes.
474
475
      fr_dict_flags_cmp_func_t  cmp;      //!< Compare protocol-specific flags from two attributes.
476
                    ///< Called when comparing attributes by their fields.
477
    } flags;
478
479
    fr_dict_attr_type_parse_t type_parse;   //!< parse unknown type names
480
    fr_dict_attr_valid_func_t   valid;      //!< Validation function to ensure that
481
                  ///< new attributes are valid.
482
  } attr;
483
484
  fr_dict_protocol_init_t   init;       //!< initialize the library
485
  fr_dict_protocol_free_t   free;       //!< free the library
486
487
  fr_dict_attr_decode_func_t  decode;       //!< for decoding attributes.  Used for implementing foreign
488
                  ///< protocol attributes.
489
  fr_dict_attr_encode_func_t  encode;       //!< for encoding attributes.  Used for implementing foreign
490
                  ///< protocol attributes.
491
} fr_dict_protocol_t;
492
493
typedef struct fr_dict_gctx_s fr_dict_gctx_t;
494
495
/*
496
 *  Dictionary constants
497
 */
498
#define FR_DICT_PROTO_MAX_NAME_LEN  (128)       //!< Maximum length of a protocol name.
499
22.1k
#define FR_DICT_ENUM_MAX_NAME_LEN (128)        //!< Maximum length of a enum value.
500
418
#define FR_DICT_VENDOR_MAX_NAME_LEN (128)        //!< Maximum length of a vendor name.
501
36.1k
#define FR_DICT_ATTR_MAX_NAME_LEN (128)        //!< Maximum length of a attribute name.
502
503
/** Maximum level of TLV nesting allowed
504
 */
505
13.3M
#define FR_DICT_TLV_NEST_MAX    (24)
506
507
/** Maximum TLV stack size
508
 *
509
 * The additional attributes are to account for
510
 *
511
 * Root + Vendor + NULL (top frame).
512
 * Root + Embedded protocol + Root + Vendor + NULL.
513
 *
514
 * Code should ensure that it doesn't run off the end of the stack,
515
 * as this could be remotely exploitable, using odd nesting.
516
 */
517
13.3M
#define FR_DICT_MAX_TLV_STACK   (FR_DICT_TLV_NEST_MAX + 5)
518
519
/** Characters allowed in a single dictionary attribute name
520
 *
521
 */
522
extern bool const fr_dict_attr_allowed_chars[SBUFF_CHAR_CLASS];
523
524
/** Characters allowed in a nested dictionary attribute name
525
 *
526
 */
527
extern bool const fr_dict_attr_nested_allowed_chars[SBUFF_CHAR_CLASS];
528
529
/** Characters that are allowed in dictionary enumeration value names
530
 *
531
 */
532
extern bool const fr_dict_enum_allowed_chars[SBUFF_CHAR_CLASS];
533
534
/** @name Dictionary structure extensions
535
 *
536
 * @{
537
 */
538
#include <freeradius-devel/util/dict_ext.h>
539
/** @} */
540
541
/** @name Programmatically create dictionary attributes and values
542
 *
543
 * @{
544
 */
545
int       fr_dict_attr_add_initialised(fr_dict_attr_t *da) CC_HINT(nonnull);
546
547
int     fr_dict_attr_add(fr_dict_t *dict, fr_dict_attr_t const *parent, char const *name, unsigned int attr,
548
           fr_type_t type, fr_dict_attr_flags_t const *flags) CC_HINT(nonnull(1,2,3));
549
550
int     fr_dict_attr_add_name_only(fr_dict_t *dict, fr_dict_attr_t const *parent,
551
               char const *name, fr_type_t type, fr_dict_attr_flags_t const *flags) CC_HINT(nonnull(1,2,3));
552
553
int     fr_dict_enum_add_name(fr_dict_attr_t *da, char const *name,
554
                fr_value_box_t const *value, bool coerce, bool replace);
555
556
int     fr_dict_enum_add_name_next(fr_dict_attr_t *da, char const *name) CC_HINT(nonnull);
557
558
int     fr_dict_str_to_argv(char *str, char **argv, int max_argc);
559
560
int     fr_dict_attr_acopy_local(fr_dict_attr_t const *dst, fr_dict_attr_t const *src) CC_HINT(nonnull);
561
562
int     fr_dict_attr_set_group(fr_dict_attr_t **da_p, fr_dict_attr_t const *ref) CC_HINT(nonnull);
563
/** @} */
564
565
/** @name Dict accessors
566
 *
567
 * @{
568
 */
569
fr_dict_protocol_t const *fr_dict_protocol(fr_dict_t const *dict);
570
/** @} */
571
572
/** @name Unknown ephemeral attributes
573
 *
574
 * @{
575
 */
576
fr_dict_attr_t    *fr_dict_attr_unknown_alloc(TALLOC_CTX *ctx, fr_dict_attr_t const *da, fr_type_t type) CC_HINT(nonnull(2));
577
578
fr_dict_attr_t const  *fr_dict_attr_unknown_add(fr_dict_t *dict, fr_dict_attr_t const *old) CC_HINT(nonnull);
579
580
void      fr_dict_attr_unknown_free(fr_dict_attr_t const **da);
581
582
fr_dict_attr_t    *fr_dict_attr_unknown_afrom_da(TALLOC_CTX *ctx, fr_dict_attr_t const *da) CC_HINT(nonnull(2));
583
584
static inline fr_dict_attr_t *fr_dict_attr_unknown_copy(TALLOC_CTX *ctx, fr_dict_attr_t const *da)
585
1.35M
{
586
1.35M
  fr_assert(da->flags.is_unknown);
587
588
1.35M
  return fr_dict_attr_unknown_afrom_da(ctx, da);
589
1.35M
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: base32.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: base64.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: calc.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: cbor.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: decode.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dict_ext.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dict_print.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dict_test.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_unknown_copy
dict_unknown.c:fr_dict_attr_unknown_copy
Line
Count
Source
585
26.6k
{
586
26.6k
  fr_assert(da->flags.is_unknown);
587
588
26.6k
  return fr_dict_attr_unknown_afrom_da(ctx, da);
589
26.6k
}
Unexecuted instantiation: dict_util.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dict_validate.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dl.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dns.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: edit.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: encode.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: timer.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: file.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: inet.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: log.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: packet.c:fr_dict_attr_unknown_copy
pair.c:fr_dict_attr_unknown_copy
Line
Count
Source
585
1.32M
{
586
1.32M
  fr_assert(da->flags.is_unknown);
587
588
1.32M
  return fr_dict_attr_unknown_afrom_da(ctx, da);
589
1.32M
}
Unexecuted instantiation: pair_inline.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: pair_print.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: print.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: proto.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: regex.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: socket.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: stats.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: struct.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: trie.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: types.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: uri.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: value.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: fuzzer.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: base.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: raw.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: udp.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: json.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: jpath.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: cache.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: cert.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: conf.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: ctx.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: engine.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: pairs.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: session.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: strerror.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: utils.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: verify.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: version.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: virtual_server.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: list.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: tcp.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: abinary.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: auth.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: cf_file.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: cf_parse.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: cf_util.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: client.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: command.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: connection.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dependency.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: dl_module.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: exec.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: exfile.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: global_lib.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: main_config.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: main_loop.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: map.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: map_proc.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: module.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: module_method.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: module_rlm.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: paircmp.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: pairmove.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: password.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: pool.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: request.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: request_data.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: snmp.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: state.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: trigger.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: trunk.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: users_file.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: util.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: call.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: call_env.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: caller.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: catch.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: child_request.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: compile.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: condition.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: detach.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: finally.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: foreach.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: function.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: group.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: interpret.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: io.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: limit.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: load_balance.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: map_builtin.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: parallel.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: return.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: subrequest.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: switch.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: timeout.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: tmpl.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: try.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: transaction.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_func.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: app_io.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: channel.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: coord.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: coord_pair.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: master.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: network.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: schedule.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: thread.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: worker.c:fr_dict_attr_unknown_copy
Unexecuted instantiation: vmps.c:fr_dict_attr_unknown_copy
590
591
fr_dict_attr_t    *fr_dict_attr_unknown_typed_afrom_num_raw(TALLOC_CTX *ctx,
592
                  fr_dict_attr_t const *parent,
593
                  unsigned int num, fr_type_t type, bool raw)
594
                  CC_HINT(nonnull(2));
595
596
static inline CC_HINT(nonnull(2)) fr_dict_attr_t *fr_dict_attr_unknown_typed_afrom_num(TALLOC_CTX *ctx,
597
                           fr_dict_attr_t const *parent,
598
                           unsigned int num, fr_type_t type)
599
52.2k
{
600
52.2k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, num, type, false);
601
52.2k
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: base32.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: base64.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: calc.c:fr_dict_attr_unknown_typed_afrom_num
cbor.c:fr_dict_attr_unknown_typed_afrom_num
Line
Count
Source
599
48.8k
{
600
48.8k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, num, type, false);
601
48.8k
}
Unexecuted instantiation: dict_ext.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dict_print.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dict_test.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dict_util.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dict_validate.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dl.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dns.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: edit.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: encode.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: timer.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: file.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: inet.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: log.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: packet.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pair.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pair_inline.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pair_print.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: print.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: proto.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: regex.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: socket.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: stats.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: struct.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: trie.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: types.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: uri.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: value.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: fuzzer.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: base.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: raw.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: udp.c:fr_dict_attr_unknown_typed_afrom_num
decode.c:fr_dict_attr_unknown_typed_afrom_num
Line
Count
Source
599
3.34k
{
600
3.34k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, num, type, false);
601
3.34k
}
Unexecuted instantiation: json.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: jpath.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: cache.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: cert.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: conf.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: ctx.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: engine.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pairs.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: session.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: strerror.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: utils.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: verify.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: version.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: virtual_server.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: list.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: tcp.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: abinary.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: auth.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: cf_file.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: cf_parse.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: cf_util.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: client.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: command.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: connection.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dependency.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: dl_module.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: exec.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: exfile.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: global_lib.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: main_config.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: main_loop.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: map.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: map_proc.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: module.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: module_method.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: module_rlm.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: paircmp.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pairmove.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: password.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: pool.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: request.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: request_data.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: snmp.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: state.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: trigger.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: trunk.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: users_file.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: util.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: call.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: call_env.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: caller.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: catch.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: child_request.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: compile.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: condition.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: detach.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: finally.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: foreach.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: function.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: group.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: interpret.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: io.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: limit.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: load_balance.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: map_builtin.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: parallel.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: return.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: subrequest.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: switch.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: timeout.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: tmpl.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: try.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: transaction.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_func.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: app_io.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: channel.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: coord.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: coord_pair.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: master.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: network.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: schedule.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: thread.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: worker.c:fr_dict_attr_unknown_typed_afrom_num
Unexecuted instantiation: vmps.c:fr_dict_attr_unknown_typed_afrom_num
602
603
604
static inline CC_HINT(nonnull(2)) fr_dict_attr_t *fr_dict_attr_unknown_vendor_afrom_num(TALLOC_CTX *ctx,
605
                      fr_dict_attr_t const *parent,
606
                      unsigned int vendor)
607
4.59k
{
608
4.59k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, vendor, FR_TYPE_VENDOR, false);
609
4.59k
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: base32.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: base64.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: calc.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: cbor.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_ext.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_print.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_test.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_util.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dict_validate.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dl.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dns.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: edit.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: encode.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: timer.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: file.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: inet.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: log.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: packet.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pair.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pair_inline.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pair_print.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: print.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: proto.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: regex.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: socket.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: stats.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: struct.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: trie.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: types.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: uri.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: value.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: fuzzer.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: base.c:fr_dict_attr_unknown_vendor_afrom_num
decode.c:fr_dict_attr_unknown_vendor_afrom_num
Line
Count
Source
607
4.59k
{
608
4.59k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, vendor, FR_TYPE_VENDOR, false);
609
4.59k
}
Unexecuted instantiation: raw.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: udp.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: json.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: jpath.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: cache.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: cert.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: conf.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: ctx.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: engine.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pairs.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: session.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: strerror.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: utils.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: verify.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: version.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: virtual_server.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: list.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: tcp.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: abinary.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: auth.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: cf_file.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: cf_parse.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: cf_util.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: client.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: command.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: connection.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dependency.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: dl_module.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: exec.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: exfile.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: global_lib.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: main_config.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: main_loop.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: map.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: map_proc.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: module.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: module_method.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: module_rlm.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: paircmp.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pairmove.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: password.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: pool.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: request.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: request_data.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: snmp.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: state.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: trigger.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: trunk.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: users_file.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: util.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: call.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: call_env.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: caller.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: catch.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: child_request.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: compile.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: condition.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: detach.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: finally.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: foreach.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: function.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: group.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: interpret.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: io.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: limit.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: load_balance.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: map_builtin.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: parallel.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: return.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: subrequest.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: switch.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: timeout.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: tmpl.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: try.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: transaction.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_func.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: app_io.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: channel.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: coord.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: coord_pair.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: master.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: network.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: schedule.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: thread.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: worker.c:fr_dict_attr_unknown_vendor_afrom_num
Unexecuted instantiation: vmps.c:fr_dict_attr_unknown_vendor_afrom_num
610
611
static inline CC_HINT(nonnull(2)) fr_dict_attr_t *fr_dict_attr_unknown_raw_afrom_num(TALLOC_CTX *ctx,
612
                         fr_dict_attr_t const *parent,
613
                         unsigned int attr)
614
1.54M
{
615
1.54M
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, attr, FR_TYPE_OCTETS, true);
616
1.54M
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: base32.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: base64.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: calc.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: cbor.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_ext.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_print.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_test.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_util.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dict_validate.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dl.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dns.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: edit.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: encode.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: timer.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: file.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: inet.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: log.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: packet.c:fr_dict_attr_unknown_raw_afrom_num
pair.c:fr_dict_attr_unknown_raw_afrom_num
Line
Count
Source
614
339k
{
615
339k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, attr, FR_TYPE_OCTETS, true);
616
339k
}
Unexecuted instantiation: pair_inline.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: pair_print.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: print.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: proto.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: regex.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: socket.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: stats.c:fr_dict_attr_unknown_raw_afrom_num
struct.c:fr_dict_attr_unknown_raw_afrom_num
Line
Count
Source
614
3.05k
{
615
3.05k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, attr, FR_TYPE_OCTETS, true);
616
3.05k
}
Unexecuted instantiation: trie.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: types.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: uri.c:fr_dict_attr_unknown_raw_afrom_num
value.c:fr_dict_attr_unknown_raw_afrom_num
Line
Count
Source
614
5.44k
{
615
5.44k
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, attr, FR_TYPE_OCTETS, true);
616
5.44k
}
Unexecuted instantiation: fuzzer.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: base.c:fr_dict_attr_unknown_raw_afrom_num
decode.c:fr_dict_attr_unknown_raw_afrom_num
Line
Count
Source
614
1.19M
{
615
1.19M
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, attr, FR_TYPE_OCTETS, true);
616
1.19M
}
Unexecuted instantiation: raw.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: udp.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: json.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: jpath.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: cache.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: cert.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: conf.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: ctx.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: engine.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: pairs.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: session.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: strerror.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: utils.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: verify.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: version.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: virtual_server.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: list.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: tcp.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: abinary.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: auth.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: cf_file.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: cf_parse.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: cf_util.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: client.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: command.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: connection.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dependency.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: dl_module.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: exec.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: exfile.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: global_lib.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: main_config.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: main_loop.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: map.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: map_proc.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: module.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: module_method.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: module_rlm.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: paircmp.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: pairmove.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: password.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: pool.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: request.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: request_data.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: snmp.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: state.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: trigger.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: trunk.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: users_file.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: util.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: call.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: call_env.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: caller.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: catch.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: child_request.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: compile.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: condition.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: detach.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: finally.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: foreach.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: function.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: group.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: interpret.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: io.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: limit.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: load_balance.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: map_builtin.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: parallel.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: return.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: subrequest.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: switch.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: timeout.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: tmpl.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: try.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: transaction.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_func.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: app_io.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: channel.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: coord.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: coord_pair.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: master.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: network.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: schedule.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: thread.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: worker.c:fr_dict_attr_unknown_raw_afrom_num
Unexecuted instantiation: vmps.c:fr_dict_attr_unknown_raw_afrom_num
617
618
static inline CC_HINT(nonnull(2)) fr_dict_attr_t *fr_dict_attr_unknown_afrom_oid(TALLOC_CTX *ctx,
619
                         fr_dict_attr_t const *parent,
620
                         fr_sbuff_t *in, fr_type_t type)
621
0
{
622
0
  uint32_t    num;
623
0
  fr_sbuff_parse_error_t  sberr;
624
625
0
  fr_sbuff_out(&sberr, &num, in);
626
0
  if (sberr != FR_SBUFF_PARSE_OK) return NULL;
627
628
0
  return fr_dict_attr_unknown_typed_afrom_num_raw(ctx, parent, num, type, true);
629
0
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: base32.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: base64.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: calc.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: cbor.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: decode.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_ext.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_print.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_test.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_util.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dict_validate.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dl.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dns.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: edit.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: encode.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: timer.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: file.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: inet.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: log.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: packet.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pair.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pair_inline.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pair_print.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: print.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: proto.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: regex.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: socket.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: stats.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: struct.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: trie.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: types.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: uri.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: value.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: fuzzer.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: base.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: raw.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: udp.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: json.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: jpath.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: cache.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: cert.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: conf.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: ctx.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: engine.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pairs.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: session.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: strerror.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: utils.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: verify.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: version.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: virtual_server.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: list.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: tcp.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: abinary.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: auth.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: cf_file.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: cf_parse.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: cf_util.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: client.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: command.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: connection.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dependency.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: dl_module.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: exec.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: exfile.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: global_lib.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: main_config.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: main_loop.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: map.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: map_proc.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: module.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: module_method.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: module_rlm.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: paircmp.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pairmove.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: password.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: pool.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: request.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: request_data.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: snmp.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: state.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: trigger.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: trunk.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: users_file.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: util.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: call.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: call_env.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: caller.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: catch.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: child_request.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: compile.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: condition.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: detach.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: finally.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: foreach.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: function.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: group.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: interpret.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: io.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: limit.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: load_balance.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: map_builtin.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: parallel.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: return.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: subrequest.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: switch.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: timeout.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: tmpl.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: try.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: transaction.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_func.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: app_io.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: channel.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: coord.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: coord_pair.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: master.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: network.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: schedule.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: thread.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: worker.c:fr_dict_attr_unknown_afrom_oid
Unexecuted instantiation: vmps.c:fr_dict_attr_unknown_afrom_oid
630
631
static inline CC_HINT(nonnull(2)) fr_dict_attr_t *fr_dict_attr_unknown_raw_afrom_da(TALLOC_CTX *ctx, fr_dict_attr_t const *da)
632
89.6k
{
633
89.6k
  return fr_dict_attr_unknown_alloc(ctx, da, FR_TYPE_OCTETS);
634
89.6k
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: base32.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: base64.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: calc.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: cbor.c:fr_dict_attr_unknown_raw_afrom_da
decode.c:fr_dict_attr_unknown_raw_afrom_da
Line
Count
Source
632
89.6k
{
633
89.6k
  return fr_dict_attr_unknown_alloc(ctx, da, FR_TYPE_OCTETS);
634
89.6k
}
Unexecuted instantiation: dict_ext.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dict_print.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dict_test.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dict_util.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dict_validate.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dl.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dns.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: edit.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: encode.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: timer.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: file.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: inet.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: log.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: packet.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pair.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pair_inline.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pair_print.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: print.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: proto.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: regex.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: socket.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: stats.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: struct.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: trie.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: types.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: uri.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: value.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: fuzzer.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: base.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: raw.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: udp.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: json.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: jpath.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: cache.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: cert.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: conf.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: ctx.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: engine.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pairs.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: session.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: strerror.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: utils.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: verify.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: version.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: virtual_server.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: list.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: tcp.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: abinary.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: auth.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: cf_file.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: cf_parse.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: cf_util.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: client.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: command.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: connection.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dependency.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: dl_module.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: exec.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: exfile.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: global_lib.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: main_config.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: main_loop.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: map.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: map_proc.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: module.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: module_method.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: module_rlm.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: paircmp.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pairmove.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: password.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: pool.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: request.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: request_data.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: snmp.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: state.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: trigger.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: trunk.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: users_file.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: util.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: call.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: call_env.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: caller.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: catch.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: child_request.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: compile.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: condition.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: detach.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: finally.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: foreach.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: function.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: group.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: interpret.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: io.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: limit.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: load_balance.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: map_builtin.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: parallel.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: return.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: subrequest.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: switch.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: timeout.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: tmpl.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: try.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: transaction.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_func.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: app_io.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: channel.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: coord.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: coord_pair.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: master.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: network.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: schedule.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: thread.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: worker.c:fr_dict_attr_unknown_raw_afrom_da
Unexecuted instantiation: vmps.c:fr_dict_attr_unknown_raw_afrom_da
635
636
637
fr_slen_t   fr_dict_attr_unknown_afrom_oid_substr(TALLOC_CTX *ctx,
638
                    fr_dict_attr_t const **out,
639
                    fr_dict_attr_t const *parent,
640
                    fr_sbuff_t *in, fr_type_t type)
641
                    CC_HINT(nonnull(2,3,4));
642
643
int     fr_dict_attr_unknown_parent_to_known(fr_dict_attr_t *da, fr_dict_attr_t const *parent);
644
645
fr_dict_attr_t const  *fr_dict_attr_unknown_resolve(fr_dict_t const *dict, fr_dict_attr_t const *da);
646
/** @} */
647
648
/** @name Attribute comparisons
649
 *
650
 * @{
651
 */
652
int8_t      fr_dict_attr_ordered_cmp(fr_dict_attr_t const *a, fr_dict_attr_t const *b);
653
654
static inline CC_HINT(nonnull) int8_t fr_dict_attr_cmp(fr_dict_attr_t const *a, fr_dict_attr_t const *b)
655
0
{
656
0
  int8_t ret;
657
658
  /*
659
   *  Comparing unknowns or raws is expensive
660
   *  because we need to check the lineage.
661
   */
662
0
  if (a->flags.is_unknown | a->flags.is_raw | b->flags.is_unknown | b->flags.is_raw) {
663
0
    ret = CMP(a->depth, b->depth);
664
0
    if (ret != 0) return ret;
665
666
0
    ret = CMP(a->attr, b->attr);
667
0
    if (ret != 0) return ret;
668
669
0
    ret = (a->parent == NULL) - (b->parent == NULL);
670
0
    if ((ret != 0) || !a->parent) return ret;
671
672
0
    return fr_dict_attr_cmp(a->parent, b->parent);
673
0
  }
674
675
  /*
676
   *  Comparing knowns is cheap because the
677
   *  DAs are unique.
678
   */
679
0
  return CMP(a, b);
680
0
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_cmp
Unexecuted instantiation: base32.c:fr_dict_attr_cmp
Unexecuted instantiation: base64.c:fr_dict_attr_cmp
Unexecuted instantiation: calc.c:fr_dict_attr_cmp
Unexecuted instantiation: cbor.c:fr_dict_attr_cmp
Unexecuted instantiation: decode.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_ext.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_print.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_test.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_util.c:fr_dict_attr_cmp
Unexecuted instantiation: dict_validate.c:fr_dict_attr_cmp
Unexecuted instantiation: dl.c:fr_dict_attr_cmp
Unexecuted instantiation: dns.c:fr_dict_attr_cmp
Unexecuted instantiation: edit.c:fr_dict_attr_cmp
Unexecuted instantiation: encode.c:fr_dict_attr_cmp
Unexecuted instantiation: timer.c:fr_dict_attr_cmp
Unexecuted instantiation: file.c:fr_dict_attr_cmp
Unexecuted instantiation: inet.c:fr_dict_attr_cmp
Unexecuted instantiation: log.c:fr_dict_attr_cmp
Unexecuted instantiation: packet.c:fr_dict_attr_cmp
Unexecuted instantiation: pair.c:fr_dict_attr_cmp
Unexecuted instantiation: pair_inline.c:fr_dict_attr_cmp
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_cmp
Unexecuted instantiation: pair_print.c:fr_dict_attr_cmp
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_cmp
Unexecuted instantiation: print.c:fr_dict_attr_cmp
Unexecuted instantiation: proto.c:fr_dict_attr_cmp
Unexecuted instantiation: regex.c:fr_dict_attr_cmp
Unexecuted instantiation: socket.c:fr_dict_attr_cmp
Unexecuted instantiation: stats.c:fr_dict_attr_cmp
Unexecuted instantiation: struct.c:fr_dict_attr_cmp
Unexecuted instantiation: trie.c:fr_dict_attr_cmp
Unexecuted instantiation: types.c:fr_dict_attr_cmp
Unexecuted instantiation: uri.c:fr_dict_attr_cmp
Unexecuted instantiation: value.c:fr_dict_attr_cmp
Unexecuted instantiation: fuzzer.c:fr_dict_attr_cmp
Unexecuted instantiation: base.c:fr_dict_attr_cmp
Unexecuted instantiation: base.c:fr_dict_attr_cmp
Unexecuted instantiation: raw.c:fr_dict_attr_cmp
Unexecuted instantiation: udp.c:fr_dict_attr_cmp
Unexecuted instantiation: json.c:fr_dict_attr_cmp
Unexecuted instantiation: jpath.c:fr_dict_attr_cmp
Unexecuted instantiation: cache.c:fr_dict_attr_cmp
Unexecuted instantiation: cert.c:fr_dict_attr_cmp
Unexecuted instantiation: conf.c:fr_dict_attr_cmp
Unexecuted instantiation: ctx.c:fr_dict_attr_cmp
Unexecuted instantiation: engine.c:fr_dict_attr_cmp
Unexecuted instantiation: pairs.c:fr_dict_attr_cmp
Unexecuted instantiation: session.c:fr_dict_attr_cmp
Unexecuted instantiation: strerror.c:fr_dict_attr_cmp
Unexecuted instantiation: utils.c:fr_dict_attr_cmp
Unexecuted instantiation: verify.c:fr_dict_attr_cmp
Unexecuted instantiation: version.c:fr_dict_attr_cmp
Unexecuted instantiation: virtual_server.c:fr_dict_attr_cmp
Unexecuted instantiation: list.c:fr_dict_attr_cmp
Unexecuted instantiation: tcp.c:fr_dict_attr_cmp
Unexecuted instantiation: abinary.c:fr_dict_attr_cmp
Unexecuted instantiation: auth.c:fr_dict_attr_cmp
Unexecuted instantiation: cf_file.c:fr_dict_attr_cmp
Unexecuted instantiation: cf_parse.c:fr_dict_attr_cmp
Unexecuted instantiation: cf_util.c:fr_dict_attr_cmp
Unexecuted instantiation: client.c:fr_dict_attr_cmp
Unexecuted instantiation: command.c:fr_dict_attr_cmp
Unexecuted instantiation: connection.c:fr_dict_attr_cmp
Unexecuted instantiation: dependency.c:fr_dict_attr_cmp
Unexecuted instantiation: dl_module.c:fr_dict_attr_cmp
Unexecuted instantiation: exec.c:fr_dict_attr_cmp
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_cmp
Unexecuted instantiation: exfile.c:fr_dict_attr_cmp
Unexecuted instantiation: global_lib.c:fr_dict_attr_cmp
Unexecuted instantiation: main_config.c:fr_dict_attr_cmp
Unexecuted instantiation: main_loop.c:fr_dict_attr_cmp
Unexecuted instantiation: map.c:fr_dict_attr_cmp
Unexecuted instantiation: map_proc.c:fr_dict_attr_cmp
Unexecuted instantiation: module.c:fr_dict_attr_cmp
Unexecuted instantiation: module_method.c:fr_dict_attr_cmp
Unexecuted instantiation: module_rlm.c:fr_dict_attr_cmp
Unexecuted instantiation: paircmp.c:fr_dict_attr_cmp
Unexecuted instantiation: pairmove.c:fr_dict_attr_cmp
Unexecuted instantiation: password.c:fr_dict_attr_cmp
Unexecuted instantiation: pool.c:fr_dict_attr_cmp
Unexecuted instantiation: request.c:fr_dict_attr_cmp
Unexecuted instantiation: request_data.c:fr_dict_attr_cmp
Unexecuted instantiation: snmp.c:fr_dict_attr_cmp
Unexecuted instantiation: state.c:fr_dict_attr_cmp
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_cmp
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_cmp
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_cmp
Unexecuted instantiation: trigger.c:fr_dict_attr_cmp
Unexecuted instantiation: trunk.c:fr_dict_attr_cmp
Unexecuted instantiation: users_file.c:fr_dict_attr_cmp
Unexecuted instantiation: util.c:fr_dict_attr_cmp
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_cmp
Unexecuted instantiation: call.c:fr_dict_attr_cmp
Unexecuted instantiation: call_env.c:fr_dict_attr_cmp
Unexecuted instantiation: caller.c:fr_dict_attr_cmp
Unexecuted instantiation: catch.c:fr_dict_attr_cmp
Unexecuted instantiation: child_request.c:fr_dict_attr_cmp
Unexecuted instantiation: compile.c:fr_dict_attr_cmp
Unexecuted instantiation: condition.c:fr_dict_attr_cmp
Unexecuted instantiation: detach.c:fr_dict_attr_cmp
Unexecuted instantiation: finally.c:fr_dict_attr_cmp
Unexecuted instantiation: foreach.c:fr_dict_attr_cmp
Unexecuted instantiation: function.c:fr_dict_attr_cmp
Unexecuted instantiation: group.c:fr_dict_attr_cmp
Unexecuted instantiation: interpret.c:fr_dict_attr_cmp
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_cmp
Unexecuted instantiation: io.c:fr_dict_attr_cmp
Unexecuted instantiation: limit.c:fr_dict_attr_cmp
Unexecuted instantiation: load_balance.c:fr_dict_attr_cmp
Unexecuted instantiation: map_builtin.c:fr_dict_attr_cmp
Unexecuted instantiation: parallel.c:fr_dict_attr_cmp
Unexecuted instantiation: return.c:fr_dict_attr_cmp
Unexecuted instantiation: subrequest.c:fr_dict_attr_cmp
Unexecuted instantiation: switch.c:fr_dict_attr_cmp
Unexecuted instantiation: timeout.c:fr_dict_attr_cmp
Unexecuted instantiation: tmpl.c:fr_dict_attr_cmp
Unexecuted instantiation: try.c:fr_dict_attr_cmp
Unexecuted instantiation: transaction.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_func.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_cmp
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_cmp
Unexecuted instantiation: app_io.c:fr_dict_attr_cmp
Unexecuted instantiation: channel.c:fr_dict_attr_cmp
Unexecuted instantiation: coord.c:fr_dict_attr_cmp
Unexecuted instantiation: coord_pair.c:fr_dict_attr_cmp
Unexecuted instantiation: master.c:fr_dict_attr_cmp
Unexecuted instantiation: network.c:fr_dict_attr_cmp
Unexecuted instantiation: schedule.c:fr_dict_attr_cmp
Unexecuted instantiation: thread.c:fr_dict_attr_cmp
Unexecuted instantiation: worker.c:fr_dict_attr_cmp
Unexecuted instantiation: vmps.c:fr_dict_attr_cmp
681
682
/** Compare two dictionary attributes by their contents
683
 *
684
 * @param[in] a First attribute to compare.
685
 * @param[in] b Second attribute to compare.
686
 * @return
687
 *  - 0 if the attributes are equal.
688
 *  - -1 if a < b.
689
 *  - +1 if a > b.
690
 */
691
static inline CC_HINT(nonnull) int8_t fr_dict_attr_cmp_fields(const fr_dict_attr_t *a, const fr_dict_attr_t *b)
692
0
{
693
0
  int8_t ret;
694
0
  fr_dict_protocol_t const *a_proto = fr_dict_protocol(a->dict);
695
696
  /*
697
   *  Technically this isn't a property of the attribute
698
   *  but we need them to be the same to be able to
699
   *  compare protocol specific flags successfully.
700
   */
701
0
  ret = CMP(a_proto, fr_dict_protocol(b->dict));
702
0
  if (ret != 0) return ret;
703
704
0
  ret = CMP(a->attr, b->attr);
705
0
  if (ret != 0) return ret;
706
707
0
  ret = CMP(a->parent, b->parent);
708
0
  if (ret != 0) return ret;
709
710
0
  ret = CMP(fr_dict_vendor_num_by_da(a), fr_dict_vendor_num_by_da(b));
711
0
  if (ret != 0) return ret;
712
713
  /*
714
   *  Compare protocol specific flags
715
   */
716
0
  if (a_proto->attr.flags.cmp && (ret = a_proto->attr.flags.cmp(a, b))) return ret;
717
718
0
  return CMP(memcmp(&a->flags, &b->flags, sizeof(a->flags)), 0);
719
0
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: base32.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: base64.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: calc.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: cbor.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: decode.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_ext.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_print.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_test.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_util.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dict_validate.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dl.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dns.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: edit.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: encode.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: timer.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: file.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: inet.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: log.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: packet.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pair.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pair_inline.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pair_print.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: print.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: proto.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: regex.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: socket.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: stats.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: struct.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: trie.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: types.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: uri.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: value.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: fuzzer.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: base.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: raw.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: udp.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: json.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: jpath.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: cache.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: cert.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: conf.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: ctx.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: engine.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pairs.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: session.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: strerror.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: utils.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: verify.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: version.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: virtual_server.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: list.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: tcp.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: abinary.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: auth.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: cf_file.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: cf_parse.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: cf_util.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: client.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: command.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: connection.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dependency.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: dl_module.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: exec.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: exfile.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: global_lib.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: main_config.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: main_loop.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: map.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: map_proc.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: module.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: module_method.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: module_rlm.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: paircmp.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pairmove.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: password.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: pool.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: request.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: request_data.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: snmp.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: state.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: trigger.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: trunk.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: users_file.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: util.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: call.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: call_env.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: caller.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: catch.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: child_request.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: compile.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: condition.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: detach.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: finally.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: foreach.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: function.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: group.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: interpret.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: io.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: limit.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: load_balance.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: map_builtin.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: parallel.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: return.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: subrequest.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: switch.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: timeout.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: tmpl.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: try.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: transaction.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_func.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: app_io.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: channel.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: coord.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: coord_pair.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: master.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: network.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: schedule.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: thread.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: worker.c:fr_dict_attr_cmp_fields
Unexecuted instantiation: vmps.c:fr_dict_attr_cmp_fields
720
/** @} */
721
722
/** @name Debugging functions
723
 *
724
 * @{
725
 */
726
void      fr_dict_namespace_debug(FILE *fp, fr_dict_attr_t const *da);
727
728
void      fr_dict_attr_debug(FILE *fp, fr_dict_attr_t const *da);
729
730
void      fr_dict_debug(FILE *fp, fr_dict_t const *dict);
731
732
void      fr_dict_export(FILE *fp, fr_dict_t const *dict);
733
734
void      fr_dict_alias_export(FILE *fp, fr_dict_attr_t const *parent);
735
/** @} */
736
737
/** @name Attribute lineage
738
 *
739
 * @{
740
 */
741
fr_dict_attr_t const  *fr_dict_attr_common_parent(fr_dict_attr_t const *a, fr_dict_attr_t const *b, bool is_ancestor);
742
743
int     fr_dict_oid_component_legacy(unsigned int *out, char const **oid);
744
745
fr_slen_t   fr_dict_attr_flags_print(fr_sbuff_t *out, fr_dict_t const *dict,
746
             fr_type_t type, fr_dict_attr_flags_t const *flags);
747
748
fr_slen_t   fr_dict_attr_oid_print(fr_sbuff_t *out,
749
                 fr_dict_attr_t const *ancestor, fr_dict_attr_t const *da, bool numeric);
750
0
#define     FR_DICT_ATTR_OID_PRINT_RETURN(...) FR_SBUFF_RETURN(fr_dict_attr_oid_print, ##__VA_ARGS__)
751
752
fr_slen_t   fr_dict_attr_by_oid_legacy(fr_dict_attr_t const **parent,
753
                     unsigned int *attr, char const *oid) CC_HINT(nonnull);
754
755
fr_slen_t   fr_dict_oid_component(fr_dict_attr_err_t *err,
756
                fr_dict_attr_t const **out, fr_dict_attr_t const *parent,
757
                fr_sbuff_t *in, fr_sbuff_term_t const *tt)
758
                CC_HINT(nonnull(2,3,4));
759
760
fr_slen_t   fr_dict_attr_by_oid_substr(fr_dict_attr_err_t *err,
761
               fr_dict_attr_t const **out, fr_dict_attr_t const *parent,
762
               fr_sbuff_t *in, fr_sbuff_term_t const *tt)
763
               CC_HINT(nonnull(2,3,4));
764
765
fr_dict_attr_t const  *fr_dict_attr_by_oid(fr_dict_attr_err_t *err,
766
               fr_dict_attr_t const *parent, char const *oid)
767
               CC_HINT(nonnull(2,3));
768
769
bool      fr_dict_attr_can_contain(fr_dict_attr_t const *parent, fr_dict_attr_t const *child) CC_HINT(nonnull);
770
771
/** @} */
772
773
/** @name Attribute, vendor and dictionary lookup
774
 *
775
 * @{
776
 */
777
778
/** @hidecallergraph */
779
fr_dict_attr_t const  *fr_dict_root(fr_dict_t const *dict) CC_HINT(nonnull);
780
781
bool      fr_dict_is_read_only(fr_dict_t const *dict);
782
783
dl_t      *fr_dict_dl(fr_dict_t const *dict);
784
785
fr_slen_t   fr_dict_by_protocol_substr(fr_dict_attr_err_t *err,
786
               fr_dict_t const **out, fr_sbuff_t *name, fr_dict_t const *dict_def);
787
788
fr_dict_t const   *fr_dict_by_protocol_name(char const *name);
789
790
fr_dict_t const   *fr_dict_by_protocol_num(unsigned int num);
791
792
fr_dict_attr_t const  *fr_dict_unlocal(fr_dict_attr_t const *da) CC_HINT(nonnull);
793
794
fr_dict_t const   *fr_dict_proto_dict(fr_dict_t const *dict) CC_HINT(nonnull);
795
796
fr_dict_t const   *fr_dict_by_da(fr_dict_attr_t const *da) CC_HINT(nonnull);
797
798
fr_dict_t const   *fr_dict_by_attr_name(fr_dict_attr_t const **found, char const *name);
799
800
bool      fr_dict_compatible(fr_dict_t const *dict1, fr_dict_t const *dict2) CC_HINT(nonnull);
801
802
/** Return true if this attribute is parented directly off the dictionary root
803
 *
804
 * @param[in] da    to check.
805
 * @return
806
 *  - true if attribute is top level.
807
 *  - false if attribute is not top level.
808
 */
809
static inline bool fr_dict_attr_is_top_level(fr_dict_attr_t const *da)
810
0
{
811
0
  if (unlikely(!da) || unlikely(!da->parent)) return false;
812
0
  return da->parent->flags.is_root;
813
0
}
Unexecuted instantiation: fuzzer_dhcpv6.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_util.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_dhcpv4.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_cbor.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_der.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_dns.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_tacacs.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_bfd.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_radius.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_tftp.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer_vmps.c:fr_dict_attr_is_top_level
Unexecuted instantiation: base32.c:fr_dict_attr_is_top_level
Unexecuted instantiation: base64.c:fr_dict_attr_is_top_level
Unexecuted instantiation: calc.c:fr_dict_attr_is_top_level
Unexecuted instantiation: cbor.c:fr_dict_attr_is_top_level
Unexecuted instantiation: decode.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_ext.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_fixup.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_print.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_test.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_tokenize.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_unknown.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_util.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dict_validate.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dl.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dns.c:fr_dict_attr_is_top_level
Unexecuted instantiation: edit.c:fr_dict_attr_is_top_level
Unexecuted instantiation: encode.c:fr_dict_attr_is_top_level
Unexecuted instantiation: timer.c:fr_dict_attr_is_top_level
Unexecuted instantiation: file.c:fr_dict_attr_is_top_level
Unexecuted instantiation: inet.c:fr_dict_attr_is_top_level
Unexecuted instantiation: log.c:fr_dict_attr_is_top_level
Unexecuted instantiation: packet.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pair.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pair_inline.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pair_legacy.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pair_print.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pair_tokenize.c:fr_dict_attr_is_top_level
Unexecuted instantiation: print.c:fr_dict_attr_is_top_level
Unexecuted instantiation: proto.c:fr_dict_attr_is_top_level
Unexecuted instantiation: regex.c:fr_dict_attr_is_top_level
Unexecuted instantiation: socket.c:fr_dict_attr_is_top_level
Unexecuted instantiation: stats.c:fr_dict_attr_is_top_level
Unexecuted instantiation: struct.c:fr_dict_attr_is_top_level
Unexecuted instantiation: trie.c:fr_dict_attr_is_top_level
Unexecuted instantiation: types.c:fr_dict_attr_is_top_level
Unexecuted instantiation: uri.c:fr_dict_attr_is_top_level
Unexecuted instantiation: value.c:fr_dict_attr_is_top_level
Unexecuted instantiation: fuzzer.c:fr_dict_attr_is_top_level
Unexecuted instantiation: base.c:fr_dict_attr_is_top_level
Unexecuted instantiation: raw.c:fr_dict_attr_is_top_level
Unexecuted instantiation: udp.c:fr_dict_attr_is_top_level
Unexecuted instantiation: json.c:fr_dict_attr_is_top_level
Unexecuted instantiation: jpath.c:fr_dict_attr_is_top_level
Unexecuted instantiation: cache.c:fr_dict_attr_is_top_level
Unexecuted instantiation: cert.c:fr_dict_attr_is_top_level
Unexecuted instantiation: conf.c:fr_dict_attr_is_top_level
Unexecuted instantiation: ctx.c:fr_dict_attr_is_top_level
Unexecuted instantiation: engine.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pairs.c:fr_dict_attr_is_top_level
Unexecuted instantiation: session.c:fr_dict_attr_is_top_level
Unexecuted instantiation: strerror.c:fr_dict_attr_is_top_level
Unexecuted instantiation: utils.c:fr_dict_attr_is_top_level
Unexecuted instantiation: verify.c:fr_dict_attr_is_top_level
Unexecuted instantiation: version.c:fr_dict_attr_is_top_level
Unexecuted instantiation: virtual_server.c:fr_dict_attr_is_top_level
Unexecuted instantiation: list.c:fr_dict_attr_is_top_level
Unexecuted instantiation: tcp.c:fr_dict_attr_is_top_level
Unexecuted instantiation: abinary.c:fr_dict_attr_is_top_level
Unexecuted instantiation: auth.c:fr_dict_attr_is_top_level
Unexecuted instantiation: cf_file.c:fr_dict_attr_is_top_level
Unexecuted instantiation: cf_parse.c:fr_dict_attr_is_top_level
Unexecuted instantiation: cf_util.c:fr_dict_attr_is_top_level
Unexecuted instantiation: client.c:fr_dict_attr_is_top_level
Unexecuted instantiation: command.c:fr_dict_attr_is_top_level
Unexecuted instantiation: connection.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dependency.c:fr_dict_attr_is_top_level
Unexecuted instantiation: dl_module.c:fr_dict_attr_is_top_level
Unexecuted instantiation: exec.c:fr_dict_attr_is_top_level
Unexecuted instantiation: exec_legacy.c:fr_dict_attr_is_top_level
Unexecuted instantiation: exfile.c:fr_dict_attr_is_top_level
Unexecuted instantiation: global_lib.c:fr_dict_attr_is_top_level
Unexecuted instantiation: main_config.c:fr_dict_attr_is_top_level
Unexecuted instantiation: main_loop.c:fr_dict_attr_is_top_level
Unexecuted instantiation: map.c:fr_dict_attr_is_top_level
Unexecuted instantiation: map_proc.c:fr_dict_attr_is_top_level
Unexecuted instantiation: module.c:fr_dict_attr_is_top_level
Unexecuted instantiation: module_method.c:fr_dict_attr_is_top_level
Unexecuted instantiation: module_rlm.c:fr_dict_attr_is_top_level
Unexecuted instantiation: paircmp.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pairmove.c:fr_dict_attr_is_top_level
Unexecuted instantiation: password.c:fr_dict_attr_is_top_level
Unexecuted instantiation: pool.c:fr_dict_attr_is_top_level
Unexecuted instantiation: request.c:fr_dict_attr_is_top_level
Unexecuted instantiation: request_data.c:fr_dict_attr_is_top_level
Unexecuted instantiation: snmp.c:fr_dict_attr_is_top_level
Unexecuted instantiation: state.c:fr_dict_attr_is_top_level
Unexecuted instantiation: tmpl_dcursor.c:fr_dict_attr_is_top_level
Unexecuted instantiation: tmpl_eval.c:fr_dict_attr_is_top_level
Unexecuted instantiation: tmpl_tokenize.c:fr_dict_attr_is_top_level
Unexecuted instantiation: trigger.c:fr_dict_attr_is_top_level
Unexecuted instantiation: trunk.c:fr_dict_attr_is_top_level
Unexecuted instantiation: users_file.c:fr_dict_attr_is_top_level
Unexecuted instantiation: util.c:fr_dict_attr_is_top_level
Unexecuted instantiation: virtual_servers.c:fr_dict_attr_is_top_level
Unexecuted instantiation: call.c:fr_dict_attr_is_top_level
Unexecuted instantiation: call_env.c:fr_dict_attr_is_top_level
Unexecuted instantiation: caller.c:fr_dict_attr_is_top_level
Unexecuted instantiation: catch.c:fr_dict_attr_is_top_level
Unexecuted instantiation: child_request.c:fr_dict_attr_is_top_level
Unexecuted instantiation: compile.c:fr_dict_attr_is_top_level
Unexecuted instantiation: condition.c:fr_dict_attr_is_top_level
Unexecuted instantiation: detach.c:fr_dict_attr_is_top_level
Unexecuted instantiation: finally.c:fr_dict_attr_is_top_level
Unexecuted instantiation: foreach.c:fr_dict_attr_is_top_level
Unexecuted instantiation: function.c:fr_dict_attr_is_top_level
Unexecuted instantiation: group.c:fr_dict_attr_is_top_level
Unexecuted instantiation: interpret.c:fr_dict_attr_is_top_level
Unexecuted instantiation: interpret_synchronous.c:fr_dict_attr_is_top_level
Unexecuted instantiation: io.c:fr_dict_attr_is_top_level
Unexecuted instantiation: limit.c:fr_dict_attr_is_top_level
Unexecuted instantiation: load_balance.c:fr_dict_attr_is_top_level
Unexecuted instantiation: map_builtin.c:fr_dict_attr_is_top_level
Unexecuted instantiation: parallel.c:fr_dict_attr_is_top_level
Unexecuted instantiation: return.c:fr_dict_attr_is_top_level
Unexecuted instantiation: subrequest.c:fr_dict_attr_is_top_level
Unexecuted instantiation: switch.c:fr_dict_attr_is_top_level
Unexecuted instantiation: timeout.c:fr_dict_attr_is_top_level
Unexecuted instantiation: tmpl.c:fr_dict_attr_is_top_level
Unexecuted instantiation: try.c:fr_dict_attr_is_top_level
Unexecuted instantiation: transaction.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_alloc.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_builtin.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_eval.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_expr.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_func.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_inst.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_pair.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_purify.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_redundant.c:fr_dict_attr_is_top_level
Unexecuted instantiation: xlat_tokenize.c:fr_dict_attr_is_top_level
Unexecuted instantiation: app_io.c:fr_dict_attr_is_top_level
Unexecuted instantiation: channel.c:fr_dict_attr_is_top_level
Unexecuted instantiation: coord.c:fr_dict_attr_is_top_level
Unexecuted instantiation: coord_pair.c:fr_dict_attr_is_top_level
Unexecuted instantiation: master.c:fr_dict_attr_is_top_level
Unexecuted instantiation: network.c:fr_dict_attr_is_top_level
Unexecuted instantiation: schedule.c:fr_dict_attr_is_top_level
Unexecuted instantiation: thread.c:fr_dict_attr_is_top_level
Unexecuted instantiation: worker.c:fr_dict_attr_is_top_level
Unexecuted instantiation: vmps.c:fr_dict_attr_is_top_level
814
815
fr_dict_vendor_t const  *fr_dict_vendor_by_da(fr_dict_attr_t const *da);
816
817
fr_dict_vendor_t const  *fr_dict_vendor_by_name(fr_dict_t const *dict, char const *name);
818
819
fr_dict_vendor_t const  *fr_dict_vendor_by_num(fr_dict_t const *dict, uint32_t vendor_pen);
820
821
fr_dict_attr_t const  *fr_dict_vendor_da_by_num(fr_dict_attr_t const *vendor_root, uint32_t vendor_pen);
822
823
fr_slen_t   fr_dict_attr_search_by_qualified_name_substr(fr_dict_attr_err_t *err, fr_dict_attr_t const **out,
824
                     fr_dict_t const *dict_def,
825
                     fr_sbuff_t *name, fr_sbuff_term_t const *tt,
826
                     bool internal, bool foreign)
827
                     CC_HINT(nonnull(2, 4));
828
829
fr_slen_t   fr_dict_attr_search_by_name_substr(fr_dict_attr_err_t *err, fr_dict_attr_t const **out,
830
                   fr_dict_t const *dict_def,
831
                 fr_sbuff_t *name, fr_sbuff_term_t const *tt,
832
                 bool internal, bool foreign)
833
                 CC_HINT(nonnull(2, 4));
834
835
fr_slen_t   fr_dict_attr_search_by_qualified_oid_substr(fr_dict_attr_err_t *err, fr_dict_attr_t const **out,
836
                        fr_dict_t const *dict_def,
837
                    fr_sbuff_t *in, fr_sbuff_term_t const *tt,
838
                    bool internal, bool foreign)
839
                    CC_HINT(nonnull(2, 4));
840
841
fr_dict_attr_t const  *fr_dict_attr_search_by_qualified_oid(fr_dict_attr_err_t *err,
842
                          fr_dict_t const *dict_def, char const *attr,
843
                          bool internal, bool foreign)
844
                    CC_HINT(nonnull(3));
845
846
fr_slen_t   fr_dict_attr_search_by_oid_substr(fr_dict_attr_err_t *err, fr_dict_attr_t const **out,
847
                fr_dict_t const *dict_def,
848
                fr_sbuff_t *in, fr_sbuff_term_t const *tt,
849
                bool internal, bool foreign)
850
                CC_HINT(nonnull(2, 4));
851
852
fr_slen_t   fr_dict_attr_by_name_substr(fr_dict_attr_err_t *err, fr_dict_attr_t const **out,
853
                fr_dict_attr_t const *parent,
854
                fr_sbuff_t *name, fr_sbuff_term_t const *tt)
855
                CC_HINT(nonnull(2,3,4));
856
857
fr_dict_attr_t const  *fr_dict_attr_by_name(fr_dict_attr_err_t *err, fr_dict_attr_t const *parent,
858
                char const *attr)
859
                CC_HINT(nonnull(2,3));
860
861
fr_dict_attr_t const  *fr_dict_attr_child_by_num(fr_dict_attr_t const *parent, unsigned int attr);
862
863
typedef fr_hash_iter_t fr_dict_enum_iter_t; /* Alias this in case we want to change it in future */
864
865
fr_dict_enum_value_t const *fr_dict_enum_iter_init(fr_dict_attr_t const *da, fr_dict_enum_iter_t *iter);
866
867
fr_dict_enum_value_t const *fr_dict_enum_iter_next(fr_dict_attr_t const *da, fr_dict_enum_iter_t *iter);
868
869
fr_dict_enum_value_t const *fr_dict_enum_by_value(fr_dict_attr_t const *da, fr_value_box_t const *value);
870
871
char const    *fr_dict_enum_name_by_value(fr_dict_attr_t const *da, fr_value_box_t const *value);
872
873
fr_dict_enum_value_t const *fr_dict_enum_by_name(fr_dict_attr_t const *da, char const *name, ssize_t len);
874
875
fr_slen_t   fr_dict_enum_by_name_substr(fr_dict_enum_value_t **out, fr_dict_attr_t const *da, fr_sbuff_t *in);
876
877
fr_slen_t   fr_dict_enum_name_from_substr(fr_sbuff_t *out, fr_sbuff_parse_error_t *err,
878
                  fr_sbuff_t *in, fr_sbuff_term_t const *tt);
879
880
static inline fr_slen_t fr_dict_enum_name_afrom_substr(TALLOC_CTX *ctx, char **out, fr_sbuff_parse_error_t *err,
881
                   fr_sbuff_t *in, fr_sbuff_term_t const *tt)
882
0
      SBUFF_OUT_TALLOC_FUNC_NO_LEN_DEF(fr_dict_enum_name_from_substr, err, in, tt)
883
/** @} */
884
885
/** @name Dictionary and protocol loading
886
 *
887
 * @{
888
 */
889
int     fr_dict_internal_afrom_file(fr_dict_t **out, char const *dict_subdir,
890
                char const *dependent) CC_HINT(nonnull(1,3));
891
892
int     fr_dict_protocol_afrom_file(fr_dict_t **out, char const *proto_name, char const *proto_dir,
893
                char const *dependent) CC_HINT(nonnull(1,2,4));
894
895
fr_dict_t   *fr_dict_protocol_alloc(fr_dict_t const *parent);
896
897
int     fr_dict_protocol_reference(fr_dict_attr_t const **da_p, fr_dict_attr_t const *root, fr_sbuff_t *in) CC_HINT(nonnull);
898
899
int     fr_dict_read(fr_dict_t *dict, char const *dict_dir, char const *filename) CC_HINT(nonnull(3));
900
901
bool      fr_dict_filename_loaded(fr_dict_t const *dict, char const *dict_dir, char const *filename) CC_HINT(nonnull(2,3));
902
/** @} */
903
904
/** @name Autoloader interface
905
 *
906
 * @{
907
 */
908
int     fr_dict_enum_autoload(fr_dict_enum_autoload_t const *to_load) CC_HINT(nonnull);
909
910
int     fr_dict_attr_autoload(fr_dict_attr_autoload_t const *to_load) CC_HINT(nonnull);
911
912
694
#define     fr_dict_autoload(_to_load) _fr_dict_autoload(_to_load, __FILE__)
913
int     _fr_dict_autoload(fr_dict_autoload_t const *to_load, char const *dependent);
914
915
690
#define     fr_dict_autofree(_to_free) _fr_dict_autofree(_to_free, __FILE__)
916
int     _fr_dict_autofree(fr_dict_autoload_t const *to_free, char const *dependent);
917
918
0
#define     fr_dict_autoload_talloc(_ctx, _dict_out, _proto) _fr_dict_autoload_talloc(_ctx, _dict_out, _proto, __FILE__)
919
fr_dict_autoload_talloc_t *_fr_dict_autoload_talloc(TALLOC_CTX *ctx, fr_dict_t const **out, char const *proto, char const *dependent);
920
921
int     fr_dl_dict_enum_autoload(dl_t const *module, void *symbol, void *uctx) CC_HINT(nonnull(1,2));
922
923
int     fr_dl_dict_attr_autoload(dl_t const *module, void *symbol, void *uctx) CC_HINT(nonnull(1,2));
924
925
int     fr_dl_dict_autoload(dl_t const *module, void *symbol, void *uctx) CC_HINT(nonnull(1,2));
926
927
void      fr_dl_dict_autofree(dl_t const *module, void *symbol, void *uctx) CC_HINT(nonnull(1,2));
928
/** @} */
929
930
/** @name Allocating and freeing
931
 *
932
 * @{
933
 */
934
fr_dict_t     *fr_dict_alloc(char const *proto_name, unsigned int proto_number) CC_HINT(nonnull);
935
936
int     fr_dict_dependent_add(fr_dict_t const *dict, char const *dependent) CC_HINT(nonnull);
937
938
int     fr_dict_free(fr_dict_t **dict, char const *dependent) CC_HINT(nonnull);
939
940
int     fr_dict_const_free(fr_dict_t const **dict, char const *dependent) CC_HINT(nonnull);
941
/** @} */
942
943
/** @name Global dictionary management
944
 *
945
 * @{
946
 */
947
fr_dict_gctx_t    *fr_dict_global_ctx_init(TALLOC_CTX *ctx, bool free_at_exit, char const *dict_dir) CC_HINT(nonnull(3));
948
949
void      fr_dict_global_ctx_perm_check(fr_dict_gctx_t *gctx, bool enable) CC_HINT(nonnull);
950
951
void      fr_dict_global_ctx_set(fr_dict_gctx_t const *gctx) CC_HINT(nonnull);
952
953
int     fr_dict_global_ctx_free(fr_dict_gctx_t const *gctx) CC_HINT(nonnull);
954
955
int     fr_dict_global_ctx_dir_set(char const *dict_dir) CC_HINT(nonnull);
956
957
void      fr_dict_global_ctx_read_only(void);
958
959
void      fr_dict_gctx_debug(FILE *fp, fr_dict_gctx_t const *gctx) CC_HINT(nonnull(1));
960
961
char const    *fr_dict_global_ctx_dir(void);
962
963
typedef struct fr_hash_iter_s fr_dict_global_ctx_iter_t;
964
965
fr_dict_t   *fr_dict_global_ctx_iter_init(fr_dict_global_ctx_iter_t *iter) CC_HINT(nonnull);
966
967
fr_dict_t   *fr_dict_global_ctx_iter_next(fr_dict_global_ctx_iter_t *iter) CC_HINT(nonnull);
968
969
fr_dict_t   *fr_dict_unconst(fr_dict_t const *dict) CC_HINT(nonnull);
970
971
fr_dict_attr_t    *fr_dict_attr_unconst(fr_dict_attr_t const *da) CC_HINT(nonnull);
972
973
fr_dict_t const   *fr_dict_internal(void);
974
975
/** @} */
976
977
/** @name Dictionary testing and validation
978
 *
979
 * @{
980
 */
981
void      dict_dctx_debug(dict_tokenize_ctx_t *dctx) CC_HINT(nonnull);
982
983
int     fr_dict_parse_str(fr_dict_t *dict, char const *str,
984
            fr_dict_attr_t const *parent) CC_HINT(nonnull(2,3));
985
986
ssize_t     fr_dict_valid_name(char const *name, ssize_t len) CC_HINT(nonnull);
987
988
ssize_t     fr_dict_valid_oid_str(char const *name, ssize_t len) CC_HINT(nonnull);
989
990
fr_dict_attr_t const  *fr_dict_attr_iterate_children(fr_dict_attr_t const *parent,
991
                   fr_dict_attr_t const **prev) CC_HINT(nonnull);
992
993
typedef int   (*fr_dict_walk_t)(fr_dict_attr_t const *da, void *uctx);
994
995
int     fr_dict_walk(fr_dict_attr_t const *da, fr_dict_walk_t callback, void *uctx) CC_HINT(nonnull(1,2));
996
997
void      fr_dict_attr_verify(char const *file, int line, fr_dict_attr_t const *da) CC_HINT(nonnull);
998
/** @} */
999
1000
#undef _CONST
1001
1002
#ifdef __cplusplus
1003
}
1004
#endif