Add ``ExternalIp'' config directive to ServerInfo tag in
[silc.git] / apps / silcd / serverconfig.c
index 796242a6aaa55532320d378f0de72f2d786ebbf2..6e49475a682adbcc02942c8ff467e8710a0899dc 100644 (file)
@@ -595,6 +595,10 @@ SILC_CONFIG_CALLBACK(fetch_serverinfo)
     CONFIG_IS_DOUBLE(server_info->server_type);
     server_info->server_type = strdup((char *) val);
   }
+  else if (!strcmp(name, "externalip")) {
+    CONFIG_IS_DOUBLE(server_info->external_ip);
+    server_info->external_ip = strdup((char *) val);
+  }
   else if (!strcmp(name, "admin")) {
     CONFIG_IS_DOUBLE(server_info->admin);
     server_info->admin = strdup((char *) val);
@@ -640,10 +644,11 @@ SILC_CONFIG_CALLBACK(fetch_serverinfo)
 
     /* Check the private key file permissions. */
     if ((stat(file_tmp, &st)) != -1) {
-      if ((st.st_mode & 0777) != 0600) {
+      if (((st.st_mode & 0777) != 0600) &&
+         ((st.st_mode & 0777) != 0640)) {
        SILC_SERVER_LOG_ERROR(("Wrong permissions in private key "
                              "file \"%s\".  The permissions must be "
-                             "0600.", file_tmp));
+                             "0600 or 0640.", file_tmp));
         return SILC_CONFIG_ESILENT;
       }
     }
@@ -1255,6 +1260,7 @@ static const SilcConfigTable table_serverinfo[] = {
   { "primary",         SILC_CONFIG_ARG_BLOCK,  fetch_serverinfo, table_serverinfo_c},
   { "secondary",       SILC_CONFIG_ARG_BLOCK,  fetch_serverinfo, table_serverinfo_c},
   { "servertype",      SILC_CONFIG_ARG_STR,    fetch_serverinfo, NULL},
+  { "externalip",      SILC_CONFIG_ARG_STR,    fetch_serverinfo, NULL},
   { "location",                SILC_CONFIG_ARG_STR,    fetch_serverinfo, NULL},
   { "admin",           SILC_CONFIG_ARG_STR,    fetch_serverinfo, NULL},
   { "adminemail",      SILC_CONFIG_ARG_STR,    fetch_serverinfo, NULL},
@@ -1638,6 +1644,7 @@ void silc_server_config_destroy(SilcServerConfig config)
       silc_free(di);
     }
     silc_free(si->server_type);
+    silc_free(si->external_ip);
     silc_free(si->location);
     silc_free(si->admin);
     silc_free(si->email);