Esempio n. 1
0
void configuration::sanity_check_values()
{
	if(conf[DTLS_BIND_PORT] == 0 || conf[DTLS_OUTGOING_PORT] == 0) {
		// use random but persistent ports for these
		std::ofstream conffile(conf[CONFIG_FILE], std::ios_base::out | std::ios_base::binary | std::ios_base::app);
		if(conf[DTLS_BIND_PORT] == 0) {
			uint16_t port = ntohs(get_random_port());
			iout() << "Assigned DTLS_BIND_PORT random port " << port;
			conffile << "\nDTLS_BIND_PORT=" << port << '\n';
			assign_value(DTLS_BIND_PORT, port);
		}
		if(conf[DTLS_OUTGOING_PORT] == 0) {
			uint16_t port = ntohs(get_random_port());
			iout() << "Assigned DTLS_OUTGOING_PORT random port " << port;
			conffile << "\nDTLS_OUTGOING_PORT=" << port << '\n';
			assign_value(DTLS_OUTGOING_PORT, port);
		}
	}
	if(conf[DTLS_BIND_PORT] == conf[DTLS_OUTGOING_PORT] || conf[DTLS_BIND6_PORT] == conf[DTLS_OUTGOING_PORT]) {
		eout() << "DTLS_BIND_PORT or DTLS_OUTGOING_PORT not initialized to separate valid ports, these should have been set to random ports during installation."
			<< " You must set DTLS_BIND_PORT and DTLS_OUTGOING_PORT to separate port numbers in the snow configuration file."
			   << " If you have more than one device try to choose different ports for each device.";
		abort();
	}
	check_port(conf[DTLS_OUTGOING_PORT], "DTLS_OUTGOING_PORT");
	check_port(conf[DTLS_BIND_PORT], "DTLS_BIND_PORT");
	check_port(conf[DTLS_BIND6_PORT], "DTLS_BIND6_PORT");
	check_port(conf[DHT_PORT], "DHT_PORT");
	check_port(conf[NAMESERV_PORT], "NAMESERV_PORT");
	check_nonzero(conf[NAMESERV_TIMEOUT_SECS], "NAMESERV_TIMEOUT_SECS");
	check_nonzero(conf[DTLS_IDLE_TIMEOUT_SECS], "DTLS_IDLE_TIMEOUT_SECS");
	check_nonzero(conf[HEARTBEAT_SECONDS], "HEARTBEAT_SECONDS");
	check_nonzero(conf[HEARTBEAT_RETRIES], "HEARTBEAT_RETRIES");
	if(conf[NAT_IP_GRACE_PERIOD_SECONDS] < 1800) {
		wout() << "NAT IP grace period of " << conf[NAT_IP_GRACE_PERIOD_SECONDS] << " from configuration file is too short, using minimum grace period of 1800 seconds";
		assign_value(NAT_IP_GRACE_PERIOD_SECONDS, 1800);
	}
	if(conf[DHT_BOOTSTRAP_TARGET]==0) {
		wout() << "DHT_BOOTSTRAP_TARGET cannot be zero, using default value";
		assign_value(DHT_BOOTSTRAP_TARGET, 6);
	}
	if(conf[DHT_MAX_PEERS] <= 3) {
		wout() << "DHT_MAX_PEERS cannot be " << conf[DHT_MAX_PEERS] << ", must be at least 4, using default value of 99";
		assign_value(DHT_MAX_PEERS, 99);
	}
	if(conf[NATPOOL_NETMASK_BITS] > 20 || conf[NATPOOL_NETMASK_BITS] < 4) {
		eout() << "NATPOOL_NETMASK_BITS must be between 4 and 20";
		abort();
	}
	uint32_t addr, netmask = ~htonl((1 << (32 - conf[NATPOOL_NETMASK_BITS])) - 1);
	if(inet_pton(AF_INET, conf[NATPOOL_NETWORK].c_str(), &addr) != 1 || (addr & ~netmask) != 0) {
		eout() << "NATPOOL_NETWORK/NATPOOL_NETMASK_BITS as " << conf[NATPOOL_NETWORK] << "/" << conf[NATPOOL_NETMASK_BITS] << " is not a valid subnet.";
		abort();
	}
	if(conf[VIRTUAL_INTERFACE_MTU] > 65535 || conf[VIRTUAL_INTERFACE_MTU] < 576) {
		eout() << "VIRTUAL_INTERFACE_MTU cannot be " << conf[VIRTUAL_INTERFACE_MTU];
		abort();
	}
}
Esempio n. 2
0
void configuration::sanity_check_values()
{
	if(conf[MAX_UDP_SIZE] > UINT16_MAX || conf[MAX_UDP_SIZE] < 512) {
		wout() << "Invalid max UDP bufsize (" << conf[MAX_UDP_SIZE] << "), reverting to default (65535)";
		assign_value(MAX_UDP_SIZE, UINT16_MAX);
	}
	if(conf[MAX_CLIENT_UDP_RESPONSE] > UINT16_MAX || conf[MAX_CLIENT_UDP_RESPONSE] < 512) {
		wout() << "Invalid max client UDP response size (" << conf[MAX_CLIENT_UDP_RESPONSE] << "), reverting to default value (8192)";
		assign_value(MAX_CLIENT_UDP_RESPONSE, 8192);
	}
	if(conf[QUERY_RETRY_MS] > 5000 || conf[QUERY_RETRY_MS] < 10) {
		wout() << "Invalid query retry timeout (" << conf[QUERY_RETRY_MS] << " ms), reverting to default (500 ms)";
		assign_value(QUERY_RETRY_MS, 500);
	}
	if(conf[DNS_PORT] > UINT16_MAX || conf[DNS_PORT] == 0) {
		wout() << "Invalid DNS port (" << conf[DNS_PORT] << "), reverting to default port (53)";
		assign_value(DNS_PORT, 53);
	}
	if(conf[SNOW_NAMESERV_PORT] > UINT16_MAX || conf[SNOW_NAMESERV_PORT] == 0) {
		wout() << "Invalid snow nameserv port (" << conf[SNOW_NAMESERV_PORT] << "), reverting to default port (8)";
		assign_value(SNOW_NAMESERV_PORT, 8);
	}
	if(conf[MAX_TTL] > 604800)
		assign_value(MAX_TTL, 604800);
	if(conf[DEFAULT_STATIC_TTL] > conf[MAX_TTL])
		assign_value(DEFAULT_STATIC_TTL, conf[MAX_TTL]);
	if(conf[CACHE_SIZE] < 1024)
		assign_value(CACHE_SIZE, 1024);
	if(conf[CACHE_SIZE] > 1024*1024*1024)
		assign_value(CACHE_SIZE, 1024*1024*1024);
}
Esempio n. 3
0
File: eval.c Progetto: marcinlos/FPL
static value_object eval_aux(expr* node)
{
    if (node == NULL)
        return make_null();
    if (node->type == EXP_ASSIGN)
        return assign_value(node->left, node->right);

    value_object left = eval_aux(node->left);
    value_object right = eval_aux(node->right);

    switch (node->type)
    {
    case EXP_PLUS:
        return add_values(left, right);
    case EXP_MINUS:
        return sub_values(left, right);
    case EXP_TIMES:
        return mul_values(left, right);
    case EXP_DIV:
        return div_values(left, right);
    case EXP_INT:
        return make_int(atoi(node->text));
    case EXP_FLOAT:
        return make_float(to_float64(node->text));
    case EXP_NATIVE:
        return make_native(atof(node->text));
    case EXP_CALL:
        return eval_function(node->text, node->args);
    case EXP_ID:
        return get_variable_value(node->text);
    case EXP_UNMINUS:
        return negate_value(left);
    }
}
Esempio n. 4
0
int main(int argc, char *argv[])
{
    int *p = malloc(10 * sizeof(int));

    printf("%p\n",p);
    printf("%p\n",&p);

    assign_value(p);

    for (int i = 0; i < 10; ++i)
    {
        printf("%d\n", *(i + p));
    }

    printf("\n");

    // p = tmp;

        
    return 0;
}
Esempio n. 5
0
File: value.c Progetto: zma0472/miso
int
set_values(void)
{
 int fd = -1, n = 0, val = -1, f_c = 0;
 char buf[MAX_VALUES_LEN], *bp = NULL, *fp = NULL, *vp = NULL;

 if ( NULL == field ) {
     return (0);
 } else {
     if ( NULL == values ) {
         if ( NULL == value_path ) {
             return (0);
         } else {
             if ( (fd = open(value_path, O_RDONLY)) < 0 ) {
                 ERR("Open initial values file FAIL"); return (-1);
             } else {
                 memset(buf, 0, MAX_VALUES_LEN);
                 if ( (n = read(fd, buf, MAX_VALUES_LEN-1)) < 0 ) {
                     ERR("Read initial values file FAIL."); return (-1);
                 } else if ( 0 <= n ) {
                     buf[n] = '\0'; values = buf;
                 }
                 (void)close(fd);
             }
         }
     }
     bp = &(values[0]);
     while ( NULL != (fp = str_sep(&bp, &field_separator)) ) {
         if ( ++f_c > field_count ) {
             ERR("field_count=%d exceeded by f_c=%d", field_count, f_c);
             return (-1);
         } else if ( assign_value(field[f_c-1], fp) < 0 ) {
             return (-1);
         }
     }
 }
 return (0);
}
Esempio n. 6
0
configuration::configuration()
{
	// set defaults
#ifdef WINDOWS
	assign_value(CONFIG_FILE, get_env_var("PROGRAMFILES") + "\\sdns\\sdns.conf");
	assign_value(ROOT_HINTS_FILE, get_env_var("PROGRAMFILES") + "\\sdns\\root.names");
	assign_value(STATIC_RECORDS_FILE, get_env_var("PROGRAMFILES") + "\\sdns\\local.names");
	assign_value(DNS_FORWARDERS_DIR, get_env_var("PROGRAMFILES") + "\\sdns\\forwarders");
#else
	assign_value(CONFIG_FILE, "/etc/sdns/sdns.conf");
	assign_value(ROOT_HINTS_FILE, "/etc/sdns/root.names");
	assign_value(STATIC_RECORDS_FILE, "/etc/sdns/local.names");
	assign_value(DNS_FORWARDERS_DIR, "/etc/sdns/forwarders");
#endif
	assign_value(SDNS_USER, "");
	assign_value(BIND4_ADDRS, std::vector<uint32_t>(1, htonl(INADDR_LOOPBACK)));
	assign_value(BIND6_ADDRS, std::vector<in6_addr>(1, in6addr_loopback));
	assign_value(RETRIES_PER_NAMESERVER_ADDR, 4);
	// had tried setting max depth at 10 and download.windowsupdate.com could not resolve first try with empty cache because it has five (5) chained CNAMEs
		// which exceeded depth 10 between following CNAMEs and following referrals
	assign_value(MAX_DNS_QUERY_DEPTH, 25);
	assign_value(MAX_UDP_SIZE, 65535);
	assign_value(MAX_CLIENT_UDP_RESPONSE, 8192);
	assign_value(QUERY_RETRY_MS, 500);
	assign_value(DNS_PORT, 53);
	assign_value(SNOW_NAMESERV_PORT, 8);
	assign_value(SNOW_NAMESERV_TIMEOUT_SECS, 1);
	assign_value(SNOW_NAMESERV_TIMEOUT_RETRIES, 8);
	assign_value(CACHE_SIZE, 1024*1024);
	assign_value(MAX_TTL, 86400);
	assign_value(DEFAULT_STATIC_TTL, 1800);
	assign_value(MAX_TCP_CLIENTS, 250);
	assign_value(SNOW, true);
	
}
Esempio n. 7
0
configuration::configuration()
{
	// set defaults
	// strings
#ifdef WINDOWS
	//std::string programdata = get_env_var("PROGRAMDATA"); // [new ALLUSERSPROFILE, doesn't exist on XP/2003]
	std::string programdata = get_env_var("ALLUSERSPROFILE");
	assign_value(CONFIG_FILE, programdata+"/Application Data/snow/snow.conf");
	assign_value(KEY_FILE, programdata+"/Application Data/snow/key.pem");
	assign_value(CERT_FILE, programdata+"/Application Data/snow/cert.pem");
	assign_value(KNOWN_PEERS_FILE, programdata+"/Application Data/snow/known_peers");
	assign_value(DH_PARAMS_FILE, programdata+"/Application Data/snow/DH_params");
	assign_value(CLONE_DEVICE, "/dev/net/tun"); // (not used on windows)
	assign_value(VIRTUAL_INTERFACE, "auto"); // in config file, "{[GUID]}" of the interface; auto means try to find in registry
	assign_value(ADDRESS_ASSIGNMENT_FILE, programdata+"/Application Data/snow/address_assignments");
	assign_value(PERMANENT_ADDRESS_ASSIGNMENT_FILE, programdata+"/Application Data/snow/permanent_address_assignments");
	#else
	assign_value(CONFIG_FILE, "/etc/snow/snow.conf");
	assign_value(KEY_FILE, "/etc/snow/key.pem");
	assign_value(CERT_FILE, "/etc/snow/cert.pem");
	assign_value(KNOWN_PEERS_FILE, "/var/lib/snow/known_peers");
	assign_value(DH_PARAMS_FILE, "/etc/snow/DH_params");
	assign_value(CLONE_DEVICE, "/dev/net/tun");
	assign_value(VIRTUAL_INTERFACE, "snow0");
	assign_value(ADDRESS_ASSIGNMENT_FILE, "/var/lib/snow/address_assignments");
	assign_value(PERMANENT_ADDRESS_ASSIGNMENT_FILE, "/etc/snow/permanent_address_assignments");
	assign_value(SNOW_USER, "");
#endif
	assign_value(NATPOOL_NETWORK, "172.16.0.0");
	assign_value(PUBLIC_IPV4_ADDRS, std::vector<uint32_t>());
	// unsigned integers
	assign_value(DTLS_BIND_PORT, 0); // 0 is not valid, must set an arbitrary value in the configuration file
	assign_value(DTLS_BIND6_PORT, 8); 
	assign_value(DTLS_OUTGOING_PORT, 0); // 0 is not valid, must set an arbitrary value in the configuration file
	assign_value(DHT_PORT, 8);
	assign_value(NAMESERV_PORT, 8);
	assign_value(NAMESERV_TIMEOUT_SECS, 7);
	assign_value(DTLS_IDLE_TIMEOUT_SECS, 4000);
	assign_value(HEARTBEAT_SECONDS, 115);
	assign_value(HEARTBEAT_RETRIES, 5);
	assign_value(NAT_IP_GRACE_PERIOD_SECONDS, 7200);
	assign_value(DHT_BOOTSTRAP_TARGET, 6);
	assign_value(DHT_MAX_PEERS, 99);
	assign_value(NATPOOL_NETMASK_BITS, 12);
	assign_value(VIRTUAL_INTERFACE_MTU, 1419);
	// boolean values
	assign_value(DHT_RFC1918_ADDRESSES, true);
	assign_value(DHT_LINK_LOCAL_ADDRESSES, false);
	assign_value(NEVER_TRUST_PEER_VISIBLE_IPADDRS, false);
}
Esempio n. 8
0
 nsphere()
     : m_radius(0)
 {
     assign_value(m_center, coordinate_type());
 }
/*****************************************************************************
Gets called by picl_walk_tree_by_class.  Then it cycles through the properties
until we find what we are looking for.  Once we are done, we return
PICL_WALK_TERMINATE to stop picl_walk_tree_by_class from traversing the tree.

Note that PICL_PTYPE_UNSIGNED_INT and PICL_PTYPE_INT can either be 4-bytes
or 8-bytes.
*****************************************************************************/
static int probe_cpu(picl_nodehdl_t node_hdl, void* dummy_arg) {

  picl_prophdl_t  p_hdl;
  picl_prophdl_t  table_hdl;
  picl_propinfo_t p_info;
  long long       long_long_val;
  unsigned int    uint_val;
  int             index;
  int             int_val;
  int             val;
  char            string_val[PICL_PROPNAMELEN_MAX];

  val = picl_get_first_prop(node_hdl, &p_hdl);
  while (val == PICL_SUCCESS) {
    called_cpu_probe = 1;
    val = picl_get_propinfo(p_hdl, &p_info);
    if (val == PICL_SUCCESS) {
      for (index = 0; index < NUM_ITEMS; index++) {
        if (strcasecmp(p_info.name, items[index]) == 0) {
          if (p_info.type == PICL_PTYPE_UNSIGNED_INT) {
            if (p_info.size == sizeof(uint_val)) {
              val = picl_get_propval(p_hdl, &uint_val, sizeof(uint_val));
              if (val == PICL_SUCCESS) {
                long_long_val = uint_val;
                assign_value(index, long_long_val);
              }
            }
            else if (p_info.size == sizeof(long_long_val)) {
              val = picl_get_propval(p_hdl, &long_long_val,
                                     sizeof(long_long_val));
              if (val == PICL_SUCCESS) {
                assign_value(index, long_long_val);
              }
            }
          }
          else if (p_info.type == PICL_PTYPE_INT) {
            if (p_info.size == sizeof(int_val)) {
              val = picl_get_propval(p_hdl, &int_val, sizeof(int_val));
              if (val == PICL_SUCCESS) {
                long_long_val = int_val;
                assign_value(index, long_long_val);
              }
            }
            else if (p_info.size == sizeof(long_long_val)) {
              val = picl_get_propval(p_hdl, &long_long_val,
                                     sizeof(long_long_val));
              if (val == PICL_SUCCESS) {
                assign_value(index, long_long_val);
              }
            }
          }
          else if (p_info.type == PICL_PTYPE_CHARSTRING) {
            val = picl_get_propval(p_hdl, &string_val, sizeof(string_val));
            if (val == PICL_SUCCESS) {
              assign_string_value(index, string_val);
            }
          }
          else if (p_info.type == PICL_PTYPE_TABLE) {
            val = picl_get_propval(p_hdl, &table_hdl, p_info.size);
            if (val == PICL_SUCCESS) {
              search_table(index, table_hdl);
            }
          }
          break;
        } else if (index == NUM_ITEMS-1) {
	  if (p_info.type == PICL_PTYPE_CHARSTRING) {
            val = picl_get_propval(p_hdl, &string_val, sizeof(string_val));
            if (val == PICL_SUCCESS) {
            }	  
	  }
	} 
      }
    }

    val = picl_get_next_prop(p_hdl, &p_hdl);
  }
  return PICL_WALK_TERMINATE;
}