The FreeRADIUS server  $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
virtual_servers.h
Go to the documentation of this file.
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: 7a1cc2d0d5e573daf433a33bee745fd9cf5f9039 $
20  *
21  * @file src/lib/server/virtual_servers.h
22  * @brief Declarations for functions that parse and manipulate virtual server sections.
23  *
24  * @copyright 2019 The FreeRADIUS server project
25  */
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 #include <freeradius-devel/io/schedule.h>
32 #include <freeradius-devel/server/cf_parse.h>
33 #include <freeradius-devel/unlang/module.h>
34 #include <freeradius-devel/util/dict.h>
35 
38 
39 /** @name Namespace management
40  *
41  * @{
42  */
43 fr_dict_t const *virtual_server_dict_by_name(char const *virtual_server) CC_HINT(nonnull);
44 
45 fr_dict_t const *virtual_server_dict_by_cs(CONF_SECTION const *server_cs) CC_HINT(nonnull);
46 
48 
50  char const *virtual_server, fr_dict_t const *namespace,
51  CONF_ITEM *ci) CC_HINT(nonnull(2,3));
52 /** @} */
53 
54 /** @name Lookup and namespace management
55  *
56  * @{
57  */
58 CONF_SECTION *virtual_server_find(char const *name) CC_HINT(nonnull);
59 
61 
62 int virtual_server_cf_parse(TALLOC_CTX *ctx, void *out, void *parent,
63  CONF_ITEM *ci, conf_parser_t const *rule) CC_HINT(nonnull(2,4));
64 /** @} */
65 
67 bool listen_record(fr_listen_t *li) CC_HINT(nonnull);
68 
69 
70 /** Module methods which are allowed in virtual servers.
71  *
72  */
73 typedef struct {
74  char const *name; //!< module method name1 which is allowed in this section
75  char const *name2; //!< module method name2 which is allowed in this section
77 
78 /** Processing sections which are allowed in this virtual server.
79  *
80  */
81 typedef struct {
82  char const *name; //!< Name of the processing section, such as "recv" or "send"
83  char const *name2; //!< Second name, such as "Access-Request"
84  rlm_components_t component; //!< Sets the default list of actions for this section
85  size_t offset; //!< where the CONF_SECTION pointer is written
86  bool dont_cache; //!< If true, the CONF_SECTION pointer won't be written
87  ///< and the offset will be ignored.
88  size_t instruction; //!< where the instruction pointer is written
89  virtual_server_method_t const *methods; //!< list of module methods which are allowed in this section
91 
92 #define COMPILE_TERMINATOR { .name = NULL, .name2 = NULL }
93 
95 
97  tmpl_rules_t const *rules, void *instance) CC_HINT(nonnull(1,2,3));
98 
99 virtual_server_method_t const *virtual_server_section_methods(char const *name1, char const *name2) CC_HINT(nonnull(1));
100 
101 unlang_action_t virtual_server_push(request_t *request, CONF_SECTION *server_cs, bool top_frame) CC_HINT(nonnull);
102 
103 /** @name Parsing, bootstrap and instantiation
104  *
105  * @{
106  */
107 int virtual_server_section_attribute_define(CONF_SECTION *server_cs, char const *subcs_name,
108  fr_dict_attr_t const *da) CC_HINT(nonnull);
109 
111 
113 
114 int virtual_servers_thread_instantiate(TALLOC_CTX *ctx, fr_event_list_t *el) CC_HINT(nonnull);
115 
116 int virtual_servers_instantiate(void) CC_HINT(nonnull);
117 
119 
120 int virtual_servers_free(void);
121 
122 int virtual_servers_init(void) CC_HINT(nonnull);
123 /** @} */
124 
125 #ifdef __cplusplus
126 }
127 #endif
unlang_action_t
Returned by unlang_op_t calls, determine the next action of the interpreter.
Definition: action.h:35
Defines a CONF_PAIR to C data type mapping.
Definition: cf_parse.h:563
Common header for all CONF_* types.
Definition: cf_priv.h:49
A section grouping multiple CONF_PAIR.
Definition: cf_priv.h:89
enum rlm_components rlm_components_t
The different section components of the server.
Stores all information relating to an event list.
Definition: event.c:411
static const conf_parser_t config[]
Definition: base.c:188
static char const * name
The scheduler.
Definition: schedule.c:125
Optional arguments passed to vp_tmpl functions.
Definition: tmpl.h:341
static const uchar sc[16]
Definition: smbdes.c:115
static fr_event_list_t * el
static fr_slen_t parent
Definition: pair.h:844
int nonnull(2, 5))
static size_t char ** out
Definition: value.h:984
virtual_server_method_t const * virtual_server_section_methods(char const *name1, char const *name2))
Find the component for a section.
bool listen_record(fr_listen_t *li)
Record that we're listening on a particular IP / port.
fr_dict_t const * virtual_server_dict_by_child_ci(CONF_ITEM const *ci)
Return the namespace for a given virtual server specified by a CONF_ITEM within the virtual server.
int virtual_servers_bootstrap(CONF_SECTION *config)
Load protocol modules and call their bootstrap methods.
const conf_parser_t virtual_servers_on_read_config[]
int virtual_server_compile_sections(CONF_SECTION *server, virtual_server_compile_t const *list, tmpl_rules_t const *rules, void *instance))
Compile sections for a virtual server.
CONF_SECTION * virtual_server_find(char const *name)
Return virtual server matching the specified name.
bool dont_cache
If true, the CONF_SECTION pointer won't be written and the offset will be ignored.
char const * name
module method name1 which is allowed in this section
CONF_SECTION * virtual_server_by_child(CONF_SECTION *section)
Find a virtual server using one of its sections.
int virtual_servers_open(fr_schedule_t *sc)
Open all the listen sockets.
virtual_server_method_t const * methods
list of module methods which are allowed in this section
const conf_parser_t virtual_servers_config[]
int virtual_server_cf_parse(TALLOC_CTX *ctx, void *out, void *parent, CONF_ITEM *ci, conf_parser_t const *rule))
int virtual_server_has_namespace(CONF_SECTION **out, char const *virtual_server, fr_dict_t const *namespace, CONF_ITEM *ci))
Verify that a given virtual_server exists and is of a particular namespace.
char const * name
Name of the processing section, such as "recv" or "send".
char const * name2
Second name, such as "Access-Request".
int virtual_server_section_attribute_define(CONF_SECTION *server_cs, char const *subcs_name, fr_dict_attr_t const *da)
Define a values for Auth-Type attributes by the sections present in a virtual-server.
unlang_action_t virtual_server_push(request_t *request, CONF_SECTION *server_cs, bool top_frame)
Set the request processing function.
void virtual_servers_thread_detach(void)
Free thread-specific data for all process modules and listeners.
fr_dict_t const * virtual_server_dict_by_cs(CONF_SECTION const *server_cs)
Return the namespace for the virtual server specified by a config section.
int virtual_servers_init(void)
Performs global initialisation for the virtual server code.
size_t instruction
where the instruction pointer is written
int virtual_server_section_register(virtual_server_compile_t const *entry)
Register name1 / name2 as allowed processing sections.
fr_listen_t * listen_find_any(fr_listen_t *li)
See if another global listener is using a particular IP / port.
fr_dict_t const * virtual_server_dict_by_name(char const *virtual_server)
Return the namespace for the named virtual server.
int virtual_servers_instantiate(void)
Instantiate all the virtual servers.
int virtual_servers_free(void)
int virtual_servers_thread_instantiate(TALLOC_CTX *ctx, fr_event_list_t *el)
Perform thread instantiation for all process modules and listeners.
size_t offset
where the CONF_SECTION pointer is written
char const * name2
module method name2 which is allowed in this section
rlm_components_t component
Sets the default list of actions for this section.
Processing sections which are allowed in this virtual server.
Module methods which are allowed in virtual servers.