* And if they don't specify a source IP address, don't
* use udpfromto.
*/
- if ((dst_ipaddr->af == AF_INET) ||
+ if ((dst_ipaddr->af == AF_INET) &&
(src_ipaddr->af != AF_UNSPEC)) {
return sendfromto(sockfd, data, data_len, flags,
(struct sockaddr *)&src, sizeof_src,
if (vp->flags.extended) {
ptr[2] = (attribute & 0xff00) >> 8;
- len++;
} else if (vp->flags.extended_flags) {
if (room < 4) return 0;
ptr[1] = 4;
ptr[2] = (attribute & 0xff00) >> 8;
ptr[3] = 0;
-
- len += 2;
}
/*
{
int len, redo;
uint32_t lvalue;
- uint8_t *ptr = start, *vsa = start;
+ uint8_t *ptr, *vsa;
uint32_t maxattr;
VALUE_PAIR *vp = reply;
DICT_ATTR *da;
da = dict_attrbyvalue(attribute, VENDORPEC_EXTENDED);
- if (da && (da->flags.extended || da->flags.extended_flags)) {
+ if (da) { /* flags.extended MUST be set */
+ /*
+ * MUST have at least an "extended type" octet.
+ */
if (length == 0) return NULL;
attribute |= (data[0] << fr_wimax_shift[1]);
attribute, length, data);
}
}
+
+ /*
+ * We could avoid another dictionary lookup here
+ * by using pairalloc(da), but it's not serious...
+ */
}
vp = paircreate(attribute, vendor, PW_TYPE_OCTETS);
if (!vp) return NULL;
size_t total;
ssize_t this;
- total = this = 0;
+ total = 0;
while (total < sizeof(fr_rand_pool.randrsl)) {
this = read(fd, fr_rand_pool.randrsl,
sizeof(fr_rand_pool.randrsl) - total);