target_compile_options(${PROJECT_NAME} PRIVATE -Werror=format-security)
target_compile_options(${PROJECT_NAME} PRIVATE -Werror=format-nonliteral)
target_compile_options(${PROJECT_NAME} PRIVATE -Wimplicit-fallthrough=5)
+target_compile_options(${PROJECT_NAME} PRIVATE -Wno-shadow=compatible-local)
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-unused-parameter)
target_compile_options(${PROJECT_NAME} PRIVATE -Wmissing-declarations)
+target_compile_options(${PROJECT_NAME} PRIVATE -Wshadow=local)
# Libraries
uint8_t buf[DNS_MAX_NAME_LEN];
char *domain;
size_t domainlen;
- int len;
+ int ds_len;
uint8_t *tmp;
if (blobmsg_type(cur) != BLOBMSG_TYPE_STRING || !blobmsg_check_attr(cur, false))
if (domainlen > 0 && domain[domainlen - 1] == '.')
domain[domainlen - 1] = 0;
- len = dn_comp(domain, buf, sizeof(buf), NULL, NULL);
- if (len <= 0) {
+ ds_len = dn_comp(domain, buf, sizeof(buf), NULL, NULL);
+ if (ds_len <= 0) {
error("Invalid %s value configured for interface '%s'",
iface_attrs[IFACE_ATTR_DNS_DOMAIN_SEARCH].name, iface->name);
continue;
}
- tmp = realloc(iface->dns_search, iface->dns_search_len + len);
+ tmp = realloc(iface->dns_search, iface->dns_search_len + ds_len);
if (!tmp)
goto err;
iface->dns_search = tmp;
- memcpy(&iface->dns_search[iface->dns_search_len], buf, len);
- iface->dns_search_len += len;
+ memcpy(&iface->dns_search[iface->dns_search_len], buf, ds_len);
+ iface->dns_search_len += ds_len;
}
}
/* Note: each option might get called more than once */
for (size_t i = 0; i < sizeof(std_opts) + req_opts_len; i++) {
- uint8_t opt = i < sizeof(std_opts) ? std_opts[i] : req_opts[i - sizeof(std_opts)];
+ uint8_t r_opt = i < sizeof(std_opts) ? std_opts[i] : req_opts[i - sizeof(std_opts)];
- switch (opt) {
+ switch (r_opt) {
case DHCPV4_OPT_NETMASK:
if (!lease)
break;
iov[IOV_SRCH_DOMAIN_NAME].iov_base = iface->dns_search;
iov[IOV_SRCH_DOMAIN_NAME].iov_len = iface->dns_search_len;
} else if (!res_init() && _res.dnsrch[0] && _res.dnsrch[0][0]) {
- int len;
+ int dds_len;
if (!iov[IOV_SRCH_DOMAIN_NAME].iov_base)
iov[IOV_SRCH_DOMAIN_NAME].iov_base = alloca(DNS_MAX_NAME_LEN);
- len = dn_comp(_res.dnsrch[0],
+ dds_len = dn_comp(_res.dnsrch[0],
iov[IOV_SRCH_DOMAIN_NAME].iov_base,
DNS_MAX_NAME_LEN, NULL, NULL);
- if (len < 0)
+ if (dds_len < 0)
break;
- reply_srch_domain.len = len;
+ reply_srch_domain.len = dds_len;
iov[IOV_SRCH_DOMAIN].iov_len = sizeof(reply_srch_domain);
- iov[IOV_SRCH_DOMAIN_NAME].iov_len = len;
+ iov[IOV_SRCH_DOMAIN_NAME].iov_len = dds_len;
}
break;
if (!lease || reply_dnr.len > 0)
break;
- for (size_t i = 0; i < iface->dnr_cnt; i++) {
- struct dnr_options *dnr = &iface->dnr[i];
+ for (size_t j = 0; j < iface->dnr_cnt; j++) {
+ struct dnr_options *dnr = &iface->dnr[j];
if (dnr->addr4_cnt == 0 && dnr->addr6_cnt > 0)
continue;
dnrs = alloca(dnrs_len);
uint8_t *pos = (uint8_t *)dnrs;
- for (size_t i = 0; i < iface->dnr_cnt; i++) {
- struct dnr_options *dnr = &iface->dnr[i];
+ for (size_t j = 0; j < iface->dnr_cnt; j++) {
+ struct dnr_options *dnr = &iface->dnr[j];
struct dhcpv4_dnr *d4dnr = (struct dhcpv4_dnr *)pos;
uint16_t d4dnr_len = sizeof(uint16_t) + sizeof(uint8_t) + dnr->adn_len;
uint16_t d4dnr_priority_be = htons(dnr->priority);
break;
uint8_t *buf = alloca(2 + uri_len);
- struct dhcpv4_option *opt = (struct dhcpv4_option *)buf;
+ struct dhcpv4_option *cp_opt = (struct dhcpv4_option *)buf;
- opt->code = DHCPV4_OPT_CAPTIVE_PORTAL;
- opt->len = uri_len;
- memcpy(opt->data, iface->captive_portal_uri, uri_len);
+ cp_opt->code = DHCPV4_OPT_CAPTIVE_PORTAL;
+ cp_opt->len = uri_len;
+ memcpy(cp_opt->data, iface->captive_portal_uri, uri_len);
- iov[IOV_CAPTIVE_PORTAL].iov_base = opt;
+ iov[IOV_CAPTIVE_PORTAL].iov_base = cp_opt;
iov[IOV_CAPTIVE_PORTAL].iov_len = 2 + uri_len;
break;
}
if (is_pd) {
uint8_t *sdata;
uint16_t stype, slen;
- dhcpv6_for_each_option(&ia[1], odata + olen, stype, slen, sdata) {
+ dhcpv6_for_each_sub_option(&ia[1], odata + olen, stype, slen, sdata) {
if (stype != DHCPV6_OPT_IA_PREFIX || slen < sizeof(struct dhcpv6_ia_prefix) - 4)
continue;
} else if (is_na) {
uint8_t *sdata;
uint16_t stype, slen;
- dhcpv6_for_each_option(&ia[1], odata + olen, stype, slen, sdata) {
+ dhcpv6_for_each_sub_option(&ia[1], odata + olen, stype, slen, sdata) {
if (stype != DHCPV6_OPT_IA_ADDR || slen < sizeof(struct dhcpv6_ia_addr) - 4)
continue;
break;
case DHCPV6_OPT_DNR:
- for (size_t i = 0; i < iface->dnr_cnt; i++) {
- struct dnr_options *dnr = &iface->dnr[i];
+ for (size_t j = 0; j < iface->dnr_cnt; j++) {
+ struct dnr_options *dnr = &iface->dnr[j];
if (dnr->addr6_cnt == 0 && dnr->addr4_cnt > 0)
continue;
dnrs = alloca(dnrs_len);
uint8_t *pos = (uint8_t *)dnrs;
- for (size_t i = 0; i < iface->dnr_cnt; i++) {
- struct dnr_options *dnr = &iface->dnr[i];
+ for (size_t j = 0; j < iface->dnr_cnt; j++) {
+ struct dnr_options *dnr = &iface->dnr[j];
struct dhcpv6_dnr *d6dnr = (struct dhcpv6_dnr *)pos;
uint16_t d6dnr_type_be = htons(DHCPV6_OPT_DNR);
uint16_t d6dnr_len = 2 * sizeof(uint16_t) + dnr->adn_len;
size_t dns_search_len = iface->dns_search_len;
if (!dns_search && !res_init() && _res.dnsrch[0] && _res.dnsrch[0][0]) {
- int len = dn_comp(_res.dnsrch[0], dns_search_buf,
+ int ds_len = dn_comp(_res.dnsrch[0], dns_search_buf,
sizeof(dns_search_buf), NULL, NULL);
- if (len > 0) {
+ if (ds_len > 0) {
dns_search = dns_search_buf;
- dns_search_len = len;
+ dns_search_len = ds_len;
}
}
if (payload_data[0] == DHCPV6_MSG_RELAY_REPL) {
target.sin6_port = htons(DHCPV6_SERVER_PORT);
} else { /* Go through the payload data */
- struct dhcpv6_client_header *h = (void*)payload_data;
+ struct dhcpv6_client_header *dch = (void*)payload_data;
end = payload_data + payload_len;
- dhcpv6_for_each_option(&h[1], end, otype, olen, odata) {
+ dhcpv6_for_each_option(&dch[1], end, otype, olen, odata) {
if (otype == DHCPV6_OPT_DNS_SERVERS && olen >= sizeof(struct in6_addr)) {
dns_addrs6 = (struct in6_addr*)odata;
dns_addrs6_cnt = olen / sizeof(struct in6_addr);
struct in6_addr addr;
};
-#define dhcpv6_for_each_option(start, end, otype, olen, odata)\
- for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (end) &&\
- ((otype) = _o[0] << 8 | _o[1]) && ((odata) = (void*)&_o[4]) &&\
+#define dhcpv6_for_each_option(start, end, otype, olen, odata) \
+ for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (end) && \
+ ((otype) = _o[0] << 8 | _o[1]) && ((odata) = (void*)&_o[4]) && \
((olen) = _o[2] << 8 | _o[3]) + (odata) <= (end); \
_o += 4 + (_o[2] << 8 | _o[3]))
+#define dhcpv6_for_each_sub_option(start, end, otype, olen, odata) \
+ for (uint8_t *_so = (uint8_t*)(start); _so + 4 <= (end) && \
+ ((otype) = _so[0] << 8 | _so[1]) && ((odata) = (void*)&_so[4]) && \
+ ((olen) = _so[2] << 8 | _so[3]) + (odata) <= (end); \
+ _so += 4 + (_so[2] << 8 | _so[3]))
+
#endif /* _DHCPV6_H_ */
continue; /* PIO filtered out of this RA */
}
- for (size_t i = 0; i < pfxs_cnt; ++i) {
- if (addr->prefix_len == pfxs[i].nd_opt_pi_prefix_len &&
- !odhcpd_bmemcmp(&pfxs[i].nd_opt_pi_prefix,
+ for (size_t j = 0; j < pfxs_cnt; ++j) {
+ if (addr->prefix_len == pfxs[j].nd_opt_pi_prefix_len &&
+ !odhcpd_bmemcmp(&pfxs[j].nd_opt_pi_prefix,
&addr->addr.in6, addr->prefix_len))
- p = &pfxs[i];
+ p = &pfxs[j];
}
if (!p) {