X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/7f13b8556920bf40d4972f23c295a726a015c775..ae52a7d8d22f9d9670f141a72c92a48013ae5e46:/l2tpns.c diff --git a/l2tpns.c b/l2tpns.c index c22918a..2b31b81 100644 --- a/l2tpns.c +++ b/l2tpns.c @@ -4,7 +4,7 @@ // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced // vim: sw=8 ts=8 -char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.26 2004/09/19 23:19:23 fred_nerk Exp $"; +char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.29 2004/09/23 03:59:09 fred_nerk Exp $"; #include #include @@ -57,7 +57,7 @@ int snoopfd = -1; // UDP file handle for sending out intercept data int *radfds = NULL; // RADIUS requests file handles int ifrfd = -1; // File descriptor for routing, etc time_t basetime = 0; // base clock -char hostname[1000] = ""; // us. +char *hostname = NULL; // us. int tunidx; // ifr_ifindex of tun device u32 sessionid = 0; // session id for radius accounting int syslog_log = 0; // are we logging to syslog @@ -95,6 +95,7 @@ struct config_descriptt config_values[] = { CONFIG("debug", debug, INT), CONFIG("log_file", log_filename, STRING), CONFIG("pid_file", pid_file, STRING), + CONFIG("hostname", hostname, STRING), CONFIG("l2tp_secret", l2tpsecret, STRING), CONFIG("primary_dns", default_dns1, IP), CONFIG("secondary_dns", default_dns2, IP), @@ -2179,8 +2180,7 @@ int regular_cleanups(void) if (++count >= MAX_ACTIONS) break; } } - - if (config->accounting_dir && next_acct <= TIME) + if (*config->accounting_dir && next_acct <= TIME) { // Dump accounting data next_acct = TIME + ACCT_TIME; @@ -2461,13 +2461,14 @@ void mainloop(void) void initdata(void) { int i; + char *p; - if ((_statistics = shared_malloc(sizeof(struct Tstats))) == MAP_FAILED) + if (!(_statistics = shared_malloc(sizeof(struct Tstats)))) { log(0, 0, 0, 0, "Error doing malloc for _statistics: %s\n", strerror(errno)); exit(1); } - if ((config = shared_malloc(sizeof(struct configt))) == MAP_FAILED) + if (!(config = shared_malloc(sizeof(struct configt)))) { log(0, 0, 0, 0, "Error doing malloc for configuration: %s\n", strerror(errno)); exit(1); @@ -2475,37 +2476,37 @@ void initdata(void) memset(config, 0, sizeof(struct configt)); time(&config->start_time); strncpy(config->config_file, CONFIGFILE, sizeof(config->config_file) - 1); - if ((tunnel = shared_malloc(sizeof(tunnelt) * MAXTUNNEL)) == MAP_FAILED); + if (!(tunnel = shared_malloc(sizeof(tunnelt) * MAXTUNNEL))) { log(0, 0, 0, 0, "Error doing malloc for tunnels: %s\n", strerror(errno)); exit(1); } - if ((session = shared_malloc(sizeof(sessiont) * MAXSESSION)) == MAP_FAILED) + if (!(session = shared_malloc(sizeof(sessiont) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for sessions: %s\n", strerror(errno)); exit(1); } - if ((sess_count = shared_malloc(sizeof(sessioncountt) * MAXSESSION)) == MAP_FAILED) + if (!(sess_count = shared_malloc(sizeof(sessioncountt) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for sessions_count: %s\n", strerror(errno)); exit(1); } - if ((radius = shared_malloc(sizeof(radiust) * MAXRADIUS)) == MAP_FAILED) + if (!(radius = shared_malloc(sizeof(radiust) * MAXRADIUS))) { log(0, 0, 0, 0, "Error doing malloc for radius: %s\n", strerror(errno)); exit(1); } - if ((ip_address_pool = shared_malloc(sizeof(ippoolt) * MAXIPPOOL)) == MAP_FAILED) + if (!(ip_address_pool = shared_malloc(sizeof(ippoolt) * MAXIPPOOL))) { log(0, 0, 0, 0, "Error doing malloc for ip_address_pool: %s\n", strerror(errno)); exit(1); } #ifdef RINGBUFFER - if ((ringbuffer = shared_malloc(sizeof(struct Tringbuffer))) == MAP_FAILED) + if (!(ringbuffer = shared_malloc(sizeof(struct Tringbuffer)))) { log(0, 0, 0, 0, "Error doing malloc for ringbuffer: %s\n", strerror(errno)); exit(1); @@ -2513,16 +2514,14 @@ void initdata(void) memset(ringbuffer, 0, sizeof(struct Tringbuffer)); #endif - if ((cli_session_actions = shared_malloc(sizeof(struct cli_session_actions) * MAXSESSION)) - == MAP_FAILED) + if (!(cli_session_actions = shared_malloc(sizeof(struct cli_session_actions) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for cli session actions: %s\n", strerror(errno)); exit(1); } memset(cli_session_actions, 0, sizeof(struct cli_session_actions) * MAXSESSION); - if ((cli_tunnel_actions = shared_malloc(sizeof(struct cli_tunnel_actions) * MAXSESSION)) - == MAP_FAILED) + if (!(cli_tunnel_actions = shared_malloc(sizeof(struct cli_tunnel_actions) * MAXSESSION))) { log(0, 0, 0, 0, "Error doing malloc for cli tunnel actions: %s\n", strerror(errno)); exit(1); @@ -2547,17 +2546,15 @@ void initdata(void) for (i = 1; i < MAXTUNNEL- 1; i++) tunnel[i].state = TUNNELUNDEF; // mark it as not filled in. - if (!*hostname) - { - char *p; - // Grab my hostname unless it's been specified - gethostname(hostname, sizeof(hostname)); - if ((p = strchr(hostname, '.'))) *p = 0; - } + // Grab my hostname unless it's been specified + gethostname(config->hostname, sizeof(config->hostname)); + if ((p = strchr(config->hostname, '.'))) *p = 0; + hostname = config->hostname; + _statistics->start_time = _statistics->last_reset = time(NULL); #ifdef BGP - if ((bgp_peers = shared_malloc(sizeof(struct bgp_peer) * BGP_NUM_PEERS)) == MAP_FAILED) + if (!(bgp_peers = shared_malloc(sizeof(struct bgp_peer) * BGP_NUM_PEERS))) { log(0, 0, 0, 0, "Error doing malloc for bgp: %s\n", strerror(errno)); exit(1); @@ -2867,7 +2864,7 @@ void dump_acct_info() for (i = 0; i < MAXSESSION; i++) { - if (!session[i].opened || !session[i].ip || !session[i].cin || !session[i].cout || !*session[i].user || session[i].walled_garden) + if (!session[i].opened || !session[i].ip || (!session[i].cin && !session[i].cout) || !*session[i].user || session[i].walled_garden) continue; if (!f) { @@ -2957,7 +2954,7 @@ int main(int argc, char *argv[]) config->debug = optdebug; init_tbf(); - init_cli(hostname); + init_cli(); read_config_file(); log(0, 0, 0, 0, "L2TPNS version " VERSION "\n");