X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserverconfig.h;h=8be6d7cb7ccec9fec883c62321ae4fd72e781a51;hp=56ed10eb129e107081e2aad1f7fa0e4863798832;hb=d47a87b03b846e2333ef57b2c0d81f1644992964;hpb=23c5df1c8b0bfe539d3fa65802186e6e09e044aa diff --git a/apps/silcd/serverconfig.h b/apps/silcd/serverconfig.h index 56ed10eb..8be6d7cb 100644 --- a/apps/silcd/serverconfig.h +++ b/apps/silcd/serverconfig.h @@ -2,15 +2,15 @@ serverconfig.h - Author: Pekka Riikonen + Author: Johnny Mnemonic - Copyright (C) 1997 - 2000 Pekka Riikonen + Copyright (C) 1997 - 2002 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; either version 2 of the License, or (at your option) any later version. - + 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 @@ -21,230 +21,180 @@ #ifndef SERVERCONFIG_H #define SERVERCONFIG_H -/* Holds information of configured algorithms */ -typedef struct SilcConfigServerSectionAlgStruct { - char *alg_name; - char *sim_name; - unsigned int block_len; - unsigned int key_len; - struct SilcConfigServerSectionAlgStruct *next; - struct SilcConfigServerSectionAlgStruct *prev; -#define SILC_CONFIG_SERVER_MODNAME "builtin" -} SilcConfigServerSectionAlg; - -/* Holds server information from config file */ -typedef struct { +typedef struct SilcServerConfigSectionCipherStruct { + char *name; + char *module; + uint32 key_length; + uint32 block_length; + struct SilcServerConfigSectionCipherStruct *next; +} SilcServerConfigSectionCipher; + +typedef struct SilcServerConfigSectionHashStruct { + char *name; + char *module; + uint32 block_length; + uint32 digest_length; + struct SilcServerConfigSectionHashStruct *next; +} SilcServerConfigSectionHash; + +typedef struct SilcServerConfigSectionHmacStruct { + char *name; + char *hash; + uint32 mac_length; + struct SilcServerConfigSectionHmacStruct *next; +} SilcServerConfigSectionHmac; + +typedef struct SilcServerConfigSectionPkcsStruct { + char *name; + struct SilcServerConfigSectionPkcsStruct *next; +} SilcServerConfigSectionPkcs; + +typedef struct SilcServerConfigSectionServerInfoStruct { char *server_name; char *server_ip; - char *location; - unsigned short port; -} SilcConfigServerSectionServerInfo; - -/* Holds server's administrative information from config file */ -typedef struct { - char *server_type; - char *admin_name; - char *admin_email; -} SilcConfigServerSectionAdminInfo; - -/* Holds all the ports the server is listenning on */ -typedef struct SilcConfigServerSectionListenPortStruct { - char *host; - char *remote_ip; - unsigned short port; - struct SilcConfigServerSectionListenPortStruct *next; - struct SilcConfigServerSectionListenPortStruct *prev; -} SilcConfigServerSectionListenPort; - -/* Holds all the configured log files. */ -typedef struct SilcConfigServerSectionLoggingStruct { - char *logtype; - char *filename; - unsigned int maxsize; - struct SilcConfigServerSectionLoggingStruct *next; - struct SilcConfigServerSectionLoggingStruct *prev; - -/* Allowed section types */ -#define SILC_CONFIG_SERVER_LF_INFO "infologfile" -#define SILC_CONFIG_SERVER_LF_WARNING "warninglogfile" -#define SILC_CONFIG_SERVER_LF_ERROR "errorlogfile" -#define SILC_CONFIG_SERVER_LF_FATAL "fatalogfile" -} SilcConfigServerSectionLogging; + uint16 port; + 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) */ +} SilcServerConfigSectionServerInfo; + +typedef struct SilcServerConfigSectionLoggingStruct { + char *file; + uint32 maxsize; +} SilcServerConfigSectionLogging; /* Holds all configured connection classes */ -typedef struct SilcConfigServerSectionConnectionClassStruct { - unsigned int class; - unsigned int ping_freq; - unsigned int connect_freq; - unsigned int max_links; - struct SilcConfigServerSectionConnectionClassStruct *next; - struct SilcConfigServerSectionConnectionClassStruct *prev; -} SilcConfigServerSectionConnectionClass; - -#define SILC_CONFIG_SERVER_AUTH_METH_PASSWD "passwd" -#define SILC_CONFIG_SERVER_AUTH_METH_PUBKEY "pubkey" +/* typedef struct SilcServerConfigSectionClassStruct { + uint32 class; + uint32 ping_freq; + uint32 connect_freq; + uint32 max_links; + struct SilcServerConfigSectionClassStruct *next; +} SilcServerConfigSectionClass; */ /* Holds all client authentication data from config file */ -typedef struct SilcConfigServerSectionClientConnectionStruct { +typedef struct SilcServerConfigSectionClientStruct { char *host; - int auth_meth; - char *auth_data; - unsigned short port; - unsigned int class; - struct SilcConfigServerSectionClientConnectionStruct *next; - struct SilcConfigServerSectionClientConnectionStruct *prev; -} SilcConfigServerSectionClientConnection; - -/* Hols all server's administrators authentication data from config file */ -typedef struct SilcConfigServerSectionAdminConnectionStruct { + SilcAuthMethod auth_meth; + void *auth_data; + uint32 auth_data_len; + uint16 port; + uint32 class; + struct SilcServerConfigSectionClientStruct *next; +} SilcServerConfigSectionClient; + +/* Holds all server's administrators authentication data from config file */ +typedef struct SilcServerConfigSectionAdminStruct { char *host; - int auth_meth; - char *auth_data; - char *nickname; - unsigned int class; - struct SilcConfigServerSectionAdminConnectionStruct *next; - struct SilcConfigServerSectionAdminConnectionStruct *prev; -} SilcConfigServerSectionAdminConnection; - -/* Holds all configured server/router connections from config file */ -typedef struct SilcConfigServerSectionServerConnectionStruct { - char *host; - int auth_meth; - char *auth_data; - unsigned short port; - char *version; - unsigned int class; - struct SilcConfigServerSectionServerConnectionStruct *next; - struct SilcConfigServerSectionServerConnectionStruct *prev; -} SilcConfigServerSectionServerConnection; + char *user; + char *nick; + SilcAuthMethod auth_meth; + void *auth_data; + uint32 auth_data_len; + struct SilcServerConfigSectionAdminStruct *next; +} SilcServerConfigSectionAdmin; /* Holds all configured denied connections from config file */ -typedef struct { +typedef struct SilcServerConfigSectionDenyStruct { char *host; - char *time; - char *comment; - unsigned short port; -} SilcConfigServerSectionDenyConnection; + uint16 port; + char *reason; + struct SilcServerConfigSectionDenyStruct *next; +} SilcServerConfigSectionDeny; -/* Holds all client redirections from config file */ -typedef struct { +/* Holds all configured server connections from config file */ +typedef struct SilcServerConfigSectionServerStruct { char *host; - unsigned short port; -} SilcConfigServerSectionRedirectClient; - -/* - SILC Server Config object. - - This object holds all the data parsed from the SILC server configuration - file. This is mainly used at the initialization of the server. + SilcAuthMethod auth_meth; + void *auth_data; + uint32 auth_data_len; + uint16 port; + char *version; + uint32 class; + bool backup_router; + struct SilcServerConfigSectionServerStruct *next; +} SilcServerConfigSectionServer; -*/ -typedef struct { - /* Pointer back to the server */ - void *server; - - /* Filename of the configuration file */ - char *filename; - - /* Configuration sections */ - SilcConfigServerSectionAlg *cipher; - SilcConfigServerSectionAlg *pkcs; - SilcConfigServerSectionAlg *hash_func; - SilcConfigServerSectionServerInfo *server_info; - SilcConfigServerSectionAdminInfo *admin_info; - SilcConfigServerSectionListenPort *listen_port; - SilcConfigServerSectionLogging *logging; - SilcConfigServerSectionConnectionClass *conn_class; - SilcConfigServerSectionClientConnection *clients; - SilcConfigServerSectionServerConnection *servers; - SilcConfigServerSectionServerConnection *routers; - SilcConfigServerSectionAdminConnection *admins; - SilcConfigServerSectionDenyConnection *denied; - SilcConfigServerSectionRedirectClient *redirect; -} SilcConfigServerObject; - -typedef SilcConfigServerObject *SilcConfigServer; - -/* Configuration section type enumerations. */ -typedef enum { - SILC_CONFIG_SERVER_SECTION_TYPE_NONE = 0, - SILC_CONFIG_SERVER_SECTION_TYPE_CIPHER, - SILC_CONFIG_SERVER_SECTION_TYPE_PKCS, - SILC_CONFIG_SERVER_SECTION_TYPE_HASH_FUNCTION, - SILC_CONFIG_SERVER_SECTION_TYPE_SERVER_INFO, - SILC_CONFIG_SERVER_SECTION_TYPE_ADMIN_INFO, - SILC_CONFIG_SERVER_SECTION_TYPE_LISTEN_PORT, - SILC_CONFIG_SERVER_SECTION_TYPE_LOGGING, - SILC_CONFIG_SERVER_SECTION_TYPE_CONNECTION_CLASS, - SILC_CONFIG_SERVER_SECTION_TYPE_CLIENT_CONNECTION, - SILC_CONFIG_SERVER_SECTION_TYPE_SERVER_CONNECTION, - SILC_CONFIG_SERVER_SECTION_TYPE_ROUTER_CONNECTION, - SILC_CONFIG_SERVER_SECTION_TYPE_ADMIN_CONNECTION, - SILC_CONFIG_SERVER_SECTION_TYPE_DENY_CONNECTION, - SILC_CONFIG_SERVER_SECTION_TYPE_REDIRECT_CLIENT, -} SilcConfigServerSectionType; - -/* SILC Configuration Section structure. */ +/* Holds all configured router connections from config file */ +typedef struct SilcServerConfigSectionRouterStruct { + char *host; + SilcAuthMethod auth_meth; + void *auth_data; + uint32 auth_data_len; + uint16 port; + char *version; + uint32 class; + bool initiator; + bool backup_router; + char *backup_replace_ip; + uint16 backup_replace_port; + bool backup_local; + struct SilcServerConfigSectionRouterStruct *next; +} SilcServerConfigSectionRouter; + +/* define the SilcServerConfig object */ typedef struct { - const char *section; - SilcConfigServerSectionType type; - unsigned int maxfields; -} SilcConfigServerSection; - -/* LIst of all possible config sections in SILC server. */ -extern SilcConfigServerSection silc_config_server_sections[]; - -/* Structure used in parsing the configuration lines. The line is read - from a file to this structure before parsing it further. */ -typedef struct SilcConfigServerParseStruct { - SilcBuffer line; - unsigned int linenum; - SilcConfigServerSection *section; - struct SilcConfigServerParseStruct *next; - struct SilcConfigServerParseStruct *prev; -} *SilcConfigServerParse; - -/* Macros */ - -/* Allocates list entries for configuration sections. Used by all - config sections as this is common. */ -#define SILC_SERVER_CONFIG_LIST_ALLOC(x) \ -do { \ - if (!(x)) { \ - (x) = silc_calloc(1, sizeof(*(x))); \ - (x)->next = NULL; \ - (x)->prev = NULL; \ - } else { \ - if (!(x)->next) { \ - (x)->next = silc_calloc(1, sizeof(*(x)->next)); \ - (x)->next->next = NULL; \ - (x)->next->prev = (x); \ - (x) = (x)->next; \ - } \ - } \ -} while(0) + void *tmp; + char *module_path; + + SilcServerConfigSectionCipher *cipher; + SilcServerConfigSectionHash *hash; + SilcServerConfigSectionHmac *hmac; + SilcServerConfigSectionPkcs *pkcs; + SilcServerConfigSectionLogging *logging_info; + SilcServerConfigSectionLogging *logging_warnings; + SilcServerConfigSectionLogging *logging_errors; + SilcServerConfigSectionLogging *logging_fatals; + SilcServerConfigSectionServerInfo *server_info; +/*SilcServerConfigSectionClass *conn_class; */ + SilcServerConfigSectionClient *clients; + SilcServerConfigSectionAdmin *admins; + SilcServerConfigSectionDeny *denied; + SilcServerConfigSectionServer *servers; + SilcServerConfigSectionRouter *routers; +} *SilcServerConfig; /* Prototypes */ -SilcConfigServer silc_config_server_alloc(char *filename); -void silc_config_server_free(SilcConfigServer config); -int silc_config_server_parse(SilcConfigServer config, SilcBuffer buffer, - SilcConfigServerParse *return_config); -int silc_config_server_parse_lines(SilcConfigServer config, - SilcConfigServerParse parse_config); -int silc_config_server_check_sections(unsigned int checkmask); -void silc_config_server_setlogfiles(SilcConfigServer config); -void silc_config_server_register_ciphers(SilcConfigServer config); -void silc_config_server_register_pkcs(SilcConfigServer config); -void silc_config_server_register_hashfuncs(SilcConfigServer config); -SilcConfigServerSectionClientConnection * -silc_config_server_find_client_conn(SilcConfigServer config, - char *host, int port); -SilcConfigServerSectionServerConnection * -silc_config_server_find_server_conn(SilcConfigServer config, + +/* basic config operations */ +SilcServerConfig silc_server_config_alloc(char *filename); +void silc_server_config_destroy(SilcServerConfig config); + +/* algorithm registering and reset functions */ +bool silc_server_config_register_ciphers(SilcServer server); +bool silc_server_config_register_hashfuncs(SilcServer server); +bool silc_server_config_register_hmacs(SilcServer server); +bool silc_server_config_register_pkcs(SilcServer server); +void silc_server_config_setlogfiles(SilcServerConfig config, SilcSchedule sked); + +/* run-time config access functions */ +SilcServerConfigSectionClient * +silc_server_config_find_client(SilcServerConfig config, char *host, int port); + +SilcServerConfigSectionAdmin * +silc_server_config_find_admin(SilcServerConfig config, + char *host, char *user, char *nick); + +SilcServerConfigSectionDeny * +silc_server_config_find_denied(SilcServerConfig config, + char *host, uint16 port); + +/* Prototypes - OLD */ +SilcServerConfigSectionServer * +silc_server_config_find_server_conn(SilcServerConfig config, char *host, int port); -SilcConfigServerSectionServerConnection * -silc_config_server_find_router_conn(SilcConfigServer config, +SilcServerConfigSectionRouter * +silc_server_config_find_router_conn(SilcServerConfig config, char *host, int port); -void silc_config_server_print(); +bool silc_server_config_is_primary_route(SilcServerConfig config); +SilcServerConfigSectionRouter * +silc_server_config_get_primary_router(SilcServerConfig config); -#endif +#endif /* !SERVERCONFIG_H */