projects
/
project
/
odhcpd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ubus: use safe iterator
[project/odhcpd.git]
/
src
/
dhcpv6-ia.c
diff --git
a/src/dhcpv6-ia.c
b/src/dhcpv6-ia.c
index
4d68258
..
0d132af
100644
(file)
--- a/
src/dhcpv6-ia.c
+++ b/
src/dhcpv6-ia.c
@@
-162,8
+162,9
@@
static int send_reconf(struct interface *iface, struct dhcpv6_assignment *assign
struct iovec iov = {&reconf_msg, sizeof(reconf_msg) - 128 + assign->clid_len};
md5_ctx_t md5;
struct iovec iov = {&reconf_msg, sizeof(reconf_msg) - 128 + assign->clid_len};
md5_ctx_t md5;
- uint8_t secretbytes[16];
- memcpy(secretbytes, assign->key, sizeof(secretbytes));
+ uint8_t secretbytes[64];
+ memset(secretbytes, 0, sizeof(secretbytes));
+ memcpy(secretbytes, assign->key, sizeof(assign->key));
for (size_t i = 0; i < sizeof(secretbytes); ++i)
secretbytes[i] ^= 0x36;
for (size_t i = 0; i < sizeof(secretbytes); ++i)
secretbytes[i] ^= 0x36;
@@
-233,7
+234,7
@@
void dhcpv6_write_statefile(void)
struct in6_addr addr;
for (size_t i = 0; i < iface->ia_addr_len; ++i) {
struct in6_addr addr;
for (size_t i = 0; i < iface->ia_addr_len; ++i) {
- if (iface->ia_addr[i].prefix >
64
)
+ if (iface->ia_addr[i].prefix >
96
)
continue;
addr = iface->ia_addr[i].addr;
continue;
addr = iface->ia_addr[i].addr;
@@
-451,7
+452,6
@@
static void update(struct interface *iface)
if (addr[i].prefix > minprefix)
minprefix = addr[i].prefix;
if (addr[i].prefix > minprefix)
minprefix = addr[i].prefix;
- addr[i].addr.s6_addr32[2] = 0;
addr[i].addr.s6_addr32[3] = 0;
if (addr[i].preferred < UINT32_MAX - now)
addr[i].addr.s6_addr32[3] = 0;
if (addr[i].preferred < UINT32_MAX - now)
@@
-604,7
+604,7
@@
static size_t append_reply(uint8_t *buf, size_t buflen, uint16_t status,
uint32_t prefix_pref = iface->ia_addr[i].preferred - now;
uint32_t prefix_valid = iface->ia_addr[i].valid - now;
uint32_t prefix_pref = iface->ia_addr[i].preferred - now;
uint32_t prefix_valid = iface->ia_addr[i].valid - now;
- if (iface->ia_addr[i].prefix >
64
||
+ if (iface->ia_addr[i].prefix >
96
||
iface->ia_addr[i].preferred <= (uint32_t)now)
continue;
iface->ia_addr[i].preferred <= (uint32_t)now)
continue;
@@
-712,7
+712,7
@@
static size_t append_reply(uint8_t *buf, size_t buflen, uint16_t status,
bool found = false;
if (a) {
for (size_t i = 0; i < iface->ia_addr_len; ++i) {
bool found = false;
if (a) {
for (size_t i = 0; i < iface->ia_addr_len; ++i) {
- if (iface->ia_addr[i].prefix >
64
||
+ if (iface->ia_addr[i].prefix >
96
||
iface->ia_addr[i].preferred <= (uint32_t)now)
continue;
iface->ia_addr[i].preferred <= (uint32_t)now)
continue;
@@
-720,13
+720,13
@@
static size_t append_reply(uint8_t *buf, size_t buflen, uint16_t status,
if (ia->type == htons(DHCPV6_OPT_IA_PD)) {
addr.s6_addr32[1] |= htonl(a->assigned);
if (ia->type == htons(DHCPV6_OPT_IA_PD)) {
addr.s6_addr32[1] |= htonl(a->assigned);
- if (
IN6_ARE_ADDR_EQUAL(&p->addr, &addr
) &&
+ if (
!memcmp(&p->addr, &addr, sizeof(addr)
) &&
p->prefix == a->length)
found = true;
} else {
addr.s6_addr32[3] = htonl(a->assigned);
p->prefix == a->length)
found = true;
} else {
addr.s6_addr32[3] = htonl(a->assigned);
- if (
IN6_ARE_ADDR_EQUAL(&n->addr, &addr
))
+ if (
!memcmp(&n->addr, &addr, sizeof(addr)
))
found = true;
}
}
found = true;
}
}