835 |
} |
} |
836 |
} |
} |
837 |
|
|
838 |
|
static void |
839 |
|
pair_set_value(VALUE_PAIR *p, Datatype type, Datum *datum) |
840 |
|
{ |
841 |
|
efree(p->avp_strvalue); |
842 |
|
switch (type) { |
843 |
|
case Integer: |
844 |
|
p->avp_lvalue = datum->ival; |
845 |
|
break; |
846 |
|
|
847 |
|
case String: |
848 |
|
p->avp_strvalue = datum->sval; |
849 |
|
p->avp_strlength = strlen(p->avp_strvalue); |
850 |
|
break; |
851 |
|
|
852 |
|
default: |
853 |
|
insist_fail("bad Datatype"); |
854 |
|
} |
855 |
|
p->eval_type = eval_const; |
856 |
|
} |
857 |
|
|
858 |
void |
void |
859 |
sfn_eval_reply(AUTH_MACH *m) |
sfn_eval_reply(AUTH_MACH *m) |
860 |
{ |
{ |
862 |
int errcnt = 0; |
int errcnt = 0; |
863 |
|
|
864 |
for (p = m->user_reply; p; p = p->next) { |
for (p = m->user_reply; p; p = p->next) { |
865 |
if (p->eval) { |
Datatype type; |
866 |
Datatype type; |
Datum datum; |
867 |
Datum datum; |
|
868 |
|
switch (p->eval_type) { |
869 |
if (interpret(p->avp_strvalue, m->req, &type, &datum)) { |
case eval_const: |
870 |
|
break; |
871 |
|
|
872 |
|
case eval_interpret: |
873 |
|
if (rewrite_interpret(p->avp_strvalue, |
874 |
|
m->req, &type, &datum)) { |
875 |
errcnt++; |
errcnt++; |
876 |
continue; |
continue; |
877 |
} |
} |
878 |
efree(p->avp_strvalue); |
pair_set_value(p, type, &datum); |
879 |
switch (type) { |
break; |
880 |
case Integer: |
|
881 |
p->avp_lvalue = datum.ival; |
case eval_compiled: |
882 |
break; |
if (rewrite_eval(p->avp_strvalue, |
883 |
case String: |
m->req, &type, &datum)) { |
884 |
p->avp_strvalue = datum.sval; |
errcnt++; |
885 |
p->avp_strlength = strlen(p->avp_strvalue); |
continue; |
|
break; |
|
|
default: |
|
|
abort(); |
|
886 |
} |
} |
887 |
p->eval = 0; |
pair_set_value(p, type, &datum); |
888 |
|
break; |
889 |
|
|
890 |
|
default: |
891 |
|
insist_fail("bad eval_type"); |
892 |
} |
} |
893 |
} |
} |
894 |
if (errcnt) |
if (errcnt) |
1102 |
|
|
1103 |
/* Assign an IP if necessary */ |
/* Assign an IP if necessary */ |
1104 |
if (!avl_find(m->user_reply, DA_FRAMED_IP_ADDRESS)) { |
if (!avl_find(m->user_reply, DA_FRAMED_IP_ADDRESS)) { |
|
#if 0 |
|
|
/* ************************************************** |
|
|
* Keep it here until IP allocation is ready |
|
|
*/ |
|
|
if (p = alloc_ip_pair(m->namepair->avp_strvalue, m->req)) |
|
|
avl_add_pair(&m->user_reply, p); |
|
|
else |
|
|
#endif |
|
1105 |
if (p = avl_find(m->req->request, DA_FRAMED_IP_ADDRESS)) { |
if (p = avl_find(m->req->request, DA_FRAMED_IP_ADDRESS)) { |
1106 |
/* termserver hint */ |
/* termserver hint */ |
1107 |
avl_add_pair(&m->user_reply, avp_dup(p)); |
avl_add_pair(&m->user_reply, avp_dup(p)); |