diff options
author | xebd <xeb@mail.ru> | 2017-12-07 10:40:22 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-07 10:40:22 +0300 |
commit | 619234e0a62754034931b53b7efd239b3575c38b (patch) | |
tree | 1691748cb3354810e65e48c6eaf2bdf79bd0188d /accel-pppd | |
parent | 509afee2c6d9d9aa39d4202323bd8052c0f5f7b9 (diff) | |
parent | d86db57252bd9837f5428ccb2a8a3fdcd6324cb5 (diff) | |
download | accel-ppp-619234e0a62754034931b53b7efd239b3575c38b.tar.gz accel-ppp-619234e0a62754034931b53b7efd239b3575c38b.zip |
Merge pull request #26 from themiron/chap-ippool
chap-secrets: add pool name support
Diffstat (limited to 'accel-pppd')
-rw-r--r-- | accel-pppd/extra/chap-secrets.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/accel-pppd/extra/chap-secrets.c b/accel-pppd/extra/chap-secrets.c index f99bd0b9..becb687c 100644 --- a/accel-pppd/extra/chap-secrets.c +++ b/accel-pppd/extra/chap-secrets.c @@ -43,6 +43,7 @@ struct cs_pd_t struct ipv4db_item_t ip; char *passwd; char *rate; + char *pool; }; #ifdef CRYPTO_OPENSSL @@ -122,14 +123,16 @@ static struct cs_pd_t *create_pd(struct ap_session *ses, const char *username) FILE *f; char *buf; char *ptr[5]; - int n, i; + int n; struct cs_pd_t *pd; + struct in_addr in; #ifdef CRYPTO_OPENSSL char username_hash[EVP_MAX_MD_SIZE * 2 + 1]; uint8_t hash[EVP_MAX_MD_SIZE]; struct hash_chain *hc; EVP_MD_CTX *md_ctx = NULL; char c; + int i; #endif if (!conf_chap_secrets) @@ -229,8 +232,12 @@ found: } pd->ip.addr = conf_gw_ip_address; - if (n >= 3 && ptr[2][0] != '*') - pd->ip.peer_addr = inet_addr(ptr[2]); + if (n >= 3 && !strchr("*-!", ptr[2][0])) { + if (inet_aton(ptr[2], &in)) + pd->ip.peer_addr = in.s_addr; + else + pd->pool = _strdup(ptr[2]); + } pd->ip.mask = conf_netmask; pd->ip.owner = &ipdb; @@ -269,6 +276,8 @@ static void ev_ses_finished(struct ap_session *ses) _free(pd->passwd); if (pd->rate) _free(pd->rate); + if (pd->pool) + _free(pd->pool); _free(pd); } @@ -300,7 +309,12 @@ static struct ipv4db_item_t *get_ip(struct ap_session *ses) if (!pd) return NULL; - if (!pd->ip.peer_addr) + if (pd->pool) { + if (ses->ipv4_pool_name) + _free(ses->ipv4_pool_name); + ses->ipv4_pool_name = _strdup(pd->pool); + return NULL; + } else if (!pd->ip.peer_addr) return NULL; if (!ses->ctrl->ppp) |