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: 1a7a3aa29e6577a8436b56f3d7b778237fe38635 $
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: 1a7a3aa29e6577a8436b56f3d7b778237fe38635 $")
27
28#include <freeradius-devel/server/base.h>
29#include <freeradius-devel/server/module_rlm.h>
30#include <freeradius-devel/server/trigger.h>
31#include <freeradius-devel/server/password.h>
32#include <freeradius-devel/server/packet.h>
33#include <freeradius-devel/unlang/xlat.h>
34#include <freeradius-devel/util/dict.h>
35
36/** Initialize src/lib/server/
37 *
38 * This is just so that the callers don't need to call a million functions.
39 *
40 * @param[in] cs The root configuration section.
41 * @param[in] dict_dir The path to the raddb directory.
42 * @param[in] dict the main dictionary, usually the internal dictionary.
43 * @return
44 * - 0 on success.
45 * - -1 on failure.
46 */
47int server_init(CONF_SECTION *cs, char const *dict_dir, fr_dict_t *dict)
48{
49 /*
50 * Initialize the dictionary attributes needed by the tmpl code.
51 */
52 if (tmpl_global_init() < 0) return -1;
53
54 /*
55 * Initialise the trigger rate limiting tree
56 */
57 if (trigger_exec_init(cs) < 0) return -1;
58
59 /*
60 * Set up dictionaries and attributes for password comparisons
61 */
62 if (password_init() < 0) return -1;
63
64 /*
65 * Initialize Auth-Type, etc. in the virtual servers
66 * before loading the modules. Some modules need those
67 * to be defined.
68 */
69 if (virtual_servers_bootstrap(cs) < 0) return -1;
70
71 /*
72 * Bootstrap the modules. This links to them, and runs
73 * their "bootstrap" routines.
74 *
75 * After this step, all dynamic attributes, xlats, etc. are defined.
76 */
77 if (modules_rlm_bootstrap(cs) < 0) return -1;
78
79 /*
80 * Now all the modules and virtual servers have been bootstrapped,
81 * we have all the dictionaries we're going to use in the server.
82 *
83 * We can now register xlats for any protocol encoders/decoders.
84 *
85 * Note: These xlats get freed automatically, so no explicit cleanup
86 * is required.
87 */
88 if (xlat_protocols_register() < 0) return -1;
89
90 /*
91 * Load in the custom dictionary. We do this after the listeners
92 * have loaded their relevant dictionaries, and after the modules
93 * have created any attributes they need to, so that we can define
94 * additional protocol attributes, and add
95 */
96 switch (fr_dict_read(dict, dict_dir, FR_DICTIONARY_FILE)) {
97 case -1:
98 PERROR("Failed reading site-local dictionary");
99 return -1;
100 case 0:
101 DEBUG2("Including dictionary file \"%s/%s\"", dict_dir, FR_DICTIONARY_FILE);
102 break;
103
104 default:
105 break;
106 }
107
108 /*
109 * And then load the virtual servers.
110 */
111 if (virtual_servers_instantiate() < 0) return -1;
112
113 /*
114 * Instantiate the modules
115 */
116 if (modules_rlm_instantiate() < 0) return -1;
117
118 /*
119 * Call xlat instantiation functions (after the xlats have been compiled)
120 */
121 if (xlat_instantiate() < 0) return -1;
122
123 /*
124 * load the 'Net.' packet attributes.
125 */
126 if (packet_global_init() < 0) return -1;
127
128 return 0;
129}
130
131/** Free src/lib/server/
132 *
133 * This is just so that the callers don't need to call a million functions.
134 */
135void server_free(void)
136{
137 /*
138 * Free xlat instance data, and call any detach methods
139 */
141}
#define RCSID(id)
Definition build.h:483
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:47
void server_free(void)
Free src/lib/server/.
Definition base.c:135
#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:987
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:1483
int trigger_exec_init(CONF_SECTION const *cs)
Definition trigger.c:540
int xlat_instantiate(void)
Call instantiation functions for all registered, "permanent" xlats.
Definition xlat_inst.c:513
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:709
#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.