Hi,
On Thu, 27 Sep 2012 13:41:52 -0400
Andrew Ngo <[email protected]> wrote:
> Hm. I can't seem to get npppd to map users to static addresses in the
> npppd-users file, after trying various permutations of "pool-address
> ##-## <for static>" and such. The client is an iPhone running iOS 6.0,
> and is definitely able to set up a working vpn over l2tp/ipsec with
> the npppd server (many thx, btw), but the client is then always
> assigned a random address from the pool (and never the static one,
> incidentally... but that could just be chance).
>
> Did I screw something up in the configuration or has this particular
> feature not been implemented yet? Has anyone else had troubles with
> this?
The feature was broken by the my configuration syntax change work.
Thank you for your report. Attached diff will fix the problem.
> (By the way, the daemon goes absolutely bananas if you use a
> "framed-ip-address" on a different subnet than those in the pool.
> Bananas! I don't recommend this error. ^^)
npppd will assign ip address dynamically on that case.
Can you explain your recommendation?
Index: npppd.c
===================================================================
RCS file: /cvs/src/usr.sbin/npppd/npppd/npppd.c,v
retrieving revision 1.23
diff -u -p -r1.23 npppd.c
--- npppd.c 20 Sep 2012 20:28:09 -0000 1.23
+++ npppd.c 28 Sep 2012 07:01:14 -0000
@@ -1545,6 +1545,7 @@ npppd_assign_ip_addr(npppd *_this, npppd
goto dyna_assign;
return 1;
}
+ ppp->assigned_pool = pool;
ppp->ppp_framed_ip_address.s_addr = htonl(ip4);
ppp->ppp_framed_ip_netmask.s_addr = htonl(ip4mask);
Index: privsep.c
===================================================================
RCS file: /cvs/src/usr.sbin/npppd/npppd/privsep.c,v
retrieving revision 1.6
diff -u -p -r1.6 privsep.c
--- privsep.c 18 Sep 2012 13:14:08 -0000 1.6
+++ privsep.c 28 Sep 2012 07:01:14 -0000
@@ -447,6 +447,9 @@ priv_get_user_info(const char *path, con
n = strlcpy(cp, r.calling_number, sz);
cp += ++n; sz -= n;
+ u->framed_ip_address = r.framed_ip_address;
+ u->framed_ip_netmask = r.framed_ip_netmask;
+
*puser = u;
return 0;
@@ -731,6 +734,8 @@ privsep_priv_on_sockio(int sock, short e
a = (struct PRIVSEP_GET_USER_INFO_ARG *)rbuf;
memset(&r, 0, sizeof(r));
+ r.framed_ip_address.s_addr = INADDR_NAS_SELECT;
+ r.framed_ip_netmask.s_addr = INADDR_NONE;
db[0] = a->path;
if (privsep_npppd_check_get_user_info(a)) {