VALUE_PAIR *paircreate_raw(int attr, int type, VALUE_PAIR *vp) { char *p = (char *) (vp + 1); if (!vp->flags.unknown_attr) { pairfree(&vp); return NULL; } vp->vendor = VENDOR(attr); vp->attribute = attr; vp->operator = T_OP_EQ; vp->name = p; vp->type = type; vp->length = 0; memset(&vp->flags, 0, sizeof(vp->flags)); vp->flags.unknown_attr = 1; if (!vp_print_name(p, FR_VP_NAME_LEN, vp->attribute)) { free(vp); return NULL; } return vp; }
/* * Create a new valuepair. */ VALUE_PAIR *paircreate(int attr, int type) { VALUE_PAIR *vp; DICT_ATTR *da; da = dict_attrbyvalue(attr); if ((vp = pairalloc(da)) == NULL) { fr_strerror_printf("out of memory"); return NULL; } vp->operator = T_OP_EQ; /* * It isn't in the dictionary: update the name. */ if (!da) { char *p = (char *) (vp + 1); vp->vendor = VENDOR(attr); vp->attribute = attr; vp->name = p; vp->type = type; /* be forgiving */ if (!vp_print_name(p, FR_VP_NAME_LEN, vp->attribute)) { free(vp); return NULL; } } return vp; }
/* * Print one attribute and value into a string. */ int vp_prints(char *out, size_t outlen, VALUE_PAIR *vp) { size_t len; const char *token = NULL; const char *name; char namebuf[128]; out[0] = 0; if (!vp) return 0; name = vp->name; len = 0; if (!name || !*name) { if (!vp_print_name(namebuf, sizeof(namebuf), vp->attribute)) { return 0; } name = namebuf; } if ((vp->operator > T_OP_INVALID) && (vp->operator < T_TOKEN_LAST)) { token = vp_tokens[vp->operator]; } else { token = "<INVALID-TOKEN>"; } if( vp->flags.has_tag ) { snprintf(out, outlen, "%s:%d %s ", name, vp->flags.tag, token); len = strlen(out); vp_prints_value(out + len, outlen - len, vp, 1); } else { snprintf(out, outlen, "%s %s ", name, token); len = strlen(out); vp_prints_value(out + len, outlen - len, vp, 1); } return len + strlen(out + len); }