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: ba8c0adfac06b9abf6cbaf6e39c8189861c04d82 $
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: ba8c0adfac06b9abf6cbaf6e39c8189861c04d82 $")
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 * Initialise the trigger rate limiting tree
51 */
52 if (trigger_exec_init(cs) < 0) return -1;
53
54 /*
55 * Set up dictionaries and attributes for password comparisons
56 */
57 if (password_init() < 0) return -1;
58
59 /*
60 * Initialize Auth-Type, etc. in the virtual servers
61 * before loading the modules. Some modules need those
62 * to be defined.
63 */
64 if (virtual_servers_bootstrap(cs) < 0) return -1;
65
66 /*
67 * Bootstrap the modules. This links to them, and runs
68 * their "bootstrap" routines.
69 *
70 * After this step, all dynamic attributes, xlats, etc. are defined.
71 */
72 if (modules_rlm_bootstrap(cs) < 0) return -1;
73
74 /*
75 * Now all the modules and virtual servers have been bootstrapped,
76 * we have all the dictionaries we're going to use in the server.
77 *
78 * We can now register xlats for any protocol encoders/decoders.
79 *
80 * Note: These xlats get freed automatically, so no explicit cleanup
81 * is required.
82 */
83 if (xlat_protocols_register() < 0) return -1;
84
85 /*
86 * Load in the custom dictionary. We do this after the listeners
87 * have loaded their relevant dictionaries, and after the modules
88 * have created any attributes they need to, so that we can define
89 * additional protocol attributes, and add
90 */
91 switch (fr_dict_read(dict, dict_dir, FR_DICTIONARY_FILE)) {
92 case -1:
93 PERROR("Failed reading site-local dictionary");
94 return -1;
95 case 0:
96 DEBUG2("Including dictionary file \"%s/%s\"", dict_dir, FR_DICTIONARY_FILE);
97 break;
98
99 default:
100 break;
101 }
102
103 /*
104 * And then load the virtual servers.
105 */
106 if (virtual_servers_instantiate() < 0) return -1;
107
108 /*
109 * Instantiate the modules
110 */
111 if (modules_rlm_instantiate() < 0) return -1;
112
113 /*
114 * Call xlat instantiation functions (after the xlats have been compiled)
115 */
116 if (xlat_instantiate() < 0) return -1;
117
118 /*
119 * load the 'Net.' packet attributes.
120 */
121 if (packet_global_init() < 0) return -1;
122
123 return 0;
124}
125
126/** Free src/lib/server/
127 *
128 * This is just so that the callers don't need to call a million functions.
129 */
130void server_free(void)
131{
132 /*
133 * Free xlat instance data, and call any detach methods
134 */
136}
#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:130
#define PERROR(_fmt,...)
Definition log.h:228
int packet_global_init(void)
Initialises the Net.
Definition packet.c:185
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:1044
#define DEBUG2(fmt,...)
Definition radclient.h:43
int tmpl_global_init(void)
Definition tmpl_eval.c:1485
int trigger_exec_init(CONF_SECTION const *cs)
Definition trigger.c:541
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.