void net_check_cfg(void) { EUID_ASSERT(); int net_configured = 0; if (cfg.bridge0.configured) net_configured++; if (cfg.bridge1.configured) net_configured++; if (cfg.bridge2.configured) net_configured++; if (cfg.bridge3.configured) net_configured++; int if_configured = 0; if (cfg.interface0.configured) if_configured++; if (cfg.interface1.configured) if_configured++; if (cfg.interface2.configured) if_configured++; if (cfg.interface3.configured) if_configured++; // --defaultgw requires a network or an interface if (cfg.defaultgw && net_configured == 0 && if_configured == 0) { fprintf(stderr, "Error: option --defaultgw requires at least one network or one interface to be configured\n"); exit(1); } if (net_configured == 0) // nothing to check return; // --net=none if (arg_nonetwork && net_configured) { fprintf(stderr, "Error: --net and --net=none are mutually exclusive\n"); exit(1); } // check default gateway address or assign one assert(cfg.bridge0.configured); if (cfg.defaultgw) check_default_gw(cfg.defaultgw); else { // first network is a regular bridge if (cfg.bridge0.macvlan == 0) cfg.defaultgw = cfg.bridge0.ip; // first network is a mac device else { // get the host default gw EUID_ROOT(); // rise permissions for grsecurity // Error fopen:network_get_defaultgw(479): Permission denied uint32_t gw = network_get_defaultgw(); EUID_USER(); // check the gateway is network range if (in_netrange(gw, cfg.bridge0.ip, cfg.bridge0.mask)) gw = 0; cfg.defaultgw = gw; } } }
void net_check_cfg(void) { int net_configured = 0; if (cfg.bridge0.configured) net_configured++; if (cfg.bridge1.configured) net_configured++; if (cfg.bridge2.configured) net_configured++; if (cfg.bridge3.configured) net_configured++; // --defaultgw requires a network if (cfg.defaultgw && net_configured == 0) { fprintf(stderr, "Error: option --defaultgw requires at least one network to be configured\n"); exit(1); } if (net_configured == 0) // nothing to check return; // --net=none if (arg_nonetwork && net_configured) { fprintf(stderr, "Error: --net and --net=none are mutually exclusive\n"); exit(1); } // check default gateway address or assign one assert(cfg.bridge0.configured); if (cfg.defaultgw) check_default_gw(cfg.defaultgw); else { // first network is a regular bridge if (cfg.bridge0.macvlan == 0) cfg.defaultgw = cfg.bridge0.ip; // first network is a mac device else { // get the host default gw uint32_t gw = network_get_defaultgw(); // check the gateway is network range if (in_netrange(gw, cfg.bridge0.ip, cfg.bridge0.mask)) gw = 0; cfg.defaultgw = gw; } if (cfg.defaultgw == 0) fprintf(stderr, "Warning: default network gateway not set.\n"); else fprintf(stderr, "Using %d.%d.%d.%d as default gateway.\n", PRINT_IP(cfg.defaultgw)); } }