diff options
author | Linus Nordberg <linus@nordberg.se> | 2010-05-27 12:50:15 +0200 |
---|---|---|
committer | Linus Nordberg <linus@nordberg.se> | 2010-05-27 12:50:15 +0200 |
commit | 9b8862284cdab3fca45eb539a07938fa651e7562 (patch) | |
tree | e50d08c1797a0579ab3500141f9fcc4e78d12d32 | |
parent | e16313aadcaacd7295b63d8bc08ede5987195104 (diff) |
* radsecproxy.c (extractattr): Add vendor_flag argument and enforce
three fields (vendor, name, value) when set.
-rw-r--r-- | radsecproxy.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/radsecproxy.c b/radsecproxy.c index 1b3408b..6ea4c3b 100644 --- a/radsecproxy.c +++ b/radsecproxy.c @@ -2294,8 +2294,14 @@ int vattrname2val(char *attrname, uint32_t *vendor, uint32_t *type) { return *type < 256; } -/* should accept both names and numeric values, only numeric right now */ -struct tlv *extractattr(char *nameval) { +/** Extract attributes from string NAMEVAL, create a struct tlv and + * return the tlv. If VENDOR_FLAG, NAMEVAL is on the form + * "<vendor>:<name>:<val>" and otherwise it's "<name>:<val>". Return + * NULL if fields are missing or if conversion fails. + * + * FIXME: Should accept both names and numeric values, only numeric + * right now */ +struct tlv *extractattr(char *nameval, char vendor_flag) { int len, name = 0; int vendor = 0; /* Vendor 0 is reserved, see RFC 1700. */ char *s, *s2; @@ -2306,9 +2312,10 @@ struct tlv *extractattr(char *nameval) { return NULL; name = atoi(nameval); - /* Two ':' means that we have vendor:name:val. */ - s2 = strchr(s + 1, ':'); - if (s2) { + if (vendor_flag) { + s2 = strchr(s + 1, ':'); + if (!s2) + return NULL; vendor = name; name = atoi(s + 1); s = s2; @@ -2331,7 +2338,7 @@ struct tlv *extractattr(char *nameval) { a->t = name; a->l = len; - if (vendor) + if (vendor_flag) a = makevendortlv(vendor, a); return a; @@ -2447,7 +2454,7 @@ void addrewrite(char *value, char **rmattrs, char **rmvattrs, char **addattrs, c if (!adda) debugx(1, DBG_ERR, "malloc failed"); for (i = 0; addattrs[i]; i++) { - a = extractattr(addattrs[i]); + a = extractattr(addattrs[i], 0); if (!a) debugx(1, DBG_ERR, "addrewrite: adding invalid attribute %s", addattrs[i]); if (!list_push(adda, a)) @@ -2462,7 +2469,7 @@ void addrewrite(char *value, char **rmattrs, char **rmvattrs, char **addattrs, c if (!adda) debugx(1, DBG_ERR, "malloc failed"); for (i = 0; addvattrs[i]; i++) { - a = extractattr(addvattrs[i]); + a = extractattr(addvattrs[i], 1); if (!a) debugx(1, DBG_ERR, "addrewrite: adding invalid vendor attribute %s", addvattrs[i]); if (!list_push(adda, a)) |