439 |
} |
} |
440 |
} |
} |
441 |
|
|
442 |
void |
int |
443 |
var_free(Variable *var) |
var_free(Variable *var) |
444 |
{ |
{ |
|
if (var->name) |
|
|
return; /* named variables are not freed */ |
|
445 |
switch (var->type) { |
switch (var->type) { |
446 |
case String: |
case String: |
447 |
efree(var->datum.string); |
efree(var->datum.string); |
453 |
} |
} |
454 |
|
|
455 |
void |
void |
456 |
radtest_send(int port, int code, Variable *var) |
tempvar_free(Variable *var) |
457 |
|
{ |
458 |
|
if (var->name) |
459 |
|
return; /* named variables are not freed */ |
460 |
|
var_free(var); |
461 |
|
} |
462 |
|
|
463 |
|
void |
464 |
|
radtest_send(int port, int code, Variable *var, Symtab *cntl) |
465 |
{ |
{ |
466 |
RADIUS_REQ *auth; |
RADIUS_REQ *auth; |
467 |
|
Variable *p; |
468 |
|
|
469 |
if (reply_list) |
if (reply_list) |
470 |
avl_free(reply_list); |
avl_free(reply_list); |
471 |
reply_list = NULL; |
reply_list = NULL; |
476 |
return; |
return; |
477 |
} |
} |
478 |
|
|
479 |
auth = rad_clt_send(srv_queue, |
if (!cntl) { |
480 |
port, |
auth = rad_clt_send(srv_queue, |
481 |
code, var->datum.vector); |
port, |
482 |
if (!auth) |
code, var->datum.vector); |
483 |
return; |
} else { |
484 |
|
int id; |
485 |
|
u_char vector[AUTH_VECTOR_LEN]; |
486 |
|
int sflags = 0; |
487 |
|
int retry = 1; |
488 |
|
Variable *delay = (Variable*)sym_lookup(cntl, "delay"); |
489 |
|
|
490 |
|
p = (Variable*)sym_lookup(cntl, "repeat"); |
491 |
|
if (p) |
492 |
|
retry = p->datum.number; |
493 |
|
p = (Variable*)sym_lookup(cntl, "id"); |
494 |
|
if (p) { |
495 |
|
sflags |= RADCLT_ID; |
496 |
|
id = p->datum.number; |
497 |
|
} |
498 |
|
p = (Variable*)sym_lookup(cntl, "keepauth"); |
499 |
|
if (p && p->datum.number) |
500 |
|
sflags |= RADCLT_AUTHENTICATOR; |
501 |
|
auth = rad_clt_send0(srv_queue, |
502 |
|
port, |
503 |
|
code, |
504 |
|
var->datum.vector, |
505 |
|
0, |
506 |
|
&id, |
507 |
|
vector); |
508 |
|
while (--retry) { |
509 |
|
if (delay) |
510 |
|
sleep(delay->datum.number); |
511 |
|
auth = rad_clt_send0(srv_queue, |
512 |
|
port, |
513 |
|
code, |
514 |
|
var->datum.vector, |
515 |
|
sflags, |
516 |
|
&id, |
517 |
|
vector); |
518 |
|
} |
519 |
|
} |
520 |
|
|
521 |
|
if (!auth) |
522 |
|
return; |
523 |
reply_code = auth->code; |
reply_code = auth->code; |
524 |
var = (Variable*)sym_lookup(vartab, "REPLY_CODE"); |
var = (Variable*)sym_lookup(vartab, "REPLY_CODE"); |
525 |
var->type = Integer; |
var->type = Integer; |