add peer_address config option
[l2tpns.git] / l2tpns.c
index 6b0e620..02bc182 100644 (file)
--- a/l2tpns.c
+++ b/l2tpns.c
@@ -4,7 +4,7 @@
 // Copyright (c) 2002 FireBrick (Andrews & Arnold Ltd / Watchfront Ltd) - GPL licenced
 // vim: sw=8 ts=8
 
-char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.41 2004/11/04 06:05:55 bodea Exp $";
+char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.43 2004/11/05 02:47:47 bodea Exp $";
 
 #include <arpa/inet.h>
 #include <assert.h>
@@ -107,6 +107,7 @@ struct config_descriptt config_values[] = {
        CONFIG("radius_accounting", radius_accounting, BOOL),
        CONFIG("radius_secret", radiussecret, STRING),
        CONFIG("bind_address", bind_address, IP),
+       CONFIG("peer_address", peer_address, IP),
        CONFIG("send_garp", send_garp, BOOL),
        CONFIG("throttle_speed", rl_rate, UNSIGNED_LONG),
        CONFIG("throttle_buckets", num_tbfs, INT),
@@ -1127,7 +1128,10 @@ void sendipcp(tunnelidt t, sessionidt s)
        *(u16 *) (q + 2) = htons(10);
        q[4] = 3;
        q[5] = 6;
-       *(u32 *) (q + 6) = config->bind_address ? config->bind_address : my_address; // send my IP
+       *(u32 *) (q + 6) = config->peer_address ? config->peer_address :
+                          config->bind_address ? config->bind_address :
+                          my_address; // send my IP
+
        tunnelsend(buf, 10 + (q - buf), t); // send it
        session[s].flags &= ~SF_IPCP_ACKED;     // Clear flag.
 }
@@ -1668,39 +1672,23 @@ void processudp(u8 * buf, int len, struct sockaddr_in *addr)
                                case 27:    // last send lcp
                                        {        // find magic number
                                                u8 *p = b, *e = p + n;
-                                               while (p < e && p[1])
+                                               while (p + 1 < e && p[1] && p + p[1] <= e)
                                                {
-                                                       if (*p == 5 && p[1] == 6)
+                                                       if (*p == 5 && p[1] == 6) // Magic-Number
                                                                amagic = ntohl(*(u32 *) (p + 2));
-                                                       else if (*p == 3 && p[1] == 5 && *(u16 *) (p + 2) == htons(PPPCHAP) && p[4] == 5)
+                                                       else if (*p == 3 && p[1] == 5 && *(u16 *) (p + 2) == htons(PPPCHAP) && p[4] == 5) // Authentication-Protocol
                                                                chap = 1;
-                                                       else if (*p == 7)
+                                                       else if (*p == 7) // Protocol-Field-Compression
                                                                aflags |= SESSIONPFC;
-                                                       else if (*p == 8)
+                                                       else if (*p == 8) // Address-and-Control-Field-Compression
                                                                aflags |= SESSIONACFC;
                                                        p += p[1];
                                                }
-
-                                               {
-                                                       char tmp[500] = {0};
-                                                       tmp[0] = ConfigReq;
-                                                       memcpy((tmp + 1), b, n);
-                                               }
                                        }
                                        break;
                                case 28:    // last recv lcp confreq
-                                       {
-                                               char tmp[500] = {0};
-                                               tmp[0] = ConfigReq;
-                                               memcpy((tmp + 1), b, n);
-                                               break;
-                                       }
+                                       break;
                                case 26:    // Initial Received LCP CONFREQ
-                                       {
-                                               char tmp[500] = {0};
-                                               tmp[0] = ConfigReq;
-                                               memcpy((tmp + 1), b, n);
-                                       }
                                        break;
                                case 39:    // seq required - we control it as an LNS anyway...
                                        break;