{
char const *p;
unsigned int attr;
- DICT_ATTR const *da = NULL;
-
+
#ifdef WITH_DICT_OID_DEBUG
fprintf(stderr, "PARSING %s tlv_depth %d pvalue %08x pvendor %08x\n", ptr,
tlv_depth, *pvalue, *pvendor);
* We have an OID, look up the attribute to see what it is.
*/
if (attr != PW_VENDOR_SPECIFIC) {
+ DICT_ATTR const *da;
+
da = dict_attrbyvalue(attr, 0);
if (!da) {
*pvalue = attr;
}
attr <<= fr_attr_shift[tlv_depth];
+
+#ifdef WITH_DICT_OID_DEBUG
+ if (*pvendor) {
+ DICT_ATTR const *da;
+
+ da = dict_parent(*pvalue | attr, *pvendor);
+ if (!da) {
+ fprintf(stderr, "STR2OID FAILED PARENT %08x | %08x, %08x\n",
+ *pvalue, attr, *pvendor);
+ } else if ((da->attr != *pvalue) || (da->vendor != *pvendor)) {
+ fprintf(stderr, "STR2OID DISAGREEMENT WITH PARENT %08x, %08x\t%08x, %08x\n",
+ *pvalue, *pvendor, da->attr, da->vendor);
+ }
+ }
+#endif
+
*pvalue |= attr;
#ifdef WITH_DHCP
char *out, size_t outlen, char const *in,
UNUSED void *arg)
{
- const char *p = in;
- char *q = out;
- size_t freespace = outlen;
-
if (outlen == 0) return 0;
if (outlen == 1) {
return 0;
}
- while (*p) {
- int sp;
- size_t len;
-
- if (freespace < 2) break;
-
- switch (*p) {
- case '\r':
- sp = 'r';
- break;
-
- case '\n':
- sp = 'n';
- break;
-
- case '\t':
- sp = 't';
- break;
-
- case '\\':
- sp = '\\';
- break;
-
- default:
- sp = 0;
- break;
- }
-
- if (sp) {
- if (freespace < 3) break;
-
- *q++ = '\\';
- *q++ = sp;
- freespace -= 2;
- p++;
- continue;
- }
-
- if (*p >= ' ') {
- *(q++) = *(p++);
- freespace--;
- continue;
- }
-
- if (freespace < 5) break;
-
- snprintf(q, freespace, "\\%03o", (uint8_t) *p);
-
- len = strlen(q);
- freespace -= len;
- p++;
- q += len;
- }
-
- *q = '\0';
-
- return q - out;
+ return fr_prints(out, outlen, in, -1, 0);
}
static rlm_rcode_t CC_HINT(nonnull) mod_do_linelog(void *instance, REQUEST *request)