X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserverconfig.h;h=0c424a43b21ad1bfc9e328cbcda091b4ab909466;hp=af017597958a826b3e3d01d5dee1570d4598fe72;hb=e5d8d3db6caa344b3d419b884556c21b15e7d123;hpb=318d79b391bf6288e3e28c840217a7097f3d0392 diff --git a/apps/silcd/serverconfig.h b/apps/silcd/serverconfig.h index af017597..0c424a43 100644 --- a/apps/silcd/serverconfig.h +++ b/apps/silcd/serverconfig.h @@ -22,23 +22,29 @@ #define SERVERCONFIG_H /* Holds information of configured algorithms */ -typedef struct SilcConfigServerSectionAlgStruct { +typedef struct SilcServerConfigSectionAlgStruct { char *alg_name; char *sim_name; - unsigned int block_len; - unsigned int key_len; - struct SilcConfigServerSectionAlgStruct *next; - struct SilcConfigServerSectionAlgStruct *prev; + uint32 block_len; + uint32 key_len; + struct SilcServerConfigSectionAlgStruct *next; + struct SilcServerConfigSectionAlgStruct *prev; #define SILC_CONFIG_SERVER_MODNAME "builtin" -} SilcConfigServerSectionAlg; +} SilcServerConfigSectionAlg; + +/* Holds server keys from config file */ +typedef struct { + SilcPublicKey public_key; + SilcPrivateKey private_key; +} SilcServerConfigSectionServerKeys; /* Holds server information from config file */ typedef struct { char *server_name; char *server_ip; char *location; - unsigned short port; -} SilcConfigServerSectionServerInfo; + uint16 port; +} SilcServerConfigSectionServerInfo; /* Holds server's administrative information from config file */ typedef struct { @@ -46,92 +52,105 @@ typedef struct { char *server_type; char *admin_name; char *admin_email; -} SilcConfigServerSectionAdminInfo; +} SilcServerConfigSectionAdminInfo; /* 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; +typedef struct SilcServerConfigSectionListenPortStruct { + char *local_ip; + char *listener_ip; + uint16 port; + struct SilcServerConfigSectionListenPortStruct *next; + struct SilcServerConfigSectionListenPortStruct *prev; +} SilcServerConfigSectionListenPort; + +/* Holds server's execution identity, or the user and group which + to change from root when server starts */ +typedef struct { + char *user; + char *group; +} SilcServerConfigSectionIdentity; /* Holds all the configured log files. */ -typedef struct SilcConfigServerSectionLoggingStruct { +typedef struct SilcServerConfigSectionLoggingStruct { char *logtype; char *filename; - unsigned int maxsize; - struct SilcConfigServerSectionLoggingStruct *next; - struct SilcConfigServerSectionLoggingStruct *prev; + uint32 maxsize; + struct SilcServerConfigSectionLoggingStruct *next; + struct SilcServerConfigSectionLoggingStruct *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; +#define SILC_CONFIG_SERVER_LF_FATAL "fatallogfile" +} 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; +typedef struct SilcServerConfigSectionConnectionClassStruct { + uint32 class; + uint32 ping_freq; + uint32 connect_freq; + uint32 max_links; + struct SilcServerConfigSectionConnectionClassStruct *next; + struct SilcServerConfigSectionConnectionClassStruct *prev; +} SilcServerConfigSectionConnectionClass; #define SILC_CONFIG_SERVER_AUTH_METH_PASSWD "passwd" #define SILC_CONFIG_SERVER_AUTH_METH_PUBKEY "pubkey" /* Holds all client authentication data from config file */ -typedef struct SilcConfigServerSectionClientConnectionStruct { +typedef struct SilcServerConfigSectionClientConnectionStruct { char *host; - int auth_meth; - char *auth_data; - unsigned short port; - unsigned int class; - struct SilcConfigServerSectionClientConnectionStruct *next; - struct SilcConfigServerSectionClientConnectionStruct *prev; -} SilcConfigServerSectionClientConnection; + SilcAuthMethod auth_meth; + void *auth_data; + uint32 auth_data_len; + uint16 port; + uint32 class; + struct SilcServerConfigSectionClientConnectionStruct *next; + struct SilcServerConfigSectionClientConnectionStruct *prev; +} SilcServerConfigSectionClientConnection; /* Hols all server's administrators authentication data from config file */ -typedef struct SilcConfigServerSectionAdminConnectionStruct { +typedef struct SilcServerConfigSectionAdminConnectionStruct { char *host; - int auth_meth; - char *auth_data; + char *username; char *nickname; - unsigned int class; - struct SilcConfigServerSectionAdminConnectionStruct *next; - struct SilcConfigServerSectionAdminConnectionStruct *prev; -} SilcConfigServerSectionAdminConnection; + SilcAuthMethod auth_meth; + void *auth_data; + uint32 auth_data_len; + struct SilcServerConfigSectionAdminConnectionStruct *next; + struct SilcServerConfigSectionAdminConnectionStruct *prev; +} SilcServerConfigSectionAdminConnection; /* Holds all configured server/router connections from config file */ -typedef struct SilcConfigServerSectionServerConnectionStruct { +typedef struct SilcServerConfigSectionServerConnectionStruct { char *host; - int auth_meth; - char *auth_data; - unsigned short port; + SilcAuthMethod auth_meth; + void *auth_data; + uint32 auth_data_len; + uint16 port; char *version; - unsigned int class; - struct SilcConfigServerSectionServerConnectionStruct *next; - struct SilcConfigServerSectionServerConnectionStruct *prev; -} SilcConfigServerSectionServerConnection; + uint32 class; + bool initiator; + bool backup_router; + bool backup_local; + struct SilcServerConfigSectionServerConnectionStruct *next; + struct SilcServerConfigSectionServerConnectionStruct *prev; +} SilcServerConfigSectionServerConnection; /* Holds all configured denied connections from config file */ -typedef struct { +typedef struct SilcServerConfigSectionDenyConnectionStruct { char *host; - char *time; char *comment; - unsigned short port; -} SilcConfigServerSectionDenyConnection; + uint16 port; + struct SilcServerConfigSectionDenyConnectionStruct *next; + struct SilcServerConfigSectionDenyConnectionStruct *prev; +} SilcServerConfigSectionDenyConnection; -/* Holds all client redirections from config file */ +/* Holds motd file */ typedef struct { - char *host; - unsigned short port; -} SilcConfigServerSectionRedirectClient; + char *motd_file; +} SilcServerConfigSectionMotd; /* SILC Server Config object. @@ -148,23 +167,26 @@ typedef struct { 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; + SilcServerConfigSectionAlg *cipher; + SilcServerConfigSectionAlg *pkcs; + SilcServerConfigSectionAlg *hash_func; + SilcServerConfigSectionAlg *hmac; + SilcServerConfigSectionServerKeys *server_keys; + SilcServerConfigSectionServerInfo *server_info; + SilcServerConfigSectionAdminInfo *admin_info; + SilcServerConfigSectionListenPort *listen_port; + SilcServerConfigSectionIdentity *identity; + SilcServerConfigSectionLogging *logging; + SilcServerConfigSectionConnectionClass *conn_class; + SilcServerConfigSectionClientConnection *clients; + SilcServerConfigSectionServerConnection *servers; + SilcServerConfigSectionServerConnection *routers; + SilcServerConfigSectionAdminConnection *admins; + SilcServerConfigSectionDenyConnection *denied; + SilcServerConfigSectionMotd *motd; +} SilcServerConfigObject; + +typedef SilcServerConfigObject *SilcServerConfig; /* Configuration section type enumerations. */ typedef enum { @@ -172,9 +194,12 @@ typedef enum { SILC_CONFIG_SERVER_SECTION_TYPE_CIPHER, SILC_CONFIG_SERVER_SECTION_TYPE_PKCS, SILC_CONFIG_SERVER_SECTION_TYPE_HASH_FUNCTION, + SILC_CONFIG_SERVER_SECTION_TYPE_HMAC, + SILC_CONFIG_SERVER_SECTION_TYPE_SERVER_KEYS, 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_IDENTITY, SILC_CONFIG_SERVER_SECTION_TYPE_LOGGING, SILC_CONFIG_SERVER_SECTION_TYPE_CONNECTION_CLASS, SILC_CONFIG_SERVER_SECTION_TYPE_CLIENT_CONNECTION, @@ -182,28 +207,28 @@ typedef enum { 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_CONFIG_SERVER_SECTION_TYPE_MOTD, +} SilcServerConfigSectionType; /* SILC Configuration Section structure. */ typedef struct { const char *section; - SilcConfigServerSectionType type; - unsigned int maxfields; -} SilcConfigServerSection; + SilcServerConfigSectionType type; + int maxfields; +} SilcServerConfigSection; /* LIst of all possible config sections in SILC server. */ -extern SilcConfigServerSection silc_config_server_sections[]; +extern SilcServerConfigSection silc_server_config_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 { +typedef struct SilcServerConfigParseStruct { SilcBuffer line; - unsigned int linenum; - SilcConfigServerSection *section; - struct SilcConfigServerParseStruct *next; - struct SilcConfigServerParseStruct *prev; -} *SilcConfigServerParse; + int linenum; + SilcServerConfigSection *section; + struct SilcServerConfigParseStruct *next; + struct SilcServerConfigParseStruct *prev; +} *SilcServerConfigParse; /* Macros */ @@ -226,26 +251,35 @@ do { \ } while(0) /* 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, +SilcServerConfig silc_server_config_alloc(char *filename); +void silc_server_config_free(SilcServerConfig config); +int silc_server_config_parse(SilcServerConfig config, SilcBuffer buffer, + SilcServerConfigParse *return_config); +int silc_server_config_parse_lines(SilcServerConfig config, + SilcServerConfigParse parse_config); +int silc_server_config_check_sections(uint32 checkmask); +void silc_server_config_setlogfiles(SilcServerConfig config); +bool silc_server_config_register_ciphers(SilcServerConfig config); +bool silc_server_config_register_pkcs(SilcServerConfig config); +bool silc_server_config_register_hashfuncs(SilcServerConfig config); +bool silc_server_config_register_hmacs(SilcServerConfig config); +SilcServerConfigSectionClientConnection * +silc_server_config_find_client_conn(SilcServerConfig config, char *host, int port); -SilcConfigServerSectionServerConnection * -silc_config_server_find_server_conn(SilcConfigServer config, +SilcServerConfigSectionServerConnection * +silc_server_config_find_server_conn(SilcServerConfig config, char *host, int port); -SilcConfigServerSectionServerConnection * -silc_config_server_find_router_conn(SilcConfigServer config, +SilcServerConfigSectionServerConnection * +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); +SilcServerConfigSectionServerConnection * +silc_server_config_get_primary_router(SilcServerConfig config); +SilcServerConfigSectionAdminConnection * +silc_server_config_find_admin(SilcServerConfig config, + char *host, char *username, char *nickname); +SilcServerConfigSectionDenyConnection * +silc_server_config_denied_conn(SilcServerConfig config, char *host, + int port); #endif