updates.
[silc.git] / apps / silcd / serverconfig.h
index 0b045fa182bccfe6430b60c8bf9523c530721f9d..0c424a43b21ad1bfc9e328cbcda091b4ab909466 100644 (file)
 #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,105 +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;
-} SilcConfigServerSectionIdentity;
 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 <Logging> 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;
-  int initiator;
-  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;
-
-/* Holds all client redirections from config file */
-typedef struct {
-  char *host;
-  unsigned short port;
-} SilcConfigServerSectionRedirectClient;
+  uint16 port;
+  struct SilcServerConfigSectionDenyConnectionStruct *next;
+  struct SilcServerConfigSectionDenyConnectionStruct *prev;
+} SilcServerConfigSectionDenyConnection;
 
 /* Holds motd file */
 typedef struct {
   char *motd_file;
-} SilcConfigServerSectionMotd;
+} SilcServerConfigSectionMotd;
 
 /* 
    SILC Server Config object. 
@@ -161,25 +167,26 @@ typedef struct {
   char *filename;
 
   /* Configuration sections */
-  SilcConfigServerSectionAlg *cipher;
-  SilcConfigServerSectionAlg *pkcs;
-  SilcConfigServerSectionAlg *hash_func;
-  SilcConfigServerSectionServerInfo *server_info;
-  SilcConfigServerSectionAdminInfo *admin_info;
-  SilcConfigServerSectionListenPort *listen_port;
-  SilcConfigServerSectionIdentity *identity;
-  SilcConfigServerSectionLogging *logging;
-  SilcConfigServerSectionConnectionClass *conn_class;
-  SilcConfigServerSectionClientConnection *clients;
-  SilcConfigServerSectionServerConnection *servers;
-  SilcConfigServerSectionServerConnection *routers;
-  SilcConfigServerSectionAdminConnection *admins;
-  SilcConfigServerSectionDenyConnection *denied;
-  SilcConfigServerSectionRedirectClient *redirect;
-  SilcConfigServerSectionMotd *motd;
-} 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 {
@@ -187,6 +194,8 @@ 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,
@@ -198,29 +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,
   SILC_CONFIG_SERVER_SECTION_TYPE_MOTD,
-} SilcConfigServerSectionType;
+} 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 */
 
@@ -243,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