Skip to content

Commit

Permalink
Pass remotenumber to pppd. Use the IP address if no remote number is
Browse files Browse the repository at this point in the history
available, or we're on the LNS side and we don't trust the remote side
(default) to provide the correct AVP.

Signed-off-by: Jaco Kroon <[email protected]>
  • Loading branch information
jkroonza committed Jul 11, 2024
1 parent 09737a1 commit 35033fb
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 0 deletions.
17 changes: 17 additions & 0 deletions file.c
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,22 @@ int set_pass_peer (char *word, char *value, int context, void *item)
return 0;
}

int set_trust_remotenumber (char *word, char *value, int context, void *item)
{
switch (context & ~CONTEXT_DEFAULT)
{
case CONTEXT_LNS:
if (set_boolean (word, value, &(((struct lns *) item)->trust_remotenumber)))
return -1;
break;
default:
snprintf (filerr, sizeof (filerr), "'%s' not valid in this context\n",
word);
return -1;
}
return 0;
}

int set_pppoptfile (char *word, char *value, int context, void *item)
{
struct lac *l = (struct lac *) item;
Expand Down Expand Up @@ -1611,6 +1627,7 @@ struct keyword words[] = {
{"hostname", &set_hostname},
{"ppp debug", &set_debug},
{"pass peer", &set_pass_peer},
{"trust remotenumber", &set_trust_remotenumber},
{"pppoptfile", &set_pppoptfile},
{"call rws", &set_rws},
{"tunnel rws", &set_rws},
Expand Down
1 change: 1 addition & 0 deletions file.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ struct lns
int proxyauth; /* Allow proxy authentication? */
int debug; /* Debug PPP? */
int pass_peer; /* Pass peer IP to pppd as ipparam? */
int trust_remotenumber; /* Whether or not to trust remotely supplied "Dialing Number" AVP */
char pppoptfile[STRLEN]; /* File containing PPP options */
struct tunnel *t; /* Tunnel of this, if it's ready */
};
Expand Down
8 changes: 8 additions & 0 deletions xl2tpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,14 @@ int start_pppd (struct call *c, struct ppp_opts *opts)
}

{
stropt[pos++] = strdup("remotenumber");
if (c->dialing[0] && (!c->lns || c->lns->trust_remotenumber)) {
/* if a remotenumber is available, and we're a LAC or the remote "dialing number" AVP is trusted */
stropt[pos++] = strdup(c->dialing);
} else {
stropt[pos++] = strdup(IPADDY(c->container->peer.sin_addr));
}

struct ppp_opts *p = opts;
int maxn_opts = sizeof(stropt) / sizeof(stropt[0]) - 1;
while (p && pos < maxn_opts)
Expand Down

0 comments on commit 35033fb

Please sign in to comment.