Moved RADIUS Class attribute helpers into RADIUS module

This commit is contained in:
Jouni Malinen 2009-01-13 20:01:29 +02:00
parent 93ea8ed034
commit 010dc06853
6 changed files with 64 additions and 68 deletions

View file

@ -1232,3 +1232,44 @@ int radius_msg_get_vlanid(struct radius_msg *msg)
return -1;
}
void radius_free_class(struct radius_class_data *c)
{
size_t i;
if (c == NULL)
return;
for (i = 0; i < c->count; i++)
os_free(c->attr[i].data);
os_free(c->attr);
c->attr = NULL;
c->count = 0;
}
int radius_copy_class(struct radius_class_data *dst,
const struct radius_class_data *src)
{
size_t i;
if (src->attr == NULL)
return 0;
dst->attr = os_zalloc(src->count * sizeof(struct radius_attr_data));
if (dst->attr == NULL)
return -1;
dst->count = 0;
for (i = 0; i < src->count; i++) {
dst->attr[i].data = os_malloc(src->attr[i].len);
if (dst->attr[i].data == NULL)
break;
dst->count++;
os_memcpy(dst->attr[i].data, src->attr[i].data,
src->attr[i].len);
dst->attr[i].len = src->attr[i].len;
}
return 0;
}

View file

@ -269,4 +269,19 @@ int radius_msg_get_attr_ptr(struct radius_msg *msg, u8 type, u8 **buf,
size_t *len, const u8 *start);
int radius_msg_count_attr(struct radius_msg *msg, u8 type, int min_len);
struct radius_attr_data {
u8 *data;
size_t len;
};
struct radius_class_data {
struct radius_attr_data *attr;
size_t count;
};
void radius_free_class(struct radius_class_data *c);
int radius_copy_class(struct radius_class_data *dst,
const struct radius_class_data *src);
#endif /* RADIUS_H */