The FreeRADIUS server $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
Loading...
Searching...
No Matches
base.c
Go to the documentation of this file.
1/*
2 * This library is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU Lesser General Public
4 * License as published by the Free Software Foundation; either
5 * version 2.1 of the License, or (at your option) any later version.
6 *
7 * This library is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * Lesser General Public License for more details.
11 *
12 * You should have received a copy of the GNU Lesser General Public
13 * License along with this library; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
15 */
16
17/**
18 * $Id: 7c5a7880cdd7d707eff463947ebc931828ae6954 $
19 *
20 * @file src/lib/server/base.c
21 * @brief Functions to bootstrap this library
22 *
23 * @copyright 2019 The FreeRADIUS server project
24 */
25
26RCSID("$Id: 7c5a7880cdd7d707eff463947ebc931828ae6954 $")
27
28#include <freeradius-devel/server/base.h>
29#include <freeradius-devel/server/module_rlm.h>
30
31/** Initialize src/lib/server/
32 *
33 * This is just so that the callers don't need to call a million functions.
34 *
35 * @param[in] cs The root configuration section.
36 * @param[in] dict_dir The path to the raddb directory.
37 * @param[in] dict the main dictionary, usually the internal dictionary.
38 * @return
39 * - 0 on success.
40 * - -1 on failure.
41 */
42int server_init(CONF_SECTION *cs, char const *dict_dir, fr_dict_t *dict)
43{
44 /*
45 * Initialize the dictionary attributes needed by the tmpl code.
46 */
47 if (tmpl_global_init() < 0) return -1;
48
49 /*
50 * Set up dictionaries and attributes for password comparisons
51 */
52 if (password_init() < 0) return -1;
53
54 /*
55 * Initialize Auth-Type, etc. in the virtual servers
56 * before loading the modules. Some modules need those
57 * to be defined.
58 */
59 if (virtual_servers_bootstrap(cs) < 0) return -1;
60
61 /*
62 * Bootstrap the modules. This links to them, and runs
63 * their "bootstrap" routines.
64 *
65 * After this step, all dynamic attributes, xlats, etc. are defined.
66 */
67 if (modules_rlm_bootstrap(cs) < 0) return -1;
68
69 /*
70 * Now all the modules and virtual servers have been bootstrapped,
71 * we have all the dictionaries we're going to use in the server.
72 *
73 * We can now register xlats for any protocol encoders/decoders.
74 *
75 * Note: These xlats get freed automatically, so no explicit cleanup
76 * is required.
77 */
78 if (xlat_protocols_register() < 0) return -1;
79
80 /*
81 * Load in the custom dictionary. We do this after the listeners
82 * have loaded their relevant dictionaries, and after the modules
83 * have created any attributes they need to, so that we can define
84 * additional protocol attributes, and add
85 */
86 switch (fr_dict_read(dict, dict_dir, FR_DICTIONARY_FILE)) {
87 case -1:
88 PERROR("Failed reading site-local dictionary");
89 return -1;
90 case 0:
91 DEBUG2("Including dictionary file \"%s/%s\"", dict_dir, FR_DICTIONARY_FILE);
92 break;
93
94 default:
95 break;
96 }
97
98 /*
99 * Initialise the trigger rate limiting tree.
100 *
101 * This must be done after the modules have been bootstrapped, so that
102 * any xlat functions/dictionary attributes have been registered and
103 * before the modules actually want to use triggers or open connections.
104 */
105 if (trigger_init(cs) < 0) return -1;
106
107 /*
108 * And then load the virtual servers.
109 */
110 if (virtual_servers_instantiate() < 0) return -1;
111
112 /*
113 * Instantiate the modules
114 */
115 if (modules_rlm_instantiate() < 0) return -1;
116
117 /*
118 * Call xlat instantiation functions (after the xlats have been compiled)
119 */
120 if (xlat_instantiate() < 0) return -1;
121
122 /*
123 * load the 'Net.' packet attributes.
124 */
125 if (packet_global_init() < 0) return -1;
126
127 return 0;
128}
129
130/** Free src/lib/server/
131 *
132 * This is just so that the callers don't need to call a million functions.
133 */
134void server_free(void)
135{
136 /*
137 * Free xlat instance data, and call any detach methods
138 */
140}
#define RCSID(id)
Definition build.h:485
A section grouping multiple CONF_PAIR.
Definition cf_priv.h:101
int fr_dict_read(fr_dict_t *dict, char const *dict_dir, char const *filename)
Read supplementary attribute definitions into an existing dictionary.
int server_init(CONF_SECTION *cs, char const *dict_dir, fr_dict_t *dict)
Initialize src/lib/server/.
Definition base.c:42
void server_free(void)
Free src/lib/server/.
Definition base.c:134
#define PERROR(_fmt,...)
Definition log.h:228
int packet_global_init(void)
Initialises the Net.
Definition packet.c:200
int modules_rlm_bootstrap(CONF_SECTION *root)
Bootstrap modules and virtual modules.
int modules_rlm_instantiate(void)
Performs the instantiation phase for all backend modules.
Definition module_rlm.c:973
int password_init(void)
Load our dictionaries.
Definition password.c:1073
#define DEBUG2(fmt,...)
Definition radclient.h:43
int tmpl_global_init(void)
Definition tmpl_eval.c:1379
int trigger_init(CONF_SECTION const *cs)
Definition trigger.c:493
int xlat_instantiate(void)
Call instantiation functions for all registered, "permanent" xlats.
Definition xlat_inst.c:511
int xlat_protocols_register(void)
Register xlats for any loaded dictionaries.
void xlat_instances_free(void)
Walk over all registered instance data and free them explicitly.
Definition xlat_inst.c:707
#define FR_DICTIONARY_FILE
Definition conf.h:7
int virtual_servers_bootstrap(CONF_SECTION *config)
Load protocol modules and call their bootstrap methods.
int virtual_servers_instantiate(void)
Instantiate all the virtual servers.