147 |
len = pair->avp_strlength; |
len = pair->avp_strlength; |
148 |
obstack_grow_quoted(obp, string, len); |
obstack_grow_quoted(obp, string, len); |
149 |
} else { |
} else { |
150 |
/* strvalue might include terminating zero character, |
obstack_grow_quoted(obp, |
151 |
so we need to recalculate it */ |
pair->avp_strvalue, |
152 |
int length = strlen(pair->avp_strvalue); |
pair->avp_strlength); |
|
obstack_grow_quoted(obp, pair->avp_strvalue, length); |
|
153 |
} |
} |
154 |
break; |
break; |
155 |
|
|
156 |
case TYPE_INTEGER: |
case TYPE_INTEGER: |
157 |
snprintf(tmp, sizeof(tmp), "%lu", pair->avp_lvalue); |
snprintf(tmp, sizeof(tmp), "%lu", pair->avp_lvalue); |
158 |
len = strlen(tmp); |
len = strlen(tmp); |
159 |
obstack_grow(obp, tmp, len); |
obstack_grow(obp, tmp, len); |
160 |
break; |
break; |
161 |
|
|
162 |
case TYPE_IPADDR: |
case TYPE_IPADDR: |
163 |
ip_iptostr(pair->avp_lvalue, tmp); |
ip_iptostr(pair->avp_lvalue, tmp); |
164 |
len = strlen(tmp); |
len = strlen(tmp); |
165 |
obstack_grow(obp, tmp, len); |
obstack_grow(obp, tmp, len); |
166 |
break; |
break; |
167 |
|
|
168 |
case TYPE_DATE: |
case TYPE_DATE: |
169 |
snprintf(tmp, sizeof(tmp), "%ld", pair->avp_lvalue); |
snprintf(tmp, sizeof(tmp), "%ld", pair->avp_lvalue); |
170 |
len = strlen(tmp); |
len = strlen(tmp); |
171 |
obstack_grow(obp, tmp, len); |
obstack_grow(obp, tmp, len); |
172 |
break; |
break; |
173 |
|
|
174 |
default: |
default: |
175 |
radlog(L_CRIT, |
radlog(L_CRIT, |
176 |
_("INTERNAL ERROR (%s:%d): attribute %d has bad type (%d)"), |
_("INTERNAL ERROR (%s:%d): attribute %d has bad type (%d)"), |
275 |
default: |
default: |
276 |
obstack_1grow(obp, c); |
obstack_1grow(obp, c); |
277 |
break; |
break; |
278 |
|
|
279 |
case 0: |
case 0: |
280 |
goto end; |
goto end; |
281 |
|
|
282 |
case '\n': |
case '\n': |
283 |
obstack_1grow(obp, '\r'); |
obstack_1grow(obp, '\r'); |
284 |
obstack_1grow(obp, c); |
obstack_1grow(obp, c); |
285 |
break; |
break; |
286 |
|
|
287 |
case '%': |
case '%': |
288 |
if (!req) { |
if (!req) { |
289 |
obstack_1grow(obp, c); |
obstack_1grow(obp, c); |
293 |
case '%': |
case '%': |
294 |
obstack_1grow(obp, c); |
obstack_1grow(obp, c); |
295 |
break; |
break; |
296 |
|
|
297 |
case 'D': |
case 'D': |
298 |
curtime_to_str(obp, req->request, 0); |
curtime_to_str(obp, req->request, 0); |
299 |
break; |
break; |
300 |
|
|
301 |
case 'G': |
case 'G': |
302 |
curtime_to_str(obp, req->request, 1); |
curtime_to_str(obp, req->request, 1); |
303 |
break; |
break; |
304 |
|
|
305 |
case 'f': /* Framed IP address */ |
case 'f': /* Framed IP address */ |
306 |
attrno_to_str(obp, NULL, reply, |
attrno_to_str(obp, NULL, reply, |
307 |
DA_FRAMED_IP_ADDRESS, NULL); |
DA_FRAMED_IP_ADDRESS, NULL); |
308 |
break; |
break; |
309 |
|
|
310 |
case 'n': /* NAS IP address */ |
case 'n': /* NAS IP address */ |
311 |
attrno_to_str(obp, req, req->request, |
attrno_to_str(obp, req, req->request, |
312 |
DA_NAS_IP_ADDRESS, NULL); |
DA_NAS_IP_ADDRESS, NULL); |
313 |
break; |
break; |
314 |
|
|
315 |
case 't': /* MTU */ |
case 't': /* MTU */ |
316 |
attrno_to_str(obp, NULL, reply, |
attrno_to_str(obp, NULL, reply, |
317 |
DA_FRAMED_MTU, NULL); |
DA_FRAMED_MTU, NULL); |
318 |
break; |
break; |
319 |
|
|
320 |
case 'p': /* Port number */ |
case 'p': /* Port number */ |
321 |
attrno_to_str(obp, req, req->request, |
attrno_to_str(obp, req, req->request, |
322 |
DA_NAS_PORT_ID, NULL); |
DA_NAS_PORT_ID, NULL); |
323 |
break; |
break; |
324 |
|
|
325 |
case 'u': /* User name */ |
case 'u': /* User name */ |
326 |
attrno_to_str(obp, req, req->request, |
attrno_to_str(obp, req, req->request, |
327 |
DA_USER_NAME, NULL); |
DA_USER_NAME, NULL); |
328 |
break; |
break; |
329 |
|
|
330 |
case 'c': /* Callback-Number */ |
case 'c': /* Callback-Number */ |
331 |
attrno_to_str(obp, NULL, reply, |
attrno_to_str(obp, NULL, reply, |
332 |
DA_CALLBACK_NUMBER, NULL); |
DA_CALLBACK_NUMBER, NULL); |
333 |
break; |
break; |
334 |
|
|
335 |
case 'i': /* Calling station ID */ |
case 'i': /* Calling station ID */ |
336 |
attrno_to_str(obp, req, req->request, |
attrno_to_str(obp, req, req->request, |
337 |
DA_CALLING_STATION_ID, NULL); |
DA_CALLING_STATION_ID, NULL); |
338 |
break; |
break; |
339 |
|
|
340 |
case 'a': /* Protocol: SLIP/PPP */ |
case 'a': /* Protocol: SLIP/PPP */ |
341 |
attrno_to_str(obp, NULL, reply, |
attrno_to_str(obp, NULL, reply, |
342 |
DA_FRAMED_PROTOCOL, NULL); |
DA_FRAMED_PROTOCOL, NULL); |
343 |
break; |
break; |
344 |
|
|
345 |
case 's': /* Speed */ |
case 's': /* Speed */ |
346 |
attrno_to_str(obp, req, req->request, |
attrno_to_str(obp, req, req->request, |
347 |
DA_CONNECT_INFO, NULL); |
DA_CONNECT_INFO, NULL); |
348 |
break; |
break; |
349 |
|
|
350 |
case 'C': |
case 'C': |
351 |
/* Check pair */ |
/* Check pair */ |
352 |
da = parse_dict_attr(p, &p, &defval); |
da = parse_dict_attr(p, &p, &defval); |
354 |
da, defval); |
da, defval); |
355 |
efree(defval); |
efree(defval); |
356 |
break; |
break; |
357 |
|
|
358 |
case 'R': |
case 'R': |
359 |
/* Reply pair */ |
/* Reply pair */ |
360 |
da = parse_dict_attr(p, &p, &defval); |
da = parse_dict_attr(p, &p, &defval); |
361 |
attr_to_str(obp, NULL, |
attr_to_str(obp, NULL, |
362 |
reply, da, defval); |
reply, da, defval); |
363 |
break; |
break; |
364 |
|
|
365 |
default: |
default: |
366 |
obstack_1grow(obp, '%'); |
obstack_1grow(obp, '%'); |
367 |
obstack_1grow(obp, c); |
obstack_1grow(obp, c); |
374 |
case 'a': |
case 'a': |
375 |
obstack_1grow(obp, '\a'); |
obstack_1grow(obp, '\a'); |
376 |
break; |
break; |
377 |
|
|
378 |
case 'b': |
case 'b': |
379 |
obstack_1grow(obp, '\b'); |
obstack_1grow(obp, '\b'); |
380 |
break; |
break; |
381 |
|
|
382 |
case 'f': |
case 'f': |
383 |
obstack_1grow(obp, '\f'); |
obstack_1grow(obp, '\f'); |
384 |
break; |
break; |
385 |
|
|
386 |
case 'e': |
case 'e': |
387 |
obstack_1grow(obp, '\033'); |
obstack_1grow(obp, '\033'); |
388 |
break; |
break; |
389 |
|
|
390 |
case 'n': |
case 'n': |
391 |
obstack_1grow(obp, '\n'); |
obstack_1grow(obp, '\n'); |
392 |
break; |
break; |
393 |
|
|
394 |
case 'r': |
case 'r': |
395 |
obstack_1grow(obp, '\r'); |
obstack_1grow(obp, '\r'); |
396 |
break; |
break; |
397 |
|
|
398 |
case 't': |
case 't': |
399 |
obstack_1grow(obp, '\t'); |
obstack_1grow(obp, '\t'); |
400 |
break; |
break; |
401 |
|
|
402 |
case 0: |
case 0: |
403 |
goto end; |
goto end; |
404 |
|
|
405 |
default: |
default: |
406 |
obstack_1grow(obp, '\\'); |
obstack_1grow(obp, '\\'); |
407 |
obstack_1grow(obp, c); |
obstack_1grow(obp, c); |