X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserverconfig.c;h=ecc35e2fa799ca880a0c7ef696b60362246d1933;hp=b0f3b1db084191d5ee18d6aaaa58d87425892ff8;hb=e5d8d3db6caa344b3d419b884556c21b15e7d123;hpb=fb8dbc2d9cd7ff5d197654f873ac18aa6ef9c5e3 diff --git a/apps/silcd/serverconfig.c b/apps/silcd/serverconfig.c index b0f3b1db..ecc35e2f 100644 --- a/apps/silcd/serverconfig.c +++ b/apps/silcd/serverconfig.c @@ -268,7 +268,7 @@ int silc_server_config_parse_lines(SilcServerConfig config, /* Get number of tokens in line */ ret = silc_config_check_num_token(line); - if (ret != pc->section->maxfields) { + if (ret < pc->section->maxfields) { /* Bad line */ fprintf(stderr, "%s:%d: Missing tokens, %d tokens (should be %d)\n", config->filename, pc->linenum, ret, @@ -557,13 +557,13 @@ int silc_server_config_parse_lines(SilcServerConfig config, SILC_SERVER_CONFIG_LIST_ALLOC(config->listen_port); - /* Get host */ - ret = silc_config_get_token(line, &config->listen_port->host); + /* Get local IP */ + ret = silc_config_get_token(line, &config->listen_port->local_ip); if (ret < 0) break; - /* Get remote IP */ - ret = silc_config_get_token(line, &config->listen_port->remote_ip); + /* Get listener IP */ + ret = silc_config_get_token(line, &config->listen_port->listener_ip); if (ret < 0) break; @@ -848,6 +848,15 @@ int silc_server_config_parse_lines(SilcServerConfig config, silc_free(tmp); } + /* Check whether this connection is backup router connection */ + ret = silc_config_get_token(line, &tmp); + if (ret != -1) { + config->servers->backup_router = atoi(tmp); + if (config->servers->backup_router != 0) + config->servers->backup_router = TRUE; + silc_free(tmp); + } + check = TRUE; checkmask |= (1L << pc->section->type); break; @@ -860,9 +869,6 @@ int silc_server_config_parse_lines(SilcServerConfig config, ret = silc_config_get_token(line, &config->routers->host); if (ret < 0) break; - // if (ret == 0) - ///* Any host */ - // config->routers->host = strdup("*"); /* Get authentication method */ ret = silc_config_get_token(line, &tmp); @@ -945,6 +951,24 @@ int silc_server_config_parse_lines(SilcServerConfig config, silc_free(tmp); } + /* Check whether this connection is backup router connection */ + ret = silc_config_get_token(line, &tmp); + if (ret != -1) { + config->routers->backup_router = atoi(tmp); + if (config->routers->backup_router != 0) + config->routers->backup_router = TRUE; + silc_free(tmp); + } + + /* Check whether this backup is local (in cell) or remote (other cell) */ + ret = silc_config_get_token(line, &tmp); + if (ret != -1) { + config->routers->backup_local = atoi(tmp); + if (config->routers->backup_local != 0) + config->routers->backup_local = TRUE; + silc_free(tmp); + } + check = TRUE; checkmask |= (1L << pc->section->type); break; @@ -1220,13 +1244,16 @@ void silc_server_config_setlogfiles(SilcServerConfig config) /* Registers configured ciphers. These can then be allocated by the server when needed. */ -void silc_server_config_register_ciphers(SilcServerConfig config) +bool silc_server_config_register_ciphers(SilcServerConfig config) { SilcServerConfigSectionAlg *alg; SilcServer server = (SilcServer)config->server; SILC_LOG_DEBUG(("Registering configured ciphers")); + if (!config->cipher) + return FALSE; + alg = config->cipher; while(alg) { @@ -1303,17 +1330,22 @@ void silc_server_config_register_ciphers(SilcServerConfig config) alg = alg->next; } + + return TRUE; } /* Registers configured PKCS's. */ -void silc_server_config_register_pkcs(SilcServerConfig config) +bool silc_server_config_register_pkcs(SilcServerConfig config) { SilcServerConfigSectionAlg *alg = config->pkcs; SilcServer server = (SilcServer)config->server; SILC_LOG_DEBUG(("Registering configured PKCS")); + if (!config->pkcs) + return FALSE; + while(alg) { int i; @@ -1331,18 +1363,23 @@ void silc_server_config_register_pkcs(SilcServerConfig config) alg = alg->next; } + + return TRUE; } /* Registers configured hash functions. These can then be allocated by the server when needed. */ -void silc_server_config_register_hashfuncs(SilcServerConfig config) +bool silc_server_config_register_hashfuncs(SilcServerConfig config) { SilcServerConfigSectionAlg *alg; SilcServer server = (SilcServer)config->server; SILC_LOG_DEBUG(("Registering configured hash functions")); + if (!config->hash_func) + return FALSE; + alg = config->hash_func; while(alg) { @@ -1409,24 +1446,22 @@ void silc_server_config_register_hashfuncs(SilcServerConfig config) alg = alg->next; } + + return TRUE; } /* Registers configure HMACs. These can then be allocated by the server when needed. */ -void silc_server_config_register_hmacs(SilcServerConfig config) +bool silc_server_config_register_hmacs(SilcServerConfig config) { SilcServerConfigSectionAlg *alg; SilcServer server = (SilcServer)config->server; SILC_LOG_DEBUG(("Registering configured HMACs")); - if (!config->hmac) { - SILC_LOG_ERROR(("HMACs are not configured. SILC cannot work without " - "HMACs")); - silc_server_stop(server); - exit(1); - } + if (!config->hmac) + return FALSE; alg = config->hmac; while(alg) { @@ -1446,6 +1481,8 @@ void silc_server_config_register_hmacs(SilcServerConfig config) alg = alg->next; } + + return TRUE; } /* Returns client authentication information from server configuration @@ -1573,7 +1610,7 @@ bool silc_server_config_is_primary_route(SilcServerConfig config) serv = config->routers; for (i = 0; serv; i++) { - if (serv->initiator == TRUE) { + if (serv->initiator == TRUE && serv->backup_router == FALSE) { found = TRUE; break; } @@ -1584,6 +1621,25 @@ bool silc_server_config_is_primary_route(SilcServerConfig config) return found; } +/* Returns our primary connection configuration or NULL if we do not + have primary router configured. */ + +SilcServerConfigSectionServerConnection * +silc_server_config_get_primary_router(SilcServerConfig config) +{ + int i; + SilcServerConfigSectionServerConnection *serv = NULL; + + serv = config->routers; + for (i = 0; serv; i++) { + if (serv->initiator == TRUE && serv->backup_router == FALSE) + return serv; + serv = serv->next; + } + + return NULL; +} + /* Returns Admin connection configuration by host, username and/or nickname. */