188 |
|
|
189 |
int |
int |
190 |
add_pairlist(struct temp_list *closure, char *filename, int line, |
add_pairlist(struct temp_list *closure, char *filename, int line, |
191 |
char *name, VALUE_PAIR *lhs, VALUE_PAIR *rhs) |
char *name, VALUE_PAIR *lhs, VALUE_PAIR *rhs) |
192 |
{ |
{ |
193 |
MATCHING_RULE *pl; |
MATCHING_RULE *pl; |
194 |
|
|
298 |
*/ |
*/ |
299 |
int |
int |
300 |
user_find_sym(char *name, RADIUS_REQ *req, |
user_find_sym(char *name, RADIUS_REQ *req, |
301 |
VALUE_PAIR **check_pairs, VALUE_PAIR **reply_pairs) |
VALUE_PAIR **check_pairs, VALUE_PAIR **reply_pairs) |
302 |
{ |
{ |
303 |
int found = 0; |
int found = 0; |
304 |
User_symbol *sym; |
User_symbol *sym; |
320 |
|
|
321 |
int |
int |
322 |
match_user(User_symbol *sym, RADIUS_REQ *req, |
match_user(User_symbol *sym, RADIUS_REQ *req, |
323 |
VALUE_PAIR **check_pairs, VALUE_PAIR **reply_pairs) |
VALUE_PAIR **check_pairs, VALUE_PAIR **reply_pairs) |
324 |
{ |
{ |
325 |
VALUE_PAIR *p; |
VALUE_PAIR *p; |
326 |
VALUE_PAIR *check_tmp; |
VALUE_PAIR *check_tmp; |
390 |
*/ |
*/ |
391 |
int |
int |
392 |
user_find(char *name, RADIUS_REQ *req, |
user_find(char *name, RADIUS_REQ *req, |
393 |
VALUE_PAIR **check_pairs, VALUE_PAIR **reply_pairs) |
VALUE_PAIR **check_pairs, VALUE_PAIR **reply_pairs) |
394 |
{ |
{ |
395 |
int found = 0; |
int found = 0; |
396 |
|
|
487 |
} |
} |
488 |
++*sptr; |
++*sptr; |
489 |
toksize--; |
toksize--; |
490 |
} else if (**sptr == '"') { |
} else if (**sptr == '"') { |
491 |
++*sptr; |
++*sptr; |
492 |
break; |
break; |
493 |
} else |
} else |
494 |
*token++ = *(*sptr)++; |
*token++ = *(*sptr)++; |
495 |
} |
} |
550 |
break; |
break; |
551 |
|
|
552 |
case PS_RHS: |
case PS_RHS: |
553 |
pair = install_pair("<stdin>", 0, attr->name, |
pair = install_pair("<stdin>", 0, attr->name, |
554 |
op, token); |
op, token); |
555 |
if (!pair) { |
if (!pair) { |
556 |
snprintf(errbuf, sizeof(errbuf), |
snprintf(errbuf, sizeof(errbuf), |
557 |
_("install_pair failed on %s"), |
_("install_pair failed on %s"), |
558 |
attr->name); |
attr->name); |
559 |
return -1; |
return -1; |
560 |
} |
} |
561 |
avl_merge(first_pair, &pair); |
avl_merge(first_pair, &pair); |
562 |
state = PS_END; |
state = PS_END; |
563 |
break; |
break; |
596 |
MATCHING_RULE *i; |
MATCHING_RULE *i; |
597 |
int matched = 0; |
int matched = 0; |
598 |
|
|
599 |
/* Add Proxy-Replied pair if necessary */ |
/* Add Proxy-Replied pair if necessary */ |
600 |
switch (req->code) { |
switch (req->code) { |
601 |
case RT_AUTHENTICATION_ACK: |
case RT_AUTHENTICATION_ACK: |
602 |
case RT_AUTHENTICATION_REJECT: |
case RT_AUTHENTICATION_REJECT: |
603 |
case RT_ACCOUNTING_RESPONSE: |
case RT_ACCOUNTING_RESPONSE: |
604 |
case RT_ACCESS_CHALLENGE: |
case RT_ACCESS_CHALLENGE: |
605 |
tmp = avp_create_integer(DA_PROXY_REPLIED, 1); |
tmp = avp_create_integer(DA_PROXY_REPLIED, 1); |
606 |
avl_merge(&request_pairs, &tmp); |
avl_merge(&request_pairs, &tmp); |
607 |
avp_free(tmp); |
avp_free(tmp); |
608 |
break; |
break; |
609 |
|
|
610 |
case RT_STATUS_SERVER: |
case RT_STATUS_SERVER: |
611 |
return 0; |
return 0; |
612 |
} |
} |
613 |
|
|
614 |
if (hints == NULL) |
if (hints == NULL) |
615 |
return 0; |
return 0; |
616 |
|
|
618 |
* Check for valid input, zero length names not permitted |
* Check for valid input, zero length names not permitted |
619 |
*/ |
*/ |
620 |
if ((name_pair = avl_find(request_pairs, DA_USER_NAME)) == NULL) { |
if ((name_pair = avl_find(request_pairs, DA_USER_NAME)) == NULL) { |
621 |
name_pair = avp_create_string(DA_USER_NAME, ""); |
name_pair = avp_create_string(DA_USER_NAME, ""); |
622 |
orig_name_pair = NULL; |
orig_name_pair = NULL; |
623 |
} else { |
} else { |
624 |
orig_name_pair = avp_create_string(DA_ORIG_USER_NAME, |
orig_name_pair = avp_create_string(DA_ORIG_USER_NAME, |
625 |
name_pair->avp_strvalue); |
name_pair->avp_strvalue); |
626 |
} |
} |
627 |
|
|
628 |
debug(1, ("called for `%s'", name_pair->avp_strvalue)); |
debug(1, ("called for `%s'", name_pair->avp_strvalue)); |
629 |
|
|
680 |
radlog(L_ERR, "hints:%d: %s(): %s", |
radlog(L_ERR, "hints:%d: %s(): %s", |
681 |
i->lineno, |
i->lineno, |
682 |
tmp->avp_strvalue, |
tmp->avp_strvalue, |
683 |
_("not defined")); |
_("not defined")); |
684 |
} |
} |
685 |
} |
} |
686 |
|
|
707 |
} |
} |
708 |
|
|
709 |
if (matched) { |
if (matched) { |
710 |
if (orig_name_pair) |
if (orig_name_pair) |
711 |
avl_add_pair(&request_pairs, orig_name_pair); |
avl_add_pair(&request_pairs, orig_name_pair); |
712 |
else |
else |
713 |
avl_add_pair(&request_pairs, name_pair); |
avl_add_pair(&request_pairs, name_pair); |
714 |
} else { |
} else { |
715 |
if (orig_name_pair) |
if (orig_name_pair) |
716 |
avp_free(orig_name_pair); |
avp_free(orig_name_pair); |
717 |
else |
else |
718 |
avp_free(name_pair); |
avp_free(name_pair); |
719 |
} |
} |
720 |
|
|
721 |
req->request = request_pairs; |
req->request = request_pairs; |
722 |
|
|
723 |
return 0; |
return 0; |
724 |
} |
} |
725 |
|
|
783 |
radlog(L_ERR, "huntgroups:%d: %s(): %s", |
radlog(L_ERR, "huntgroups:%d: %s(): %s", |
784 |
pl->lineno, |
pl->lineno, |
785 |
pair->avp_strvalue, |
pair->avp_strvalue, |
786 |
_("not defined")); |
_("not defined")); |
787 |
} |
} |
788 |
} |
} |
789 |
#endif |
#endif |
811 |
/*ARGSUSED*/ |
/*ARGSUSED*/ |
812 |
int |
int |
813 |
read_clients_entry(void *u ARG_UNUSED, int fc, char **fv, |
read_clients_entry(void *u ARG_UNUSED, int fc, char **fv, |
814 |
char *file, int lineno) |
char *file, int lineno) |
815 |
{ |
{ |
816 |
CLIENT *cp; |
CLIENT *cp; |
817 |
|
|
818 |
if (fc != 2) { |
if (fc != 2) { |
819 |
radlog(L_ERR, "%s:%d: %s", |
radlog(L_ERR, "%s:%d: %s", |
820 |
file, lineno, |
file, lineno, |
821 |
_("wrong number of fields")); |
_("wrong number of fields")); |
822 |
return -1; |
return -1; |
823 |
} |
} |
824 |
|
|
829 |
if (fc == 3) |
if (fc == 3) |
830 |
STRING_COPY(cp->shortname, fv[2]); |
STRING_COPY(cp->shortname, fv[2]); |
831 |
ip_gethostname(cp->ipaddr, cp->longname, sizeof(cp->longname)); |
ip_gethostname(cp->ipaddr, cp->longname, sizeof(cp->longname)); |
832 |
list_append(clients, cp); |
list_append(clients, cp); |
833 |
return 0; |
return 0; |
834 |
} |
} |
835 |
|
|
837 |
client_free(void *item, void *data ARG_UNUSED) |
client_free(void *item, void *data ARG_UNUSED) |
838 |
{ |
{ |
839 |
CLIENT *cl = item; |
CLIENT *cl = item; |
840 |
efree(cl->secret); |
efree(cl->secret); |
841 |
efree(cl); |
efree(cl); |
842 |
return 0; |
return 0; |
843 |
} |
} |
844 |
|
|
845 |
/* |
/* |
848 |
int |
int |
849 |
read_clients_file(char *file) |
read_clients_file(char *file) |
850 |
{ |
{ |
851 |
list_destroy(&clients, client_free, NULL); |
list_destroy(&clients, client_free, NULL); |
852 |
clients = list_create(); |
clients = list_create(); |
853 |
return read_raddb_file(file, 1, read_clients_entry, NULL); |
return read_raddb_file(file, 1, read_clients_entry, NULL); |
854 |
} |
} |
855 |
|
|
861 |
client_lookup_ip(UINT4 ipaddr) |
client_lookup_ip(UINT4 ipaddr) |
862 |
{ |
{ |
863 |
CLIENT *cl; |
CLIENT *cl; |
864 |
ITERATOR *itr = iterator_create(clients); |
ITERATOR *itr = iterator_create(clients); |
865 |
|
|
866 |
if (!itr) |
if (!itr) |
867 |
return NULL; |
return NULL; |
868 |
for (cl = iterator_first(itr); cl; cl = iterator_next(itr)) |
for (cl = iterator_first(itr); cl; cl = iterator_next(itr)) |
869 |
if (ipaddr == cl->ipaddr) |
if (ipaddr == cl->ipaddr) |
870 |
break; |
break; |
871 |
iterator_destroy(&itr); |
iterator_destroy(&itr); |
872 |
return cl; |
return cl; |
873 |
} |
} |
874 |
|
|
901 |
/*ARGSUSED*/ |
/*ARGSUSED*/ |
902 |
int |
int |
903 |
read_nastypes_entry(void *u ARG_UNUSED, int fc, char **fv, |
read_nastypes_entry(void *u ARG_UNUSED, int fc, char **fv, |
904 |
char *file, int lineno) |
char *file, int lineno) |
905 |
{ |
{ |
906 |
RADCK_TYPE *mp; |
RADCK_TYPE *mp; |
907 |
int method; |
int method; |
908 |
|
|
909 |
if (fc < 2) { |
if (fc < 2) { |
910 |
radlog(L_ERR, "%s:%d: %s", file, lineno, |
radlog(L_ERR, "%s:%d: %s", file, lineno, |
911 |
_("too few fields")); |
_("too few fields")); |
912 |
return -1; |
return -1; |
913 |
} |
} |
914 |
|
|
928 |
mp->method = method; |
mp->method = method; |
929 |
if (fc > 2) |
if (fc > 2) |
930 |
mp->args = envar_parse_argcv(fc-2, &fv[2]); |
mp->args = envar_parse_argcv(fc-2, &fv[2]); |
931 |
else |
else |
932 |
mp->args = NULL; |
mp->args = NULL; |
933 |
list_append(radck_type, mp); |
list_append(radck_type, mp); |
934 |
return 0; |
return 0; |
1632 |
|
|
1633 |
case reload_naslist: |
case reload_naslist: |
1634 |
/*FIXME*/ |
/*FIXME*/ |
1635 |
path = mkfilename(radius_dir, RADIUS_NASTYPES); |
path = mkfilename(radius_dir, RADIUS_NASTYPES); |
1636 |
read_nastypes_file(path); |
read_nastypes_file(path); |
1637 |
efree(path); |
efree(path); |
1638 |
/*EMXIF*/ |
/*EMXIF*/ |
1639 |
|
|
1640 |
path = mkfilename(radius_dir, RADIUS_NASLIST); |
path = mkfilename(radius_dir, RADIUS_NASLIST); |
1641 |
if (read_naslist_file(path) < 0) |
if (read_naslist_file(path) < 0) |
1642 |
rc = 1; |
rc = 1; |
1666 |
#endif |
#endif |
1667 |
|
|
1668 |
case reload_rewrite: |
case reload_rewrite: |
1669 |
|
rewrite_load_all(); |
1670 |
break; |
break; |
1671 |
|
|
1672 |
default: |
default: |