/* serverconfig.h Author: Giovanni Giacobbi Copyright (C) 1997 - 2007 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ #ifndef SERVERCONFIG_H #define SERVERCONFIG_H typedef struct SilcServerConfigCipherStruct { char *name; char *module; SilcUInt32 key_length; SilcUInt32 block_length; struct SilcServerConfigCipherStruct *next; } SilcServerConfigCipher; typedef struct SilcServerConfigHashStruct { char *name; char *module; SilcUInt32 block_length; SilcUInt32 digest_length; struct SilcServerConfigHashStruct *next; } SilcServerConfigHash; typedef struct SilcServerConfigHmacStruct { char *name; char *hash; SilcUInt32 mac_length; struct SilcServerConfigHmacStruct *next; } SilcServerConfigHmac; typedef struct SilcServerConfigPkcsStruct { char *name; struct SilcServerConfigPkcsStruct *next; } SilcServerConfigPkcs; typedef struct SilcServerConfigServerInfoInterfaceStruct { char *server_ip; char *public_ip; SilcUInt16 port; struct SilcServerConfigServerInfoInterfaceStruct *next; } SilcServerConfigServerInfoInterface; typedef struct SilcServerConfigServerInfoStruct { char *server_name; SilcServerConfigServerInfoInterface *primary; SilcServerConfigServerInfoInterface *secondary; char *server_type; /* E.g. "Test Server" */ char *location; /* geographic location */ char *admin; /* admin full name */ char *email; /* admin's email address */ char *user; /* userid the server should be runned at */ char *group; /* ditto, but about groupid */ SilcPublicKey public_key; SilcPrivateKey private_key; char *motd_file; /* path to text motd file (reading only) */ char *pid_file; /* path to the pid file (for reading and writing) */ } SilcServerConfigServerInfo; typedef struct SilcServerConfigLoggingStruct { char *file; SilcUInt32 maxsize; } SilcServerConfigLogging; /* Connection parameters */ typedef struct SilcServerConfigConnParams { struct SilcServerConfigConnParams *next; char *name; char *version_protocol; char *version_software; char *version_software_vendor; SilcUInt32 connections_max; SilcUInt32 connections_max_per_host; SilcUInt32 keepalive_secs; SilcUInt32 reconnect_count; SilcUInt32 reconnect_interval; SilcUInt32 reconnect_interval_max; SilcUInt32 key_exchange_rekey; SilcUInt32 qos_rate_limit; SilcUInt32 qos_bytes_limit; SilcUInt32 qos_limit_sec; SilcUInt32 qos_limit_usec; SilcUInt32 chlimit; unsigned int key_exchange_pfs : 1; unsigned int reconnect_keep_trying : 1; unsigned int anonymous : 1; unsigned int qos : 1; } SilcServerConfigConnParams; /* Holds all client authentication data from config file */ typedef struct SilcServerConfigClientStruct { char *host; unsigned char *passphrase; SilcUInt32 passphrase_len; SilcBool publickeys; SilcServerConfigConnParams *param; struct SilcServerConfigClientStruct *next; } SilcServerConfigClient; /* Holds all server's administrators authentication data from config file */ typedef struct SilcServerConfigAdminStruct { char *host; char *user; char *nick; unsigned char *passphrase; SilcUInt32 passphrase_len; SilcBool publickeys; struct SilcServerConfigAdminStruct *next; } SilcServerConfigAdmin; /* Holds all configured denied connections from config file */ typedef struct SilcServerConfigDenyStruct { char *host; char *reason; struct SilcServerConfigDenyStruct *next; } SilcServerConfigDeny; /* Holds all configured server connections from config file */ typedef struct SilcServerConfigServerStruct { char *host; unsigned char *passphrase; SilcUInt32 passphrase_len; SilcBool publickeys; SilcServerConfigConnParams *param; SilcBool backup_router; struct SilcServerConfigServerStruct *next; } SilcServerConfigServer; /* Holds all configured router connections from config file */ typedef struct SilcServerConfigRouterStruct { char *host; unsigned char *passphrase; SilcUInt32 passphrase_len; SilcBool publickeys; SilcUInt16 port; SilcServerConfigConnParams *param; SilcBool initiator; SilcBool backup_router; SilcBool dynamic_connection; char *backup_replace_ip; SilcUInt16 backup_replace_port; SilcBool backup_local; struct SilcServerConfigRouterStruct *next; } SilcServerConfigRouter; /* define the SilcServerConfig object */ typedef struct { SilcServer server; void *tmp; /* Reference count (when this reaches zero, config object is destroyed) */ SilcInt32 refcount; /* The General section */ char *module_path; SilcBool prefer_passphrase_auth; SilcBool require_reverse_lookup; SilcUInt32 channel_rekey_secs; SilcUInt32 key_exchange_timeout; SilcUInt32 conn_auth_timeout; SilcServerConfigConnParams param; SilcBool detach_disabled; SilcUInt32 detach_timeout; SilcBool logging_timestamp; SilcBool logging_quick; long logging_flushdelay; char *debug_string; SilcBool httpd; char *httpd_ip; SilcUInt16 httpd_port; SilcBool dynamic_server; SilcBool local_channels; /* Other configuration sections */ SilcServerConfigCipher *cipher; SilcServerConfigHash *hash; SilcServerConfigHmac *hmac; SilcServerConfigPkcs *pkcs; SilcServerConfigLogging *logging_info; SilcServerConfigLogging *logging_warnings; SilcServerConfigLogging *logging_errors; SilcServerConfigLogging *logging_fatals; SilcServerConfigServerInfo *server_info; SilcServerConfigConnParams *conn_params; SilcServerConfigClient *clients; SilcServerConfigAdmin *admins; SilcServerConfigDeny *denied; SilcServerConfigServer *servers; SilcServerConfigRouter *routers; } *SilcServerConfig; typedef struct { SilcServerConfig config; void *ref_ptr; } SilcServerConfigRef; /* Prototypes */ /* Basic config operations */ SilcServerConfig silc_server_config_alloc(const char *filename, SilcServer server); void silc_server_config_destroy(SilcServerConfig config); void silc_server_config_ref(SilcServerConfigRef *ref, SilcServerConfig config, void *ref_ptr); void silc_server_config_unref(SilcServerConfigRef *ref); /* Algorithm registering and reset functions */ SilcBool silc_server_config_register_ciphers(SilcServer server); SilcBool silc_server_config_register_hashfuncs(SilcServer server); SilcBool silc_server_config_register_hmacs(SilcServer server); SilcBool silc_server_config_register_pkcs(SilcServer server); void silc_server_config_setlogfiles(SilcServer server); /* Run-time config access functions */ SilcServerConfigClient * silc_server_config_find_client(SilcServer server, char *host); SilcServerConfigAdmin * silc_server_config_find_admin(SilcServer server, char *host, char *user, char *nick); SilcServerConfigDeny * silc_server_config_find_denied(SilcServer server, char *host); SilcServerConfigServer * silc_server_config_find_server_conn(SilcServer server, char *host); SilcServerConfigRouter * silc_server_config_find_router_conn(SilcServer server, char *host, int port); SilcServerConfigRouter * silc_server_config_find_backup_conn(SilcServer server, char *host); SilcBool silc_server_config_is_primary_route(SilcServer server); SilcServerConfigRouter * silc_server_config_get_primary_router(SilcServer server); SilcServerConfigRouter * silc_server_config_get_backup_router(SilcServer server); #endif /* !SERVERCONFIG_H */