* Added global variable silc_log_timestamp that tells silclog
[silc.git] / apps / silcd / serverconfig.c
index 3a8005324a44bce23b9e62630df7343475d0005c..6bb799d6cbd6a3447a6f3e2d720b56716b2fb295 100644 (file)
@@ -122,9 +122,10 @@ static bool my_parse_authdata(SilcAuthMethod auth_meth, char *p,
     /* p is a plain text password */
     if (auth_data && auth_data_len) {
       if (!silc_utf8_valid(p, strlen(p))) {
-       *auth_data_len = silc_utf8_encoded_len(p, strlen(p), 0);
+       *auth_data_len = silc_utf8_encoded_len(p, strlen(p),
+                                              SILC_STRING_LANGUAGE);
        *auth_data = silc_calloc(*auth_data_len, sizeof(unsigned char));
-       silc_utf8_encode(p, strlen(p), SILC_STRING_ASCII, *auth_data,
+       silc_utf8_encode(p, strlen(p), SILC_STRING_LANGUAGE, *auth_data,
                         *auth_data_len);
       } else {
        *auth_data = (void *) strdup(p);
@@ -544,7 +545,10 @@ SILC_CONFIG_CALLBACK(fetch_logging)
 {
   SILC_SERVER_CONFIG_SECTION_INIT(SilcServerConfigLogging);
 
-  if (!strcmp(name, "quicklogs")) {
+  if (!strcmp(name, "timestamp")) {
+    config->logging_timestamp = *(bool *)val;
+  }
+  else if (!strcmp(name, "quicklogs")) {
     config->logging_quick = *(bool *)val;
   }
   else if (!strcmp(name, "flushdelay")) {
@@ -967,6 +971,7 @@ SILC_CONFIG_CALLBACK(fetch_router)
     CONFIG_IS_DOUBLE(tmp->backup_replace_ip);
     tmp->backup_replace_ip = (*(char *)val ? strdup((char *) val) :
                              strdup("*"));
+    tmp->backup_router = TRUE;
   }
   else if (!strcmp(name, "backupport")) {
     int port = *(int *)val;
@@ -1079,6 +1084,7 @@ static const SilcConfigTable table_logging_c[] = {
 };
 
 static const SilcConfigTable table_logging[] = {
+  { "timestamp",       SILC_CONFIG_ARG_TOGGLE, fetch_logging,  NULL },
   { "quicklogs",       SILC_CONFIG_ARG_TOGGLE, fetch_logging,  NULL },
   { "flushdelay",      SILC_CONFIG_ARG_INT,    fetch_logging,  NULL },
   { "info",            SILC_CONFIG_ARG_BLOCK,  fetch_logging,  table_logging_c },
@@ -1206,6 +1212,9 @@ SilcServerConfig silc_server_config_alloc(const char *filename)
   if (!config_new)
     return NULL;
 
+  /* general config defaults */
+  config_new->logging_timestamp = TRUE;
+
   /* obtain a config file object */
   file = silc_config_open(filename);
   if (!file) {
@@ -1255,8 +1264,6 @@ SilcServerConfig silc_server_config_alloc(const char *filename)
     return NULL;
   }
 
-  /* XXX are there any other mandatory sections in the config file? */
-
   /* Set default to configuration parameters */
   silc_server_config_set_defaults(config_new);
 
@@ -1315,6 +1322,10 @@ void silc_server_config_destroy(SilcServerConfig config)
     silc_free(config->logging_errors->file);
   if (config->logging_fatals)
     silc_free(config->logging_fatals->file);
+  silc_free(config->logging_info);
+  silc_free(config->logging_warnings);
+  silc_free(config->logging_errors);
+  silc_free(config->logging_fatals);
 
   /* Destroy the ServerInfo struct */
   if (config->server_info) {
@@ -1339,6 +1350,7 @@ void silc_server_config_destroy(SilcServerConfig config)
     silc_free(si->pid_file);
     silc_pkcs_public_key_free(si->public_key);
     silc_pkcs_private_key_free(si->private_key);
+    silc_free(si);
   }
 
   /* Now let's destroy the lists */
@@ -1660,6 +1672,7 @@ void silc_server_config_setlogfiles(SilcServer server)
 
   SILC_LOG_DEBUG(("Setting configured log file names and options"));
 
+  silc_log_timestamp = config->logging_timestamp;
   silc_log_quick = config->logging_quick;
   silc_log_flushdelay = (config->logging_flushdelay ?
                         config->logging_flushdelay :
@@ -1806,6 +1819,31 @@ silc_server_config_find_router_conn(SilcServer server, char *host, int port)
   return serv;
 }
 
+/* Find backup router connection by host (name or ip) */
+
+SilcServerConfigRouter *
+silc_server_config_find_backup_conn(SilcServer server, char *host)
+{
+  SilcServerConfig config = server->config;
+  SilcServerConfigRouter *serv = NULL;
+
+  if (!host)
+    return NULL;
+
+  if (!config->routers)
+    return NULL;
+
+  for (serv = config->routers; serv; serv = serv->next) {
+    if (!serv->backup_router)
+      continue;
+    if (!silc_string_compare(serv->host, host))
+      continue;
+    break;
+  }
+
+  return serv;
+}
+
 /* Returns TRUE if configuration for a router connection that we are
    initiating exists. */
 
@@ -1848,3 +1886,31 @@ silc_server_config_get_primary_router(SilcServer server)
 
   return NULL;
 }
+
+/* If we have backup router configured that is going to replace us this
+   function returns it. */
+
+SilcServerConfigRouter *
+silc_server_config_get_backup_router(SilcServer server)
+{
+  SilcServerConfig config = server->config;
+  SilcServerConfigRouter *serv = NULL;
+  int i;
+
+  if (server->server_type != SILC_ROUTER)
+    return NULL;
+
+  serv = config->routers;
+  for (i = 0; serv; i++) {
+    if (serv->initiator == FALSE && serv->backup_router == TRUE &&
+       serv->backup_local == TRUE &&
+       !strcmp(server->config->server_info->primary->server_ip,
+               serv->backup_replace_ip) &&
+       server->config->server_info->primary->port ==
+       serv->backup_replace_port)
+      return serv;
+    serv = serv->next;
+  }
+
+  return NULL;
+}