/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 | } |
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 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 | } |
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 | } |
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 |