5 Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
7 Copyright (C) 1997 - 2000 Pekka Riikonen
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
21 #ifndef SERVERCONFIG_H
22 #define SERVERCONFIG_H
24 /* Holds information of configured algorithms */
25 typedef struct SilcServerConfigSectionAlgStruct {
28 unsigned int block_len;
30 struct SilcServerConfigSectionAlgStruct *next;
31 struct SilcServerConfigSectionAlgStruct *prev;
32 #define SILC_CONFIG_SERVER_MODNAME "builtin"
33 } SilcServerConfigSectionAlg;
35 /* Holds server information from config file */
41 } SilcServerConfigSectionServerInfo;
43 /* Holds server's administrative information from config file */
49 } SilcServerConfigSectionAdminInfo;
51 /* Holds all the ports the server is listenning on */
52 typedef struct SilcServerConfigSectionListenPortStruct {
56 struct SilcServerConfigSectionListenPortStruct *next;
57 struct SilcServerConfigSectionListenPortStruct *prev;
58 } SilcServerConfigSectionListenPort;
60 /* Holds server's execution identity, or the user and group which
61 to change from root when server starts */
65 } SilcServerConfigSectionIdentity;
67 /* Holds all the configured log files. */
68 typedef struct SilcServerConfigSectionLoggingStruct {
72 struct SilcServerConfigSectionLoggingStruct *next;
73 struct SilcServerConfigSectionLoggingStruct *prev;
75 /* Allowed <Logging> section types */
76 #define SILC_CONFIG_SERVER_LF_INFO "infologfile"
77 #define SILC_CONFIG_SERVER_LF_WARNING "warninglogfile"
78 #define SILC_CONFIG_SERVER_LF_ERROR "errorlogfile"
79 #define SILC_CONFIG_SERVER_LF_FATAL "fatalogfile"
80 } SilcServerConfigSectionLogging;
82 /* Holds all configured connection classes */
83 typedef struct SilcServerConfigSectionConnectionClassStruct {
85 unsigned int ping_freq;
86 unsigned int connect_freq;
87 unsigned int max_links;
88 struct SilcServerConfigSectionConnectionClassStruct *next;
89 struct SilcServerConfigSectionConnectionClassStruct *prev;
90 } SilcServerConfigSectionConnectionClass;
92 #define SILC_CONFIG_SERVER_AUTH_METH_PASSWD "passwd"
93 #define SILC_CONFIG_SERVER_AUTH_METH_PUBKEY "pubkey"
95 /* Holds all client authentication data from config file */
96 typedef struct SilcServerConfigSectionClientConnectionStruct {
98 SilcAuthMethod auth_meth;
100 unsigned int auth_data_len;
103 struct SilcServerConfigSectionClientConnectionStruct *next;
104 struct SilcServerConfigSectionClientConnectionStruct *prev;
105 } SilcServerConfigSectionClientConnection;
107 /* Hols all server's administrators authentication data from config file */
108 typedef struct SilcServerConfigSectionAdminConnectionStruct {
112 SilcAuthMethod auth_meth;
114 unsigned int auth_data_len;
115 struct SilcServerConfigSectionAdminConnectionStruct *next;
116 struct SilcServerConfigSectionAdminConnectionStruct *prev;
117 } SilcServerConfigSectionAdminConnection;
119 /* Holds all configured server/router connections from config file */
120 typedef struct SilcServerConfigSectionServerConnectionStruct {
122 SilcAuthMethod auth_meth;
124 unsigned int auth_data_len;
129 struct SilcServerConfigSectionServerConnectionStruct *next;
130 struct SilcServerConfigSectionServerConnectionStruct *prev;
131 } SilcServerConfigSectionServerConnection;
133 /* Holds all configured denied connections from config file */
139 } SilcServerConfigSectionDenyConnection;
141 /* Holds motd file */
144 } SilcServerConfigSectionMotd;
147 SILC Server Config object.
149 This object holds all the data parsed from the SILC server configuration
150 file. This is mainly used at the initialization of the server.
154 /* Pointer back to the server */
157 /* Filename of the configuration file */
160 /* Configuration sections */
161 SilcServerConfigSectionAlg *cipher;
162 SilcServerConfigSectionAlg *pkcs;
163 SilcServerConfigSectionAlg *hash_func;
164 SilcServerConfigSectionAlg *hmac;
165 SilcServerConfigSectionServerInfo *server_info;
166 SilcServerConfigSectionAdminInfo *admin_info;
167 SilcServerConfigSectionListenPort *listen_port;
168 SilcServerConfigSectionIdentity *identity;
169 SilcServerConfigSectionLogging *logging;
170 SilcServerConfigSectionConnectionClass *conn_class;
171 SilcServerConfigSectionClientConnection *clients;
172 SilcServerConfigSectionServerConnection *servers;
173 SilcServerConfigSectionServerConnection *routers;
174 SilcServerConfigSectionAdminConnection *admins;
175 SilcServerConfigSectionDenyConnection *denied;
176 SilcServerConfigSectionMotd *motd;
177 } SilcServerConfigObject;
179 typedef SilcServerConfigObject *SilcServerConfig;
181 /* Configuration section type enumerations. */
183 SILC_CONFIG_SERVER_SECTION_TYPE_NONE = 0,
184 SILC_CONFIG_SERVER_SECTION_TYPE_CIPHER,
185 SILC_CONFIG_SERVER_SECTION_TYPE_PKCS,
186 SILC_CONFIG_SERVER_SECTION_TYPE_HASH_FUNCTION,
187 SILC_CONFIG_SERVER_SECTION_TYPE_HMAC,
188 SILC_CONFIG_SERVER_SECTION_TYPE_SERVER_INFO,
189 SILC_CONFIG_SERVER_SECTION_TYPE_ADMIN_INFO,
190 SILC_CONFIG_SERVER_SECTION_TYPE_LISTEN_PORT,
191 SILC_CONFIG_SERVER_SECTION_TYPE_IDENTITY,
192 SILC_CONFIG_SERVER_SECTION_TYPE_LOGGING,
193 SILC_CONFIG_SERVER_SECTION_TYPE_CONNECTION_CLASS,
194 SILC_CONFIG_SERVER_SECTION_TYPE_CLIENT_CONNECTION,
195 SILC_CONFIG_SERVER_SECTION_TYPE_SERVER_CONNECTION,
196 SILC_CONFIG_SERVER_SECTION_TYPE_ROUTER_CONNECTION,
197 SILC_CONFIG_SERVER_SECTION_TYPE_ADMIN_CONNECTION,
198 SILC_CONFIG_SERVER_SECTION_TYPE_DENY_CONNECTION,
199 SILC_CONFIG_SERVER_SECTION_TYPE_MOTD,
200 } SilcServerConfigSectionType;
202 /* SILC Configuration Section structure. */
205 SilcServerConfigSectionType type;
206 unsigned int maxfields;
207 } SilcServerConfigSection;
209 /* LIst of all possible config sections in SILC server. */
210 extern SilcServerConfigSection silc_server_config_sections[];
212 /* Structure used in parsing the configuration lines. The line is read
213 from a file to this structure before parsing it further. */
214 typedef struct SilcServerConfigParseStruct {
216 unsigned int linenum;
217 SilcServerConfigSection *section;
218 struct SilcServerConfigParseStruct *next;
219 struct SilcServerConfigParseStruct *prev;
220 } *SilcServerConfigParse;
224 /* Allocates list entries for configuration sections. Used by all
225 config sections as this is common. */
226 #define SILC_SERVER_CONFIG_LIST_ALLOC(x) \
229 (x) = silc_calloc(1, sizeof(*(x))); \
234 (x)->next = silc_calloc(1, sizeof(*(x)->next)); \
235 (x)->next->next = NULL; \
236 (x)->next->prev = (x); \
243 SilcServerConfig silc_server_config_alloc(char *filename);
244 void silc_server_config_free(SilcServerConfig config);
245 int silc_server_config_parse(SilcServerConfig config, SilcBuffer buffer,
246 SilcServerConfigParse *return_config);
247 int silc_server_config_parse_lines(SilcServerConfig config,
248 SilcServerConfigParse parse_config);
249 int silc_server_config_check_sections(unsigned int checkmask);
250 void silc_server_config_setlogfiles(SilcServerConfig config);
251 void silc_server_config_register_ciphers(SilcServerConfig config);
252 void silc_server_config_register_pkcs(SilcServerConfig config);
253 void silc_server_config_register_hashfuncs(SilcServerConfig config);
254 void silc_server_config_register_hmacs(SilcServerConfig config);
255 SilcServerConfigSectionClientConnection *
256 silc_server_config_find_client_conn(SilcServerConfig config,
257 char *host, int port);
258 SilcServerConfigSectionServerConnection *
259 silc_server_config_find_server_conn(SilcServerConfig config,
260 char *host, int port);
261 SilcServerConfigSectionServerConnection *
262 silc_server_config_find_router_conn(SilcServerConfig config,
263 char *host, int port);
264 SilcServerConfigSectionAdminConnection *
265 silc_server_config_find_admin(SilcServerConfig config,
266 char *host, char *username, char *nickname);
267 void silc_server_config_print();