Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2003 Pekka Riikonen
+ Copyright (C) 1997 - 2005 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
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
static void silc_usage(void);
+#ifdef HAVE_GETOPT_LONG
/* Long command line options */
static struct option long_opts[] =
{
{ NULL, 0, NULL, 0 }
};
+#endif /* HAVE_GETOPT_LONG */
/* Command line option variables */
static char *opt_keypath = NULL;
SILC_TASK_CALLBACK(dump_stats)
{
FILE *fdd;
+ int fild;
char filename[256];
memset(filename, 0, sizeof(filename));
- snprintf(filename, sizeof(filename) - 1, "/tmp/silcd.%d.stats", getpid());
- fdd = fopen(filename, "w+");
- if (!fdd)
+ snprintf(filename, sizeof(filename) - 1, "/tmp/silcd.%d.stats-XXXXXX", getpid());
+ fild = mkstemp(filename);
+ if (fild == -1)
return;
+ fdd = fdopen(fild, "w");
+ if (fdd == NULL) {
+ close(fild);
+ unlink(filename);
+ return;
+ }
+
#define STAT_OUTPUT(fmt, stat) fprintf(fdd, fmt "\n", (int)stat);
fprintf(fdd, "SILC Server %s Statistics\n\n", silcd->server_name);
STAT_OUTPUT(" Authentication failures : %d", silcd->stat.auth_failures);
STAT_OUTPUT(" Packets sent : %d", silcd->stat.packets_sent);
STAT_OUTPUT(" Packets received : %d", silcd->stat.packets_received);
+ STAT_OUTPUT(" Commands sent : %d", silcd->stat.commands_sent);
+ STAT_OUTPUT(" Commands received : %d", silcd->stat.commands_received);
STAT_OUTPUT(" Connections : %d", silcd->stat.conn_num);
#undef STAT_OUTPUT
(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 :
+ server_entry->server_name ? server_entry->server_name :
"N/A" : "local");
if (!silc_idcache_list_next(list, &id_cache))
break;
(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 :
+ server_entry->server_name ? server_entry->server_name :
"N/A" : "local");
if (!silc_idcache_list_next(list, &id_cache))
break;
/* Parse command line arguments */
if (argc > 1) {
+#ifdef HAVE_GETOPT_LONG
while ((opt = getopt_long(argc, argv, "f:p:d:D:xhFVC:",
long_opts, &option_index)) != EOF) {
+#else
+ while ((opt = getopt(argc, argv, "f:p:d:D:xhFVC:")) != EOF) {
+#endif /* HAVE_GETOPT_LONG */
switch(opt) {
case 'h':
silc_usage();
break;
case 'd':
#ifdef SILC_DEBUG
- silc_debug = TRUE;
+ silc_log_debug(TRUE);
+ silc_log_quick(TRUE);
if (optarg)
silc_log_set_debug_string(optarg);
foreground = TRUE; /* implied */
- silc_log_quick = TRUE; /* implied */
#else
fprintf(stderr,
"Run-time debugging is not enabled. To enable it recompile\n"
break;
case 'D':
#ifdef SILC_DEBUG
- silc_debug = TRUE;
+ silc_log_debug(TRUE);
+ silc_log_quick(TRUE);
if (optarg)
silc_get_debug_level(atoi(optarg));
foreground = TRUE; /* implied */
- silc_log_quick = TRUE; /* implied */
#else
fprintf(stderr,
"Run-time debugging is not enabled. To enable it recompile\n"
break;
case 'x':
#ifdef SILC_DEBUG
- silc_debug_hexdump = TRUE;
- silc_debug = TRUE; /* implied */
+ silc_log_debug(TRUE);
+ silc_log_debug_hexdump(TRUE);
+ silc_log_quick(TRUE);
foreground = TRUE; /* implied */
- silc_log_quick = TRUE; /* implied */
#else
fprintf(stderr,
"Run-time debugging is not enabled. To enable it recompile\n"
snprintf(buf, sizeof(buf) - 1, "%d\n", getpid());
silc_file_writefile(pidfile, buf, strlen(buf));
}
- }
- /* Drop root if we are not in debug mode, so you don't need to bother about
- file writing permissions and so on */
- if (!silc_debug)
silc_server_drop_privs(silcd);
+ }
/* Run the server. When this returns the server has been stopped
and we will exit. */