Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2007 Pekka Riikonen
+ Copyright (C) 1997 - 2014 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static char *opt_keypath = NULL;
static char *opt_pkcs = "rsa";
static char *opt_identifier = NULL;
-static int opt_bits = 2048;
+static int opt_bits = 4096;
/* Prints out the usage of silc client */
#undef STAT_OUTPUT
-#ifdef SILC_DEBUG
/* Dump internal flags */
fprintf(fdd, "\nDumping internal flags\n");
fprintf(fdd, " server_type : %d\n", silcd->server_type);
if (!silc_socket_stream_get_info(silc_packet_stream_get_stream(s),
&sock, &hostname, &ip, &port))
continue;
- fprintf(fdd, " %d: host %s ip %s port %d type %d\n",
+ fprintf(fdd, " %d: host %s ip %s port %d type %d idata %p\n",
sock, hostname ? hostname : "N/A",
- ip ? ip : "N/A", port, idata ? idata->conn_type : 0);
+ ip ? ip : "N/A", port, idata ? idata->conn_type : 0, idata);
}
silc_dlist_uninit(conns);
}
if (silc_idcache_get_all(silcd->local_list->servers, &list)) {
c = 1;
fprintf(fdd, "\nServers in local-list:\n");
+ silc_list_start(list);
while ((id_cache = silc_list_get(list))) {
server_entry = (SilcServerEntry)id_cache->context;
- fprintf(fdd, " %d: name %s id %s status 0x%x\n", c,
+ fprintf(fdd, " %d: name %s id %s status 0x%x idata %p\n", c,
server_entry->server_name ? server_entry->server_name :
"N/A", server_entry->id ?
silc_id_render(server_entry->id, SILC_ID_SERVER) : "N/A",
- server_entry->data.status);
+ server_entry->data.status, server_entry);
c++;
}
}
if (silc_idcache_get_all(silcd->global_list->servers, &list)) {
fprintf(fdd, "\nServers in global-list:\n");
c = 1;
+ silc_list_start(list);
while ((id_cache = silc_list_get(list))) {
server_entry = (SilcServerEntry)id_cache->context;
- fprintf(fdd, " %d: name %s id %s status 0x%x\n", c,
+ fprintf(fdd, " %d: name %s id %s status 0x%x idata %p\n", c,
server_entry->server_name ? server_entry->server_name :
"N/A", server_entry->id ?
silc_id_render(server_entry->id, SILC_ID_SERVER) : "N/A",
- server_entry->data.status);
+ server_entry->data.status, server_entry);
c++;
}
}
if (silc_idcache_get_all(silcd->local_list->clients, &list)) {
fprintf(fdd, "\nClients in local-list:\n");
c = 1;
+ silc_list_start(list);
while ((id_cache = silc_list_get(list))) {
client_entry = (SilcClientEntry)id_cache->context;
server_entry = client_entry->router;
- fprintf(fdd, " %d: name %s id %s status 0x%x from %s\n", c,
+ fprintf(fdd, " %d: name %s id %s status 0x%x from %s idata %p\n", c,
client_entry->nickname ? client_entry->nickname :
(unsigned char *)"N/A", client_entry->id ?
silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
client_entry->data.status, server_entry ?
server_entry->server_name ? server_entry->server_name :
- "N/A" : "local");
+ "N/A" : "local", client_entry);
c++;
}
}
if (silc_idcache_get_all(silcd->global_list->clients, &list)) {
fprintf(fdd, "\nClients in global-list:\n");
c = 1;
+ silc_list_start(list);
while ((id_cache = silc_list_get(list))) {
client_entry = (SilcClientEntry)id_cache->context;
server_entry = client_entry->router;
- fprintf(fdd, " %d: name %s id %s status 0x%x from %s\n", c,
+ fprintf(fdd, " %d: name %s id %s status 0x%x from %s idata %p\n", c,
client_entry->nickname ? client_entry->nickname :
(unsigned char *)"N/A", client_entry->id ?
silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
client_entry->data.status, server_entry ?
server_entry->server_name ? server_entry->server_name :
- "N/A" : "local");
+ "N/A" : "local", client_entry);
c++;
}
}
if (silc_idcache_get_all(silcd->local_list->channels, &list)) {
fprintf(fdd, "\nChannels in local-list:\n");
c = 1;
+ silc_list_start(list);
while ((id_cache = silc_list_get(list))) {
channel_entry = (SilcChannelEntry)id_cache->context;
fprintf(fdd, " %d: name %s id %s\n", c,
if (silc_idcache_get_all(silcd->global_list->channels, &list)) {
fprintf(fdd, "\nChannels in global-list:\n");
c = 1;
+ silc_list_start(list);
while ((id_cache = silc_list_get(list))) {
channel_entry = (SilcChannelEntry)id_cache->context;
fprintf(fdd, " %d: name %s id %s\n", c,
}
}
}
-#endif
fflush(fdd);
fclose(fdd);
{ 7, "silcd\\.c,server\\.c,command\\.c,server_backup\\.c,packet_send\\.c" },
/* All basic stuff from silcd/ */
- { 10, "silc_server_*" },
+ { 10, "silc_server_*,*silc_id_create_*,*idlist*,*skr*" },
/* All from silcd/ */
- { 15, "*silcd*,*serverid*,silc_server_*,*idlist*" },
+ { 15, "*silcd*,*serverid*,silc_server_*,*idlist*,*skr*" },
/* All from silcd/ and basic stuff from libs */
- { 20, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*silcske*" },
+ { 20, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*silcske*,"
+ "*skr*" },
/* All from silcd/ and more stuff from libs */
{ 25, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,"
- "*silcpacket*,*ske*,*silcrng*" },
+ "*silcpacket*,*ske*,*silcrng*,*skr*" },
/* All from silcd/ and even more stuff from libs */
- { 30, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,"
+ { 30, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*skr*"
"*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*" },
/* All from silcd/ and even more stuff from libs + all from silccore */
- { 35, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,"
+ { 35, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*skr*"
"*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*"
"*silcid*,*argument*" },
/* All from silcd/, all from silccore, silccrypt and silcmath */
- { 40, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,"
+ { 40, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*skr*"
"*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*"
"*silcid*,*argument*,*pkcs*,*hmac*,*hash*,*cipher*,silc_math*" },
/* All from silcd/, all from silccore, silccrypt and silcmath + stuff
from silcutil */
- { 45, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,"
+ { 45, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*skr*"
"*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*"
"*silcid*,*argument*,*pkcs*,*hmac*,*hash*,*cipher*,silc_math*,*sim*"
"*sockconn*" },
/* All from silcd/, all from silccore, silccrypt and silcmath + more stuff
from silcutil */
- { 50, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,"
+ { 50, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*skr*"
"*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*"
"*silcid*,*argument*,*pkcs*,*hmac*,*hash*,*cipher*,silc_math*,*sim*"
"*sockconn*,*net*" },
/* All from silcd/, all from silccore, silccrypt and silcmath + more stuff
from silcutil */
- { 55, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,"
+ { 55, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*skr*"
"*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*"
"*silcid*,*argument*,*pkcs*,*hmac*,*hash*,*cipher*,silc_math*,*sim*"
"*sockconn*,*net*,*log*,*config*" },
}
}
+#ifdef SILC_DEBUG
+#define NUM_DEBUGS 3000
+static char debugs[NUM_DEBUGS][128];
+static int cur_debug = 0;
+
+SilcBool silc_server_debug_callback(char *file, char *function, int line,
+ char *message, void *context)
+{
+ SilcTimeStruct curtime;
+
+ /* Save the message to ring buffer */
+ silc_time_value(0, &curtime);
+ silc_snprintf(debugs[cur_debug % NUM_DEBUGS], sizeof(debugs[0]),
+ "%02d:%02d:%02d %s:%d: %s", curtime.hour,
+ curtime.minute, curtime.second, function, line,
+ message);
+ cur_debug++;
+
+ return FALSE;
+}
+#endif /* SILC_DEBUG */
+
int main(int argc, char **argv)
{
int ret, opt, option_index;
char *silcd_config_file = NULL;
struct sigaction sa;
+#ifdef SILC_DEBUG
+ silc_log_set_debug_callbacks(silc_server_debug_callback, NULL, NULL, NULL);
+#endif /* SILC_DEBUG */
+
/* Parse command line arguments */
if (argc > 1) {
#ifdef HAVE_GETOPT_LONG
silc_pkcs_register_default();
silc_hash_register_default();
silc_hmac_register_default();
+
+ if (opt_bits < 4096)
+ fprintf(stderr,
+ "warning: You have specified key length under 4096 bits. It is "
+ "recommended to use at least 4096 bits.\n");
+
if (!silc_create_key_pair(opt_pkcs, opt_bits, pubfile, prvfile,
opt_identifier, "", NULL, NULL, FALSE))
exit(1);