diff options
author | Vladislav Grishenko <themiron@mail.ru> | 2019-08-29 17:37:15 +0500 |
---|---|---|
committer | Vladislav Grishenko <themiron@mail.ru> | 2019-08-29 17:37:15 +0500 |
commit | b955a5c1b35268afd1f6f7ae6aa28ab8e091e28d (patch) | |
tree | 950aab4d85e132e4d230dffcbc853dacbbce3ad4 /accel-pppd/radius/backup.c | |
parent | 7efdbf43b172abe58e703d09fc8f317bf0da0000 (diff) | |
download | accel-ppp-b955a5c1b35268afd1f6f7ae6aa28ab8e091e28d.tar.gz accel-ppp-b955a5c1b35268afd1f6f7ae6aa28ab8e091e28d.zip |
radius: add support for Access-Accept username
once radius server has returned User-Name attribute in Access-Accept
packet, it'll be used for any subsequent Accounting-Request packets
instead of internal username per RFC2865 5.1
other way of just replacing session username is possible, but not
desired at the moment due potential issues with single-session modes
in case of different ppp logins / ipoe macs and same contract number
returned by radius for that accounts.
Diffstat (limited to 'accel-pppd/radius/backup.c')
-rw-r--r-- | accel-pppd/radius/backup.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/accel-pppd/radius/backup.c b/accel-pppd/radius/backup.c index 46041d7..b73d3ba 100644 --- a/accel-pppd/radius/backup.c +++ b/accel-pppd/radius/backup.c @@ -22,6 +22,7 @@ #define RAD_TAG_ACCT_SERVER_ADDR 9 #define RAD_TAG_ACCT_SERVER_PORT 10 #define RAD_TAG_IDLE_TIMEOUT 11 +#define RAD_TAG_ACCT_USERNAME 12 #define add_tag(id, data, size) if (!backup_add_tag(m, id, 0, data, size)) return -1; @@ -68,6 +69,9 @@ static int session_save(struct ap_session *ses, struct backup_mod *m) add_tag(RAD_TAG_TERMINATION_ACTION, &rpd->termination_action, 4); + if (rpd->acct_username) + add_tag(RAD_TAG_ACCT_USERNAME, rpd->acct_username, strlen(rpd->acct_username)); + if (rpd->acct_req) { add_tag(RAD_TAG_ACCT_SERVER_ADDR, &rpd->acct_req->server_addr, 4); add_tag(RAD_TAG_ACCT_SERVER_PORT, &rpd->acct_req->server_port, 2); @@ -144,6 +148,9 @@ void radius_restore_session(struct ap_session *ses, struct radius_pd_t *rpd) case RAD_TAG_TERMINATION_ACTION: rpd->termination_action = *(uint32_t *)tag->data; break; + case RAD_TAG_ACCT_USERNAME: + rpd->acct_username = _strndup(tag->data, tag->size); + break; case RAD_TAG_ACCT_SERVER_ADDR: acct_addr = *(in_addr_t *)tag->data; break; |