diff options
author | Kozlov Dmitry <dima@server> | 2010-11-09 10:34:42 +0300 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-11-09 10:34:42 +0300 |
commit | 1396b7c22bbd319fc22ee420c14cdb69f8d5203c (patch) | |
tree | b4fd2adf4ed9de0ce355b26ca8211880a539e97f | |
parent | 0791b410d7465e2ef70345261d45340e3504381d (diff) | |
download | accel-ppp-1396b7c22bbd319fc22ee420c14cdb69f8d5203c.tar.gz accel-ppp-1396b7c22bbd319fc22ee420c14cdb69f8d5203c.zip |
radius: DM/CoA nas identification by NAS-Identifier or NAS-IP-Address or both
-rw-r--r-- | accel-pptpd/radius/dm_coa.c | 2 | ||||
-rw-r--r-- | accel-pptpd/radius/radius.c | 19 | ||||
-rw-r--r-- | accel-pptpd/radius/radius_p.h | 4 | ||||
-rw-r--r-- | accel-pptpd/radius/req.c | 2 |
4 files changed, 15 insertions, 12 deletions
diff --git a/accel-pptpd/radius/dm_coa.c b/accel-pptpd/radius/dm_coa.c index 16b1f88a..e66a3b39 100644 --- a/accel-pptpd/radius/dm_coa.c +++ b/accel-pptpd/radius/dm_coa.c @@ -263,7 +263,7 @@ static void __init init(void) addr.sin_family = AF_INET; addr.sin_port = htons (PD_COA_PORT); if (conf_nas_ip_address) - addr.sin_addr.s_addr = inet_addr(conf_nas_ip_address); + addr.sin_addr.s_addr = conf_nas_ip_address; else addr.sin_addr.s_addr = htonl (INADDR_ANY); if (bind (serv.hnd.fd, (struct sockaddr *) &addr, sizeof (addr)) < 0) { diff --git a/accel-pptpd/radius/radius.c b/accel-pptpd/radius/radius.c index e6a13e90..bb8e2162 100644 --- a/accel-pptpd/radius/radius.c +++ b/accel-pptpd/radius/radius.c @@ -25,8 +25,8 @@ int conf_max_try = 3; int conf_timeout = 3; char *conf_nas_identifier = "accel-pptpd"; -char *conf_nas_ip_address; -char *conf_gw_ip_address; +in_addr_t conf_nas_ip_address; +in_addr_t conf_gw_ip_address; in_addr_t conf_bind = 0; int conf_verbose = 0; @@ -62,7 +62,7 @@ int rad_proc_attrs(struct rad_req_t *req) else { req->rpd->ipaddr.owner = &ipdb; req->rpd->ipaddr.peer_addr = attr->val.ipaddr; - req->rpd->ipaddr.addr = inet_addr(conf_gw_ip_address); + req->rpd->ipaddr.addr = conf_gw_ip_address; } break; case Acct_Interim_Interval: @@ -306,9 +306,12 @@ int rad_check_nas_pack(struct rad_packet_t *pack) ipaddr = attr->val.ipaddr; } - if (conf_nas_identifier && (!ident || strcmp(conf_nas_identifier, ident))) + if (!ident && !ipaddr) return -1; - if (conf_nas_ip_address && inet_addr(conf_nas_ip_address) != ipaddr) + + if (conf_nas_identifier && ident && strcmp(conf_nas_identifier, ident)) + return -1; + if (conf_nas_ip_address && ipaddr && conf_nas_ip_address != ipaddr) return -1; return 0; @@ -369,7 +372,7 @@ static void __init radius_init(void) opt = conf_get_opt("radius", "nas-ip-address"); if (opt) - conf_nas_ip_address = opt; + conf_nas_ip_address = inet_addr(opt); opt = conf_get_opt("radius", "nas-identifier"); if (opt) @@ -377,13 +380,13 @@ static void __init radius_init(void) opt = conf_get_opt("radius", "gw-ip-address"); if (opt) - conf_gw_ip_address = opt; + conf_gw_ip_address = inet_addr(opt); opt = conf_get_opt("radius", "bind"); if (opt) conf_bind = inet_addr(opt); else if (conf_nas_ip_address) - conf_bind = inet_addr(conf_nas_ip_address); + conf_bind = conf_nas_ip_address; opt = conf_get_opt("radius", "auth_server"); if (!opt) { diff --git a/accel-pptpd/radius/radius_p.h b/accel-pptpd/radius/radius_p.h index efcd9b82..c8a06589 100644 --- a/accel-pptpd/radius/radius_p.h +++ b/accel-pptpd/radius/radius_p.h @@ -58,9 +58,9 @@ extern int conf_max_try; extern int conf_timeout; extern int conf_verbose; extern char *conf_nas_identifier; -extern char *conf_nas_ip_address; +extern in_addr_t conf_nas_ip_address; extern in_addr_t conf_bind; -extern char *conf_gw_ip_address; +extern in_addr_t conf_gw_ip_address; extern char *conf_auth_server; extern char *conf_auth_secret; extern int conf_auth_server_port; diff --git a/accel-pptpd/radius/req.c b/accel-pptpd/radius/req.c index 7526a920..9ac741de 100644 --- a/accel-pptpd/radius/req.c +++ b/accel-pptpd/radius/req.c @@ -54,7 +54,7 @@ struct rad_req_t *rad_req_alloc(struct radius_pd_t *rpd, int code, const char *u if (rad_packet_add_str(req->pack, "NAS-Identifier", conf_nas_identifier, strlen(conf_nas_identifier))) goto out_err; if (conf_nas_ip_address) - if (rad_packet_add_ipaddr(req->pack, "NAS-IP-Address", inet_addr(conf_nas_ip_address))) + if (rad_packet_add_ipaddr(req->pack, "NAS-IP-Address", conf_nas_ip_address)) goto out_err; if (rad_packet_add_int(req->pack, "NAS-Port", rpd->ppp->unit_idx)) goto out_err; |