/src/freeradius-server/src/freeradius-devel/server/section.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 | | /** |
19 | | * $Id: 54d9910ff7655df493eea2a935f0f00ff539d877 $ |
20 | | * |
21 | | * @file lib/server/section.h |
22 | | * @brief Structures which identify sections |
23 | | * |
24 | | * @copyright 2024 Arran Cudbard-Bell (a.cudbardb@freeradius.org) |
25 | | */ |
26 | | RCSIDH(section_h, "$Id: 54d9910ff7655df493eea2a935f0f00ff539d877 $") |
27 | | |
28 | | #include <freeradius-devel/server/cf_util.h> |
29 | | |
30 | | #ifdef __cplusplus |
31 | | extern "C" { |
32 | | #endif |
33 | | |
34 | | /** Define a section name consisting of a verb and a noun |
35 | | * |
36 | | * @param[in] _name1 verb name. |
37 | | * @param[in] _name2 noun name. |
38 | | */ |
39 | 0 | #define SECTION_NAME(_name1, _name2) &(section_name_t){ .name1 = _name1, .name2 = _name2 } |
40 | | |
41 | | /** Section name identifier |
42 | | */ |
43 | | typedef struct { |
44 | | char const *name1; //!< First section name. Usually a verb like 'recv', 'send', etc... |
45 | | char const *name2; //!< Second section name. Usually a packet type like 'access-request', 'access-accept', etc... |
46 | | } section_name_t; |
47 | | |
48 | | /* Compare two sections based on name2 |
49 | | * |
50 | | * Respects CF_IDENT_ANY values |
51 | | * |
52 | | * @param[in] a First section name. |
53 | | * @param[in] b Second section name. |
54 | | * |
55 | | * @return |
56 | | * - 1 if name2 values match. |
57 | | * - 0 if name2 values don't match. |
58 | | */ |
59 | | static inline int section_name2_match(section_name_t const *a, section_name_t const *b) |
60 | 0 | { |
61 | 0 | if ((a->name2 == CF_IDENT_ANY) || (b->name2 == CF_IDENT_ANY)) return 1; |
62 | 0 | if (!a->name2 || !b->name2) { |
63 | 0 | if (a->name2 == b->name2) return 1; |
64 | 0 | return 0; |
65 | 0 | } |
66 | | |
67 | 0 | return (strcmp(a->name2, b->name2) == 0) ? 1 : 0; |
68 | 0 | } Unexecuted instantiation: json.c:section_name2_match Unexecuted instantiation: jpath.c:section_name2_match Unexecuted instantiation: base.c:section_name2_match Unexecuted instantiation: cache.c:section_name2_match Unexecuted instantiation: conf.c:section_name2_match Unexecuted instantiation: ctx.c:section_name2_match Unexecuted instantiation: engine.c:section_name2_match Unexecuted instantiation: log.c:section_name2_match Unexecuted instantiation: pairs.c:section_name2_match Unexecuted instantiation: session.c:section_name2_match Unexecuted instantiation: strerror.c:section_name2_match Unexecuted instantiation: verify.c:section_name2_match Unexecuted instantiation: virtual_server.c:section_name2_match Unexecuted instantiation: auth.c:section_name2_match Unexecuted instantiation: cf_file.c:section_name2_match Unexecuted instantiation: cf_parse.c:section_name2_match Unexecuted instantiation: client.c:section_name2_match Unexecuted instantiation: connection.c:section_name2_match Unexecuted instantiation: exfile.c:section_name2_match Unexecuted instantiation: global_lib.c:section_name2_match Unexecuted instantiation: main_config.c:section_name2_match Unexecuted instantiation: main_loop.c:section_name2_match Unexecuted instantiation: map.c:section_name2_match Unexecuted instantiation: map_proc.c:section_name2_match Unexecuted instantiation: module.c:section_name2_match Unexecuted instantiation: module_method.c:section_name2_match Unexecuted instantiation: module_rlm.c:section_name2_match Unexecuted instantiation: paircmp.c:section_name2_match Unexecuted instantiation: pairmove.c:section_name2_match Unexecuted instantiation: pool.c:section_name2_match Unexecuted instantiation: section.c:section_name2_match Unexecuted instantiation: state.c:section_name2_match Unexecuted instantiation: tmpl_dcursor.c:section_name2_match Unexecuted instantiation: tmpl_eval.c:section_name2_match Unexecuted instantiation: tmpl_tokenize.c:section_name2_match Unexecuted instantiation: trigger.c:section_name2_match Unexecuted instantiation: trunk.c:section_name2_match Unexecuted instantiation: users_file.c:section_name2_match Unexecuted instantiation: util.c:section_name2_match Unexecuted instantiation: virtual_servers.c:section_name2_match Unexecuted instantiation: call.c:section_name2_match Unexecuted instantiation: call_env.c:section_name2_match Unexecuted instantiation: caller.c:section_name2_match Unexecuted instantiation: catch.c:section_name2_match Unexecuted instantiation: child_request.c:section_name2_match Unexecuted instantiation: compile.c:section_name2_match Unexecuted instantiation: condition.c:section_name2_match Unexecuted instantiation: detach.c:section_name2_match Unexecuted instantiation: edit.c:section_name2_match Unexecuted instantiation: finally.c:section_name2_match Unexecuted instantiation: foreach.c:section_name2_match Unexecuted instantiation: function.c:section_name2_match Unexecuted instantiation: group.c:section_name2_match Unexecuted instantiation: interpret.c:section_name2_match Unexecuted instantiation: interpret_synchronous.c:section_name2_match Unexecuted instantiation: io.c:section_name2_match Unexecuted instantiation: limit.c:section_name2_match Unexecuted instantiation: load_balance.c:section_name2_match Unexecuted instantiation: map_builtin.c:section_name2_match Unexecuted instantiation: parallel.c:section_name2_match Unexecuted instantiation: return.c:section_name2_match Unexecuted instantiation: subrequest.c:section_name2_match Unexecuted instantiation: switch.c:section_name2_match Unexecuted instantiation: timeout.c:section_name2_match Unexecuted instantiation: tmpl.c:section_name2_match Unexecuted instantiation: try.c:section_name2_match Unexecuted instantiation: transaction.c:section_name2_match Unexecuted instantiation: xlat.c:section_name2_match Unexecuted instantiation: xlat_alloc.c:section_name2_match Unexecuted instantiation: xlat_builtin.c:section_name2_match Unexecuted instantiation: xlat_eval.c:section_name2_match Unexecuted instantiation: xlat_expr.c:section_name2_match Unexecuted instantiation: xlat_func.c:section_name2_match Unexecuted instantiation: xlat_inst.c:section_name2_match Unexecuted instantiation: xlat_pair.c:section_name2_match Unexecuted instantiation: xlat_purify.c:section_name2_match Unexecuted instantiation: xlat_redundant.c:section_name2_match Unexecuted instantiation: xlat_tokenize.c:section_name2_match Unexecuted instantiation: app_io.c:section_name2_match Unexecuted instantiation: coord.c:section_name2_match Unexecuted instantiation: coord_pair.c:section_name2_match Unexecuted instantiation: master.c:section_name2_match Unexecuted instantiation: network.c:section_name2_match Unexecuted instantiation: schedule.c:section_name2_match Unexecuted instantiation: thread.c:section_name2_match Unexecuted instantiation: worker.c:section_name2_match |
69 | | |
70 | | /* Compare two section names |
71 | | * |
72 | | * Respects CF_IDENT_ANY values |
73 | | * |
74 | | * @param[in] a First section name. |
75 | | * @param[in] b Second section name. |
76 | | * |
77 | | * @return |
78 | | * - 1 if the section names match. |
79 | | * - 0 if the section names don't match. |
80 | | * - -1 if name1 doesn't match. |
81 | | * |
82 | | */ |
83 | | static inline int section_name_match(section_name_t const *a, section_name_t const *b) |
84 | 0 | { |
85 | 0 | if ((a->name1 == CF_IDENT_ANY) || (b->name1 == CF_IDENT_ANY)) goto name2; |
86 | | |
87 | 0 | if (strcmp(a->name1, b->name1) != 0) return -1; |
88 | | |
89 | 0 | name2: |
90 | 0 | return section_name2_match(a, b); |
91 | 0 | } Unexecuted instantiation: json.c:section_name_match Unexecuted instantiation: jpath.c:section_name_match Unexecuted instantiation: base.c:section_name_match Unexecuted instantiation: cache.c:section_name_match Unexecuted instantiation: conf.c:section_name_match Unexecuted instantiation: ctx.c:section_name_match Unexecuted instantiation: engine.c:section_name_match Unexecuted instantiation: log.c:section_name_match Unexecuted instantiation: pairs.c:section_name_match Unexecuted instantiation: session.c:section_name_match Unexecuted instantiation: strerror.c:section_name_match Unexecuted instantiation: verify.c:section_name_match Unexecuted instantiation: virtual_server.c:section_name_match Unexecuted instantiation: auth.c:section_name_match Unexecuted instantiation: cf_file.c:section_name_match Unexecuted instantiation: cf_parse.c:section_name_match Unexecuted instantiation: client.c:section_name_match Unexecuted instantiation: connection.c:section_name_match Unexecuted instantiation: exfile.c:section_name_match Unexecuted instantiation: global_lib.c:section_name_match Unexecuted instantiation: main_config.c:section_name_match Unexecuted instantiation: main_loop.c:section_name_match Unexecuted instantiation: map.c:section_name_match Unexecuted instantiation: map_proc.c:section_name_match Unexecuted instantiation: module.c:section_name_match Unexecuted instantiation: module_method.c:section_name_match Unexecuted instantiation: module_rlm.c:section_name_match Unexecuted instantiation: paircmp.c:section_name_match Unexecuted instantiation: pairmove.c:section_name_match Unexecuted instantiation: pool.c:section_name_match Unexecuted instantiation: section.c:section_name_match Unexecuted instantiation: state.c:section_name_match Unexecuted instantiation: tmpl_dcursor.c:section_name_match Unexecuted instantiation: tmpl_eval.c:section_name_match Unexecuted instantiation: tmpl_tokenize.c:section_name_match Unexecuted instantiation: trigger.c:section_name_match Unexecuted instantiation: trunk.c:section_name_match Unexecuted instantiation: users_file.c:section_name_match Unexecuted instantiation: util.c:section_name_match Unexecuted instantiation: virtual_servers.c:section_name_match Unexecuted instantiation: call.c:section_name_match Unexecuted instantiation: call_env.c:section_name_match Unexecuted instantiation: caller.c:section_name_match Unexecuted instantiation: catch.c:section_name_match Unexecuted instantiation: child_request.c:section_name_match Unexecuted instantiation: compile.c:section_name_match Unexecuted instantiation: condition.c:section_name_match Unexecuted instantiation: detach.c:section_name_match Unexecuted instantiation: edit.c:section_name_match Unexecuted instantiation: finally.c:section_name_match Unexecuted instantiation: foreach.c:section_name_match Unexecuted instantiation: function.c:section_name_match Unexecuted instantiation: group.c:section_name_match Unexecuted instantiation: interpret.c:section_name_match Unexecuted instantiation: interpret_synchronous.c:section_name_match Unexecuted instantiation: io.c:section_name_match Unexecuted instantiation: limit.c:section_name_match Unexecuted instantiation: load_balance.c:section_name_match Unexecuted instantiation: map_builtin.c:section_name_match Unexecuted instantiation: parallel.c:section_name_match Unexecuted instantiation: return.c:section_name_match Unexecuted instantiation: subrequest.c:section_name_match Unexecuted instantiation: switch.c:section_name_match Unexecuted instantiation: timeout.c:section_name_match Unexecuted instantiation: tmpl.c:section_name_match Unexecuted instantiation: try.c:section_name_match Unexecuted instantiation: transaction.c:section_name_match Unexecuted instantiation: xlat.c:section_name_match Unexecuted instantiation: xlat_alloc.c:section_name_match Unexecuted instantiation: xlat_builtin.c:section_name_match Unexecuted instantiation: xlat_eval.c:section_name_match Unexecuted instantiation: xlat_expr.c:section_name_match Unexecuted instantiation: xlat_func.c:section_name_match Unexecuted instantiation: xlat_inst.c:section_name_match Unexecuted instantiation: xlat_pair.c:section_name_match Unexecuted instantiation: xlat_purify.c:section_name_match Unexecuted instantiation: xlat_redundant.c:section_name_match Unexecuted instantiation: xlat_tokenize.c:section_name_match Unexecuted instantiation: app_io.c:section_name_match Unexecuted instantiation: coord.c:section_name_match Unexecuted instantiation: coord_pair.c:section_name_match Unexecuted instantiation: master.c:section_name_match Unexecuted instantiation: network.c:section_name_match Unexecuted instantiation: schedule.c:section_name_match Unexecuted instantiation: thread.c:section_name_match Unexecuted instantiation: worker.c:section_name_match |
92 | | |
93 | | /** Return a printable string for the section name |
94 | | * |
95 | | * @param[in] name Section name. |
96 | | */ |
97 | | static inline char const *section_name_str(char const *name) |
98 | 0 | { |
99 | 0 | if (name == NULL) return "NULL"; |
100 | 0 | if (name == CF_IDENT_ANY) return "*"; |
101 | 0 | return name; |
102 | 0 | } Unexecuted instantiation: json.c:section_name_str Unexecuted instantiation: jpath.c:section_name_str Unexecuted instantiation: base.c:section_name_str Unexecuted instantiation: cache.c:section_name_str Unexecuted instantiation: conf.c:section_name_str Unexecuted instantiation: ctx.c:section_name_str Unexecuted instantiation: engine.c:section_name_str Unexecuted instantiation: log.c:section_name_str Unexecuted instantiation: pairs.c:section_name_str Unexecuted instantiation: session.c:section_name_str Unexecuted instantiation: strerror.c:section_name_str Unexecuted instantiation: verify.c:section_name_str Unexecuted instantiation: virtual_server.c:section_name_str Unexecuted instantiation: auth.c:section_name_str Unexecuted instantiation: cf_file.c:section_name_str Unexecuted instantiation: cf_parse.c:section_name_str Unexecuted instantiation: client.c:section_name_str Unexecuted instantiation: connection.c:section_name_str Unexecuted instantiation: exfile.c:section_name_str Unexecuted instantiation: global_lib.c:section_name_str Unexecuted instantiation: main_config.c:section_name_str Unexecuted instantiation: main_loop.c:section_name_str Unexecuted instantiation: map.c:section_name_str Unexecuted instantiation: map_proc.c:section_name_str Unexecuted instantiation: module.c:section_name_str Unexecuted instantiation: module_method.c:section_name_str Unexecuted instantiation: module_rlm.c:section_name_str Unexecuted instantiation: paircmp.c:section_name_str Unexecuted instantiation: pairmove.c:section_name_str Unexecuted instantiation: pool.c:section_name_str Unexecuted instantiation: section.c:section_name_str Unexecuted instantiation: state.c:section_name_str Unexecuted instantiation: tmpl_dcursor.c:section_name_str Unexecuted instantiation: tmpl_eval.c:section_name_str Unexecuted instantiation: tmpl_tokenize.c:section_name_str Unexecuted instantiation: trigger.c:section_name_str Unexecuted instantiation: trunk.c:section_name_str Unexecuted instantiation: users_file.c:section_name_str Unexecuted instantiation: util.c:section_name_str Unexecuted instantiation: virtual_servers.c:section_name_str Unexecuted instantiation: call.c:section_name_str Unexecuted instantiation: call_env.c:section_name_str Unexecuted instantiation: caller.c:section_name_str Unexecuted instantiation: catch.c:section_name_str Unexecuted instantiation: child_request.c:section_name_str Unexecuted instantiation: compile.c:section_name_str Unexecuted instantiation: condition.c:section_name_str Unexecuted instantiation: detach.c:section_name_str Unexecuted instantiation: edit.c:section_name_str Unexecuted instantiation: finally.c:section_name_str Unexecuted instantiation: foreach.c:section_name_str Unexecuted instantiation: function.c:section_name_str Unexecuted instantiation: group.c:section_name_str Unexecuted instantiation: interpret.c:section_name_str Unexecuted instantiation: interpret_synchronous.c:section_name_str Unexecuted instantiation: io.c:section_name_str Unexecuted instantiation: limit.c:section_name_str Unexecuted instantiation: load_balance.c:section_name_str Unexecuted instantiation: map_builtin.c:section_name_str Unexecuted instantiation: parallel.c:section_name_str Unexecuted instantiation: return.c:section_name_str Unexecuted instantiation: subrequest.c:section_name_str Unexecuted instantiation: switch.c:section_name_str Unexecuted instantiation: timeout.c:section_name_str Unexecuted instantiation: tmpl.c:section_name_str Unexecuted instantiation: try.c:section_name_str Unexecuted instantiation: transaction.c:section_name_str Unexecuted instantiation: xlat.c:section_name_str Unexecuted instantiation: xlat_alloc.c:section_name_str Unexecuted instantiation: xlat_builtin.c:section_name_str Unexecuted instantiation: xlat_eval.c:section_name_str Unexecuted instantiation: xlat_expr.c:section_name_str Unexecuted instantiation: xlat_func.c:section_name_str Unexecuted instantiation: xlat_inst.c:section_name_str Unexecuted instantiation: xlat_pair.c:section_name_str Unexecuted instantiation: xlat_purify.c:section_name_str Unexecuted instantiation: xlat_redundant.c:section_name_str Unexecuted instantiation: xlat_tokenize.c:section_name_str Unexecuted instantiation: app_io.c:section_name_str Unexecuted instantiation: coord.c:section_name_str Unexecuted instantiation: coord_pair.c:section_name_str Unexecuted instantiation: master.c:section_name_str Unexecuted instantiation: network.c:section_name_str Unexecuted instantiation: schedule.c:section_name_str Unexecuted instantiation: thread.c:section_name_str Unexecuted instantiation: worker.c:section_name_str |
103 | | |
104 | | static inline void section_name_dup(TALLOC_CTX *ctx, section_name_t *dst, section_name_t const *src) |
105 | 0 | { |
106 | 0 | dst->name1 = src->name1; |
107 | 0 | dst->name2 = src->name2; |
108 | |
|
109 | 0 | if (dst->name1 && (dst->name1 != CF_IDENT_ANY)) dst->name1 = talloc_strdup(ctx, src->name1); |
110 | 0 | if (dst->name2 && (dst->name2 != CF_IDENT_ANY)) dst->name2 = talloc_strdup(ctx, src->name2); |
111 | 0 | } Unexecuted instantiation: json.c:section_name_dup Unexecuted instantiation: jpath.c:section_name_dup Unexecuted instantiation: base.c:section_name_dup Unexecuted instantiation: cache.c:section_name_dup Unexecuted instantiation: conf.c:section_name_dup Unexecuted instantiation: ctx.c:section_name_dup Unexecuted instantiation: engine.c:section_name_dup Unexecuted instantiation: log.c:section_name_dup Unexecuted instantiation: pairs.c:section_name_dup Unexecuted instantiation: session.c:section_name_dup Unexecuted instantiation: strerror.c:section_name_dup Unexecuted instantiation: verify.c:section_name_dup Unexecuted instantiation: virtual_server.c:section_name_dup Unexecuted instantiation: auth.c:section_name_dup Unexecuted instantiation: cf_file.c:section_name_dup Unexecuted instantiation: cf_parse.c:section_name_dup Unexecuted instantiation: client.c:section_name_dup Unexecuted instantiation: connection.c:section_name_dup Unexecuted instantiation: exfile.c:section_name_dup Unexecuted instantiation: global_lib.c:section_name_dup Unexecuted instantiation: main_config.c:section_name_dup Unexecuted instantiation: main_loop.c:section_name_dup Unexecuted instantiation: map.c:section_name_dup Unexecuted instantiation: map_proc.c:section_name_dup Unexecuted instantiation: module.c:section_name_dup Unexecuted instantiation: module_method.c:section_name_dup Unexecuted instantiation: module_rlm.c:section_name_dup Unexecuted instantiation: paircmp.c:section_name_dup Unexecuted instantiation: pairmove.c:section_name_dup Unexecuted instantiation: pool.c:section_name_dup Unexecuted instantiation: section.c:section_name_dup Unexecuted instantiation: state.c:section_name_dup Unexecuted instantiation: tmpl_dcursor.c:section_name_dup Unexecuted instantiation: tmpl_eval.c:section_name_dup Unexecuted instantiation: tmpl_tokenize.c:section_name_dup Unexecuted instantiation: trigger.c:section_name_dup Unexecuted instantiation: trunk.c:section_name_dup Unexecuted instantiation: users_file.c:section_name_dup Unexecuted instantiation: util.c:section_name_dup Unexecuted instantiation: virtual_servers.c:section_name_dup Unexecuted instantiation: call.c:section_name_dup Unexecuted instantiation: call_env.c:section_name_dup Unexecuted instantiation: caller.c:section_name_dup Unexecuted instantiation: catch.c:section_name_dup Unexecuted instantiation: child_request.c:section_name_dup Unexecuted instantiation: compile.c:section_name_dup Unexecuted instantiation: condition.c:section_name_dup Unexecuted instantiation: detach.c:section_name_dup Unexecuted instantiation: edit.c:section_name_dup Unexecuted instantiation: finally.c:section_name_dup Unexecuted instantiation: foreach.c:section_name_dup Unexecuted instantiation: function.c:section_name_dup Unexecuted instantiation: group.c:section_name_dup Unexecuted instantiation: interpret.c:section_name_dup Unexecuted instantiation: interpret_synchronous.c:section_name_dup Unexecuted instantiation: io.c:section_name_dup Unexecuted instantiation: limit.c:section_name_dup Unexecuted instantiation: load_balance.c:section_name_dup Unexecuted instantiation: map_builtin.c:section_name_dup Unexecuted instantiation: parallel.c:section_name_dup Unexecuted instantiation: return.c:section_name_dup Unexecuted instantiation: subrequest.c:section_name_dup Unexecuted instantiation: switch.c:section_name_dup Unexecuted instantiation: timeout.c:section_name_dup Unexecuted instantiation: tmpl.c:section_name_dup Unexecuted instantiation: try.c:section_name_dup Unexecuted instantiation: transaction.c:section_name_dup Unexecuted instantiation: xlat.c:section_name_dup Unexecuted instantiation: xlat_alloc.c:section_name_dup Unexecuted instantiation: xlat_builtin.c:section_name_dup Unexecuted instantiation: xlat_eval.c:section_name_dup Unexecuted instantiation: xlat_expr.c:section_name_dup Unexecuted instantiation: xlat_func.c:section_name_dup Unexecuted instantiation: xlat_inst.c:section_name_dup Unexecuted instantiation: xlat_pair.c:section_name_dup Unexecuted instantiation: xlat_purify.c:section_name_dup Unexecuted instantiation: xlat_redundant.c:section_name_dup Unexecuted instantiation: xlat_tokenize.c:section_name_dup Unexecuted instantiation: app_io.c:section_name_dup Unexecuted instantiation: coord.c:section_name_dup Unexecuted instantiation: coord_pair.c:section_name_dup Unexecuted instantiation: master.c:section_name_dup Unexecuted instantiation: network.c:section_name_dup Unexecuted instantiation: schedule.c:section_name_dup Unexecuted instantiation: thread.c:section_name_dup Unexecuted instantiation: worker.c:section_name_dup |
112 | | |
113 | | int8_t section_name_cmp(void const *one, void const *two); |
114 | | |
115 | | #ifdef __cplusplus |
116 | | } |
117 | | #endif |