X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fsilcd.c;h=d367328c6578fdb15942f922e108a2fc7525e4de;hb=805fddcf6431e784f9f77114782a90c9d12f9cbe;hp=0c95b743bd977b82151f7b3c88036193b466f5be;hpb=f9f6dfe319b9ee24fd24963003a230fa0ab11d47;p=silc.git diff --git a/apps/silcd/silcd.c b/apps/silcd/silcd.c index 0c95b743..d367328c 100644 --- a/apps/silcd/silcd.c +++ b/apps/silcd/silcd.c @@ -245,9 +245,7 @@ SILC_TASK_CALLBACK(got_hup) SILC_TASK_CALLBACK(stop_server) { - /* Stop scheduler, the program will stop eventually after noticing - that the scheduler is down. */ - silc_schedule_stop(silcd->schedule); + silc_server_stop(silcd); } /* Dump server statistics into a file into /tmp directory */ @@ -327,24 +325,27 @@ SILC_TASK_CALLBACK(dump_stats) fprintf(fdd, " primary router : %s\n", silcd->router->server_name ? silcd->router->server_name : ""); -#if 0 - /* Dump socket connections */ + /* Dump connections */ { - int i; SilcPacketStream s; - - fprintf(fdd, "\nDumping socket connections\n"); - for (i = 0; i < silcd->config->param.connections_max; i++) { - s = silcd->sockets[i]; - if (!s) - continue; - fprintf(fdd, " %d: host %s ip %s port %d type %d flags 0x%x\n", - s->sock, s->hostname ? s->hostname : "N/A", - s->ip ? s->ip : "N/A", s->port, s->type, - (unsigned int)s->flags); + SilcDList conns = silc_packet_engine_get_streams(silcd->packet_engine); + + fprintf(fdd, "\nDumping connections\n"); + silc_dlist_start(conns); + while ((s = silc_dlist_get(conns))) { + const char *hostname, *ip; + SilcUInt16 port; + SilcSocket sock; + SilcIDListData idata = silc_packet_get_context(s); + 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", + sock, hostname ? hostname : "N/A", + ip ? ip : "N/A", port, idata ? idata->conn_type : 0); } + silc_dlist_uninit(conns); } -#endif /* Dump lists */ { @@ -467,43 +468,43 @@ static DebugLevel debug_levels[] = { { 15, "*silcd*,*serverid*,silc_server_*,*idlist*" }, /* All from silcd/ and basic stuff from libs */ - { 20, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcauth*,*silcske*" }, + { 20, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*,*silcske*" }, /* All from silcd/ and more stuff from libs */ - { 25, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcauth*," + { 25, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*," "*silcpacket*,*ske*,*silcrng*" }, /* All from silcd/ and even more stuff from libs */ - { 30, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcauth*," + { 30, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*," "*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*,*silcauth*," + { 35, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*," "*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*" "*silcid*,*argument*" }, /* All from silcd/, all from silccore, silccrypt and silcmath */ - { 40, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcauth*," + { 40, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*," "*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*,*silcauth*," + { 45, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*," "*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*,*silcauth*," + { 50, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*," "*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*,*silcauth*," + { 55, "*silcd*,*serverid*,silc_server_*,*idlist*,*silcconauth*," "*silcpacket*,*ske*,*silcrng*,*command*,*channel*,*private*,*notify*" "*silcid*,*argument*,*pkcs*,*hmac*,*hash*,*cipher*,silc_math*,*sim*" "*sockconn*,*net*,*log*,*config*" }, @@ -670,8 +671,9 @@ int main(int argc, char **argv) silc_pkcs_register_default(); silc_hash_register_default(); silc_hmac_register_default(); - silc_create_key_pair(opt_pkcs, opt_bits, pubfile, prvfile, - opt_identifier, "", NULL, NULL, FALSE); + if (!silc_create_key_pair(opt_pkcs, opt_bits, pubfile, prvfile, + opt_identifier, "", NULL, NULL, FALSE)) + exit(1); exit(0); } @@ -699,7 +701,8 @@ int main(int argc, char **argv) /* Unregister the default crypto stuff so that configuration takes effect */ silc_cipher_unregister_all(); - silc_pkcs_unregister_all(); + /* silc_pkcs_unregister_all(); MUST NOT do this anymore; SilcPublicKey + parsed from config file references pointers so we cannot unregister */ silc_hash_unregister_all(); silc_hmac_unregister_all(); @@ -742,15 +745,14 @@ int main(int argc, char **argv) silc_file_writefile(pidfile, buf, strlen(buf)); } - silc_server_drop_privs(silcd); } + silc_server_drop_privs(silcd); /* Run the server. When this returns the server has been stopped and we will exit. */ silc_server_run(silcd); - /* Stop the server and free it. */ - silc_server_stop(silcd); + /* Free server */ silc_server_config_destroy(silcd->config); silc_server_free(silcd);