So i can apply the large patch set I was working on cleanly...
#define tmpl_data data.literal
#define tmpl_data_type data.literal.type
#define tmpl_data_length data.literal.data.length
-#define tmpl_data_box data.literal.data
+#define tmpl_data_value data.literal.data
/* @} **/
/** @name Field accessors for #TMPL_TYPE_REGEX_STRUCT and #TMPL_TYPE_REGEX
case TMPL_TYPE_DATA:
rhs_type = map->rhs->tmpl_data_type;
- rhs = &map->rhs->tmpl_data_box;
+ rhs = &map->rhs->tmpl_data_value;
CHECK_INT_CAST(lhs, rhs);
CAST(lhs);
case TMPL_TYPE_DATA:
rcode = cond_normalise_and_cmp(request, c,
- map->lhs->tmpl_data_type, NULL, &map->lhs->tmpl_data_box);
+ map->lhs->tmpl_data_type, NULL, &map->lhs->tmpl_data_value);
break;
case TMPL_TYPE_UNPARSED:
map->rhs->tmpl_data_length = vp->vp_length;
if (vp->da->flags.is_pointer) {
if (vp->da->type == PW_TYPE_STRING) {
- map->rhs->tmpl_data_box.ptr = talloc_bstrndup(map->rhs, vp->data.ptr, vp->vp_length);
+ map->rhs->tmpl_data_value.ptr = talloc_bstrndup(map->rhs, vp->data.ptr, vp->vp_length);
map->rhs->quote = T_SINGLE_QUOTED_STRING;
} else {
- map->rhs->tmpl_data_box.ptr = talloc_memdup(map->rhs, vp->data.ptr, vp->vp_length);
+ map->rhs->tmpl_data_value.ptr = talloc_memdup(map->rhs, vp->data.ptr, vp->vp_length);
map->rhs->quote = T_BARE_WORD;
}
} else {
- memcpy(&map->rhs->tmpl_data_box, &vp->data.datum, sizeof(map->rhs->tmpl_data_box));
+ memcpy(&map->rhs->tmpl_data_value, &vp->data.datum, sizeof(map->rhs->tmpl_data_value));
map->rhs->quote = T_BARE_WORD;
}
map->rhs->name = fr_pair_value_asprint(map->rhs, vp, fr_token_quote[map->rhs->quote]);
if (!new) return -1;
if (map->lhs->tmpl_da->type == map->rhs->tmpl_data_type) {
- if (value_box_copy(new, &new->data, new->da->type, &map->rhs->tmpl_data_box) < 0) {
+ if (value_box_copy(new, &new->data, new->da->type, &map->rhs->tmpl_data_value) < 0) {
rcode = -1;
goto error;
}
} else {
if (value_box_cast(new, &new->data, new->da->type, new->da, map->rhs->tmpl_data_type,
- NULL, &map->rhs->tmpl_data_box) < 0) {
+ NULL, &map->rhs->tmpl_data_value) < 0) {
REDEBUG("Implicit cast failed: %s", fr_strerror());
rcode = -1;
goto error;
(type == PW_TYPE_STRING) ? T_DOUBLE_QUOTED_STRING : T_BARE_WORD);
if (steal) {
- if (value_box_steal(vpt, &vpt->tmpl_data_box, type, data) < 0) {
+ if (value_box_steal(vpt, &vpt->tmpl_data_value, type, data) < 0) {
talloc_free(vpt);
return -1;
}
vpt->tmpl_data_type = type;
} else {
- if (value_box_copy(vpt, &vpt->tmpl_data_box, type, data) < 0) {
+ if (value_box_copy(vpt, &vpt->tmpl_data_value, type, data) < 0) {
talloc_free(vpt);
return -1;
}
binlen = (inlen - 2) / 2;
vpt = tmpl_alloc(ctx, TMPL_TYPE_DATA, in, inlen, type);
- vpt->tmpl_data_box.ptr = talloc_array(vpt, uint8_t, binlen);
+ vpt->tmpl_data_value.ptr = talloc_array(vpt, uint8_t, binlen);
vpt->tmpl_data_length = binlen;
vpt->tmpl_data_type = PW_TYPE_OCTETS;
- len = fr_hex2bin(vpt->tmpl_data_box.ptr, binlen, in + 2, inlen - 2);
+ len = fr_hex2bin(vpt->tmpl_data_value.ptr, binlen, in + 2, inlen - 2);
if (len != binlen) {
fr_strerror_printf("Hex string contains none hex char");
talloc_free(vpt);
/*
* Why do we pass a pointer to the tmpl type? Goddamn WiMAX.
*/
- if (value_box_from_str(vpt, &vpt->tmpl_data_box, &vpt->tmpl_data_type,
+ if (value_box_from_str(vpt, &vpt->tmpl_data_value, &vpt->tmpl_data_type,
enumv, vpt->name, vpt->len, '\0') < 0) return -1;
vpt->type = TMPL_TYPE_DATA;
break;
case TMPL_TYPE_DATA:
{
- value_box_t tmp;
+ value_box_t new;
if (type == vpt->tmpl_data_type) return 0; /* noop */
- if (value_box_cast(vpt, &tmp, type, enumv, vpt->tmpl_data_type,
- NULL, &vpt->tmpl_data_box) < 0) return -1;
+ if (value_box_cast(vpt, &new, type, enumv, vpt->tmpl_data_type,
+ NULL, &vpt->tmpl_data_value) < 0) return -1;
- if (value_box_copy(vpt, &vpt->tmpl_data_box, type, &tmp) < 0) return -1;
+ /*
+ * Free old value buffers
+ */
+ switch (vpt->tmpl_data_type) {
+ case PW_TYPE_STRING:
+ case PW_TYPE_OCTETS:
+ talloc_free(vpt->tmpl_data_value.ptr);
+ break;
+
+ default:
+ break;
+ }
+ memcpy(&vpt->tmpl_data_value, &new, sizeof(vpt->tmpl_data_value));
vpt->tmpl_data_type = type;
}
break;
VERIFY_VP(vp);
rad_assert(vp->da->type == vpt->tmpl_data_type);
- value_box_copy(vp, &vp->data, vpt->tmpl_data_type, &vpt->tmpl_data_box);
+ value_box_copy(vp, &vp->data, vpt->tmpl_data_type, &vpt->tmpl_data_value);
*out = vp;
return 0;
}
ret = tmpl_find_vp(&vp, request, vpt);
if (ret < 0) return -2;
- to_cast = &vpt->tmpl_data_box;
+ to_cast = &vpt->tmpl_data_value;
src_type = vpt->tmpl_data_type;
}
break;
{
RDEBUG4("EXPAND TMPL DATA");
- to_cast = &vpt->tmpl_data_box;
+ to_cast = &vpt->tmpl_data_value;
src_type = vpt->tmpl_data_type;
switch (src_type) {
break;
case TMPL_TYPE_DATA:
- return value_box_snprint(out, outlen, vpt->tmpl_data_type, values, &vpt->tmpl_data_box,
+ return value_box_snprint(out, outlen, vpt->tmpl_data_type, values, &vpt->tmpl_data_value,
fr_token_quote[vpt->quote]);
default:
if ((head->lhs->tmpl_da->vendor == 0) && (head->lhs->tmpl_da->attr == PW_CACHE_CREATED)) {
vp_map_t *map;
- c->created = head->rhs->tmpl_data_box.date;
+ c->created = head->rhs->tmpl_data_value.date;
map = head;
head = head->next;
if ((head->lhs->tmpl_da->vendor == 0) && (head->lhs->tmpl_da->attr == PW_CACHE_EXPIRES)) {
vp_map_t *map;
- c->expires = head->rhs->tmpl_data_box.date;
+ c->expires = head->rhs->tmpl_data_value.date;
map = head;
head = head->next;
*/
tmpl_init(&created_value, TMPL_TYPE_DATA, "<TEMP>", 6, T_BARE_WORD);
created_value.tmpl_data_type = PW_TYPE_DATE;
- created_value.tmpl_data_length = sizeof(created_value.tmpl_data_box.date);
- created_value.tmpl_data_box.date = c->created;
+ created_value.tmpl_data_length = sizeof(created_value.tmpl_data_value.date);
+ created_value.tmpl_data_value.date = c->created;
/*
* Encode the entry expiry time
*/
tmpl_init(&expires_value, TMPL_TYPE_DATA, "<TEMP>", 6, T_BARE_WORD);
expires_value.tmpl_data_type = PW_TYPE_DATE;
- expires_value.tmpl_data_length = sizeof(expires_value.tmpl_data_box.date);
- expires_value.tmpl_data_box.date = c->expires;
+ expires_value.tmpl_data_length = sizeof(expires_value.tmpl_data_value.date);
+ expires_value.tmpl_data_value.date = c->expires;
expires.next = c->maps; /* Head of the list */
for (cnt = 0, map = &created; map; cnt++, map = map->next);
do_rhs:
MEM(c_map->rhs = tmpl_init(talloc(c_map, vp_tmpl_t),
TMPL_TYPE_DATA, map->rhs->name, map->rhs->len, T_BARE_WORD));
- if (value_box_copy(c_map->rhs, &c_map->rhs->tmpl_data_box,
+ if (value_box_copy(c_map->rhs, &c_map->rhs->tmpl_data_value,
vp->da->type, &vp->data) < 0) {
REDEBUG("Failed copying attribute value");
error:
(map->lhs->tmpl_list != target.tmpl_list)) continue;
*out = value_box_asprint(request, map->rhs->tmpl_data_type, map->lhs->tmpl_da,
- &map->rhs->tmpl_data_box, '\0');
+ &map->rhs->tmpl_data_value, '\0');
ret = talloc_array_length(*out) - 1;
break;
}
}
value = value_box_asprint(value_pool, map->rhs->tmpl_data_type,
- map->lhs->tmpl_da, &map->rhs->tmpl_data_box, '\'');
+ map->lhs->tmpl_da, &map->rhs->tmpl_data_value, '\'');
if (!value) goto error;
to_store = talloc_asprintf_append_buffer(to_store, "%s %s %s\n", attr,
*/
if (map->lhs->tmpl_da->vendor == 0) switch (map->lhs->tmpl_da->attr) {
case PW_CACHE_CREATED:
- c->created = map->rhs->tmpl_data_box.date;
+ c->created = map->rhs->tmpl_data_value.date;
talloc_free(map);
goto next;
case PW_CACHE_EXPIRES:
- c->expires = map->rhs->tmpl_data_box.date;
+ c->expires = map->rhs->tmpl_data_value.date;
talloc_free(map);
goto next;
cf_log_err_cp(cp, "Right side of map must be a string");
return -1;
}
- p = map->rhs->tmpl_data_box.strvalue;
+ p = map->rhs->tmpl_data_value.strvalue;
slen = fr_jpath_parse(cache, &cache->jpath, p, map->rhs->tmpl_data_length);
if (slen <= 0) goto error;
break;
switch (map->rhs->tmpl_data_type) {
case PW_TYPE_STRING:
case PW_TYPE_OCTETS:
- out[2] = map->rhs->tmpl_data_box.ptr;
+ out[2] = map->rhs->tmpl_data_value.ptr;
out_len[2] = map->rhs->tmpl_data_length;
break;
size_t len;
len = value_box_snprint(value, sizeof(value), map->rhs->tmpl_data_type, map->lhs->tmpl_da,
- &map->rhs->tmpl_data_box, '\0');
+ &map->rhs->tmpl_data_value, '\0');
new = talloc_bstrndup(pool, value, len);
if (!new) {
talloc_free(key);
memset(&tmp, 0, sizeof(tmp));
tmp.integer = ntohl((uint32_t)reply->element[1]->integer);
- tmp.length = sizeof(ip_map.rhs->tmpl_data_box.integer);
+ tmp.length = sizeof(ip_map.rhs->tmpl_data_value.integer);
- if (value_box_cast(NULL, &ip_map.rhs->tmpl_data_box, PW_TYPE_IPV4_ADDR,
+ if (value_box_cast(NULL, &ip_map.rhs->tmpl_data_value, PW_TYPE_IPV4_ADDR,
NULL, PW_TYPE_INTEGER, NULL, &tmp)) {
REDEBUG("Failed converting integer to IPv4 address: %s", fr_strerror());
ret = IPPOOL_RCODE_FAIL;
goto finish;
}
} else {
- ip_map.rhs->tmpl_data_box.integer = ntohl((uint32_t)reply->element[1]->integer);
- ip_map.rhs->tmpl_data_length = sizeof(ip_map.rhs->tmpl_data_box.integer);
+ ip_map.rhs->tmpl_data_value.integer = ntohl((uint32_t)reply->element[1]->integer);
+ ip_map.rhs->tmpl_data_length = sizeof(ip_map.rhs->tmpl_data_value.integer);
ip_map.rhs->tmpl_data_type = PW_TYPE_INTEGER;
}
}
goto do_ip_map;
case REDIS_REPLY_STRING:
- ip_map.rhs->tmpl_data_box.strvalue = reply->element[1]->str;
+ ip_map.rhs->tmpl_data_value.strvalue = reply->element[1]->str;
ip_map.rhs->tmpl_data_length = reply->element[1]->len;
ip_map.rhs->tmpl_data_type = PW_TYPE_STRING;
.rhs = &range_rhs
};
- range_map.rhs->tmpl_data_box.strvalue = reply->element[2]->str;
+ range_map.rhs->tmpl_data_value.strvalue = reply->element[2]->str;
range_map.rhs->tmpl_data_length = reply->element[2]->len;
range_map.rhs->tmpl_data_type = PW_TYPE_STRING;
if (map_to_request(request, &range_map, map_to_vp, NULL) < 0) {
goto finish;
}
- expiry_map.rhs->tmpl_data_box.integer = reply->element[3]->integer;
- expiry_map.rhs->tmpl_data_length = sizeof(expiry_map.rhs->tmpl_data_box.integer);
+ expiry_map.rhs->tmpl_data_value.integer = reply->element[3]->integer;
+ expiry_map.rhs->tmpl_data_length = sizeof(expiry_map.rhs->tmpl_data_value.integer);
expiry_map.rhs->tmpl_data_type = PW_TYPE_INTEGER;
if (map_to_request(request, &expiry_map, map_to_vp, NULL) < 0) {
ret = IPPOOL_RCODE_FAIL;
* Add range ID to request
*/
case REDIS_REPLY_STRING:
- range_map.rhs->tmpl_data_box.strvalue = reply->element[1]->str;
+ range_map.rhs->tmpl_data_value.strvalue = reply->element[1]->str;
range_map.rhs->tmpl_data_length = reply->element[1]->len;
range_map.rhs->tmpl_data_type = PW_TYPE_STRING;
if (map_to_request(request, &range_map, map_to_vp, NULL) < 0) {
.rhs = &expiry_rhs
};
- expiry_map.rhs->tmpl_data_box.integer = expires;
- expiry_map.rhs->tmpl_data_length = sizeof(expiry_map.rhs->tmpl_data_box.integer);
+ expiry_map.rhs->tmpl_data_value.integer = expires;
+ expiry_map.rhs->tmpl_data_length = sizeof(expiry_map.rhs->tmpl_data_value.integer);
expiry_map.rhs->tmpl_data_type = PW_TYPE_INTEGER;
if (map_to_request(request, &expiry_map, map_to_vp, NULL) < 0) {
ret = IPPOOL_RCODE_FAIL;
};
ip_rhs.tmpl_data_length = strlen(ip_str);
- ip_rhs.tmpl_data_box.strvalue = ip_str;
+ ip_rhs.tmpl_data_value.strvalue = ip_str;
ip_rhs.tmpl_data_type = PW_TYPE_STRING;
if (map_to_request(request, &ip_map, map_to_vp, NULL) < 0) return RLM_MODULE_FAIL;