5 Author: Johnny Mnemonic <johnny@themnemonic.org>
7 Copyright (C) 1997 - 2002 Johnny Mnemonic
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 typedef struct SilcServerConfigCipherStruct {
27 SilcUInt32 key_length;
28 SilcUInt32 block_length;
29 struct SilcServerConfigCipherStruct *next;
30 } SilcServerConfigCipher;
32 typedef struct SilcServerConfigHashStruct {
35 SilcUInt32 block_length;
36 SilcUInt32 digest_length;
37 struct SilcServerConfigHashStruct *next;
38 } SilcServerConfigHash;
40 typedef struct SilcServerConfigHmacStruct {
43 SilcUInt32 mac_length;
44 struct SilcServerConfigHmacStruct *next;
45 } SilcServerConfigHmac;
47 typedef struct SilcServerConfigPkcsStruct {
49 struct SilcServerConfigPkcsStruct *next;
50 } SilcServerConfigPkcs;
52 typedef struct SilcServerConfigServerInfoStruct {
56 char *server_type; /* E.g. "Test Server" */
57 char *location; /* geographic location */
58 char *admin; /* admin full name */
59 char *email; /* admin's email address */
60 char *user; /* userid the server should be runned at */
61 char *group; /* ditto, but about groupid */
62 SilcPublicKey public_key;
63 SilcPrivateKey private_key;
64 char *motd_file; /* path to text motd file (reading only) */
65 char *pid_file; /* path to the pid file (for reading and writing) */
66 } SilcServerConfigServerInfo;
68 typedef struct SilcServerConfigLoggingStruct {
71 } SilcServerConfigLogging;
73 /* Connection parameters */
74 typedef struct SilcServerConfigConnParams {
76 SilcUInt32 connections_max;
77 SilcUInt32 connections_max_per_host;
78 SilcUInt32 keepalive_secs;
79 SilcUInt32 reconnect_count;
80 SilcUInt32 reconnect_interval;
81 SilcUInt32 reconnect_interval_max;
82 bool reconnect_keep_trying;
83 SilcUInt32 key_exchange_rekey;
84 bool key_exchange_pfs;
85 char *version_protocol;
86 char *version_software;
87 char *version_software_vendor;
88 struct SilcServerConfigConnParams *next;
89 } SilcServerConfigConnParams;
91 /* Holds all client authentication data from config file */
92 typedef struct SilcServerConfigClientStruct {
94 unsigned char *passphrase;
95 SilcUInt32 passphrase_len;
96 SilcHashTable publickeys;
97 SilcServerConfigConnParams *param;
98 struct SilcServerConfigClientStruct *next;
99 } SilcServerConfigClient;
101 /* Holds all server's administrators authentication data from config file */
102 typedef struct SilcServerConfigAdminStruct {
106 unsigned char *passphrase;
107 SilcUInt32 passphrase_len;
108 SilcHashTable publickeys;
109 struct SilcServerConfigAdminStruct *next;
110 } SilcServerConfigAdmin;
112 /* Holds all configured denied connections from config file */
113 typedef struct SilcServerConfigDenyStruct {
116 struct SilcServerConfigDenyStruct *next;
117 } SilcServerConfigDeny;
119 /* Holds all configured server connections from config file */
120 typedef struct SilcServerConfigServerStruct {
122 unsigned char *passphrase;
123 SilcUInt32 passphrase_len;
124 SilcHashTable publickeys;
126 SilcServerConfigConnParams *param;
128 struct SilcServerConfigServerStruct *next;
129 } SilcServerConfigServer;
131 /* Holds all configured router connections from config file */
132 typedef struct SilcServerConfigRouterStruct {
134 unsigned char *passphrase;
135 SilcUInt32 passphrase_len;
136 SilcHashTable publickeys;
139 SilcServerConfigConnParams *param;
142 char *backup_replace_ip;
143 SilcUInt16 backup_replace_port;
145 struct SilcServerConfigRouterStruct *next;
146 } SilcServerConfigRouter;
148 /* define the SilcServerConfig object */
152 /* Reference count (when this reaches zero, config object is destroyed) */
155 /* The General section */
157 bool prefer_passphrase_auth;
158 bool require_reverse_lookup;
159 SilcUInt32 channel_rekey_secs;
160 SilcUInt32 key_exchange_timeout;
161 SilcUInt32 conn_auth_timeout;
162 SilcServerConfigConnParams param;
164 long logging_flushdelay;
166 /* Other configuration sections */
167 SilcServerConfigCipher *cipher;
168 SilcServerConfigHash *hash;
169 SilcServerConfigHmac *hmac;
170 SilcServerConfigPkcs *pkcs;
171 SilcServerConfigLogging *logging_info;
172 SilcServerConfigLogging *logging_warnings;
173 SilcServerConfigLogging *logging_errors;
174 SilcServerConfigLogging *logging_fatals;
175 SilcServerConfigServerInfo *server_info;
176 SilcServerConfigConnParams *conn_params;
177 SilcServerConfigClient *clients;
178 SilcServerConfigAdmin *admins;
179 SilcServerConfigDeny *denied;
180 SilcServerConfigServer *servers;
181 SilcServerConfigRouter *routers;
185 SilcServerConfig config;
187 } SilcServerConfigRef;
191 /* Basic config operations */
192 SilcServerConfig silc_server_config_alloc(const char *filename);
193 void silc_server_config_destroy(SilcServerConfig config);
194 void silc_server_config_ref(SilcServerConfigRef *ref, SilcServerConfig config,
196 void silc_server_config_unref(SilcServerConfigRef *ref);
198 /* Algorithm registering and reset functions */
199 bool silc_server_config_register_ciphers(SilcServer server);
200 bool silc_server_config_register_hashfuncs(SilcServer server);
201 bool silc_server_config_register_hmacs(SilcServer server);
202 bool silc_server_config_register_pkcs(SilcServer server);
203 void silc_server_config_setlogfiles(SilcServer server);
205 /* Run-time config access functions */
206 SilcServerConfigClient *
207 silc_server_config_find_client(SilcServer server, char *host);
208 SilcServerConfigAdmin *
209 silc_server_config_find_admin(SilcServer server, char *host, char *user,
211 SilcServerConfigDeny *
212 silc_server_config_find_denied(SilcServer server, char *host);
213 SilcServerConfigServer *
214 silc_server_config_find_server_conn(SilcServer server, char *host);
215 SilcServerConfigRouter *
216 silc_server_config_find_router_conn(SilcServer server, char *host, int port);
217 bool silc_server_config_is_primary_route(SilcServer server);
218 SilcServerConfigRouter *
219 silc_server_config_get_primary_router(SilcServer server);
221 #endif /* !SERVERCONFIG_H */