*/
#ifndef lint
-static char rcsid[] = "$Id: ipcp.c,v 1.12 1994/10/10 01:59:17 paulus Exp $";
+static char rcsid[] = "$Id: ipcp.c,v 1.16 1995/04/26 06:46:50 paulus Exp $";
#endif
/*
#include <syslog.h>
#include <sys/types.h>
#include <sys/socket.h>
+#include <netinet/in.h>
#include "pppd.h"
#include "fsm.h"
#include "pathnames.h"
/* global vars */
-ipcp_options ipcp_wantoptions[N_PPP]; /* Options that we want to request */
-ipcp_options ipcp_gotoptions[N_PPP]; /* Options that peer ack'd */
-ipcp_options ipcp_allowoptions[N_PPP]; /* Options we allow peer to request */
-ipcp_options ipcp_hisoptions[N_PPP]; /* Options that we ack'd */
+ipcp_options ipcp_wantoptions[NUM_PPP]; /* Options that we want to request */
+ipcp_options ipcp_gotoptions[NUM_PPP]; /* Options that peer ack'd */
+ipcp_options ipcp_allowoptions[NUM_PPP]; /* Options we allow peer to request */
+ipcp_options ipcp_hisoptions[NUM_PPP]; /* Options that we ack'd */
/* local vars */
-static int cis_received[N_PPP]; /* # Conf-Reqs received */
+static int cis_received[NUM_PPP]; /* # Conf-Reqs received */
/*
* Callbacks for fsm code. (CI = Configuration Information)
static void ipcp_down __P((fsm *)); /* We're DOWN */
static void ipcp_script __P((fsm *, char *)); /* Run an up/down script */
-fsm ipcp_fsm[N_PPP]; /* IPCP fsm structure */
+fsm ipcp_fsm[NUM_PPP]; /* IPCP fsm structure */
static fsm_callbacks ipcp_callbacks = { /* IPCP callback routines */
ipcp_resetci, /* Reset our Configuration Information */
&& (ciaddr1 == 0 || !wo->accept_remote)) {
orc = CONFNAK;
if (!reject_if_disagree) {
- DECPTR(sizeof (long), p);
+ DECPTR(sizeof(u_int32_t), p);
tl = ntohl(wo->hisaddr);
PUTLONG(tl, p);
}
+ } else if (ciaddr1 == 0 && wo->hisaddr == 0) {
+ /*
+ * If neither we nor he knows his address, reject the option.
+ */
+ orc = CONFREJ;
+ break;
}
/*
if (ciaddr2 == 0 || !wo->accept_local) {
orc = CONFNAK;
if (!reject_if_disagree) {
- DECPTR(sizeof (long), p);
+ DECPTR(sizeof(u_int32_t), p);
tl = ntohl(wo->ouraddr);
PUTLONG(tl, p);
}
&& (ciaddr1 == 0 || !wo->accept_remote)) {
orc = CONFNAK;
if (!reject_if_disagree) {
- DECPTR(sizeof (long), p);
+ DECPTR(sizeof(u_int32_t), p);
tl = ntohl(wo->hisaddr);
PUTLONG(tl, p);
}
+ } else if (ciaddr1 == 0 && wo->hisaddr == 0) {
+ /*
+ * Don't ACK an address of 0.0.0.0 - reject it instead.
+ */
+ orc = CONFREJ;
+ break;
}
ho->neg_addr = 1;
argv[3] = strspeed;
argv[4] = strlocal;
argv[5] = strremote;
- argv[6] = NULL;
+ argv[6] = ipparam;
+ argv[7] = NULL;
run_program(script, argv, 0);
}