Coverage Report

Created: 2026-04-12 06:36

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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