diff --git a/src/worker-auth.c b/src/worker-auth.c index 727e86be..19841b1e 100644 --- a/src/worker-auth.c +++ b/src/worker-auth.c @@ -291,6 +291,7 @@ int ret; unsigned i; str_st b; uint32_t t; +char *st; str_init(&b); @@ -299,34 +300,58 @@ uint32_t t; goto cleanup; /* IPV4 DNS */ - ret = str_read_str_prefix1(&b, &ws->ipv4_dns, NULL); + ret = str_read_str_prefix1(&b, &st, NULL); if (ret < 0) goto cleanup; + if (st != NULL) { + free(ws->config->network.ipv4_dns); + ws->config->network.ipv4_dns = st; + } /* IPV6 DNS */ - ret = str_read_str_prefix1(&b, &ws->ipv6_dns, NULL); + ret = str_read_str_prefix1(&b, &st, NULL); if (ret < 0) goto cleanup; + if (st != NULL) { + free(ws->config->network.ipv6_dns); + ws->config->network.ipv6_dns = st; + } /* IPV4 NBNS */ - ret = str_read_str_prefix1(&b, &ws->ipv4_nbns, NULL); + ret = str_read_str_prefix1(&b, &st, NULL); if (ret < 0) goto cleanup; + if (st != NULL) { + free(ws->config->network.ipv4_nbns); + ws->config->network.ipv4_nbns = st; + } /* IPV6 NBNS */ - ret = str_read_str_prefix1(&b, &ws->ipv6_nbns, NULL); + ret = str_read_str_prefix1(&b, &st, NULL); if (ret < 0) goto cleanup; + if (st != NULL) { + free(ws->config->network.ipv6_nbns); + ws->config->network.ipv6_nbns = st; + } /* IPV4 netmask */ - ret = str_read_str_prefix1(&b, &ws->ipv4_netmask, NULL); + ret = str_read_str_prefix1(&b, &st, NULL); if (ret < 0) goto cleanup; + if (st != NULL) { + free(ws->config->network.ipv4_netmask); + ws->config->network.ipv4_netmask = st; + } /* IPV6 netmask */ - ret = str_read_str_prefix1(&b, &ws->ipv6_netmask, NULL); + ret = str_read_str_prefix1(&b, &st, NULL); if (ret < 0) goto cleanup; + if (st != NULL) { + free(ws->config->network.ipv6_netmask); + ws->config->network.ipv6_netmask = st; + } /* number of routes */ if (b.length < 1) { @@ -338,20 +363,23 @@ uint32_t t; ret = str_read_data(&b, &t, sizeof(t)); if (ret < 0) goto cleanup; - - ws->rx_per_sec = t; + + if (t != 0) + ws->config->rx_per_sec = t; ret = str_read_data(&b, &t, sizeof(t)); if (ret < 0) goto cleanup; - ws->tx_per_sec = t; + if (t != 0) + ws->config->tx_per_sec = t; ret = str_read_data(&b, &t, sizeof(t)); if (ret < 0) goto cleanup; - ws->net_priority = t; + if (t != 0) + ws->config->net_priority = t; ws->routes_size = b.data[0]; b.length--; diff --git a/src/worker-tun.c b/src/worker-tun.c index 338c3ead..91a33314 100644 --- a/src/worker-tun.c +++ b/src/worker-tun.c @@ -156,30 +156,22 @@ struct ifreq ifr; oclog(ws, LOG_DEBUG, "cannot obtain IPv4 local IP for %s", vinfo->name); #define LOCAL "local" - if (ws->ipv4_dns != NULL) - vinfo->ipv4_dns = ws->ipv4_dns; - else if (ws->config->network.ipv4_dns && strcmp(ws->config->network.ipv4_dns, LOCAL) == 0) + if (ws->config->network.ipv4_dns && strcmp(ws->config->network.ipv4_dns, LOCAL) == 0) vinfo->ipv4_dns = vinfo->ipv4_local; else vinfo->ipv4_dns = ws->config->network.ipv4_dns; - if (ws->ipv6_dns != NULL) - vinfo->ipv6_dns = ws->ipv6_dns; - else if (ws->config->network.ipv6_dns && strcmp(ws->config->network.ipv6_dns, LOCAL) == 0) + if (ws->config->network.ipv6_dns && strcmp(ws->config->network.ipv6_dns, LOCAL) == 0) vinfo->ipv6_dns = vinfo->ipv6_local; else vinfo->ipv6_dns = ws->config->network.ipv6_dns; - if (ws->ipv4_nbns != NULL) - vinfo->ipv4_nbns = ws->ipv4_nbns; - else if (ws->config->network.ipv4_nbns && strcmp(ws->config->network.ipv4_nbns, LOCAL) == 0) + if (ws->config->network.ipv4_nbns && strcmp(ws->config->network.ipv4_nbns, LOCAL) == 0) vinfo->ipv4_nbns = vinfo->ipv4_local; else vinfo->ipv4_nbns = ws->config->network.ipv4_nbns; - if (ws->ipv6_nbns != NULL) - vinfo->ipv6_nbns = ws->ipv6_nbns; - else if (ws->config->network.ipv6_nbns && strcmp(ws->config->network.ipv6_nbns, LOCAL) == 0) + if (ws->config->network.ipv6_nbns && strcmp(ws->config->network.ipv6_nbns, LOCAL) == 0) vinfo->ipv6_nbns = vinfo->ipv6_local; else vinfo->ipv6_nbns = ws->config->network.ipv6_nbns; @@ -188,15 +180,8 @@ struct ifreq ifr; if (ws->config->network.routes_size > 0) vinfo->routes = ws->config->network.routes; - if (ws->ipv4_netmask != NULL) - vinfo->ipv4_netmask = ws->ipv4_netmask; - else - vinfo->ipv4_netmask = ws->config->network.ipv4_netmask; - - if (ws->ipv6_netmask != NULL) - vinfo->ipv6_netmask = ws->ipv6_netmask; - else - vinfo->ipv6_netmask = ws->config->network.ipv6_netmask; + vinfo->ipv4_netmask = ws->config->network.ipv4_netmask; + vinfo->ipv6_netmask = ws->config->network.ipv6_netmask; memset(&ifr, 0, sizeof(ifr)); ifr.ifr_addr.sa_family = AF_INET; diff --git a/src/worker-vpn.c b/src/worker-vpn.c index eb370e44..8a18f456 100644 --- a/src/worker-vpn.c +++ b/src/worker-vpn.c @@ -851,14 +851,6 @@ bandwidth_st b_rx; alarm(0); http_req_deinit(ws); - /* set defaults */ - if (ws->rx_per_sec == 0) - ws->rx_per_sec = ws->config->rx_per_sec; - if (ws->tx_per_sec == 0) - ws->tx_per_sec = ws->config->tx_per_sec; - if (ws->net_priority == 0) - ws->net_priority = ws->config->net_priority; - tls_cork(ws->session); ret = tls_puts(ws->session, "HTTP/1.1 200 CONNECTED\r\n"); SEND_ERR(ret); @@ -999,8 +991,8 @@ bandwidth_st b_rx; oclog(ws, LOG_DEBUG, "setsockopt(TCP, SO_SNDBUF) to %u, failed.", sndbuf); } - if (ws->net_priority != 0) { - l = ws->net_priority - 1; + if (ws->config->net_priority != 0) { + l = ws->config->net_priority - 1; ret = setsockopt( ws->conn_fd, SOL_SOCKET, SO_PRIORITY, &l, sizeof(l)); if (ret == -1) oclog(ws, LOG_DEBUG, "setsockopt(TCP, SO_PRIORITY) to %d, failed.", l); @@ -1058,8 +1050,8 @@ bandwidth_st b_rx; oclog(ws, LOG_DEBUG, "setsockopt(UDP, SO_SNDBUF) to %u, failed.", sndbuf); } - if (ws->net_priority != 0) { - l = ws->net_priority - 1; + if (ws->config->net_priority != 0) { + l = ws->config->net_priority - 1; ret = setsockopt( ws->udp_fd, SOL_SOCKET, SO_PRIORITY, &l, sizeof(l)); if (ret == -1) oclog(ws, LOG_DEBUG, "setsockopt(UDP, SO_PRIORITY) to %d, failed.", l); @@ -1102,8 +1094,8 @@ bandwidth_st b_rx; gettime(&tnow); ws->last_msg_tcp = ws->last_msg_udp = tnow.tv_sec; - bandwidth_init(&b_rx, ws->rx_per_sec); - bandwidth_init(&b_tx, ws->tx_per_sec); + bandwidth_init(&b_rx, ws->config->rx_per_sec); + bandwidth_init(&b_tx, ws->config->tx_per_sec); /* main loop */ for(;;) { diff --git a/src/worker.h b/src/worker.h index b58a8d06..142e9743 100644 --- a/src/worker.h +++ b/src/worker.h @@ -140,19 +140,9 @@ typedef struct worker_st { int tun_fd; /* additional data - received per user or per group */ - char *ipv4_dns; - char *ipv6_dns; - char *ipv4_nbns; - char *ipv6_nbns; - char *ipv4_netmask; - char *ipv6_netmask; unsigned routes_size; char* routes[MAX_ROUTES]; - size_t rx_per_sec; - size_t tx_per_sec; - unsigned net_priority; - struct http_req_st req; } worker_st;