475 |
enum auth_state { |
enum auth_state { |
476 |
as_init, |
as_init, |
477 |
as_validate, |
as_validate, |
|
as_service, |
|
478 |
as_disable, |
as_disable, |
|
as_service_type, |
|
479 |
as_realmuse, |
as_realmuse, |
480 |
as_simuse, |
as_simuse, |
481 |
as_time, |
as_time, |
521 |
static void sfn_validate(AUTH_MACH*); |
static void sfn_validate(AUTH_MACH*); |
522 |
static void sfn_eval_reply(AUTH_MACH*); |
static void sfn_eval_reply(AUTH_MACH*); |
523 |
static void sfn_scheme(AUTH_MACH*); |
static void sfn_scheme(AUTH_MACH*); |
|
static void sfn_service(AUTH_MACH*); |
|
524 |
static void sfn_disable(AUTH_MACH*); |
static void sfn_disable(AUTH_MACH*); |
|
static void sfn_service_type(AUTH_MACH*); |
|
525 |
static void sfn_realmuse(AUTH_MACH*); |
static void sfn_realmuse(AUTH_MACH*); |
526 |
static void sfn_simuse(AUTH_MACH*); |
static void sfn_simuse(AUTH_MACH*); |
527 |
static void sfn_time(AUTH_MACH*); |
static void sfn_time(AUTH_MACH*); |
548 |
as_init, as_validate, |
as_init, as_validate, |
549 |
0, L_null, sfn_init, |
0, L_null, sfn_init, |
550 |
|
|
551 |
as_validate, as_service, |
as_validate, as_disable, |
552 |
0, L_null, sfn_validate, |
0, L_null, sfn_validate, |
553 |
|
|
554 |
as_service, as_disable, |
as_disable, as_realmuse, |
|
DA_SERVICE_TYPE, L_req, sfn_service, |
|
|
|
|
|
as_disable, as_service_type, |
|
555 |
0, L_null, sfn_disable, |
0, L_null, sfn_disable, |
556 |
|
|
|
as_service_type, as_realmuse, |
|
|
DA_SERVICE_TYPE, L_reply, sfn_service_type, |
|
|
|
|
557 |
as_realmuse, as_simuse, |
as_realmuse, as_simuse, |
558 |
0, L_null, sfn_realmuse, |
0, L_null, sfn_realmuse, |
559 |
|
|
705 |
m.timeout_pair = NULL; |
m.timeout_pair = NULL; |
706 |
m.user_msg = NULL; |
m.user_msg = NULL; |
707 |
obstack_init(&m.msg_stack); |
obstack_init(&m.msg_stack); |
708 |
/*FIXME: this should have been cached by rad_auth_init */ |
|
709 |
m.namepair = avl_find(m.req->request, DA_USER_NAME); |
m.namepair = avl_find(m.req->request, DA_USER_NAME); |
710 |
|
|
711 |
debug(1, ("auth: %s", m.namepair->avp_strvalue)); |
debug(1, ("auth: %s", m.namepair->avp_strvalue)); |
969 |
} |
} |
970 |
|
|
971 |
void |
void |
|
sfn_service(AUTH_MACH *m) |
|
|
{ |
|
|
/* FIXME: Other service types should also be handled, |
|
|
* I suppose |
|
|
*/ |
|
|
if (m->check_pair->avp_lvalue != DV_SERVICE_TYPE_AUTHENTICATE_ONLY) |
|
|
return; |
|
|
newstate(as_ack); |
|
|
} |
|
|
|
|
|
void |
|
972 |
sfn_disable(AUTH_MACH *m) |
sfn_disable(AUTH_MACH *m) |
973 |
{ |
{ |
974 |
if (get_deny(m->namepair->avp_strvalue)) { |
if (get_deny(m->namepair->avp_strvalue)) { |
979 |
} |
} |
980 |
|
|
981 |
void |
void |
|
sfn_service_type(AUTH_MACH *m) |
|
|
{ |
|
|
if (m->check_pair->avp_lvalue == DV_SERVICE_TYPE_AUTHENTICATE_ONLY) { |
|
|
auth_log(m, _("Login rejected"), NULL, |
|
|
_("Authenticate only user"), NULL); |
|
|
auth_format_msg(m, MSG_ACCESS_DENIED); |
|
|
newstate(as_reject); |
|
|
} |
|
|
} |
|
|
|
|
|
void |
|
982 |
sfn_realmuse(AUTH_MACH *m) |
sfn_realmuse(AUTH_MACH *m) |
983 |
{ |
{ |
984 |
if (!m->req->realm) |
if (!m->req->realm) |
1118 |
rc = radius_exec_program(p->avp_strvalue, |
rc = radius_exec_program(p->avp_strvalue, |
1119 |
m->req, |
m->req, |
1120 |
&m->user_reply, |
&m->user_reply, |
1121 |
1, |
1); |
|
&m->user_msg); |
|
1122 |
break; |
break; |
1123 |
|
|
1124 |
case '|': |
case '|': |
1152 |
{ |
{ |
1153 |
VALUE_PAIR *p; |
VALUE_PAIR *p; |
1154 |
|
|
|
/*FIXME: do we need to pass user_reply here? */ |
|
1155 |
for (p = m->check_pair; |
for (p = m->check_pair; |
1156 |
p; |
p; |
1157 |
p = avl_find(p->next, DA_EXEC_PROGRAM)) { |
p = avl_find(p->next, DA_EXEC_PROGRAM)) { |
1158 |
|
|
1159 |
radius_exec_program(m->check_pair->avp_strvalue, |
radius_exec_program(m->check_pair->avp_strvalue, |
1160 |
m->req, &m->user_reply, |
m->req, NULL, 0); |
|
0, NULL); |
|
1161 |
|
|
1162 |
} |
} |
1163 |
} |
} |